Как в 1С 7.7 открыть документ на нужной закладке через расшифровку ячейки таблицы?

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

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

Принцип работы механизма расшифровки с параметрами

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

  1. Заполнение ячейки таблицы: в свойство Расшифровка ячейки помещается не прямая ссылка на объект, а объект СписокЗначений, содержащий ссылку на документ, имя команды или номер нужной страницы.
  2. Перехват события клика: в отчете или глобальном модуле переопределяется предопределенная процедура ОбработкаЯчейкиТаблицы. В ней сбрасывается флаг стандартной обработки, считываются данные из списка значений и вызывается процедура ОткрытьФорму.
  3. Обработка параметров в документе: в модуле формы открываемого документа в предопределенной процедуре ПриОткрытии анализируется переданный контекст через Форма.Параметр и выполняется программное переключение слоя/закладки.

Шаг 1. Передача списка значений в расшифровку ячейки таблицы

Рассмотрим, как подготовить данные при выводе печатной формы. Вместо одиночного значения сформируем список параметров:


ПараметрыРасшифровки = СоздатьОбъект("СписокЗначений");
ПараметрыРасшифровки.Установить("Документ", ТекущийДокумент);
ПараметрыРасшифровки.Установить("ИмяЗакладки", "Спецификация");
ПараметрыРасшифровки.Установить("НомерЗакладки", 2);

// В коде вывода секции или в свойствах ячейки передаем сформированный список:
Таб.ВывестиСекцию("Строка");

В свойствах ячейки макета в поле Расшифровка указывается имя переменной, содержащей список значений (например, ПараметрыРасшифровки).

Шаг 2. Перехват расшифровки в процедуре ОбработкаЯчейкиТаблицы

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


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

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

Шаг 3. Обработка параметров и переключение закладок в форме документа

Выясним, как документ должен встретить переданные параметры. Откроем модуль формы документа и добавим логику в процедуру ПриОткрытии:


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

Возможные ошибки и особенности платформы 1С 7.7

Разберем типичные сложности, которые могут возникнуть при реализации данного механизма:

  1. Не вызывается ОбработкаЯчейкиТаблицы: если таблица открыта в режиме редактирования ячеек, то по двойному клику система входит в режим ввода текста, а не вызывает расшифровку. Чтобы процедура стабильно перехватывала клики, перед отображением таблицы обязательно используйте метод Таблица.ТолькоПросмотр(1);.
  2. Местоположение процедуры обработки: если отчет не имеет собственной экранной формы или печатная форма выводится напрямую, процедура ОбработкаЯчейкиТаблицы должна быть объявлена в Глобальном модуле с признаком Экспорт.
  3. Документы открываются сразу при формировании отчета: данная ошибка происходит, если вместо заполнения свойства расшифровки ячейки программист случайно размещает вызов функции открытия формы прямо в секции макета. Все интерактивные действия должны выполняться исключительно по событию клика внутри ОбработкаЯчейкиТаблицы.

Использование связки из объекта СписокЗначений, переопределения СтандартнаяОбработка = 0 и передачи параметров в ОткрытьФорму является универсальным решением в 1С 7.7 для любой сложной навигации из печатных форм в связанные объекты.

← На главную