Полученние суммарного веса и объема по ТЗ

Это отличный пример кода создания и использования временных таблиц в 1С.

//am+
//Назначение:
//  Расчет суммарного веса и объема поставки
//Параметры:
//  ТЗ - Таблица значений с типизированными колонками "Номенклатура" и "Количество".
//  РезультатВес, РезультатОбъем - сюда будет записан результат расчетов
//  ЕстьНезаполненные - будет установлено в Истина если есть Номенклатура с весом или объемом = 0
&НаСервере
Процедура ПолучитьВесИОбъемПоставки(ТЗ, РезультатВес, РезультатОбъем, ЕстьНезаполненные=Ложь) Экспорт
   
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   
Запрос = Новый Запрос;
   
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
   
Запрос.Текст= "ВЫБРАТЬ
                  | Товары.Номенклатура,
                  | Товары.Количество
                  |ПОМЕСТИТЬ ВременнаяТаблица
                  |ИЗ
                  | &Товары КАК Товары"
;

   
Запрос.УстановитьПараметр("Товары",ТЗ);
   
Запрос.Выполнить();
   
Запрос.Текст= "ВЫБРАТЬ
                  | СУММА(ВременнаяТаблица.Номенклатура.ЕдиницаХраненияОстатков.Вес * ВременнаяТаблица.Количество) КАК РезультатВес,
                  | СУММА(ВременнаяТаблица.Номенклатура.ЕдиницаХраненияОстатков.Объем * ВременнаяТаблица.Количество) КАК РезультатОбъем,
                  | МИНИМУМ(ВременнаяТаблица.Номенклатура.ЕдиницаХраненияОстатков.Вес) КАК МинимумВес,
                  | МИНИМУМ(ВременнаяТаблица.Номенклатура.ЕдиницаХраненияОстатков.Объем) КАК МинимумОбъем
                  |ИЗ
                  | ВременнаяТаблица КАК ВременнаяТаблица"
;
   
Рез = Запрос.Выполнить();
    Если
Рез.Пустой() Тогда
       
РезультатВес=;
       
РезультатОбъем=;
       
ЕстьНезаполненные=Ложь;
    Иначе
       
Выборка=Рез.Выбрать();
       
Выборка.Следующий();
        Если
Выборка.МинимумВес=NULL Тогда
           
РезультатВес=;
           
РезультатОбъем=;
           
ЕстьНезаполненные=Ложь;
        Иначе
           
РезультатВес=Выборка.РезультатВес;
           
РезультатОбъем=Выборка.РезультатОбъем;
           
ЕстьНезаполненные = (Выборка.МинимумВес<=0 или Выборка.МинимумОбъем<=);
        КонецЕсли;
    КонецЕсли;
   
МенеджерВременныхТаблиц.Закрыть();
Конецпроцедуры
//am-

Похожие материалы

Справочники

Документы

Отчеты

Обработки