При обслуживании нескольких однотипных информационных баз возникает необходимость автоматизировать процесс обновления. Использование режима конфигуратора вручную для каждой базы требует значительного времени. В платформе 1С:Предприятие предусмотрен запуск конфигуратора в пакетном режиме с помощью ключей командной строки. Однако при написании командных скриптов разработчики и администраторы часто сталкиваются с ситуацией, когда процедура завершается без смены версии или приводит к ошибкам.
Рассмотрим подробнее, как устроена работа с ключами пакетного обновления, в чем разница между загрузкой, объединением и обновлением конфигурации, а также разберем причины, по которым скрипт может не отрабатывать на отдельных базах.
Для автоматизации задач в пакетном режиме запускается исполняемый файл платформы в режиме CONFIG. Каждая операция требует использования конкретных ключей:
/LoadCfg) — полностью замещает основную конфигурацию файлом .cf. Этот ключ подходит для нетиповых конфигураций или баз, снятых с поддержки. Если база находится на поддержке с возможностью изменения, полная загрузка может потребовать дополнительных условий или предварительного снятия с поддержки./UpdateCfg) — штатный ключ для обновления типовых и находящихся на поддержке конфигураций. Принимает файлы поставок .cf или файлы обновлений .cfu. При его использовании платформа корректно отслеживает связи поставщика и версии./MergeCfg) — выполняет процедуру сравнения и объединения с файлом .cf. Важно учитывать, что ключ /MergeCfg при работе из командной строки требует передачи файла настроек объединения через параметр -Settings <путь_к_файлу.xml>, сформированного заранее в конфигураторе. Без данного файла автоматическое объединение не выполняется./UpdateDBCfg) — реструктурирует и обновляет конфигурацию базы данных (аналог нажатия клавиши F7 в конфигураторе). Применяется после любой из команд изменения конфигурации (/LoadCfg, /UpdateCfg или /MergeCfg).Проанализируем пример командного файла (bat-скрипта) для полной загрузки конфигурации из файла и последующего обновления базы данных:
echo off
"C:\Program Files (x86)\1cv8\8.3.23.1865\bin\1cv8.exe" CONFIG /F "Z:\1C\BAZA1\" /N "1CAdmin" /P "Pass123" /LoadCfg "Z:\arhiv_2017\abt.cf" /UpdateDBCfg
Посмотрим на особенности этого скрипта:
/N и /P)./F задает путь к файловой информационной базе (для серверных баз используется параметр /S)./LoadCfg указывает путь к полному файлу конфигурации .cf./UpdateDBCfg обновляет конфигурацию базы данных после успешной загрузки.Выясним, почему одинаковый скрипт может успешно отрабатывать на одной базе и завершаться без изменений или с ошибкой на другой.
1cestart.exe в автоматизированных сценариях может приводить к искажению передачи параметров командной строки или выбору не той версии платформы. Рекомендуется прописывать прямой путь к исполняемому файлу 1cv8.exe конкретного релиза./UpdateDBCfg требует полного отсутствия пользовательских сеансов и фоновых заданий. Если в базе присутствуют фоновые процессы, применение изменений конфигурации базы данных не выполняется.Чтобы точно определить причину, по которой командный файл не обновляет конкретную базу, добавим ключи ведения логов в скрипт:
"C:\Program Files (x86)\1cv8\8.3.23.1865\bin\1cv8.exe" CONFIG /F "Z:\1C\BAZA2\" /N "1CAdmin" /P "Pass123" /LoadCfg "Z:\arhiv_2017\abt.cf" /UpdateDBCfg /Out "Z:\logs\update_baza2.log" -NoTruncate /DumpResult "Z:\logs\result.xml"
Разберем параметры диагностирования подробнее:
/Out <путь_к_файлу> -NoTruncate — записывает все системные сообщения конфигуратора в текстовый файл без перезаписи предыдущего содержимого. Это позволяет проанализировать ошибку, остановившую процесс./DumpResult <путь_к_файлу> — выгружает результат выполнения операции в формате XML с цифровым кодом завершения.Таким образом, для успешной автоматизации обновлений необходимо чётко разграничивать использование ключа /UpdateCfg для баз на поддержке и ключа /LoadCfg для доработанных баз, указывать прямые пути к 1cv8.exe и обязательно подключать логирование для оперативной диагностики возможны сбоев.