Как добавить колонку "Цена прайса" в отчет "Продажи" в 1С:УПП 1.3?

Программист 1С v8.3 (Обычные формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При доработке стандартной отчетности в конфигурации «Управление производственным предприятием» (редакция 1.3) часто возникает задача сопоставления фактических продаж с действующими ценами из прайс-листа. Стандартный внешне созданный отчет «Продажи», построенный на базе регистра накопления Продажи и механизма УниверсальныйОтчет, содержит только фактически зафиксированные суммы и количества из документов реализации. Рассмотрим, как правильно модифицировать такой отчет и выгрузить в него актуальные цены номенклатуры.

Причины необходимости модификации запроса

Проанализируем структуру хранения данных в 1С:УПП 1.3. В регистре накопления Продажи отсутствуют данные о прайс-листах и типах цен. Эти сведения хранятся в периодическом регистре сведений ЦеныНоменклатуры.

Простая привязка полей через настройки Универсального отчета без изменения кода не сработает по следующим причинам:

Изменение запроса в процедуре УстановкаНачальныхНастроек

Для добавления нового показателя необходимо отказаться от стандартного присвоения имени регистра (УниверсальныйОтчет.ИмяРегистра = "Продажи") и перевести отчет на использование собственного запроса.

Разберем алгоритм действий по шагам:

  1. Откроем модуль внешнего отчета и перейдем к процедуре УстановкаНачальныхНастроек().
  2. Закомментируем или удалим строку, где указывается прямое имя регистра.
  3. Зададим собственный текст запроса для объекта ПостроительОтчета.
  4. Зарегистрируем новые показатели и группировки в Построителе отчета, иначе они не отобразятся в интерфейсе пользователя.

Рассмотрим пример настройки текста запроса и инициализации Универсального отчета:


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

Чтобы быстро получить правильную структуру основного запроса по продажам со всеми типовыми группировками и показателями, рекомендуется использовать в качестве образца встроенный отчет «Валовая прибыль» или получить базовый текст запроса из отладчика во время работы стандартного отчета «Продажи».

Учет особенностей пересчета единиц измерения и даты цен

При левом соединении с таблицей СрезПоследних важно определиться со способом соединения:

Если единицы измерения хранения цен и реализации различаются, в секцию выбора полей запроса добавляется пересчет по формуле:


ВЫБОР 
	КОГДА СрезЦен.ЕдиницаИзмерения = ПродажиОбороты.Номенклатура.БазоваяЕдиницаИзмерения 
		ТОГДА СрезЦен.Цена 
	ИНАЧЕ (СрезЦен.Цена * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) / СрезЦен.ЕдиницаИзмерения.Коэффициент 
КОНЕЦ КАК ЦенаПрайсаПересчитанная

Альтернативные подходы к реализации отчета

Если разработка на базе Построителя отчета вызывает сложности с ручной регистрацией полей и параметров, проанализируем современные альтернативные варианты:

  1. Перевод отчета на Систему компоновки данных (СКД): Это наиболее рекомендуемый подход. Создание внешнего отчета с использованием СКД позволяет связывать наборы данных (регистр продаж и регистр цен), настраивать расчет параметров, коэффициенты единиц измерения и произвольные пользовательские поля в конструкторе без написания процедурного кода.
  2. Использование механизма «Произвольные отчеты»: В УПП 1.3 присутствует встроенная подсистема «Произвольные отчеты». Она дает возможность формировать отчеты любой сложности на базе СКД прямо в пользовательском режиме без редактирования внешних epf-файлов.
← На главную