Оптимизация расчета сумм остатков по группам

Новая тема
Показывать по 10 20 40 сообщений
Посабжу: есть запрос который получает из регистра остатаков остатки товара на начало и конец периода, далее на его основе заполняется таблица значений, где получается цена товара на начало и конец периода, перемножаются соответственно на остаок на начало и конец периода и записываются в соответствующие столбцы ТЗ.
Вопрос в следующем: как наиболее оптимально/быстро далее посчитать сумму по группам товаров?
Да, цена - периодический реквизит справочника
Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии.
> Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии
Например? Как получить в запросе цену товара на начало и конец периода?
> итоги получить посчитам сумму "Суммы остатка" по иерархии
И это, пожалуйста, на примере.
> Как получить в запросе цену товара на начало и конец периода?

 - Получаешь даты изменения цены за интервал дат.
 - Получаешь ближайшую дату к дате начала периода и ближайшую дату изменения цены к дате конца периода.
 - Получаешь цены на эти даты.
> И это, пожалуйста, на примере.
Пример получения цен на начало и конец интервала можно поискать на "мисте".
Это все можно сделать для 7.7?
> Получаешь даты изменения цены за интервал дат.
В запросе? 80 Как?
> Пример получения цен на начало и конец интервала можно поискать на "мисте".
Не нашел :(
Даже не говори мне про 7.7 ничего! :)
А-аа, протупил что это для 7.7 все надо...
"Весь этот головняк потому что в запросах 7.7 значения периодических реквизитов вычисляются только на конечную дату запроса. Кроме того, прямо в тексте запроса проблематично написать какое то подобное вычисление:


|Функция КонОценочнаяСтоимость = ЦенаНаКонец*КонОст(Количество); 




хотя есть незадокументированная "фича", где можно написать что то типа такого:


|Цена=Справочник.Цены.Цена;
|Функция КонКоличество=КонОст(Количество);
|Функция КонОценочнаяСтоимость = Сумма(Цена*Запрос.КонКоличество);


и оно даже что то вычисляет, но иногда результат логике вообще не поддается

Если отвечать  на поставленный вопрос "в лоб", то постобработкой можно, конечно, сделать рассчет итогов по группам примерно вот так:


ТаблТоваров=СоздатьОбъект("ТаблицаЗначений");
ТаблТоваров.НоваяКолонка("Товар","Справочник.Номенклатура");
ТаблТоваров.НоваяКолонка("ОценочнаяСтоимостьНаНачало","Число",15,2);
ТаблТоваров.НоваяКолонка("ОценочнаяСтоимостьНаКонец","Число",15,2);
//...
//тут таблица как то заполняется по запросу и перебором периодики цен
//...
Если ТаблТоваров.КоличествоСтрок()>0 Тогда
    ТаблИтогов=СоздатьОбъект("ТаблицаЗначений");
    ТаблТоваров.Выгрузить(ТаблИтогов);
    ТаблИтогов.НоваяКолонка("Родитель","Справочник.Номенклатура");
    Пока 1=1 Цикл
         Для i=1 По ТаблИтогов.КоличествоСтрок() Цикл
              ТаблИтогов.УстановитьЗначение(i,"Родитель",ТаблИтогов.ПолучитьЗначение(i,"Товар").Родитель);
         КонецЦикла;

         ТаблИтогов.Свернуть("Родитель","ОценочнаяСтоимостьНаНачало,ОценочнаяСтоимостьНаКонец");

         Если ТаблИтогов.КоличествоСтрок()=1 Тогда
              Если ПустоеЗначение(ТаблИтогов.ПолучитьЗначение(1,"Родитель"))=1 Тогда
                   Прервать;
              КонецЕсли;
         КонецЕсли;

         ТаблИтогов.НоваяКолонка("Товар","Справочник.Номенклатура");
         Для i=1 По ТаблИтогов.КоличествоСтрок() Цикл
              Если  ПустоеЗначение(ТаблИтогов.ПолучитьЗначение(i,"Родитель"))=0 Тогда
                   ТаблТоваров.НоваяСтрока();
                   ТаблТоваров.Товар=ТаблИтогов.ПолучитьЗначение(i,"Родитель");
                   ТаблТоваров.ОценочнаяСтоимостьНаНачало=ТаблИтогов.ПолучитьЗначение(i,"ОценочнаяСтоимостьНаНачало");
                   ТаблТоваров.ОценочнаяСтоимостьНаКонец=ТаблИтогов.ПолучитьЗначение(i,"ОценочнаяСтоимостьНаКонец");
                   ТаблИтогов.УстановитьЗначение(i,"Товар",ТаблИтогов.ПолучитьЗначение(i,"Родитель"));
              КонецЕсли;
         КонецЦикла;
    КонецЦикла;
КонецЕсли;

ТаблТоваров.Свернуть("Товар","ОценочнаяСтоимостьНаНачало,ОценочнаяСтоимостьНаКонец");
//в итоге в ТаблТоваров окажутся помимо сведений о товарах еще и сведения о суммах, собранных по вышестоящим родителям вплоть до корневого уровня
"
Читают тему
(гостей: 1)

Быстрый переход