В практике автоматизации задач на платформе 1С:Предприятие 8 часто возникает необходимость запуска информационной базы через командный файл (.bat или .cmd) с последующим выполнением специфических действий во внешней обработке. Одной из ключевых сложностей для разработчиков становится передача внешних данных (например, номера склада, пути к файлу или даты) внутрь этой обработки. Рассмотрим подробно, как реализовать этот механизм, используя штатные возможности платформы.
Для взаимодействия с внешней средой 1С предоставляет специальный ключ командной строки /C. Проанализируем структуру команды запуска. Когда мы запускаем исполняемый файл 1С, мы указываем параметры авторизации, путь к базе и ключ /Execute для запуска внешней обработки. Ключ /C позволяет передать произвольную строку, которая будет доступна внутри сеанса 1С через глобальную переменную ПараметрЗапуска.
Рассмотрим пример формирования строки в .bat файле:
"C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /F "D:\Bases\MyBase" /N "Admin" /P "Pass123" /Execute "D:\ExternalOps\MyProcessing.epf" /C "СкладОсновной"
В данном примере строка "СкладОсновной" передается в систему. Важно помнить, что всё, что указано после ключа /C, воспринимается платформой как единая текстовая строка.
После того как база запущена, нам необходимо «поймать» переданное значение внутри внешней обработки. Выясним причину, по которой у многих разработчиков это не получается с первого раза. Основная особенность заключается в том, что ПараметрЗапуска — это свойство глобального контекста, которое доступно только на клиенте (тонкий клиент, толстый клиент). Если вы попытаетесь обратиться к нему в серверном модуле или в процедуре ПриСозданииНаСервере, вы получите пустое значение или ошибку.
Рассмотрим правильный алгоритм действий в модуле формы внешней обработки. Нам необходимо использовать обработчик события ПриОткрытии:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Проверим, был ли передан параметр
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
// Присваиваем значение реквизиту формы
Объект.ИмяРеквизитаДляСклада = ПараметрЗапуска;
// Выполняем логику обработки
ВыполнитьДействиеНаСервере();
КонецЕсли;
КонецПроцедуры
Таким образом, мы транслируем данные из клиентского контекста (где доступен параметр) в реквизиты объекта или передаем их аргументами в серверные процедуры.
Часто одного строкового значения недостаточно. Что делать, если нужно передать сразу несколько параметров, например: код организации, дату и флаг очистки логов? Поскольку ключ /C принимает только одну строку, мы применим метод сериализации через разделители. Проанализируем ситуацию на примере.
В .bat файле мы можем указать параметры через точку с запятой:
/C "Орг001;20231231;Истина"
В коде 1С мы разберем эту строку, используя функцию СтрРазделить. Посмотрим на пример реализации:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
МассивПараметров = СтрРазделить(ПараметрЗапуска, ";");
Если МассивПараметров.Количество() >= 3 Тогда
КодОрганизации = МассивПараметров[0];
ДатаВыгрузки = МассивПараметров[1];
НужноОчистить = (МассивПараметров[2] = "Истина");
// Далее вызываем серверную логику с полученными данными
ОбработатьДанныеНаСервере(КодОрганизации, ДатаВыгрузки, НужноОчистить);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Рассмотрим подробнее технические ограничения и особенности, которые могут повлиять на результат:
ПараметрЗапуска инициализируется в момент старта клиентского приложения. Если вы запускаете обработку интерактивно (через Файл -> Открыть) в уже запущенном сеансе, ПараметрЗапуска будет содержать то, с чем была запущена сама 1С, а не новые данные.Пример автоматического закрытия после выполнения:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Выполняем полезную работу
Результат = ВыполнитьЗадачуНаСервере(ПараметрЗапуска);
// Завершаем работу системы без подтверждения пользователя
Если Результат Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
Если объем передаваемых данных очень велик (превышает лимит длины командной строки, который составляет около 8000 символов), передавать всё через ключ /C нецелесообразно. В этом случае мы рекомендуем передавать через /C только путь к файлу настроек (текстовому, JSON или XML).
Разберем этот подход:
params.json с нужными данными./C "C:\Temp\params.json".ПараметрЗапуска, открывает файл, считывает данные и продолжает работу.Это наиболее надежный метод для сложных интеграционных сценариев.
Подводя итог, использование ключа /C в связке с ПараметрЗапуска — это эффективный и простой способ интеграции 1С с внешними сценариями автоматизации. Главное — четко разделять клиентский и серверный контекст и следить за кодировкой передаваемых данных.