При доработке стандартной отчетности в конфигурации «Управление производственным предприятием» (редакция 1.3) часто возникает задача сопоставления фактических продаж с действующими ценами из прайс-листа. Стандартный внешне созданный отчет «Продажи», построенный на базе регистра накопления Продажи и механизма УниверсальныйОтчет, содержит только фактически зафиксированные суммы и количества из документов реализации. Рассмотрим, как правильно модифицировать такой отчет и выгрузить в него актуальные цены номенклатуры.
Проанализируем структуру хранения данных в 1С:УПП 1.3. В регистре накопления Продажи отсутствуют данные о прайс-листах и типах цен. Эти сведения хранятся в периодическом регистре сведений ЦеныНоменклатуры.
Простая привязка полей через настройки Универсального отчета без изменения кода не сработает по следующим причинам:
Для добавления нового показателя необходимо отказаться от стандартного присвоения имени регистра (УниверсальныйОтчет.ИмяРегистра = "Продажи") и перевести отчет на использование собственного запроса.
Разберем алгоритм действий по шагам:
УстановкаНачальныхНастроек().ПостроительОтчета.Рассмотрим пример настройки текста запроса и инициализации Универсального отчета:
Процедура УстановкаНачальныхНастроек()
// Отключаем стандартный режим автоформирования запроса по регистру
// УниверсальныйОтчет.ИмяРегистра = "Продажи";
// Задаем собственный текст запроса
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ПродажиОбороты.ДоговорКонтрагента.Владелец КАК Покупатель,
| ПродажиОбороты.КоличествоОборот КАК Количество,
| ПродажиОбороты.СтоимостьОборот КАК Стоимость,
| ЕСТЬNULL(СрезЦен.Цена, 0) КАК ЦенаПрайса
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Авто, ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &ВыбранныйТипЦен) КАК СрезЦен
| ПО ПродажиОбороты.Номенклатура = СрезЦен.Номенклатура
| И ПродажиОбороты.ХарактеристикаНоменклатуры = СрезЦен.ХарактеристикаНоменклатуры";
УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
// Обязательная регистрация новых измерений и показателей
УниверсальныйОтчет.ДобавитьПоказатель("ЦенаПрайса", "Цена прайса", Истина, "ЧДЦ=2");
КонецПроцедуры
Чтобы быстро получить правильную структуру основного запроса по продажам со всеми типовыми группировками и показателями, рекомендуется использовать в качестве образца встроенный отчет «Валовая прибыль» или получить базовый текст запроса из отладчика во время работы стандартного отчета «Продажи».
При левом соединении с таблицей СрезПоследних важно определиться со способом соединения:
&ДатаКон) или текущую дату.Если единицы измерения хранения цен и реализации различаются, в секцию выбора полей запроса добавляется пересчет по формуле:
ВЫБОР
КОГДА СрезЦен.ЕдиницаИзмерения = ПродажиОбороты.Номенклатура.БазоваяЕдиницаИзмерения
ТОГДА СрезЦен.Цена
ИНАЧЕ (СрезЦен.Цена * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) / СрезЦен.ЕдиницаИзмерения.Коэффициент
КОНЕЦ КАК ЦенаПрайсаПересчитанная
Если разработка на базе Построителя отчета вызывает сложности с ручной регистрацией полей и параметров, проанализируем современные альтернативные варианты: