Имя: Пароль:
1C
1С v8
Дополнительное поле в ТЗ
0 poet
 
29.12.11
17:35
Есть запрос в который помимо количества потребовалось выводить еще и сумму не подскажите ли как это грамотно сделать?

   ТабДок = Новый ТабличныйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ПоступлениеТоваровУслуг.Номер,
   |    ПоступлениеТоваровУслуг.Дата,
   |    ПоступлениеТоваровУслуг.Контрагент,
   |    ПоступлениеТоваровУслуг.Проведен,
   |    ПоступлениеТоваровУслуг.ДатаВходящегоДокумента,
   |    ПоступлениеТоваровУслуг.НомерВходящегоДокумента,
   |    ПоступлениеТоваровУслугТовары.Номенклатура,
   |    ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
   |    ПоступлениеТоваровУслугТовары.Количество,
   |    ПоступлениеТоваровУслугТовары.Сумма,    
   |    ПоступлениеТоваровУслугТовары.Цена,
   |    ПоступлениеТоваровУслуг.СкладОрдер
   |ИЗ
   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
   |ГДЕ
   |    ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаС И &ДатаПо
   |    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА"
   + ?(ЗначениеЗаполнено(Контрагент),"    И ПоступлениеТоваровУслуг.Контрагент В(&Контрагент)", "")
   + ?(ЗначениеЗаполнено(СкладОрдер),"    И ПоступлениеТоваровУслуг.СкладОрдер В(&СкладОрдер)", "");
   
   Запрос.УстановитьПараметр("ДатаС",  НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо",  КонецДня(ДатаПо));
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("СкладОрдер", СкладОрдер);
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();

   ТЗ =  Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Дата",,,7);
   ТЗ.Колонки.Добавить("Номер",,,10);
   ТЗ.Колонки.Добавить("ДатаВходящая",,,10);
   ТЗ.Колонки.Добавить("НомерВходящий",,,10);
   ТЗ.Колонки.Добавить("Контрагент",,,15);
   
   Если ОтображатьСклад = Истина Тогда    
       ТЗ.Колонки.Добавить("Склад",,,15);
   КонецЕсли;
   
   Номер = "0";
   Пока Выборка.Следующий() Цикл        
       Если Выборка.Номер <> Номер Тогда
           НоваяСтрока = ТЗ.Добавить();
           НоваяСтрока.Дата = Формат(Дата(СокрЛП(Выборка.Дата)), "ДЛФ=Д");
           НоваяСтрока.Номер = СокрЛП(Выборка.Номер);
           НоваяСтрока.ДатаВходящая = Формат(Дата(СокрЛП(Выборка.ДатаВходящегоДокумента)), "ДЛФ=Д");
           НоваяСтрока.НомерВходящий = СокрЛП(Выборка.НомерВходящегоДокумента);
               НоваяСтрока.Контрагент = СокрЛП(Выборка.Контрагент);
           Если ОтображатьСклад = Истина Тогда
               НоваяСтрока.Склад = СокрЛП(Выборка.СкладОрдер);
           КонецЕсли;    
       КонецЕсли;
       НазваниеКолонки = Строка("н"+СокрЛП(Выборка.Номенклатура.Код));
       ОтображениеНазванияКолонки = СокрЛП(Выборка.Номенклатура);
       НазваниеСумма =
           Если ТЗ.Колонки.Найти(НазваниеКолонки) = Неопределено Тогда
               ТЗ.Колонки.Добавить(НазваниеКолонки,,ОтображениеНазванияКолонки, 15);
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
               ТЗ.Колонки.Добавить();
           Иначе
               НоваяСтрока[НазваниеКолонки] = Выборка.Количество;
           КонецЕсли;
       Номер = Выборка.Номер;
   КонецЦикла;
   
   НоваяСтрока = ТЗ.Добавить();
   Для кол = 0 По ТЗ.Колонки.Количество()-1 Цикл
      НоваяСтрока[Кол] = ТЗ.Итог(кол);
   КонецЦикла;
   
   
   ТабличноеПоле.Очистить();
   ЭлементыФормы.ТабличноеПоле.Значение = ТЗ;
   ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
1 golden-pack
 
29.12.11
17:38
Зачем все это ... есть СКД
2 Alex S D
 
29.12.11
17:38
(1) когда есть чето древенее иногда бывает влом его переделывать на СКД)
3 poet
 
29.12.11
17:58
как всегда спасибо за умные ответы
решение:


   ТабДок = Новый ТабличныйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ПоступлениеТоваровУслуг.Номер,
   |    ПоступлениеТоваровУслуг.Дата,
   |    ПоступлениеТоваровУслуг.Контрагент,
   |    ПоступлениеТоваровУслуг.Проведен,
   |    ПоступлениеТоваровУслуг.ДатаВходящегоДокумента,
   |    ПоступлениеТоваровУслуг.НомерВходящегоДокумента,
   |    ПоступлениеТоваровУслугТовары.Номенклатура,
   |    ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
   |    ПоступлениеТоваровУслугТовары.Количество,
   |    ПоступлениеТоваровУслугТовары.Сумма,    
   |    ПоступлениеТоваровУслугТовары.Цена,
   |    ПоступлениеТоваровУслуг.СкладОрдер
   |ИЗ
   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
   |ГДЕ
   |    ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаС И &ДатаПо
   |    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА"
   + ?(ЗначениеЗаполнено(Контрагент),"    И ПоступлениеТоваровУслуг.Контрагент В(&Контрагент)", "")
   + ?(ЗначениеЗаполнено(СкладОрдер),"    И ПоступлениеТоваровУслуг.СкладОрдер В(&СкладОрдер)", "");
   
   Запрос.УстановитьПараметр("ДатаС",  НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо",  КонецДня(ДатаПо));
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("СкладОрдер", СкладОрдер);
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();

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