Как автоматизировать обновление базы данных 1С из командной строки и обойти диалоговые окна?

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

Обновление типовых конфигураций «1С:Предприятия 8», таких как «Бухгалтерия предприятия 3.0», при пропуске большого количества релизов превращается в рутинную и длительную задачу. Выполнять установку каждого .cfu файла через визуальный интерфейс конфигуратора, а затем вручную запускать режим «Предприятие» для выполнения обработок обновления данных — неэффективно. В данной статье мы разберем, как полностью автоматизировать этот процесс с помощью скриптов, командной строки и встроенных механизмов Библиотеки стандартных подсистем (БСП).

Основные этапы автоматизации обновления

Процесс обновления одного релиза состоит из трех ключевых шагов, которые должны выполняться последовательно в цикле:

  1. Обновление конфигурации: наложение файла обновления (.cfu) на основную конфигурацию в режиме Конфигуратора.
  2. Обновление конфигурации базы данных: принятие изменений (аналог клавиши F7).
  3. Обновление данных: запуск режима «Предприятие» для выполнения встроенных процедур обработки данных под новый релиз.

Рассмотрим стандартный пример бат-файла (.bat), который инициирует этот процесс:


set cfu_dir=C:\Users\user\AppData\Roaming\1C\1Cv82\tmplts\1c\Accounting
FOR /F %%R in (D:\1c\autoupdate\updatelist.txt) DO (
    "C:\Program Files\1cv8\8.3.x.xxxx\bin\1cv8.exe" CONFIG /F "C:\Path\To\Base" /UpdateCfg %cfu_dir%\%%R\1Cv8.cfu /UpdateDBCfg /Out upd%%R.log
    "C:\Program Files\1cv8\8.3.x.xxxx\bin\1cv8.exe" ENTERPRISE /F "C:\Path\To\Base" /C ЗапуститьОбновлениеИнформационнойБазы
)

Решение проблемы подтверждения легальности

Одной из главных преград при автоматизации является окно «Подтверждение легальности получения обновления». Оно блокирует выполнение скрипта, требуя интерактивного нажатия кнопки пользователем. Проанализируем способы обхода этого окна.

Способ 1: Использование параметра PFILE

Существует техническая хитрость, связанная с парсингом строки соединения. Если добавить в параметры запуска подстроку, содержащую FILE=, система в некоторых случаях может пропустить проверку. Рассмотрим пример строки запуска:

"C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F "C:\Base" /PFILE="" /C ВыполнитьОбновлениеИЗавершитьРаботу

Здесь параметр /PFILE="" имитирует наличие файла настроек, что иногда позволяет подавить лишние диалоги БСП.

Способ 2: Программное отключение проверки

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


Константы.ПропускатьПодтверждениеЛегальностиПолученияОбновлений.Установить(Истина);

После установки этого значения 1С перестанет задавать вопрос о легальности при каждом запуске в режиме «Предприятие».

Автоматическое завершение работы после обновления данных

После того как конфигурация обновлена, нам нужно, чтобы режим «Предприятие» выполнил процедуры обновления и самостоятельно закрылся, передав управление обратно бат-файлу для следующей итерации. Для этого в БСП предусмотрены специальные параметры запуска, передаваемые через ключ /C.

Разберем наиболее полезные команды:

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

Обработка отложенного обновления

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

Для корректной работы рекомендуется использовать внешнюю обработку, которая будет ожидать завершения всех фоновых заданий обновления. Запуск такой обработки осуществляется ключом /Execute <ПутьКФайлу>. Внутри обработки должен быть реализован цикл ожидания завершения заданий БСП:


Пока ОбновлениеИнформационнойБазы.ЕстьНезавершенныеОбработчикиОбновления() Цикл
    // Ожидание или вывод статуса
    ОбработкаПрерыванияПользователя();
КонецЦикла;
ЗавершитьРаботуСистемы(Ложь);

Поиск последнего релиза и использование PowerShell

Часто возникает вопрос: как не перечислять все папки с релизами в текстовом файле, а заставить скрипт автоматически брать самый свежий .cfu? Стандартные средства cmd.exe ограничены в этом плане, поэтому рассмотрим использование PowerShell. Выясним, как найти путь к последнему релизу в каталоге шаблонов:


$tmpltsPath = "C:\Users\Admin\AppData\Roaming\1C\1Cv8\tmplts\1c\Accounting"
$latestVersion = Get-ChildItem $tmpltsPath | Sort-Object Name -Descending | Select-Object -First 1
$cfuPath = Join-Path $latestVersion.FullName "1cv8.cfu"
# Далее запуск 1С с использованием $cfuPath

Такой подход позволяет динамически определять актуальный файл обновления, что значительно упрощает поддержку скрипта автоматизации.

Использование альтернативных инструментов

Если написание собственных скриптов кажется слишком трудоемким, существуют готовые решения, такие как «Обновлятор-1С». Разберем, почему он популярен среди администраторов:

Тем не менее, понимание работы ключей командной строки CONFIG и ENTERPRISE необходимо для диагностики проблем и создания собственных уникальных сценариев обслуживания баз данных, где сторонние утилиты могут быть неприменимы.

← На главную