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