Как передать параметр из BAT-файла во внешнюю обработку 1С

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

При автоматизации рутинных задач в среде 1С:Предприятие часто возникает необходимость запускать внешнюю обработку через командную строку (BAT-файл) и передавать в неё определённые данные: идентификатор склада, дату, путь к файлу импорта или любую другую текстовую информацию. В этой статье мы подробно разберем, как реализовать этот механизм, настроить командную строку и правильно обработать полученные данные внутри 1С как для обычных, так и для управляемых форм.

Основы механизма передачи параметров через командную строку

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

Настройка BAT-файла для запуска 1С

Разберем пример типичного BAT-файла. Представим, что нам нужно запустить базу «Управление торговлей 10.3», открыть внешнюю обработку и передать в неё наименование склада для автоматического выбора. Аналогичным образом настраивается обработка для переноса данных между похожими конфигурациями 1С.

Проанализируем структуру скрипта:


chcp 1251
"C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\1C\TradeBase" /N "Администратор" /P "password" /Execute "C:\External\MyProcess.epf" /C "Основной склад"

Разберем, что означают эти ключи:

  1. chcp 1251 — устанавливает кодировку командной строки Windows-1251. Это критически важно для корректной передачи кириллических символов (русских букв) в 1С.
  2. ENTERPRISE — режим запуска «1С:Предприятие».
  3. /F — путь к файловой базе данных.
  4. /N и /P — имя пользователя и пароль.
  5. /Execute — путь к внешней обработке (.epf), которая должна открыться сразу после запуска.
  6. /C — тот самый ключ, после которого в кавычках указывается наш параметр.

Реализация обработки параметра в 1С (Обычные формы)

Теперь перейдем к коду внутри внешней обработки. В обычных формах (например, в УТ 10.3) основным местом для перехвата параметра является процедура ПриОткрытии в модуле формы обработки. Выясним, как программно найти нужный объект, используя переданную строку.

Рассмотрим пример кода:


Процедура ПриОткрытии()
    // Проверяем, не пустой ли параметр передан при запуске
    Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
        
        // Попробуем найти склад по наименованию, которое мы передали в ключе /C
        НайденныйСклад = Справочники.Склады.НайтиПоНаименованию(СокрЛП(ПараметрЗапуска));
        
        Если НЕ НайденныйСклад.Пустая() Тогда
            // Устанавливаем найденный склад в реквизит формы
            СкладДляЗагрузки = НайденныйСклад;
            Сообщить("Параметр успешно принят: " + ПараметрЗапуска);
        Иначе
            Сообщить("Склад с наименованием '" + ПараметрЗапуска + "' не найден!");
        КонецЕсли;
        
    КонецЕсли;
КонецПроцедуры

В данном примере мы используем глобальную переменную ПараметрЗапуска. Функция СокрЛП() помогает избавиться от лишних пробелов, которые могли случайно попасть из командной строки.

Особенности для управляемых форм (УТ 11, ERP, БП 3.0)

В управляемом приложении принцип работы сохраняется, однако код необходимо разделять на клиентскую и серверную части. Проанализируем ситуацию: свойство ПараметрЗапуска доступно и на клиенте, и на сервере, но поиск в справочниках возможен только на стороне сервера.

Рассмотрим реализацию для управляемой формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
        ОбработатьПараметрНаСервере(ПараметрЗапуска);
    КонецЕсли;
КонецПроцедуры

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

Передача нескольких параметров одновременно

Часто одного параметра недостаточно. Поскольку ключ /C принимает только одну строку, мы применим хитрость: склеим несколько значений через разделитель (например, через точку с запятой) в BAT-файле, а в 1С разберем эту строку обратно.

Пример BAT-файла с несколькими значениями:

/C "Основной склад;Закупка;01.01.2023"

Посмотрим, как разобрать такую строку в коде 1С. Для версий платформы 8.3.6 и выше мы можем использовать удобную функцию СтрРазделить():


МассивПараметров = СтрРазделить(ПараметрЗапуска, ";");
Если МассивПараметров.Количество() >= 3 Тогда
    ИмяСклада = МассивПараметров[0];
    ТипОперации = МассивПараметров[1];
    ДатаНачала = МассивПараметров[2];
КонецЕсли;

Если же вы работаете на старой платформе (8.2 или ранние 8.3), где функции СтрРазделить еще нет, проанализируем альтернативный способ через СтрЗаменить:


Текст = СтрЗаменить(ПараметрЗапуска, ";", Символы.ПС);
Для НомерСтроки = 1 По СтрЧислоСтрок(Текст) Цикл
    Значение = СтрПолучитьСтроку(Текст, НомерСтроки);
    // Обработка каждого значения
КонецЦикла;

Автоматизация завершения работы

Если ваша задача подразумевает выполнение обработки в фоновом режиме без участия пользователя, важно не только запустить процесс, но и корректно его завершить. Если этого не сделать, сеанс 1С останется висеть в памяти сервера или компьютера. В таких сценариях обслуживания также применяется программа для автоматического архивирования и обновления баз 1С.

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

ЗавершитьРаботуСистемы(Ложь);

Параметр Ложь указывает системе, что не нужно запрашивать у пользователя подтверждение выхода (вопрос "Вы действительно хотите выйти?").

Важные рекомендации и решение проблем

Рассмотрим наиболее частые ошибки при работе с параметрами запуска:

  1. Проблемы с пробелами: Если в пути к базе или в самом параметре есть пробелы, обязательно заключайте всю строку в двойные кавычки. Например: /C "Склад №1".
  2. Кодировка BAT-файла: Если 1С вместо русских букв видит «кракозябры», убедитесь, что сам файл .bat сохранен в кодировке ANSI (в блокноте при сохранении выберите кодировку ANSI/Windows-1251), а не в UTF-8.
  3. Права доступа: Пользователь, под которым запускается 1С в батнике, должен иметь права на запуск внешних обработок и доступ к соответствующим объектам метаданных. При автоматическом выполнении обменов также применяется инструмент для автоматической сверки проводок между базами 1С.
  4. Логирование ошибок: При автоматическом запуске пользователь не видит экран. Рекомендуется использовать конструкцию Попытка ... Исключение и записывать все ошибки в текстовый лог-файл, чтобы иметь возможность разобраться, почему скрипт не отработал.

Таким образом, мы проанализировали полный цикл передачи данных: от настройки кодировки в командной строке Windows до программной обработки строк в различных версиях платформы 1С. Использование ПараметрЗапуска в сочетании с разделителями строк является самым гибким и надежным способом интеграции 1С с внешними сценариями автоматизации.

← На главную