В процессе разработки интерфейсов в системе 1С:Предприятие 8 часто возникает необходимость связать несколько инструментов воедино. Например, из формы настроек текущей обработки пользователю может понадобиться быстро перейти в другую специализированную обработку. Рассмотрим подробно, как реализовать такой функционал, начиная от визуального оформления и заканчивая программным кодом.
Самый простой и надежный способ — это создание команды формы, которая будет программно вызывать форму другого объекта. Проанализируем последовательность действий для реализации этой задачи.
Во-первых, перейдем в редактор формы нашей основной обработки и создадим новую Команду. Назовем ее, например, ОткрытьОбработкуНастройки. Затем перетащим эту команду на панель элементов формы, чтобы система автоматически создала Кнопку.
Во-вторых, в модуле формы для этой команды необходимо прописать процедуру обработчика. Разберем код, который позволит нам запустить форму другой обработки, включенной в состав конфигурации:
&НаКлиенте
Процедура ОткрытьОбработкуНастройки(Команда)
// Указываем полное имя формы целевой обработки
ИмяФормы = "Обработка.НастройкаРасчетов.Форма.Форма";
// Вызываем стандартный метод открытия
ОткрытьФорму(ИмяФормы);
КонецПроцедуры
Этот метод ОткрытьФорму является универсальным для управляемого приложения. Если у целевой обработки всего одна форма (основная), можно сократить путь до Обработка.ИмяОбработки.ФормаОбъекта.
Если по условиям задачи нам нужна именно «ссылка» (синий подчеркнутый текст), а не кнопка, мы воспользуемся элементом формы типа Декорация. Рассмотрим, как превратить обычную надпись в интерактивный элемент.
В созданном обработчике мы пропишем аналогичный код вызова формы. Проанализируем ситуацию, когда нам нужно не просто открыть форму, а передать в нее определенные параметры (например, организацию или текущую дату):
&НаКлиенте
Процедура ДекорацияОткрытьНастройкиНажатие(Элемент)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("РежимПросмотра", Истина);
ОткрытьФорму("Обработка.ДополнительныеИнструменты.Форма", ПараметрыФормы);
КонецПроцедуры
Иногда целевая обработка не включена в конфигурацию, а хранится на диске как файл. В этом случае просто указать имя через точку не получится. Выясним, как подключить внешний файл программно.
Для работы с внешними файлами нам потребуется сначала подключить их через менеджер ВнешниеОбработки. Это действие должно выполняться на стороне сервера. Посмотрим на пример реализации:
&НаСервере
Функция ПодключитьВнешнююОбработку(ПутьКФайлу)
// Подключаем внешнюю обработку и получаем ее имя в сеансе
ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь);
Возврат ИмяОбработки;
КонецФункции
&НаКлиенте
Процедура ОткрытьВнешнийФайл(Команда)
Путь = "C:\1C_Bases\Reports\MyTool.epf"; // Пример пути
ИмяОбъекта = ПодключитьВнешнююОбработку(Путь);
ПолноеИмяФормы = "ВнешняяОбработка." + ИмяОбъекта + ".Форма";
ОткрытьФорму(ПолноеИмяФормы);
КонецПроцедуры
Важно: При работе в клиент-серверном варианте путь к файлу должен быть доступен серверу 1С, либо файл должен быть предварительно помещен во временное хранилище.
Система 1С поддерживает механизм внутренних ссылок. Мы можем использовать метод ПерейтиПоСсылке. Это полезно, если ссылка на объект хранится в базе данных или получается динамически. Рассмотрим пример использования внутренней навигационной ссылки:
&НаКлиенте
Процедура НажатьНаНавигационнуюСсылку(Команда)
// Ссылка на конкретную обработку в приложении
СсылкаНаОбъект = "e1cib/app/Обработка.ЗагрузкаДанныхИзExcel";
ПерейтиПоСсылке(СсылкаНаОбъект);
КонецПроцедуры
Зачастую вместо открытия множества окон удобнее объединить функционал в рамках одной формы. Проанализируем совет из обсуждения: разместить на одной форме элемент Страницы (группа страниц).
В этом случае вместо перехода «в другую обработку» пользователь просто переключается между закладками «Главная», «Настройки», «Выполнение». Это сохраняет контекст данных (переменные, заполненные таблицы) и избавляет систему от лишних вызовов ОткрытьФорму. Для реализации этого подхода:
ТекущаяСтраница.При программном открытии форм часто возникает проблема дублирования: пользователь нажимает на ссылку пять раз и получает пять открытых окон одной и той же обработки. Чтобы этого избежать, используем КлючУникальности.
&НаКлиенте
Процедура ОткрытьЕдинственныйЭкземпляр(Команда)
// Указываем уникальный ключ (любая строка)
КлючУникальности = "МояУникальнаяОбработка123";
// Если форма с таким ключом уже открыта, система просто активирует ее
ОткрытьФорму("Обработка.ПомощникПродаж.Форма", , , КлючУникальности);
КонецПроцедуры
Мы проанализировали основные технические приемы создания переходов между обработками. Выбор конкретного метода зависит от того, является ли обработка частью конфигурации, должна ли она открываться в новом окне и требуется ли передача данных между ними.