Как добавить вкладку на форму элемента справочника в 1С 7.7: пошаговое руководство по работе со слоями и закладками

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

При проектировании интерфейсов в платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с задачей размещения большого количества реквизитов на форме элемента справочника или документа. Попытка уместить все поля на одном экране делает форму перегруженной и неудобной для пользователя. В отличие от современных версий 1С (8.x), в «семерке» нет готового визуального элемента управления типа «Вкладка». Однако эту задачу можно легко решить с помощью штатного механизма, объединяющего закладки формы и визуальные слои. Разберем подробно, как это реализовать.

Шаг 1. Настройка слоев в визуальном редакторе (Конфигуратор)

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

Рассмотрим по шагам процесс создания и настройки слоев:

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

Теперь нам нужно привязать уже существующие или новые элементы диалога к созданным слоям. Для этого выполним следующие действия:

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

Шаг 2. Программная инициализация закладок в модуле формы

После того как элементы распределены по слоям, нам нужно заставить форму выводить закладки в нижней части окна и реагировать на их переключение пользователем. Для этого мы будем использовать встроенный объект формы Закладки, который по своей сути является стандартным объектом типа СписокЗначений.

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


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

Шаг 3. Управление видимостью слоев через ИспользоватьСлой()

Для переключения слоев используется метод контекста формы Форма.ИспользоватьСлой(). Выясним принцип работы этого метода. Его полный синтаксис выглядит следующим образом:

Форма.ИспользоватьСлой(<ИмяСлоя>, [<Режим>])

Параметр Режим крайне важен для оптимизации кода. Он может принимать следующие значения:

Именно режим 2 является значением по умолчанию. Его использование избавляет нас от необходимости писать громоздкие конструкции со скрытием каждого неактивного слоя по отдельности.

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


Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
    // ЗначениеЗакладки содержит имя слоя, которое мы привязали к закладке
    УстановкаВидимостиСлоев(НомерЗакладки);
КонецПроцедуры

Процедура УстановкаВидимостиСлоев(НомерЗакладки)
    // Получаем имя слоя из значения выбранной закладки
    ИмяАктивногоСлоя = Форма.Закладки.ПолучитьЗначение(НомерЗакладки);
    
    // Активируем выбранный слой, автоматически скрывая все остальные
    Форма.ИспользоватьСлой(ИмяАктивногоСлоя, 2);
КонецПроцедуры

Шаг 4. Элегантный прием: код обработчика в одну строку

Проанализируем структуру кода из предыдущего шага. Мы можем сделать решение еще более изящным и лаконичным. Это стандартный паттерн, который часто применяется в типовых конфигурациях 1С 7.7. Поскольку объект Форма.Закладки является списком значений, мы можем хранить имя слоя (или список слоев через запятую) в качестве Значения элемента списка, а понятный пользователю текст — в качестве Представления.

Давайте посмотрим на пример оптимизированного кода:


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

Процедура ПриВыбореЗакладки(Номер, Значение)
    // Включаем слой из значения выбранной закладки в режиме "2" (скрыть остальные)
    Форма.ИспользоватьСлой(Значение, 2);
КонецПроцедуры

Этот подход невероятно удобен: если нам понадобится привязать к одной вкладке отображение сразу нескольких слоев (например, Свойства и Характеристики), мы просто перечисляем их через запятую в первом параметре метода ДобавитьЗначение(). При этом код обработчика ПриВыбореЗакладки() вообще не требует изменений и умещается всего в одну строку!

Шаг 5. Динамическое управление вкладками во время работы пользователя

Иногда возникает необходимость скрывать или показывать вкладки динамически, в зависимости от заполнения тех или иных реквизитов формы. Например, если в карточке контрагента выбран тип «Юридическое лицо», нам нужна вкладка «Банковские реквизиты», а если выбран тип «Физическое лицо» — эту вкладку нужно скрыть.

Поскольку закладки — это динамический список значений, мы можем легко управлять им программно. Рассмотрим пример функции динамического обновления вкладок:


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

Шаг 6. Ограничения платформы 1С 7.7 и способы их обхода

Стандартный механизм работы с закладками в системе «1С:Предприятие 7.7» имеет один существенный архитектурный недостаток: вкладки всегда отображаются исключительно в самом низу формы. С точки зрения современного UX/UI-дизайна, это не всегда удобно, так как пользователи привыкли видеть вкладки в верхней части рабочих окон.

Для обхода этого ограничения разработчики используют два основных подхода:

  1. Использование внешних компонент (например, FormEx): Данная библиотека расширяет возможности работы с интерфейсом 1С 7.7. С её помощью можно программно перенести стандартные закладки в верхнюю часть формы, изменить их визуальный стиль, шрифт, настроить цвет активной закладки и добавить иконки. Это наиболее профессиональное решение, если конфигурация работает на локальных компьютерах и есть возможность регистрировать внешние компоненты.
  2. Создание «псевдозакладок» штатными средствами: Если использование внешних библиотек запрещено политикой безопасности компании, разработчики имитируют верхние вкладки. Для этого в верхней части формы (на общем статичном слое) создается ряд обычных кнопок или картинок, имитирующих переключатели. При нажатии на такую кнопку вызывается функция, которая меняет видимость слоев через Форма.ИспользоватьСлой() и визуально перерисовывает рамки кнопок, создавая у пользователя полную иллюзию работы с настоящими вкладками.

Сочетание визуального разделения элементов по слоям в Конфигураторе и лаконичного кода управления списком значений Форма.Закладки позволяет создавать удобные, многофункциональные и интуитивно понятные интерфейсы даже на классической платформе 1С 7.7.

← На главную