Часто от пользователей поступает запрос: сделать так, чтобы при открытии любого журнала или формы списка документов автоматически устанавливался период «с начала текущего года по текущую дату», чтобы не выставлять эти даты вручную каждый раз. Рассмотрим, существуют ли штатные возможности платформы для решения этой задачи и какие технические способы можно применить на практике.
Проанализируем платформенные ограничения 1С:Предприятие. В платформе отсутствует единая глобальная опция или переключатель, который позволял бы одной кнопкой установить начальный интервал периода для абсолютно всех журналов и списков документов в системе.
Поэтому решение задачи требует выбора одного из следующих подходов:
Разберем, как программно задать интервал дат при открытии формы. Код зависит от того, используются ли обычные или управляемые формы.
В обычных формах установка периода выполняется в обработчике события ПередОткрытием. Посмотрим на пример реализации:
НастройкаПериода = ЭлементыФормы.Список.СтандартныйПериод;
НастройкаПериода.УстановитьПериод(НачалоГода(ТекущаяДата()), ТекущаяДата());
В управляемых формах работа происходит с динамическим списком. Для установки ограничения периода при вызове события ПриСозданииНаСервере можно использовать программное управление элементами отбора динамического списка:
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоГода(ТекущаяДата());
ЭлементОтбора.Использование = Истина;
Выясним, как обойтись без изменения программного кода. Платформа 1С по умолчанию сохраняет пользовательские настройки динамических списков и журналов (включая установленный период и отборы) при закрытии формы и восстанавливает их при повторном открытии.
В конфигурациях на базе Библиотеки Стандартных Подсистем (БСП) предусмотрен удобный механизм тиражирования настроек:
Этот способ позволяет избежать внесения изменений в конфигурацию и сохраняет гибкость системы.
Если требуется принудительно внедрить алгоритм во все формы списков, разберем методы автоматизации этого процесса:
&После("ПриСозданииНаСервере") или &После("ПередОткрытием"), вызывая единую функцию из общего модуля. Это позволит не снимать основную конфигурацию с поддержки.Проанализируем технические риски принудительного ограничения периода с начала года для всех документов:
Неравномерная нагрузка на СУБД: В начале года (например, в январе) выборка данных работает быстро, так как объём документов за период минимален. К концу года (ноябрь-декабрь) количество записей за интервал существенно возрастает, что приводит к повышенной нагрузке на сервер и замедлению открытия форм.
Влияние на динамические списки: Динамические списки считывают данные из базы порциями. При наличии сложных произвольных запросов с соединениями наложение жесткого отбора по дате может негативно сказаться на плане выполнения запроса в СУБД.
Рекомендуется взвесить необходимость массовой установки периода и отдать предпочтение сохранению пользовательских настроек или применению расширений для конкретных критически важных журналов.