Имя: Пароль:
1C
1С v8
1С 8.2 Итоги в Таблице значений
0 poet
 
21.11.11
12:30
Создаю ТЗ с заранее неизвестным количествои колонок (товаров). Как получить итоги начиная с первой строки товаров(пропуская колонки Дата, Номер, Контрагент)?


ТЗ =  Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Дата",,,7);
   ТЗ.Колонки.Добавить("Номер",,,10);
   ТЗ.Колонки.Добавить("Контрагент",,,15);
   
   Номер = "0";
   Пока Выборка.Следующий() Цикл        
       Если Выборка.Номер <> Номер Тогда
           НоваяСтрока = ТЗ.Добавить();
           НоваяСтрока.Дата = Формат(Дата(СокрЛП(Выборка.Дата)), "ДЛФ=Д");
           НоваяСтрока.Номер = СокрЛП(Выборка.Номер);
           НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент);
       КонецЕсли;
       НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
       ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура);
           Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда
               ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки, 15);
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           Иначе
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           КонецЕсли;
       Номер = Выборка.Номер;
   КонецЦикла;
   
   ТабличноеПоле.Очистить();
   ЭлементыФормы.ТабличноеПоле.Значение = ТЗ;
   ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
1 Wobland
 
21.11.11
12:30
ТЗ.Итог("Колонка"), не?
2 poet
 
21.11.11
12:31
это то да - но не могу догнать как цикл задать правильно по последнюю строку?
3 poet
 
21.11.11
12:31
точнее колонку
4 Wobland
 
21.11.11
12:34
Для й=0 По ТЗ.Колонки.Количество()-1 Цикл
 ТвойИтог=ТЗ.Итог(ТЗ.Колонки[й].Имя);
5 Wobland
 
21.11.11
12:34
вообще, правильно стелепатировал?
6 LAAry
 
21.11.11
12:36
Для Каждого Колонка из ТЗ.Колонки Цикл
  Если Не Найти(Колонка.Имя,"Дата") >0 И не .... Тогда
     Итог =ТЗ.Итог(Колонка.Имя);
Это если колонок дат несколько.
7 poet
 
21.11.11
12:43
тут у меня основной тупняк - в том что колонки создаются с названием кодов товара + приставка - тоесть как правильно перебрать именно их?
8 LAAry
 
21.11.11
12:50
Заведи префикс, ищи префикс в цикле, если нашел получай итог
9 poet
 
21.11.11
12:59
префикс начинается с "н"+СокрЛП(Выборка.Номенклатура.Код
вот и прошу по своему коду пример - т.к. сам недодумкуюсь
10 poet
 
21.11.11
13:05
разобрался:


   ТЗ =  Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Дата",,,7);
   ТЗ.Колонки.Добавить("Номер",,,10);
   ТЗ.Колонки.Добавить("Контрагент",,,15);
   
   Номер = "0";
   Пока Выборка.Следующий() Цикл        
       Если Выборка.Номер <> Номер Тогда
           НоваяСтрока = ТЗ.Добавить();
           НоваяСтрока.Дата = Формат(Дата(СокрЛП(Выборка.Дата)), "ДЛФ=Д");
           НоваяСтрока.Номер = СокрЛП(Выборка.Номер);
           НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент);
       КонецЕсли;
       НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
       ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура);
           Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда
               ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки, 15);
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           Иначе
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           КонецЕсли;
       Номер = Выборка.Номер;
   КонецЦикла;
   
   Для кол = 0 По ТЗ.Колонки.Количество()-1 Цикл
      НоваяСтрока[Кол] = ТЗ.Итог(кол);
   КонецЦикла;
11 poet
 
21.11.11
13:34
потомкам: в конце исправил т.к. перезаписывалась последняя строка итоговыми значениями

   
   НоваяСтрока = ТЗ.Добавить();
   Для кол = 0 По ТЗ.Колонки.Количество()-1 Цикл
      НоваяСтрока[Кол] = ТЗ.Итог(кол);
   КонецЦикла;