Как в стандартном отчете 1С задать интервал с точностью до времени?

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

В типовых конфигурациях (таких как 1С:Управление торговлей, 1С:ERP Управление предприятием, 1С:Комплексная автоматизация) большинство стандартных отчетов, например, «Ведомость по товарам на складах», предоставляют пользователю возможность выбирать интервал только в пределах дат (дней). Однако при оперативном учете нередко возникает необходимость сформировать отчет за конкретные часы и минуты — к примеру, с 10:00 утра до 14:30 дня.

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

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

Проанализируем устройство типового отчета в схеме компоновки данных (СКД). На форме отчета обычно выведен параметр с типом СтандартныйПериод. Этот системный тип платформы «1С:Предприятие» предназначен строго для работы с календарными днями («Этот месяц», «Прошлый квартал», «Произвольный период» и др.) и на уровне платформы не поддерживает ввод времени.

При этом в схеме компоновки данных виртуальные таблицы регистров (например, ОстаткиИОбороты) фильтруются параметрами НачалоПериода и КонецПериода. В типовых решениях эти параметры скрыты (у них установлена галочка «Ограничение доступности»), а их значения рассчитываются через выражения:


&Период.ДатаНачала
&Период.ДатаОкончания

Таким образом, параметр Период служит лишь удобной визуальной оболочкой, передающей начало дня в НачалоПериода и конец дня в КонецПериода.

Пошаговое решение: переопределение параметров в СКД

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

  1. Добавляем отчет в расширение: захватим стандартный отчет в расширение или откроем его основную схему компоновки данных.
  2. Открываем вкладку «Параметры»: найдем параметр Период (или СтандартныйПериод). Удалим его либо снимем признак включения в пользовательские настройки.
  3. Настраиваем параметры границ: найдем параметры НачалоПериода и КонецПериода. Снимем у них флаг в колонке Ограничение доступности, чтобы они стали видимы для пользователя.
  4. Очищаем выражения: удалим расчетные выражения у НачалоПериода и КонецПериода, ссылавшиеся на параметр &Период.
  5. Проверяем тип данных и состав дат: убедимся, что для обоих параметров выбран тип Дата, а в свойствах типа данных свойство Состав дат установлено в значение Дата и время. Если там будет стоять «Дата», форма сбросит или скроет введенное время.
  6. Проверяем формат редактирования: убедимся, что в колонках «Формат» и «Формат редактирования» нет масок, обрезающих время (например, ДЛФ=D). При необходимости зададим явный формат: ДФ='dd.MM.yyyy HH:mm:ss'.
  7. Включаем в пользовательские настройки: установим флажки включения параметров в пользовательские настройки, чтобы они сразу появились в шапке формы отчета.

Подводные камни типовых конфигураций

После изменения схемы компоновки данных результат не всегда применяется сразу. Разберем скрытые препятствия, которые могут возникнуть при работе с типовыми конфигурациями на БСП:

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

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

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

Альтернативный вариант: сохранение быстрого выбора периода

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

В этом случае в выражениях параметров НачалоПериода и КонецПериода СКД рассчитаем итоговые значения сложением даты и времени:


НачалоПериода: Дата(Год(&Период.ДатаНачала), Месяц(&Период.ДатаНачала), День(&Период.ДатаНачала), Час(&ВремяНачала), Минута(&ВремяНачала), Секунда(&ВремяНачала))
КонецПериода: Дата(Год(&Период.ДатаОкончания), Месяц(&Период.ДатаОкончания), День(&Период.ДатаОкончания), Час(&ВремяОкончания), Минута(&ВремяОкончания), Секунда(&ВремяОкончания))

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

← На главную