Имя: Пароль:
1C
1С v8
Как суммиривать строки в табличном поле?
0 VadimBahteev
 
12.05.13
14:56
Добрый день всем! Возникла такая проблема, при заполнении табличного поля из результатов запроса, добавляются все строки. Как сделать так что бы строки с одинаковым наименование ингредиента суммировались по количеству.

Процедура КоманднаяПанельПродукцияРассчитатьПроизводство(Кнопка)
// Проверим на возможность этого действия
   Если НЕ Ссылка.Пустая() Тогда
   ИначеЕсли РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) = Ложь Тогда Возврат
   КонецЕсли;
   
   ВыпускПродукции = ЭтотОбъект;
   
   ЗапросПродукция = Новый Запрос;
   //ЗапросПродукция.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
   ЗапросПродукция.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
   
   ЗапросПродукция.Текст =
   "ВЫБРАТЬ
   |    КР_ВыпускПродукцииПродукция.Номенклатура ,
   |    КР_ВыпускПродукцииПродукция.ЕдиницаИзмерения ,
   |    КР_ВыпускПродукцииПродукция.Коэффициент ,
   |    КР_ВыпускПродукцииПродукция.Количество ,
   |    КР_ВыпускПродукцииПродукция.Спецификация
   |ИЗ
   |    Документ.КР_ВыпускПродукции.Продукция КАК КР_ВыпускПродукцииПродукция
   |ГДЕ
   |    КР_ВыпускПродукцииПродукция.Ссылка = &Ссылка";
   ТаблицаПродукция = ЗапросПродукция.Выполнить().Выгрузить();
   
//ТаблицаПродукция[0].НоменклатураПродукции.Ссылка    
   Для каждого СтрокаПродукция из ТаблицаПродукция Цикл
       СтрокаТаблицыЗначений = ВыпущеннаяПродукция.Добавить();
       СтрокаТаблицыЗначений.Продукция = СтрокаПродукция[0].Ссылка;
       СтрокаТаблицыЗначений.ЕдиницаИзмерения = СтрокаПродукция[1].Ссылка;
       СтрокаТаблицыЗначений.Количество = СтрокаПродукция.Количество;
       СтрокаТаблицыЗначений.Коэффициент = СтрокаПродукция.Коэффициент;
       СтрокаТаблицыЗначений.Спецификация = СтрокаПродукция[4].Ссылка;
       //ВыпускПродукции.Производство.Загрузить(ТаблицаПродукция);
       
   ЗапросИнгредиенты = Новый Запрос;
   ЗапросИнгредиенты.Текст = "ВЫБРАТЬ
                             |    КР_СпецификацияТовары.Номенклатура Как Компонент,
                             |    КР_СпецификацияТовары.ЕдиницаИзмерения КАК ЕдиницаИзмеренияКомпонента,
                             |    КР_СпецификацияТовары.Коэффициент КАК КоэффициентКомпонента,
                             |    КР_СпецификацияТовары.Количество КАК КоличествоКомпонентаНорма
                             |ИЗ
                             |    Документ.КР_Спецификация.Товары КАК КР_СпецификацияТовары
                             |ГДЕ
                             |    КР_СпецификацияТовары.Ссылка = &Ссылка";
   ЗапросИнгредиенты.УстановитьПараметр("Ссылка", СтрокаПродукция.Спецификация);
   ТаблицаИнгредиент = ЗапросИнгредиенты.Выполнить().Выгрузить();
   
   Для каждого Ингредиент из ТаблицаИнгредиент Цикл
       НоваяСтрока = ВыпускПродукции.Производство.Добавить();
       ЗаполнитьЗначенияСвойств(НоваяСтрока, Ингредиент);
       КонецЦикла;
   
       

КонецЦикла;
//    
//ТаблицаСостава = ВыпускПродукции.Производство.Выгрузить();    
//    
//ВыпускПродукции.Производство.Загрузить(результат);    






КонецПроцедуры
1 kosts
 
12.05.13
15:06
Группировку в запрос добавь и сумму по количеству.
2 VadimBahteev
 
12.05.13
15:12
в результате запроса нет одинаковых компонентов, тут два запроса в первом выбирается номенклатура (которая делается по спецификации), во втором Ингредиент (тоесть список продуктов в спецификации). Дак может быть так что для приготовлении используются разные спецификации (но в них есть одинаковые ингредиенты). Блин совсем запутал наверно. Короче хочется сделать что то подобное Рарусу. у них есть выпуск продукции документ
3 unregistered
 
12.05.13
15:24
В (0) ужасный хавнокод.
Все данные можно получить одним запросом.

Либо двумя запросами - один для табличной части ВыпущеннаяПродукция, а другой - для той, где ингридиенты.

Вот это что вообще за ересь?:
СтрокаПродукция[0].Ссылка

Если уж ты такой извращенец, что любишь обращаться к полям по индексам, то нафига еще и Ссылку через точку дёргать? У тебя в поле уже ссылка лежит.
Программист всегда исправляет последнюю ошибку.