При интеграции 1С с внешними информационными системами или при автоматизации рутинных процессов часто возникает необходимость передать в программу определенные данные в момент ее запуска. Это может быть уникальный идентификатор задачи, путь к внешнему файлу импорта, специальный режим работы или любая другая управляющая команда. В этой статье мы подробно разберем, как передать параметр в 1С:Предприятие 8.3, как правильно принять и обработать его внутри системы, а также рассмотрим особенности работы с веб-клиентом. Для автоматизации наиболее трудоемких рутинных операций в закрытых системах применяется платформа для роботизации действий пользователя.
Для передачи параметра при обычном запуске платформы через исполняемый файл используется специальный ключ командной строки /C (обязательно в верхнем регистре латиницей). После этого ключа через пробел указывается текстовая строка, которую необходимо передать в систему.
Рассмотрим пример классической строки запуска из пакетного файла (BAT) или ярлыка Windows:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Base1C" /N "Администратор" /P "Пароль" /C "MyLaunchParameter"
В данном сценарии строка "MyLaunchParameter" будет успешно передана в сеанс и станет доступна для обработки в коде конфигурации.
В современных реалиях всё чаще используется веб-клиент 1С. Как справедливо заметили участники обсуждения на форуме, в старых версиях платформы (например, в линейке 8.2) функционал передачи параметров в веб-клиенте имел существенные ограничения. Однако в актуальных версиях платформы 1С v8.3 (Управляемые формы) веб-клиент полноценно поддерживает этот механизм.
Для передачи параметра в веб-клиенте мы должны добавить ключ C в строку URL-запроса базы данных. Ссылка для запуска будет выглядеть следующим образом:
https://mysite.ru/TradeBase/?C=MyLaunchParameter
Важное правило: Если передаваемый параметр содержит спецсимволы (пробелы, кавычки, кириллическое письмо, амперсанды или знаки вопроса), строку необходимо предварительно закодировать в формат URL-encoding. Например, пробел должен превратиться в %20, а кавычка — в %22. Платформа 1С при запуске веб-клиента автоматически декодирует полученную строку, и в коде мы увидим чистый исходный текст.
Для получения переданного значения в платформе предусмотрено свойство глобального контекста ПараметрЗапуска. Оно доступно только на клиенте в тонком, толстом и веб-клиенте (на сервере напрямую обратиться к нему нельзя, его нужно передавать в качестве аргумента серверных процедур).
Основным местом для перехвата и обработки параметра является Модуль управляемого приложения. Мы можем задействовать две ключевые предопределенные процедуры:
ПередНачаломРаботыСистемы — вызывается в самом начале запуска клиентского приложения до инициализации интерфейса. Этот обработчик идеален, если на основе параметра нужно выполнить какое-то фоновое действие (например, загрузить данные из файла) и сразу же завершить работу системы без показа окон пользователю. Для этого параметру Отказ присваивается значение Истина.ПриНачалеРаботыСистемы — вызывается, когда интерфейс программы уже загружен. Подходит для интерактивных действий, таких как открытие определенного документа, отчета или формы внешней обработки на основании переданного параметра.Проанализируем простейший шаблон обработки параметра в модуле управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
// Вызываем клиентский или серверный метод для обработки
ОбработатьВходнойПараметр(ПараметрЗапуска);
КонецЕсли;
КонецПроцедуры
Поскольку системное свойство ПараметрЗапуска представляет собой одну сплошную строку, передать несколько независимых настроек напрямую невозможно. Разберем два надежных сценария обхода этого ограничения, которые используют опытные разработчики.
Мы можем передать параметры, разделив их специальным символом (например, точкой с запятой или вертикальной чертой):
/C "Действие=Импорт;ПутьКФайлу=C:\temp\import.xml;РежимОтладки=Да"
В коде 1С мы преобразуем эту строку в структуру для удобного обращения. Посмотрим на пример кода функции разбора:
Функция РазобратьПараметрыЗапуска(Знач СтрокаПараметров) Экспорт
Результат = Новый Структура;
МассивПодстрок = СтрРазделить(СтрокаПараметров, ";");
Для Каждого СтрокаПараметра Из МассивПодстрок Цикл
ПозицияРавно = Найти(СтрокаПараметра, "=");
Если ПозицияРавно > 0 Тогда
Ключ = СокрЛП(Лев(СтрокаПараметра, ПозицияРавно - 1));
Значение = СокрЛП(Сред(СтрокаПараметра, ПозицияРавно + 1));
Результат.Вставить(Ключ, Значение);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Более надежный и современный способ для передачи сложных структур данных — использование формата JSON. В командной строке мы передаем валидный JSON (экранируя внутренние двойные кавычки путем их удваивания):
/C "{""Action"":""Import"",""FilePath"":""C:\\temp\\import.xml"",""Debug"":true}"
Внутри 1С мы можем десериализовать этот параметр буквально в несколько строк кода:
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ПараметрЗапуска);
СтруктураНастроек = ПрочитатьJSON(ЧтениеJSON);
// Теперь мы можем безопасно обращаться к свойствам структуры
Если СтруктураНастроек.Action = "Import" Тогда
ВыполнитьИмпортДанных(СтруктураНастроек.FilePath);
КонецЕсли;
Исключение
ЗаписатьЛогОшибок("Ошибка парсинга параметров запуска: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Для проверки работы кода не обязательно каждый раз запускать 1С через командный файл или вводить адрес в браузере. Разработчики могут легко имитировать передачу параметра непосредственно в среде разработки:
MyTestParam или нашу JSON-строку).ПараметрЗапуска.Если мы ведем разработку в современных типовых конфигурациях (таких как ERP, Управление торговлей, Бухгалтерия предприятия, Комплексная автоматизация), изменять напрямую модуль управляемого приложения категорически не рекомендуется во избежание проблем при последующих обновлениях системы. Вместо этого в Библиотеке стандартных подсистем (БСП) предусмотрены специальные механизмы перехвата событий.
Для безопасной обработки параметров запуска следует использовать общий модуль ОбщегоНазначенияКлиентПереопределяемый. В нем расположена предопределенная процедура ПриНачалеРаботыСистемы. Именно в нее следует внедрять доработки. Сама БСП уже имеет ряд встроенных параметров запуска, которые она автоматически распознает и обрабатывает (например, параметры для принудительного обновления ИБ или завершения работы пользователей), поэтому наша интеграция не нарушит стандартную логику платформы.