Как вывести количество дней в периоде и настроить вычисляемые показатели в Универсальном отчете УПП 1.3

Программист 1С v8.3 (Обычные формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

Работа с Универсальным отчетом в конфигурации 1С:УПП 1.3 часто вызывает вопросы, особенно когда требуется вывести нестандартные показатели, такие как количество дней в периоде или расчетные коэффициенты. Рассмотрим пошагово, как решить эти задачи и избежать типичных ошибок при работе с запросами.

Решение проблемы с расчетом разности дат

При использовании Универсального отчета важно помнить, что он работает на основе Построителя отчета. Когда мы пытаемся использовать стандартные параметры &ДатаНач и &ДатаКон, мы часто сталкиваемся с тем, что поле остается пустым. Это происходит из-за того, что механизм Универсального отчета автоматически подставляет значения в параметры с определенными именами, которые ожидаются системой.

Чтобы функция РАЗНОСТЬДАТ заработала корректно, используйте следующие имена параметров: &ДатаНачала и &ДатаКонца. Давайте посмотрим на пример правильного оформления текста запроса:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстатки,
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    РАЗНОСТЬДАТ(&ДатаНачала, &ДатаКонца, ДЕНЬ) КАК ДнейПродажи
{ВЫБРАТЬ
    КоличествоОстатки,
    Количество,
    Номенклатура.*,
    ДнейПродажи}
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, , ) КАК ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПО ПродажиОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура

После внесения правок обязательно добавьте поле ДнейПродажи в список выбираемых полей настроек Универсального отчета, чтобы оно стало доступно для вывода.

Добавление собственных вычисляемых показателей

Часто возникает необходимость добавить специфический расчет, например, СрокЗапаса. Поскольку Универсальный отчет позволяет гибко настраивать показатели, вы можете передать дополнительные параметры напрямую из модуля объекта. Рассмотрим, как это сделать:

  1. В тексте запроса используйте параметр, например &СрокЗапаса. Формула в запросе будет выглядеть так: КоличествоОстаток / ДнейПродажи * &СрокЗапаса.
  2. В модуле объекта отчета перехватите процедуру СформироватьОтчет и добавьте передачу параметра:

Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    // Перед формированием отчета устанавливаем необходимые параметры
    УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("СрокЗапаса", ЗначениеСрока);
    // Вызываем стандартную процедуру формирования
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент);
КонецПроцедуры

Как избежать дублирования строк при соединении регистров

При попытке вывести данные из Оборотов и Остатков одного регистра, вы можете столкнуться с «раздуванием» цифр. Это происходит из-за декартового произведения: если за период было несколько движений, система для каждой строки оборотов подтягивает одну и ту же запись остатка, тем самым умножая его на количество документов-регистраторов.

Чтобы исправить эту ситуацию, разберем следующие подходы:

Используйте консоль запросов для тестирования каждого этапа соединения таблиц. Если вы видите, что количество строк в результате запроса превышает количество номенклатурных позиций, значит, условие соединения ПО является недостаточно строгим или виртуальные таблицы возвращают избыточные данные.

← На главную