Это позволяет получить значения прибыли, приближенные к реальным в случае плохого состояния регистра «Партии наличие» и, как следствие, себестоимости товаров в отчёте. А также можно оценить отклонения от базовой цены (например, розничной или оптовой), то есть сделанные скидки и/или дополнительные наценки.
Кратко поясню реализованный механизм:
На форму добавляется реквизит ВыбТипЦен.
Добавляется функция вычисления по типу цены:
Функция ПоТипуЦен(Номенклатура, Количество, ТекДок)
Цена = глПолучитьЦену(Номенклатура, ВыбТипЦен, ТекДок.ДатаДок, Номенклатура.БазоваяЕдиница, Константа.ВалютаУпрУчета);
Возврат Цена * Количество;
КонецФункции
В запросе отчета заменяются функции вычисления сумм стоимости:
Если ВыбТипЦен.Выбран() = 0 Тогда // стандартное вычисление
ТекстЗапроса = ТекстЗапроса + "
|Функция СуммаСебест = Сумма(Себест);
|Функция СуммаСебестВ = Сумма(СебестВ);";
Иначе // расчёт по типу цены
ТекстЗапроса = ТекстЗапроса + "
|ТекДок = Регистр.Продажи.ТекущийДокумент;
|Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество, ТекДок));
|Функция СуммаСебестВ = Сумма(ПоТипуЦен(Номенклатура, КоличествоВ, ТекДок));";
КонецЕсли;
Подобным образом можно выполнять массу полезных вычислений в запросах, недостаток, пожалуй, только один: при использовании внешних функций в запросе сильно возрастает время его выполнения.
Полезная вещь. будем пробовать. автору спасибо. Особая благодарность за описание процесса реализации.
выдает ошибку.
//*******
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.АнализПродаж.Форма.Модуль(511)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));
Запрос[13] : Ошибка в выражении ‘Количество’
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.АнализПродаж.Форма.Модуль(511)}: Функция СуммаСебестВ = Сумма(ПоТипуЦен(Номенклатура, КоличествоВ <<?>> , ТекДок));
Запрос[14] : Ошибка в выражении ‘КоличествоВ’
(2) Tatar_Ed, значит у вас не торговля и склад 9.2 для России
(3) уверен на все 100% у меня торговля и склад 9.2 и точно для России.
брал не готовый «Анализ», а пытаюсь сделать самостоятельно, по Вашей инструкции. Ну видать напутал что-то
(4) Tatar_Ed, тогда в вашем отчете не хватает строки
КоличествоВ = Регистр.Продажи.КоличествоВ;
(5) Спасибо, буду пробовать.
теперь такая ошибка
КОЛИЧЕСТВО<<?>>
Переменная не определена (КОЛИЧЕСТВО)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));
Запрос[13] : Ошибка в выражении ‘Количество’
((((((((((((
КОЛИЧЕСТВО<<?>>
Переменная не определена (КОЛИЧЕСТВО)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));
Запрос[13] : Ошибка в выражении ‘Количество’
//********
КОЛИЧЕСТВО<<?>>
Переменная не определена (КОЛИЧЕСТВО)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));
Запрос[13] : Ошибка в выражении ‘Количество’
(5) Есть какие нибудь мысли?
(10) Tatar_Ed, надо обработку и базу, а так никто не скажет, ну хотя бы скриншот.
(11) а скриншот чего? Кода или ошибки?
(12) Tatar_Ed, ошибки
спасибо…даже в наше время оказалось актуальным и работает)))