1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

Зацикливание табл. части док-та

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 14 фев 2011.

Наш партнер Genesis Hackspace
  1. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Есть оборотный регистр с измерением Назначение и ресурсом Сумма. Надо вытащить из него данные включая информацию о документе, который сделал движение по данному регистру. Документ имеет табличную часть. Получив данные из регистра, надо обратиться к этому документу и если его табл. часть не пуста, то пройти по строкам и записать данные.
    Проблема в том, что я точно знаю что у меня в документе есть 1 строка, а когда я делаю цикл по строкам Пока Запрос1.Док.ПолучитьСтроку()=1 Цикл то у меня зацикливается на этой строке т.е бесконечно показывает что строка есть и не переходит на следующий док-т. Метод КоличествоСтрок показывает наличие одной строки. В чем может быть проблема??? Код приведен ниже, 1С77.

    Код (Text):
        Запрос1 = СоздатьОбъект("Запрос");
    Текст1 = "//{{Запрос1()
    |Период с ДатаР по ДатаК;
    |Назн = Регистр.РазовыеПлатежи.Назначение;
    |Сумма = Регистр.РазовыеПлатежи.Сумма;
    |Док = Регистр.РазовыеПлатежи.ТекущийДокумент.ОплатаОбщаяПоНазначению.ТекущийДокумент;
    |Функция СуммаПост = Сумма(Сумма);
    |Группировка Назн;
    |Группировка Док;
    |"//
    ;

    ТЗ111 = СоздатьОбъект("ТаблицаЗначений");
    ТЗ111.НоваяКолонка("Эл","Справочник.Назначения");
    ТЗ111.НоваяКолонка("Док","Документ.ОплатаОбщаяПоНазначению");
    ТЗ111.НоваяКолонка("Сумма","Число",10,0,"Сумма",10);
    ТЗ111.НоваяКолонка("ФИО","Строка",80,,"ФИО",30);  
    Если Запрос1.Выполнить(Текст1) = 1 Тогда
    Пока Запрос1.Группировка(1)=1 Цикл
    Пока Запрос1.Группировка(2)=1 Цикл
    Если Запрос1.Док.ВыбратьСтроки()=1 тогда
    Запрос1.Док.ВыбратьСтроки();
    Пока Запрос1.Док.ПолучитьСтроку()=1 Цикл //здесь зацикливание, ПолучитьСтроку всегда показывает = 1
    ТЗ111.НоваяСтрока();
    ТЗ111.Эл = Запрос1.Назн;
    ТЗ111.Док = Запрос1.Док;
    ТЗ111.Сумма = Запрос1.СуммаПост;
    Если ПустоеЗначение(Запрос1.Док.НеСтудент)=1 Тогда
    ТЗ111.ФИО = СокрЛП(Запрос1.Док.Студент);
    Иначе
    ТЗ111.ФИО = СокрЛП(Запрос1.Док.НеСтудент);
    КонецЕсли;    
    КонецЦикла;
    Иначе
    ТЗ111.НоваяСтрока();
    ТЗ111.Эл = Запрос1.Назн;
    ТЗ111.Док = Запрос1.Док;
    ТЗ111.Сумма = Запрос1.СуммаПост;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    ТЗ111.ВыбратьСтроку();
    КонецЕсли;
     
  2. Andruha

    Andruha Гость

    Код ( (Unknown Language)):
    Если Запрос1.Док.ВыбратьСтроки()=1 тогда
    Запрос1.Док.ВыбратьСтроки();
    Пока Запрос1.Док.ПолучитьСтроку()=1 Цикл
    здесь идет повтор - попробуй так:
    Код ( (Unknown Language)):
    Если Запрос1.Док.ВыбратьСтроки()=1 тогда
    Пока Запрос1.Док.ПолучитьСтроку()=1 Цикл
    и вообще:
    Код ( (Unknown Language)):
    _док = Запрос1.Док;
    Если _док.ВыбратьСтроки()=1 тогда
    Пока _док.ПолучитьСтроку()=1 Цикл
     
Загрузка...

Поделиться этой страницей