Имя: Пароль:
1C
1C 7.7
v7: Неправильное присвоение переменной
0 withoutname
 
27.09.12
10:57
Процедура Сформировать()
   Перем Таб;
   //Создание объекта типа Запрос
   ЗапросЗН = СоздатьОбъект("Запрос");
   ЗапросаЗН_текст =
   "//{{ЗАПРОС(ЗаказНаряд)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЗаказНаряд = Документ.ЗаказНаряд.ТекущийДокумент;
   |Плательщик = Документ.ЗаказНаряд.Контрагент;
   |Группировка ЗаказНаряд без групп все ВошедшиеВЗапрос;
   |Условие(Плательщик в ВыбКонтрагент);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если ЗапросЗН.Выполнить(ЗапросаЗН_текст) = 0 Тогда
       Возврат;
   КонецЕсли;
   Пока ЗапросЗН.Группировка() = 1 Цикл
       ТЗ_ЗаказНаряд.НоваяСтрока();
       ТЗ_ЗаказНаряд.ЗаказНаряд = ЗапросЗН.ЗаказНаряд;
       ТЗ_ЗаказНаряд.Плательщик = ЗапросЗН.Плательщик;
   КонецЦикла;

   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   ТЗ_ЗаказНаряд.ВыбратьСтроки();
   
   Пока ТЗ_ЗаказНаряд.ПолучитьСтроку() = 1 Цикл
       ДокПодчиненные = СоздатьОбъект("Документ");
       Контр = СокрЛП(ТЗ_ЗаказНаряд.Плательщик);
       
       Попытка
           ДокПодчиненные.ВыбратьПодчиненныеДокументы(,,ТЗ_ЗаказНаряд.ЗаказНаряд);
           Пока ДокПодчиненные.ПолучитьДокумент() = 1 Цикл
               ДокументЗаказНаряд = ТЗ_ЗаказНаряд.ЗаказНаряд;
               Если ДокПодчиненные.Вид() = "Счет" Тогда
                   ДокументСчет = ДокПодчиненные;
               ИначеЕсли ДокПодчиненные.Вид() = "Выписка"    Тогда
                   ДокументВыписка = ДокПодчиненные;
               Иначе
                   ДокументСчет="";
                   ДокументВыписка="";
                   Продолжить;
               КонецЕсли;
               
           КонецЦикла;
           Таб.ВывестиСекцию("Строка");
       Исключение
       КонецПопытки;
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры


Подскажите, почему после получения значения переменной ДокументСчет, при следующем проходе цикла она снова присваивает значение ДокПодчиненные, хотя не является этим видом?
1 Ork
 
27.09.12
11:00
(0) Не заходит в ветку условия, где ей присваивается значение. А сбросить его в "0" принудительно программист не догадался.
2 Ork
 
27.09.12
11:02
+(1) Вот это вот
Пока ДокПодчиненные.ПолучитьДокумент() = 1 Цикл
   ДокументЗаказНаряд = ТЗ_ЗаказНаряд.ЗаказНаряд;
   ДокументСчет="";
   ДокументВыписка="";
   Если ДокПодчиненные.Вид() = "Счет" Тогда
       ДокументСчет = ДокПодчиненные;
   ИначеЕсли ДокПодчиненные.Вид() = "Выписка"    Тогда
       ДокументВыписка = ДокПодчиненные;
   Иначе
       Продолжить;
   КонецЕсли;
КонецЦикла;

сравни со своим.
3 pofigos
 
27.09.12
11:04
(2) Снял с языка.
Перед получение значения в выборке обнулять попробуйте.
4 withoutname
 
27.09.12
11:12
(2)ее не надо обнулять, надо чтобы в ней все осталось
например, есть подчиненные документы- счет, выписка, при первом проходе добавляет счет, при втором выписку...
5 pofigos
 
27.09.12
11:13
(0)(Добавил бы даже так, если у документа будет несколько подчиненных выписок или Счетов)
Попытка                               ДокПодчиненные.ВыбратьПодчиненныеДокументы(,,ТЗ_ЗаказНаряд.ЗаказНаряд);
Пока ДокПодчиненные.ПолучитьДокумент() = 1 Цикл
Если (ДокПодчиненные.ПометкаУдаления() = 1) или (ДокПодчиненные.Проведен() = 0) Тогда Продолжить;
КонецЕсли
ДокументЗаказНаряд = ТЗ_ЗаказНаряд.ЗаказНаряд;
ДокументСчет="";
ДокументВыписка="";

Если ДокПодчиненные.Вид() = "Счет" Тогда
ДокументСчет = ДокПодчиненные;
ИначеЕсли ДокПодчиненные.Вид() = "Выписка"    Тогда
ДокументВыписка = ДокПодчиненные;
Иначе                  
Продолжить;
КонецЕсли;
Таб.ВывестиСекцию("Строка");  
КонецЦикла;          
Исключение
КонецПопытки;
6 1Сергей
 
27.09.12
11:16
Если ДокПодчиненные.Вид() = "Счет" Тогда
ДокументСчет = ДокПодчиненные.ТекущийДокумент();
ИначеЕсли ДокПодчиненные.Вид() = "Выписка"    Тогда
ДокументВыписка = ДокПодчиненные.ТекущийДокумент();
7 withoutname
 
27.09.12
11:18
(6) взлетело :) спасибо
8 withoutname
 
27.09.12
11:20
(5) до работку отдельное спасибо )
9 withoutname
 
27.09.12
11:21
*(8) за доработку...
10 1Сергей
 
27.09.12
11:27
В 77 нет понятия ссылка на объект, но ссылки есть