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