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

Новая тема
Показывать по сообщений
Посабжу: есть запрос который получает из регистра остатаков остатки товара на начало и конец периода, далее на его основе заполняется таблица значений, где получается цена товара на начало и конец периода, перемножаются соответственно на остаок на начало и конец периода и записываются в соответствующие столбцы ТЗ.<br>Вопрос в следующем: как наиболее оптимально/быстро далее посчитать сумму по группам товаров?
Да, цена - периодический реквизит справочника
Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии.
<span>> Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии</span><br>Например? Как получить в запросе цену товара на начало и конец периода?<br><span>> итоги получить посчитам сумму "Суммы остатка" по иерархии</span><br>И это, пожалуйста, на примере.
> Как получить в запросе цену товара на начало и конец периода?<br><br>  - Получаешь даты изменения цены за интервал дат.<br>  - Получаешь ближайшую дату к дате начала периода и ближайшую дату изменения цены к дате конца периода.<br>  - Получаешь цены на эти даты.<br>> И это, пожалуйста, на примере.<br>Пример получения цен на начало и конец интервала можно поискать на "мисте".
Это все можно сделать для 7.7?
<span>> Получаешь даты изменения цены за интервал дат.</span><br>В запросе? 80 Как?<br>> Пример получения цен на начало и конец интервала можно поискать на "мисте".<br>Не нашел :(
Даже не говори мне про 7.7 ничего! :)
А-аа, протупил что это для 7.7 все надо...
"Весь этот головняк потому что в запросах 7.7 значения периодических реквизитов вычисляются только на конечную дату запроса. Кроме того, прямо в тексте запроса проблематично написать какое то подобное вычисление:<br> <br> <br><pre>|Функция КонОценочнаяСтоимость = ЦенаНаКонец*КонОст(Количество); </pre><br><br> <br> <br>хотя есть незадокументированная "фича", где можно написать что то типа такого:<br> <br> <br><pre>|Цена=Справочник.Цены.Цена;<br>|Функция КонКоличество=КонОст(Количество);<br>|Функция КонОценочнаяСтоимость = Сумма(Цена*Запрос.КонКоличество); </pre><br><br>и оно даже что то вычисляет, но иногда результат логике вообще не поддается<br> <br>Если отвечать  на поставленный вопрос "в лоб", то постобработкой можно, конечно, сделать рассчет итогов по группам примерно вот так:<br> <br><br><pre>ТаблТоваров=СоздатьОбъект("ТаблицаЗначений");<br>ТаблТоваров.НоваяКолонка("Товар","Справочник.Номенклатура");<br>ТаблТоваров.НоваяКолонка("ОценочнаяСтоимостьНаНачало","Число",15,2);<br>ТаблТоваров.НоваяКолонка("ОценочнаяСтоимостьНаКонец","Число",15,2);<br>//...<br>//тут таблица как то заполняется по запросу и перебором периодики цен<br>//...<br>Если ТаблТоваров.КоличествоСтрок()>0 Тогда<br>     ТаблИтогов=СоздатьОбъект("ТаблицаЗначений");<br>     ТаблТоваров.Выгрузить(ТаблИтогов);<br>     ТаблИтогов.НоваяКолонка("Родитель","Справочник.Номенклатура");<br>     Пока 1=1 Цикл<br>          Для i=1 По ТаблИтогов.КоличествоСтрок() Цикл<br>               ТаблИтогов.УстановитьЗначение(i,"Родитель",ТаблИтогов.ПолучитьЗначение(i,"Товар").Родитель);<br>          КонецЦикла;<br><br>          ТаблИтогов.Свернуть("Родитель","ОценочнаяСтоимостьНаНачало,ОценочнаяСтоимостьНаКонец");<br><br>          Если ТаблИтогов.КоличествоСтрок()=1 Тогда<br>               Если ПустоеЗначение(ТаблИтогов.ПолучитьЗначение(1,"Родитель"))=1 Тогда<br>                    Прервать;<br>               КонецЕсли;<br>          КонецЕсли;<br><br>          ТаблИтогов.НоваяКолонка("Товар","Справочник.Номенклатура");<br>          Для i=1 По ТаблИтогов.КоличествоСтрок() Цикл<br>               Если  ПустоеЗначение(ТаблИтогов.ПолучитьЗначение(i,"Родитель"))=0 Тогда<br>                    ТаблТоваров.НоваяСтрока();<br>                    ТаблТоваров.Товар=ТаблИтогов.ПолучитьЗначение(i,"Родитель");<br>                    ТаблТоваров.ОценочнаяСтоимостьНаНачало=ТаблИтогов.ПолучитьЗначение(i,"ОценочнаяСтоимостьНаНачало");<br>                    ТаблТоваров.ОценочнаяСтоимостьНаКонец=ТаблИтогов.ПолучитьЗначение(i,"ОценочнаяСтоимостьНаКонец");<br>                    ТаблИтогов.УстановитьЗначение(i,"Товар",ТаблИтогов.ПолучитьЗначение(i,"Родитель"));<br>               КонецЕсли;<br>          КонецЦикла;<br>     КонецЦикла;<br>КонецЕсли;<br><br>ТаблТоваров.Свернуть("Товар","ОценочнаяСтоимостьНаНачало,ОценочнаяСтоимостьНаКонец");<br>//в итоге в ТаблТоваров окажутся помимо сведений о товарах еще и сведения о суммах, собранных по вышестоящим родителям вплоть до корневого уровня </pre>"
Читают тему
(гостей: 1)

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