Как правильно настроить отбор по периоду в СКД для отчета на основе документов

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

При разработке отчетов в системе компоновки данных (СКД), особенно в конфигурациях на обычных формах, таких как Управление производственным предприятием 1.3, разработчики часто сталкиваются с проблемой: данные выводятся в полном объеме, а установленный период игнорируется или вызывает ошибки. Разберем по шагам, как правильно реализовать фильтрацию по дате, исправить ошибки в тексте запроса и сделать интерфейс выбора периода удобным для конечного пользователя.

Анализ ошибки неправильного псевдонима в запросе

Рассмотрим типичную ситуацию: разработчик пытается добавить условие ГДЕ в текст запроса, чтобы ограничить выборку документов по дате. Часто при этом возникает ошибка: "Неправильный псевдоним ПроизводственныеЦиклы.Дата". Выясним причину этого поведения системы.

В языке запросов 1С существует строгая последовательность обработки секций. Ошибка возникает тогда, когда в секции ГДЕ программист пытается обратиться к псевдониму, заданному в секции ВЫБРАТЬ, или когда нарушена структура соединений. Проанализируем исходный запрос:


ВЫБРАТЬ
    ПроизводственныеЦиклы.Дата,
    ПроизводственныеЦиклыТаблицаЦиклов.Продукт,
    ПроизводственныеЦиклыТаблицаЦиклов.Количество
ИЗ
    Документ.ПроизводственныеЦиклы.ТаблицаЦиклов КАК ПроизводственныеЦиклыТаблицаЦиклов
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.ПроизводственныеЦиклы КАК ПроизводственныеЦиклы 
    ПО ПроизводственныеЦиклыТаблицаЦиклов.Ссылка = ПроизводственныеЦиклы.Ссылка
ГДЕ 
    ПроизводственныеЦиклы.Дата Между &НачалоПериода и &КонецПериода

Чтобы избежать ошибок синтаксиса, важно убедиться, что условие ГДЕ расположено после всех инструкций СОЕДИНЕНИЕ. Также стоит помнить, что СКД крайне чувствительна к именованию полей. Если вы используете псевдонимы (через ключевое слово КАК), в условии фильтрации всегда следует обращаться к реальному имени поля таблицы или правильно назначенному псевдониму источника.

Использование типа СтандартныйПериод для удобства пользователя

Вместо того чтобы заставлять пользователя вводить две даты (начало и конец) вручную, в СКД эффективнее использовать специальный тип данных — СтандартныйПериод. Это позволит выбирать интервалы (например, "Текущий месяц" или "Прошлый квартал") одним нажатием. Разберем, как это настроить:

  1. Перейдем на вкладку Параметры в конструкторе СКД.
  2. Добавим новый параметр, назовем его ПериодОтчета и установим ему тип СтандартныйПериод.
  3. Для стандартных параметров НачалоПериода и КонецПериода установим флажок Ограничение доступности. Пользователь не должен видеть их в списке.
  4. В поле Выражение для параметра НачалоПериода пропишем: &ПериодОтчета.ДатаНачала.
  5. В поле Выражение для параметра КонецПериода пропишем: КонецПериода(&ПериодОтчета.ДатаОкончания, "День").

Важный момент: Использование функции КонецПериода с параметром "День" критически важно для документов. Поскольку дата документа в 1С содержит время, условие "по 03.07.2026" без этой функции отсечет все документы, созданные в течение этого дня после полуночи. Наша формула гарантирует, что в отчет попадут данные до последней секунды суток (23:59:59).

Оптимизация запроса через фигурные скобки

Если мы хотим, чтобы отчет работал гибко, а СКД сама управляла отборами, рассмотрим использование расширения языка запросов. Вместо жесткого условия ГДЕ, которое всегда требует заполнения параметров, мы можем использовать конструкцию в фигурных скобках. Это позволяет сделать условие необязательным или более динамичным.

Посмотрим на пример применения фигурных скобок в секции ГДЕ:


ВЫБРАТЬ
    ПроизводственныеЦиклы.Дата КАК ДатаДокумента,
    ПроизводственныеЦиклыТаблицаЦиклов.Продукт
ИЗ
    Документ.ПроизводственныеЦиклы.ТаблицаЦиклов КАК ПроизводственныеЦиклыТаблицаЦиклов
{ГДЕ
    (ПроизводственныеЦиклы.Дата МЕЖДУ &НачалоПериода И &КонецПериода)}

При использовании такой записи СКД самостоятельно анализирует настройки компоновщика и подставляет условия только тогда, когда параметры реально заданы пользователем. Это избавляет от ошибок, если пользователь решил сформировать отчет за весь период существования базы данных.

Вывод периода в быстрые настройки формы

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

  1. На вкладке Настройки выберем наш отчет (верхний элемент дерева).
  2. В нижней части экрана перейдем на вкладку Параметры.
  3. Найдем наш параметр ПериодОтчета и нажмем на кнопку свойств пользовательских настроек (иконка с синим пунктиром).
  4. Установим галочку Включать в пользовательские настройки.
  5. В поле Режим редактирования выберем Быстрый доступ.

После этих действий поле выбора периода появится над табличной частью отчета. Если отчет использует стандартную форму, созданную конструктором, настройки применятся автоматически. Если используется кастомная форма, можно воспользоваться методом КомпоновщикНастроек.ПолучитьНастройки() для инициализации параметров при открытии.

Роль поля в наборе данных и работа с регистрами

Для корректной работы сложных механизмов (например, периодических итогов), рекомендуется на вкладке Набор данных для поля Дата документа указать соответствующую роль. Выберем в колонке Роль значение Период. Это подскажет системе компоновки, по какому полю следует выполнять временное упорядочивание данных.

В завершение проанализируем ситуацию с производительностью. Обращение напрямую к табличным частям документов — это ресурсоемкая операция для базы данных SQL. В крупных системах, таких как УПП, данные о движениях обычно фиксируются в регистрах (например, "Выпуск продукции" или "Затраты"). Рассмотрим возможность перевода отчета на работу с Виртуальными таблицами регистров:


ВЫБРАТЬ
    Регистр.Номенклатура,
    Регистр.КоличествоОборот
ИЗ
    РегистрНакопления.ВыпускПродукции.Обороты(&НачалоПериода, &КонецПериода) КАК Регистр

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

← На главную