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