Как передать собственные параметры через параметр /URL команды 1cestart?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При построении систем интеграции часто возникает задача не просто запустить 1С, а передать в уже открытое окно программы определенные данные. Стандартный механизм запуска через 1cestart.exe с использованием ключа /C отлично работает для инициализации нового сеанса, но оказывается бесполезным, если база уже открыта. В этом случае операционная система просто переключает фокус на активное окно, и ПараметрЗапуска внутри приложения не обновляется. Рассмотрим, как решить эту задачу с помощью параметра /URL и современных возможностей платформы 1С:Предприятие.

Почему стандартный ключ /C не подходит для активного сеанса

Проанализируем механизм работы платформы. Когда мы вызываем команду запуска 1С с ключом /C, данные попадают в глобальную переменную ПараметрЗапуска. Однако инициализация этого параметра происходит строго в момент старта сеанса (событие ПриНачалеРаботыСистемы). Если сеанс уже запущен, повторный вызов 1cestart.exe с тем же ключом не приведет к изменению значения ПараметрЗапуска в активном приложении. Система увидит, что процесс уже запущен, и просто проигнорирует новые данные командной строки.

Использование параметра /URL (навигационной ссылки) работает иначе. При его передаче платформа пытается выполнить "переход" внутри уже существующего окна. Именно эту особенность мы будем использовать для передачи наших данных.

Решение для платформы версии 8.3.19 и выше

Начиная с версии платформы 8.3.19, разработчики получили официальную возможность добавлять произвольные параметры в навигационные ссылки. Теперь ссылка может выглядеть так: e1cib/app/Обработка.МояОбработка?MyParam=12345. Выясним, как правильно обработать такую ссылку внутри конфигурации.

Для перехвата ссылки нам понадобится обработчик события ОбработкаПереходаПоНавигационнойСсылке, который располагается в Модуле управляемого приложения. Разберем реализацию по шагам:

  1. Откроем модуль управляемого приложения.
  2. Создадим процедуру-обработчик.
  3. Реализуем логику парсинга входящей строки.

Рассмотрим пример кода для обработки параметров:


Процедура ОбработкаПереходаПоНавигационнойСсылке(Ссылка, СтандартнаяОбработка)
    
    // Проверим, содержит ли ссылка наш специфический параметр
    Если Найти(Ссылка, "MyParam=") > 0 Тогда
        
        // Отключаем стандартный механизм, чтобы 1С не выдала ошибку "Неверная ссылка"
        СтандартнаяОбработка = Ложь;
        
        // Извлекаем параметры из строки
        ПозицияВопроса = Найти(Ссылка, "?");
        СтрокаПараметров = Сред(Ссылка, ПозицияВопроса + 1);
        
        МассивПараметров = СтрРазделить(СтрокаПараметров, "&");
        Для Каждого ТекПараметр Из МассивПараметров Цикл
            Части = СтрРазделить(ТекПараметр, "=");
            Если Части.Количество() = 2 Тогда
                Ключ = Части[0];
                Значение = Части[1];
                
                // Здесь мы можем вызвать нужную нам функцию или открыть форму
                Если Ключ = "MyParam" Тогда
                    Сообщить("Получен параметр через URL: " + Значение);
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

Важный момент: установка значения СтандартнаяОбработка = Ложь критически важна. Если этого не сделать, платформа попытается интерпретировать вашу ссылку с произвольными параметрами как стандартный путь к объекту метаданных, что приведет к ошибке "Неверно задана навигационная ссылка".

Решение для старых версий платформы (ниже 8.3.19)

Если вы работаете на более ранних релизах, где произвольные параметры в /URL вызывают ошибку еще до попадания в код, придется использовать обходные пути. Рассмотрим наиболее надежный метод — использование Регистра Сведений как "почтового ящика".

Схема взаимодействия выглядит следующим образом:

  1. Внешнее приложение (или скрипт) записывает данные в файл или напрямую в базу данных (если есть доступ через COM/ODBC) в специально созданный регистр сведений.
  2. Записи присваивается уникальный идентификатор (GUID) или простой ключ.
  3. Вызывается команда запуска: 1cestart.exe /URL "e1cib/data/РегистрСведений.ОбменДанными?Ключ=НашИдентификатор".
  4. В 1С открывается форма записи этого регистра. В коде формы (в событии ПриСозданииНаСервере) мы считываем данные, выполняем нужную обработку и программно закрываем форму.

Посмотрим, как это выглядит в коде формы регистра:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Ключ.Пустая() Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем данные, которые были подготовлены заранее
    ДанныеДляОбработки = РегистрыСведений.ОбменДанными.СоздатьМенеджерЗаписи();
    ДанныеДляОбработки.Ключ = Параметры.Ключ.Ключ;
    ДанныеДляОбработки.Прочитать();
    
    Если ДанныеДляОбработки.Выбран() Тогда
        // Выполняем полезное действие
        ОбработатьПолученнуюИнформацию(ДанныеДляОбработки.ЗначениеПараметра);
        
        // Удаляем запись, чтобы не засорять базу
        ДанныеДляОбработки.Удалить();
    КонецЕсли;
    
    // Отменяем открытие формы, так как она нам была нужна только как транспорт
    Отказ = Истина; 
    
КонецПроцедуры

Ограничения и нюансы использования /URL

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

1. Длина командной строки. В операционных системах Windows существует ограничение на длину строки запуска. Если вы попытаетесь передать через URL огромный объем данных (например, большой JSON), ссылка может быть обрезана. В таких ситуациях правильно передавать только короткий идентификатор, по которому 1С сама заберет данные из внешнего источника.

2. Кодировка символов. Все спецсимволы, кириллица и пробелы в навигационной ссылке должны быть закодированы в формате URL-encode (например, пробел заменяется на %20). Платформа 1С может некорректно воспринять "сырые" данные в строке /URL.

3. Безопасность. Помните, что данные в навигационной ссылке видны в списке процессов ОС. Никогда не передавайте пароли или чувствительную информацию открытым текстом через параметры URL.

Выясним также вопрос с Веб-клиентом. Если ваша база опубликована на веб-сервере, вы можете добавлять параметры прямо в адресную строку браузера после символа &. В этом случае они будут доступны через свойство ПараметрЗапуска, но только при условии, что это предусмотрено в настройках файла публикации default.vrd. Однако для Тонкого и Толстого клиентов через 1cestart.exe этот механизм не является идентичным, и описанный выше метод с событием ОбработкаПереходаПоНавигационнойСсылке остается самым универсальным.

Таким образом, мы проанализировали способы передачи параметров в активный сеанс 1С. Для современных систем лучшим выбором будет использование расширенных навигационных ссылок версии 8.3.19+, а для поддержки старых систем — использование транзитных объектов метаданных или временных файлов.

← На главную