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