Оптимизация расчета сумм остатков по группам
Показывать по
10
20
40
сообщений
- 1
- 2
03.09.2013
18:35
#1
Посабжу: есть запрос который получает из регистра остатаков остатки товара на начало и конец периода, далее на его основе заполняется таблица значений, где получается цена товара на начало и конец периода, перемножаются соответственно на остаок на начало и конец периода и записываются в соответствующие столбцы ТЗ.
Вопрос в следующем: как наиболее оптимально/быстро далее посчитать сумму по группам товаров?
Вопрос в следующем: как наиболее оптимально/быстро далее посчитать сумму по группам товаров?
04.09.2013
11:13
#3
Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии.
04.09.2013
11:26
#4
> Это все можно сделать сразу в запросе, а итоги получить посчитам сумму "Суммы остатка" по иерархии
Например? Как получить в запросе цену товара на начало и конец периода?
> итоги получить посчитам сумму "Суммы остатка" по иерархии
И это, пожалуйста, на примере.
Например? Как получить в запросе цену товара на начало и конец периода?
> итоги получить посчитам сумму "Суммы остатка" по иерархии
И это, пожалуйста, на примере.
04.09.2013
11:45
#5
> Как получить в запросе цену товара на начало и конец периода?
- Получаешь даты изменения цены за интервал дат.
- Получаешь ближайшую дату к дате начала периода и ближайшую дату изменения цены к дате конца периода.
- Получаешь цены на эти даты.
> И это, пожалуйста, на примере.
Пример получения цен на начало и конец интервала можно поискать на "мисте".
- Получаешь даты изменения цены за интервал дат.
- Получаешь ближайшую дату к дате начала периода и ближайшую дату изменения цены к дате конца периода.
- Получаешь цены на эти даты.
> И это, пожалуйста, на примере.
Пример получения цен на начало и конец интервала можно поискать на "мисте".
04.09.2013
12:07
#7
> Получаешь даты изменения цены за интервал дат.
В запросе? 80 Как?
> Пример получения цен на начало и конец интервала можно поискать на "мисте".
Не нашел
В запросе? 80 Как?
> Пример получения цен на начало и конец интервала можно поискать на "мисте".
Не нашел
04.09.2013
16:06
#10
"Весь этот головняк потому что в запросах 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
- 2
Проверка прикрепления отсканиированных документов к договорам контрагентовБГУ с 1 сентября 2013 поменялся формат выгрузки в СЭД
Читают тему
(гостей: 1)