Можно ли открыть определенную закладку справочника через ОткрытьФорму() в 1С 7.7?

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

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

Способ 1. Управление слоями и закладками через контекст открытой формы

Разберем вариант, когда переключение нужного слоя и визуальной закладки выполняется непосредственно из вызывающего кода. При вызове ОткрытьФорму() во второй параметр передается переменная (например, Парам), которая после выполнения функции содержит контекст открытой формы.

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

Посмотрим на пример кода:


// Объявляем переменную для получения контекста формы
Перем Парам;

// Открываем форму элемента справочника
ОткрытьФорму(Номенклатура, Парам, 0); 

// Указываем состав видимых слоев для формы (номер режима 2)
Парам.Форма.ИспользоватьСлой("Общий, ТМЦ2, Дополнительный, Кнопки", 2);

// Переключаем активную плашку закладок на вторую позицию
Парам.Форма.Закладки.ТекущаяСтрока(2);

В данном примере метод ИспользоватьСлой() принимает список отображаемых слоев и режим их установки, а Закладки.ТекущаяСтрока() видоизменяет внешний вид элемента закладок, активируя нужную вкладку по ее номеру.

Способ 2. Передача параметра и обработка внутри открываемой формы

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

Если необходимо передать несколько настроек, во второй параметр функции ОткрытьФорму() передают объект СписокЗначений.

Код в вызывающем модуле:


Парам = СоздатьОбъект("СписокЗначений");
Парам.Установить("НужнаяЗакладка", "Дополнительно");
ОткрытьФорму(ЭлементСправочника, Парам);

Код в модуле открываемой формы (в процедуре ПриОткрытии):


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

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

Важная техническая информация и нюансы платформы 1С 7.7

Выясним несколько критически важных моментов, о которых стоит помнить при работе с формами и слоями:

  1. Повторное открытие формы: Если окно справочника уже открыто на экране у пользователя, платформа 1С 7.7 при вызове ОткрытьФорму() не выполняет процедуру ПриОткрытии(). Вместо этого вызывается событие ПриПовторномОткрытии(). Чтобы переключение закладки срабатывало всегда, обработку Форма.Параметр следует дублировать и в процедуре ПриПовторномОткрытии().
  2. Фокусировка на элементах: Программное переключение слоя делает видимыми нужные реквизиты, но не переносит автоматически курсор ввода. Для установки фокуса на конкретное поле используйте метод Активизировать("ИдентификаторРеквизита").
  3. Сброс параметра: Рекомендуется обнулять Форма.Параметр после считывания переданных значений, чтобы предотвратить коллизии при последующих действиях с открытым окном.
← На главную