Как изменить названия закладок отбора и перехватить их выбор в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке интерфейсов форм списков справочников и журналов в платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с задачей разбиения данных по вкладкам. Штатный метод ЗакладкиОтбора() позволяет быстро вывести закладки по значениям реквизита, однако на практике возникают ограничения: если реквизит числовой или строковый (например, со значениями "1", "2", "3"), закладки получают точно такие же имена, а предопределенная процедура ПриВыбореЗакладки() при клике на них не срабатывает. Разберем причины такого поведения платформы и рассмотрим правильные варианты решения этой задачи.

Выясним причину: разница между закладками отбора и закладками формы

Проанализируем, почему штатный механизм ЗакладкиОтбора() ведет себя подобным образом. В платформе 1С 7.7 реализовано два принципиально разных механизма работы со вкладками:

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

Способ 1. Замена ЗакладкиОтбора на закладки формы и УстановитьОтбор (рекомендуемый штатный способ)

Рассмотрим основной и самый надежный способ решения задачи. Откажемся от использования встроенного метода ЗакладкиОтбора() и построим логику на закладках формы с ручным управлением отбором через метод УстановитьОтбор().

Разберем по шагам реализацию этого механизма в модуле формы списка:

  1. В процедуре ПриОткрытии() включим отображение закладок формы и заполним список вкладок. Метод ДобавитьЗначение() принимает два параметра: само значение фильтра и строку с понятным пользователю представлением.
  2. Создадим процедуру ПриВыбореЗакладки(), в которой будем устанавливать фильтр по выбранному значению реквизита или сбрасывать его, если выбрана общая вкладка «Все».

Посмотрим на пример программного кода модуля формы:


Процедура ПриОткрытии()
    // Включаем использование пользовательских закладок формы
    Форма.ИспользоватьЗакладки(1);
    
    // Очищаем и наполняем коллекцию закладок произвольными заголовками
    Форма.Закладки.УдалитьВсе();
    Форма.Закладки.ДобавитьЗначение("", "Все элементы");
    Форма.Закладки.ДобавитьЗначение("1", "Закладка 1");
    Форма.Закладки.ДобавитьЗначение("2", "Закладка 2");
    Форма.Закладки.ДобавитьЗначение("3", "Закладка 3");
    
    // Позиционируемся на первой закладке по умолчанию
    Форма.Закладки.ТекущаяСтрока(1);
КонецПроцедуры

Процедура ПриВыбореЗакладки(Номер, Значение)
    // Проверяем, выбрано ли конкретное значение для отбора
    Если ПустоеЗначение(Значение) = 0 Тогда
        // Устанавливаем отбор по нужному реквизиту (реквизит должен быть отмечен для отбора в метаданных)
        УстановитьОтбор("ТипКарты", Значение);
    Иначе
        // Снимаем ранее установленный отбор
        СнятьОтбор();
    КонецЕсли;
КонецПроцедуры

Важный момент: для работы метода УстановитьОтбор() у реквизита справочника в конфигураторе обязательно должен быть установлен флаг «Отбор по реквизиту» (или признак сортировки/отбора).

Способ 2. Изменение типа реквизита на ссылочный (Справочник или Перечисление)

Рассмотрим альтернативную ситуацию: если в конфигурации принципиально важно сохранить работу именно системного метода ЗакладкиОтбора(), проанализируем тип данных самого реквизита отбора.

Когда реквизит имеет тип Число или Строка, системный метод выводит в заголовок «сырое» значение ("1", "2"). Если же перевести реквизит на тип Перечисление или ссылочный Справочник, платформа 1С 7.7 автоматически возьмет в качестве названий закладок синонимы значений перечисления или наименования элементов справочника. В этом случае строковые подписи станут человекопонятными без написания дополнительного кода, хотя само событие переключения по-прежнему останется системным.

Способ 3. Применение внешних компонент

В случаях, когда требуется не только сохранить системный метод ЗакладкиОтбора(), но и динамически менять текст системных вкладок операционной системы или перехватывать клики мыши по системным элементам управления (SysTabControl32), программисты применяют внешние компоненты (например, FormEx или 1C++). Они позволяют перехватывать низкоуровневые оконные события и модифицировать свойства визуальных контролов Windows напрямую, однако для подавляющего большинства прикладных задач наиболее простым и надежным остается Способ 1.

← На главную