Это позволяет получить значения прибыли, приближенные к реальным в случае плохого состояния регистра "Партии наличие" и, как следствие, себестоимости товаров в отчёте. А также можно оценить отклонения от базовой цены (например, розничной или оптовой), то есть сделанные скидки и/или дополнительные наценки.
Кратко поясню реализованный механизм:
На форму добавляется реквизит ВыбТипЦен.
Добавляется функция вычисления по типу цены:
Функция ПоТипуЦен(Номенклатура, Количество, ТекДок)
Цена = глПолучитьЦену(Номенклатура, ВыбТипЦен, ТекДок.ДатаДок, Номенклатура.БазоваяЕдиница, Константа.ВалютаУпрУчета);
Возврат Цена * Количество;
КонецФункции
В запросе отчета заменяются функции вычисления сумм стоимости:
Если ВыбТипЦен.Выбран() = 0 Тогда // стандартное вычисление
ТекстЗапроса = ТекстЗапроса + "
|Функция СуммаСебест = Сумма(Себест);
|Функция СуммаСебестВ = Сумма(СебестВ);";
Иначе // расчёт по типу цены
ТекстЗапроса = ТекстЗапроса + "
|ТекДок = Регистр.Продажи.ТекущийДокумент;
|Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество, ТекДок));
|Функция СуммаСебестВ = Сумма(ПоТипуЦен(Номенклатура, КоличествоВ, ТекДок));";
КонецЕсли;
Подобным образом можно выполнять массу полезных вычислений в запросах, недостаток, пожалуй, только один: при использовании внешних функций в запросе сильно возрастает время его выполнения.