Формально так и есть, но, как говорится, есть один нюанс: такие параметры сначала надо сформировать и записать в той же 1С-базе, где будет открыта форма. Причем запись произойдет в момент интерактивного открытия пользователем окна с навигационными ссылками объекта. Либо в момент формирования ссылки методом ПолучитьНавигационнуюСсылку. И запись будет храниться вечно “в хранилище внешних данных навигационных ссылок”.
Т.е. открыть из внешней системы форму с произвольными параметрами в базе 1С можно, но это скорее про взаимоотношения двух людей, первый из которых ручками получил и отправил второму навигационную ссылку, а совсем не про программное формирование ссылки без участия 1С-базы, где должна открыться ссылка. Ну или надо городить какой-то COM/REST/HTTP сервис, который будет стучаться из внешней системы в нашу базу, чтобы записать параметры в хранилище и вернуть пользователю ссылку, чтобы он ее мог открыть. Такая себе канитель...
Так что имеем вот такое хитрое решение от вендора! И вроде бы формально задача решена, но практическая польза от такого решения… где то рядом.
Понятно, я бы не стал писать статью ради критики. В итоге решение найдено, респект и уважуха вендору, как всегда оставил скрытые пути для манёвра!
Но сначала опишу свою задачу, возможно, кого-то она наведет на свежую мысль. Задача упрощенно звучит так: есть две базы ERP и MDM, связанные между собой шиной данных, так что НСИ в них синохронизированы по GUID. Пользователи формируют заявки на изменение НСИ в MDM. Но им удобнее это делать сидя в ERP - заходя в список соответствующей НСИ и нажимая кнопку “Создать заявку на изменение”. В этот момент открывается окно MDM, где открывается форма новой заявки со ссылкой на изменяемую НСИ - и всё, очевидный профит! Понятно, что это костыльная замена полноценной безшовки, но в безшовку еще надо вложить тучу времени, чтобы она заработала как полноценный интерфейс, а тут быстро, модно, молодежно. (да я в курсе, что в 1С “MDM” есть расширение с безшовной интеграцией, и обязательно воспользуемся, как только её доведут до ума).
Собственно, решение крутится вокруг этого фрагмента из СП:
Вариант синтаксиса: Ссылка для команд
Синтаксис:
ПолучитьНавигационнуюСсылку(<Команда>, <Параметр>, <ПредставлениеНавигационнойСсылки>, <ВнешниеДанныеНавигационнойСсылки>)
Параметры:
<Команда> (обязательный)
Тип: ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: Команда.
Содержит команду, для которой получается навигационная ссылка.
<Параметр> (необязательный)
Тип: Произвольный.
Содержит значение параметра, который нужно передать команде.
<ПредставлениеНавигационнойСсылки> (необязательный)
Тип: Строка.
<ВнешниеДанныеНавигационнойСсылки> (необязательный)
Тип: Структура.
Давайте создадим общую команду с такими свойствами (см скриншот):
- Группа: Панель навигации формы.Важное (тут подойдёт любая панель, имеющая отношение к форме)
- Тип параметра команды: пусто (если ничего не указывать, то команда будет принимать параметр с любым типом ссылок, как раз то что нам нужно! При этом команда нигде не будет маячить в интерфейсе, иначе замучаетесь ее скрывать)
- Режим использования параметра: Множественный (значить можно передавать в параметр массив ссылок, причем разных типов)
Теперь в этой базе попробуйте открыть навигационную ссылку такого типа:
e1c://server/srv01/MDM#e1cib/command/ОбщаяКоманда.ОткрытьЗаявкуПоНавигационнойСсылке?cmdprm=СправочникСсылка.нсиВидыЗаявок:93304ec188f4a2a44b1c9e2000539bd2,ПеречислениеСсылка.нсиВидыОперацийОбработкиДанных:af8e5a0def0bab9845eb3e1deba45be4,СправочникСсылка.нсиКонтрагенты:80eb005056b2b26011eb8889997c536d
Понятно, что имя сервера и базы, имена справочников/перечислений, ссылки, все это должно быть взято из вашего собственного примера.
Теперь поставим отладчик в модуле обработки команды и увидим, что в ПараметрКоманды передан массив из трех ссылок, которые перечислены после параметра “?cmdprm=”
При этом сама ссылка должна быть указана во внутреннем “перевернутом” формате GUIDа (в коде дана функция преобразования GUIDToUUID).
Теперь, имея на руках ссылки, можем не сдерживая свою фантазию открывать формы с любыми параметрами. Единственное о чем надо помнить - в параметр команды можно передавать именно ссылки, а не все подряд типы данных. Но это уже вопрос творческой доводки, суть идеи, полагаю, раскрыта.
//Код на стороне вызывающей системы
&НаКлиенте
Процедура НажатиеКнопкиВоВнешнейСистеме(Ссылка, ПараметрыВыполнения) Экспорт
НавигационнаяСсылка = "e1c://server/srv01/MDM#e1cib/command/ОбщаяКоманда.ОткрытьЗаявкуПоНавигационнойСсылке?cmdprm=";
ВидЗаявки = "СправочникСсылка.нсиВидыЗаявок:93304ec188f4a2a44b1c9e2000539bd2";
ВидОперацииИзменение = ",ПеречислениеСсылка.нсиВидыОперацийОбработкиДанных:af8e5a0def0bab9845eb3e1deba45be4";
UUID = GUIDToUUID(Строка(Ссылка.УникальныйИдентификатор()));
Контрагент = ",СправочникСсылка.нсиКонтрагенты:" + UUID;
НавигационнаяСсылка = НавигационнаяСсылка + ВидЗаявки + ВидОперацииИзменение + Контрагент;
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка);
КонецПроцедуры
&НаКлиенте
Функция GUIDToUUID(GUID) Экспорт
Возврат Сред(GUID, 20, 4) + Прав(GUID, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Лев(GUID, 8);
КонецФункции
//код на стороне принимающей системы
//Модуль общей команды "ОткрытьЗаявкуПоНавигационнойСсылке"
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Количество() Тогда
ВидЗаявки = ПараметрКоманды[0];
ВидОперации = ПараметрКоманды[1];
Контрагент = ПараметрКоманды[2];
Параметры = Новый Структура;
Параметры.Вставить("ВидЗаявки", ВидЗаявки);
Параметры.Вставить("ВидОперации", ВидОперации);
Параметры.Вставить("Контрагент", Контрагент);
ОткрытьФорму("БизнесПроцесс.нсиЗаявкаНаИзменение.ФормаОбъекта", Параметры);
КонецЕсли;
КонецПроцедуры