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

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

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

Подготовка структуры отчета и создание параметра

Первым шагом в процессе добавления функционала является определение типа данных, которые будут поступать в отчет. В конструкторе объектов конфигурации необходимо открыть редактор вашего отчета и перейти на вкладку Компоновка данных. Именно здесь формируется логика работы с информацией.

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

  • 📅 Нажмите правой кнопкой мыши на папку «Параметры» и выберите «Добавить».
  • 🔧 В появившемся окне укажите имя, например, ПериодОтчета или ДатаСреза.
  • 📝 В колонке «Тип значения» выберите Дата или составной тип ДатаВремя, если требуется точность до секунды.
  • ⚙️ Установите значение по умолчанию, например, НачалоДня(ТекущаяДата), чтобы при открытии отчета пользователь сразу видел актуальную информацию.

Особое внимание следует уделить представлению параметра. Свойство Заголовок определяет текст метки, который увидит пользователь в форме отчета. Не используйте технические названия полей базы данных в качестве заголовков, это может запутать бухгалтера или менеджера.

⚠️ Внимание: Если вы изменяете тип существующего параметра, система может запросить подтверждение на удаление связанных элементов запроса. Всегда проверяйте целостность схемы компоновки после внесения изменений в типы данных.

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

Интеграция параметра в текст запроса

Связывание созданного параметра с данными происходит на уровне языка запросов 1С. В редакторе запроса, доступном через кнопку Открыть запрос в окне компоновки данных, необходимо добавить условие отбора. Синтаксис использования параметров отличается от использования обычных полей таблиц.

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

ВЫБРАТЬ

Документ.Ссылка КАК Ссылка,

Документ.Дата КАК ДатаДокумента,

Документ.Сумма КАК Сумма

ИЗ

Документ.РеализацияТоваровУслуг КАК Документ

ГДЕ

Документ.Дата >= &ДатаНачала

И Документ.Дата <= &ДатаОкончания

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

После ввода текста запроса необходимо выполнить его проверку. Нажмите кнопку Проверить в панели инструментов редактора. Если синтаксис верен, система предложит сопоставить параметры запроса с параметрами компоновки данных. На этом этапе вы подтверждаете, что &ДатаНачала соответствует созданному ранее параметру.

☑️ Проверка интеграции запроса

Выполнено: 0 / 4

Однако лучшим тоном считается использование единообразного стиля именования, например, CamelCase или с использованием подчеркиваний.

Настройка вариантов отчета и интерфейса

Для того чтобы выбор даты был действительно удобным, недостаточно просто добавить поле в форму. Необходимо настроить Варианты отчета. Это predefined настройки, которые позволяют пользователю одним кликом переключаться междуными периодами, такими как «Текущий месяц» или «Прошлый год».

В окне настроек компоновки данных перейдите на вкладку Варианты отчета. Здесь вы можете создать новую настройку и задать для параметров конкретные значения или выражения. Например, для параметра ДатаНачала можно установить значение НачалоМесяца(ТекущаяДата).

Название варианта Значение параметра"Начало" Значение параметра"Конец" Сценарий использования
Текущий месяц НачалоМесяца(ТекущаяДата) КонецМесяца(ТекущаяДата) Оперативный контроль продаж
Прошлый квартал НачалоКвартала(ТекущаяДата - 90) КонецКвартала(ТекущаяДата - 90) Квартальная отчетность
С начала года НачалоГода(ТекущаяДата) ТекущаяДата Накопительные итоги
Вчера НачалоДня(ТекущаяДата - 1) КонецДня(ТекущаяДата - 1) Сверка вчерашних операций

Такая таблица настроек значительно ускоряет работу пользователей. Вместо того чтобы каждый раз вручную выбирать даты в календаре, они могут выбрать готовый сценарий из выпадающего списка. Это особенно актуально для отчетов, которые формируются ежедневно.

📊 Как часто вы используете готовые варианты отчета?
Ежедневно
Раз в неделю
Только при первой настройке
Никогда, всегда ввожу вручную

Не забывайте про свойство Видимость для параметров. Если вы создали сложные вычисляемые поля, которые используются только внутри логики отчета, их можно скрыть от пользователя, оставив видимыми только основные даты среза.

Программное управление формой отчета

Иногда стандартных возможностей СКД недостаточно, и требуется динамически изменять доступность полей или их значения в зависимости от прав пользователя или других условий. В этом случае используется модуль объекта отчета или модуль формы.

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Получаем доступ к параметрам

Параметры = ПараметрыКомпоновкиДанных;

// Устанавливаем дату начала равной началу текущего месяца

Параметры.ДатаНачала = НачалоМесяца(ТекущаяДата);

// Блокируем изменение, если у пользователя нет прав

Если Не Пользователи.ПроверитьПраво("ПолныеПрава") Тогда

Параметры.ДатаНачала.ТолькоПросмотр = Истина;

КонецЕсли;

КонецПроцедуры

Использование программного кода дает максимальную гибкость, но усложняет поддержку конфигурации. Любое изменение в коде требует тестирования, в то время как настройки СКД можно изменить прямо в режиме предприятия (при наличии соответствующих прав).

⚠️ Внимание: При программном изменении параметров убедитесь, что вы не вызываете рекурсивное обновление формы. Изменение параметров часто триггерит событие изменения, что может привести к зависанию клиента, если логика написана некорректно.

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

Оптимизация производительности при работе с датами

Выбор даты — это не только вопрос интерфейса, но и вопрос производительности базы данных. Неправильно построенный запрос с использованием дат может привести к полному сканированию таблиц, что критически замедлит работу системы при больших объемах данных.

Главное правило оптимизации — избегать применения функций к полям таблицы в условии ГДЕ. Движок 1С не сможет использовать индекс по дате, если вы напишете условие вида ГОД(Документ.Дата) = &Год. Вместо этого всегда используйте диапазон дат.

  • Плохо: ГДЕ День(Документ.Дата) = 1 — индекс не используется, перебор всех записей.
  • Хорошо: ГДЕ Документ.Дата >= &НачалоДня И Документ.Дата < &КонецДня — быстрая выборка по индексу.
  • ⚡ Используйте оператор МЕЖДУ для читаемости, он эквивалентен паре условий больше-меньше.

Если ваш отчет работает медленно, проверьте план выполнения запроса. Убедитесь, что по полям, участвующим в отборе по дате, созданы соответствующие индексы в конфигураторе. Для регистров накопления это особенно важно, так как они часто содержат миллионы записей.

Особенности работы с временем в 1С

В 1С тип Дата включает в себя и время. Если вы сравниваете дату документа с датой, введенной пользователем через поле «Дата» (без времени), помните, что у введенной даты время будет 00:00:00. Поэтому условие Документ.Дата <= &ДатаКонец может отсечь документы, созданные 31 числа в 15:00, если &ДатаКонец равно 31.01.2026 00:00. Всегда используйте КонецДня для верхней границы периода.

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

Тестирование и отладка выбора даты

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

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

Обратите внимание на поведение отчета в разных часовых поясах, если ваша система распределенная. Хотя 1С хранит даты в локальном времени сервера или клиента (в зависимости от настройки), при выгрузке данных во внешние системы могут возникать расхождения.

💡

Используйте обработку"Консоль запросов" для быстрого тестирования логики отбора без запуска всего отчета. Это экономит время на отладке сложных условий по датам.

Завершающим этапом является проверка прав доступа. Убедитесь, что пользователи с ограниченными правами (РЛС) видят только те данные, которые попадают в выбранный ими период и которые им разрешено видеть согласно настройкам ролей.

⚠️ Внимание: Интерфейс и функционал 1С могут обновляться с выходом новых версий платформы. Всегда сверяйте актуальность синтаксиса функций работы с датами в официальной документации фирмы"1С" перед внедрением в продуктивную среду.

Часто задаваемые вопросы (FAQ)

Как сделать поле даты обязательным для заполнения?

В настройках компоновки данных выберите ваш параметр даты. В свойствах найдите флаг Видимость и убедитесь, что он установлен. Затем установите свойство Обязательное заполнение в значение Истина. При попытке сформировать отчет без указания даты система выдаст предупреждение.

Почему при выборе даты отчет не обновляется автоматически?

По умолчанию в 1С отчет формируется по нажатию кнопки Сформировать. Для автоматического обновления при изменении параметров необходимо в модуле формы или в настройках СКД включить опцию Автообновление. Однако это может снизить производительность при медленных запросах.

Можно ли ограничить выбор даты только рабочими днями?

Стандартный диалог выбора даты не поддерживает фильтрацию по производственному календарю. Для реализации такой логики потребуется создание собственной формы выбора даты с использованием реквизита типа ПолеФормы и обработчика события ПриИзменении, который будет проверять дату по календарю.

Как передать дату из внешнего источника в параметр отчета?

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

💡

Правильная настройка параметров даты в СКД — это баланс между удобством пользователя (варианты отчета) и производительностью системы (использование индексов в запросе).