Имя: Пароль:
1C
1C 7.7
v7: Пустые строки в отчете
,
0 Gangar
 
01.10.12
18:33
Подскажите, телепаты, почему в печатной форме выводит пустые строки?



ТЗ = 0;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("ТоварСВ");
ТЗ.НоваяКолонка("КолвоСВ");
ТЗ.НоваяКолонка("ТоварПН");    
ТЗ.НоваяКолонка("КолвоПН");
       
Заявка.ВыбратьСтроки();
Пока Заявка.ПолучитьСтроку() = 1 Цикл            
       ТЗ.ТоварСВ = Заявка.Товар;
   ТЗ.КолвоСВ = Заявка.Количество;
               
   Если ПрихДок.Выбран() = 1 Тогда
       ПрихДок.ВыбратьСтроки();
       Пока ПрихДок.ПолучитьСтроку() = 1 Цикл
           Если Заявка.Товар = ПрихДок.Товар Тогда
               ТЗ.ТоварПН = ПрихДок.Товар;
               ТЗ.КолвоПН = ПрихДок.Количество;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

   ТЗ.Свернуть("ТоварСВ,ТоварПН","КолвоСВ,КолвоПН");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       ТоварСВ = ТЗ.ТоварСВ.ТекущаяСтрока();
       КолвоСВ = ТЗ.КолвоСВ.ТекущаяСтрока();
       ТоварПН = ТЗ.ТоварПН.ТекущаяСтрока();
       КолвоПН = ТЗ.КолвоПН.ТекущаяСтрока();
   КонецЦикла;

   Таб.ВывестиСекцию("Товар");
КонецЦикла;
1 Wobland
 
01.10.12
18:34
Таб.ВывестиСекцию("Товар"); где-то не там
2 Oleg_Kag
 
01.10.12
18:35
Таб.ВывестиСекцию("Товар");
Внести во второй цикл перед КОнецЦикла
3 zladenuw
 
01.10.12
18:35
(1) мда тяжелый понедельник
4 Wobland
 
01.10.12
18:36
(3) да уж, непростой ;)
5 del123
 
01.10.12
18:39
А зачем везде ТекущаяСтрока()?
6 Gangar
 
01.10.12
18:41
количество строк выводит как надо, но в строках тишина...
7 Gangar
 
01.10.12
18:42
(5)
Хоть с ней хоть без - эффект один.
8 zladenuw
 
01.10.12
18:43
(6) ты вообще читаешь что тебе пишут или нет ?
(2) уже дали ответ. что за люди. им советуешь.
9 Gangar
 
01.10.12
18:48
(8)
Тогда вообще ничего не выводит. Но спасибо, конечно.
10 del123
 
01.10.12
18:48
а где в ТЗ добавляешь строку??
11 del123
 
01.10.12
18:49
+(10) по идее это надо за цикл перебора строк документа вынести

   ТЗ.Свернуть("ТоварСВ,ТоварПН","КолвоСВ,КолвоПН");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       ТоварСВ = ТЗ.ТоварСВ.ТекущаяСтрока();
       КолвоСВ = ТЗ.КолвоСВ.ТекущаяСтрока();
       ТоварПН = ТЗ.ТоварПН.ТекущаяСтрока();
       КолвоПН = ТЗ.КолвоПН.ТекущаяСтрока();
       Таб.ВывестиСекцию("Товар");
   КонецЦикла;
12 Gangar
 
01.10.12
18:51
(10)
Бинго! Понедельник, такой понедельник...
13 Oleg_Kag
 
01.10.12
18:56
Пока Заявка.ПолучитьСтроку() = 1 Цикл            
   Если ПрихДок.Выбран() = 1 Тогда
       ПрихДок.ВыбратьСтроки();
       Пока ПрихДок.ПолучитьСтроку() = 1 Цикл
           Если Заявка.Товар = ПрихДок.Товар Тогда
               ТЗ.НоваяСтрока()
               ТЗ.ТоварСВ = Заявка.Товар;
               ТЗ.КолвоСВ = Заявка.Количество;
               ТЗ.ТоварПН = ПрихДок.Товар;
               ТЗ.КолвоПН = ПрихДок.Количество;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

   ТЗ.Свернуть("ТоварСВ,ТоварПН","КолвоСВ,КолвоПН");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       ТоварСВ = ТЗ.ТоварСВ;
       КолвоСВ = ТЗ.КолвоСВ;
       ТоварПН = ТЗ.ТоварПН;
       КолвоПН = ТЗ.КолвоПН;
       Таб.ВывестиСекцию("Товар");
   КонецЦикла;

КонецЦикла;
14 Oleg_Kag
 
01.10.12
18:59
Руки мне оторвать :(
Пока Заявка.ПолучитьСтроку() = 1 Цикл            
   Если ПрихДок.Выбран() = 1 Тогда
       ПрихДок.ВыбратьСтроки();
       Пока ПрихДок.ПолучитьСтроку() = 1 Цикл
           Если Заявка.Товар = ПрихДок.Товар Тогда
               ТЗ.НоваяСтрока()
               ТЗ.ТоварСВ = Заявка.Товар;
               ТЗ.КолвоСВ = Заявка.Количество;
               ТЗ.ТоварПН = ПрихДок.Товар;
               ТЗ.КолвоПН = ПрихДок.Количество;
           КонецЕсли;
       КонецЦикла;
       ТЗ.Свернуть("ТоварСВ,ТоварПН","КолвоСВ,КолвоПН");
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл
          ТоварСВ = ТЗ.ТоварСВ;
          КолвоСВ = ТЗ.КолвоСВ;
          ТоварПН = ТЗ.ТоварПН;
          КолвоПН = ТЗ.КолвоПН;
          Таб.ВывестиСекцию("Товар");
       КонецЦикла;
  Иначе
  Сообщить("Не выбран документ поступления...");
  КонецЕсли;
КонецЦикла;
15 Oleg_Kag
 
01.10.12
19:04
Всё...почитал код - понял задачу...
13 и 14 будет, работать, но НЕ оптимально
16 Gangar
 
01.10.12
19:07
(15)
Копать в сторону прямых запросов?
17 Gangar
 
01.10.12
19:12
(15)
Странно как то работает. Если в доке строк больше одной выводит полную херню.
18 Gangar
 
02.10.12
01:07
Чую, что ошибка раньше где-то. В ДНК, скорее всего...


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

   Таб.ВывестиСекцию("Документ");

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


В таблице не правильно отображает данные если подчиненного документа нету или строк в документах больше одной.
19 GreyAngel
 
02.10.12
09:23
1. Перебираются все документы, включая помеченные на удаление.
2. ПрихДокПеч нигде не очищается. Если подчиненного документа не найдено, то в переменной останется ссылка на предыдущий документ.
3. Зачем нужны два поля (ТоварСВ и ТоварПН) если в них помещаются исключительно одинаковые значения?
4. ТЗ нигде не очищается и при этом ПОЛНОСТЬЮ выводится после считывания КАЖДОЙ строки заявки.

Таки да, скорее всего в ДНК :)
20 Gangar
 
02.10.12
12:13
(19)
Спасибо, все заработало.