Как убрать кнопку выпадающего списка стандартных дат в отчетах СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разбор программного решения

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

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


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
КонецПроцедуры

Теперь перейдем к самому процессу скрытия кнопки. Основная идея заключается в поиске элемента управления, соответствующего нашему параметру, и принудительном отключении свойства КнопкаВыпадающегоСписка.


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

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

Важные рекомендации и альтернативы

Разберем подробнее, на что стоит обратить внимание при внедрении данного решения:

  1. Безопасность идентификации элементов: Использование свойства Заголовок для поиска элемента управления — решение рабочее, но не всегда стабильное, так как заголовки могут меняться в зависимости от языка конфигурации или настроек СКД. Старайтесь привязываться к пути к данным или программно анализировать структуру ПользовательскиеНастройки.
  2. Работа с типами данных: Если параметр имеет тип СтандартныйПериод, платформа будет упорно пытаться добавить кнопку выбора. Если вам нужен только ввод конкретной даты, убедитесь, что в схеме компоновки данных для параметра установлен тип Дата (состав даты: Дата или Дата и время).
  3. Именование параметров: Избегайте использования имен Период, НачалоПериода, КонецПериода, если вы не хотите, чтобы БСП автоматически применяла к ним свои стандартные алгоритмы обработки. Иногда переименование параметра — самый простой способ «отключить» навязчивую автоматику.
  4. Обновление интерфейса: БСП пересоздает элементы формы динамически. Именно поэтому программное изменение свойств элемента в событии ПослеЗаполненияПанелиБыстрыхНастроек является единственным способом, который гарантированно срабатывает после того, как форма завершила свою инициализацию.

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

← На главную