Как программно создать новую файловую базу 1С для работы с хранилищем конфигурации?

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

В процессе автоматизации задач CI/CD, регулярных сборок или создания вспомогательных внешних обработок разработчики часто сталкиваются с необходимостью выгрузить последнюю версию конфигурации из хранилища в виде файла .cf. Платформа 1С:Предприятие не предоставляет отдельной автономной утилиты для прямого обращения к хранилищу: выгрузка файла конфигурации возможна только через запуск Конфигуратора в пакетном режиме, для которого в обязательном порядке требуется указать существующую информационную базу.

Заводить для таких задач постоянную базу данных вручную через диалог запуска неудобно, а хранить чистый шаблон файла 1Cv8.1CD в макете двоичных данных не всегда практично из-за привязки к конкретной версии формата и раздувания размера внешней обработки. Разберем, как решить эту задачу чисто и надежно с помощью стандартных механизмов платформы.

Особенности архитектуры платформы при работе с хранилищем

Проанализируем ключевые моменты взаимодействия с хранилищем конфигурации через командную строку:

  1. Необходимость контекста базы: Команда пакетного режима DESIGNER требует указания параметра подключения к базе (файлового ключа /F или клиент-серверного /S). Без этого Конфигуратор не запустится.
  2. Отсутствие требований к конфигурации базы: Информационная база, через которую мы обращаемся к хранилищу, вовсе не обязана быть к нему подключена. Она может быть абсолютно пустой: Конфигуратор временно подключится к хранилищу по переданным учетным данным и выполнит выгрузку в файл.
  3. Изоляция от списка баз: Чтобы не засорять список информационных баз пользователя (файл ibases.v8i), временную базу можно создать на диске в «скрытом» режиме, не регистрируя ее в общем перечне.

Создание пустой базы через команду CREATEINFOBASE

Для создания новой информационной базы платформа предоставляет специальный режим запуска — параметр CREATEINFOBASE. Разберем синтаксис этой команды для командной строки:


"C:\Program Files\1cv8\8.3.24.1667\bin\1cv8.exe" CREATEINFOBASE File="C:\Temp\TempIB"; /Out "C:\Temp\create.log"

Рассмотрим подробнее используемые параметры:

  1. CREATEINFOBASE — служебный режим запуска исполняемого файла 1cv8.exe, инициирующий генерацию новой базы.
  2. File="C:\Temp\TempIB"; — строка соединения с базой. Каталог должен быть предварительно создан и быть пустым (в нем не должно находиться файла 1Cv8.1CD).
  3. Параметр /AddInList: Если мы опускаем ключ /AddInList, платформа создает базу исключительно в файловой системе, не добавляя строку о ней в окно запуска 1С. Это именно то поведение, которое необходимо для временной служебной базы.
  4. /Out — перенаправление вывода информационных сообщений и ошибок процесса в текстовый лог-файл, что критически важно для фоновых сценариев.

Выгрузка конфигурации из хранилища в файл (.cf)

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


"C:\Program Files\1cv8\8.3.24.1667\bin\1cv8.exe" DESIGNER /F "C:\Temp\TempIB" /DisableStartupMessages /ConfigurationRepositoryF "tcp://server/repo" /ConfigurationRepositoryN "User" /ConfigurationRepositoryP "Password" /ConfigurationRepositoryDumpCfg "C:\Temp\dump.cf" -v -1 /Out "C:\Temp\dump.log" /DumpResult "C:\Temp\result.txt"

Выясним назначение ключевых параметров выгрузки:

  1. /ConfigurationRepositoryF — путь к хранилищу конфигурации. Это может быть сетевой каталог или адрес службы сервера хранилища конфигурации (по протоколу TCP или HTTP).
  2. /ConfigurationRepositoryN и /ConfigurationRepositoryP — учетная запись и пароль пользователя хранилища. У пользователя должны быть права на чтение конфигурации.
  3. /ConfigurationRepositoryDumpCfg — прямое указание пути, куда требуется сохранить результирующий файл .cf. Дополнительный ключ -v -1 явно указывает Конфигуратору выгрузить самую последнюю (актуальную) версию хранилища.
  4. /DisableStartupMessages — подавляет отображение модальных окон при старте, чтобы выполнение сценария не зависло в неинтерактивном режиме.
  5. /DumpResult — указывает путь к файлу, в который платформа запишет код завершения операции (0 — успешно, иное число — ошибка).

Реализация сценария во встроенном языке 1С

Объединим все шаги в единый алгоритм, который можно встроить в кнопку внешней обработки или регламентное задание. Для синхронного запуска внешних процессов платформы используем функцию ЗапуститьПриложение:


// Определим пути и параметры
ПутьКПлатформе = """" + КаталогПрограммы() + "1cv8.exe""";
КаталогВременнойБазы = ПолучитьИмяВременногоФайла();
СоздатьКаталог(КаталогВременнойБазы);

ФайлКонфигурации = "C:\Deploy\LatestConfiguration.cf";
АдресХранилища = "tcp://storage-server/repo_main";
ИмяПользователя = "DevBot";
ПарольПользователя = "StrongPassword123";

КодВозврата = 0;

// Шаг 1. Создание пустой файловой базы
СтрокаСоздания = СтрШаблон("%1 CREATEINFOBASE File=""%2"";", ПутьКПлатформе, КаталогВременнойБазы);
ЗапуститьПриложение(СтрокаСоздания, , Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
    ВызватьИсключение СтрШаблон("Не удалось создать временную базу. Код ошибки: %1", КодВозврата);
КонецЕсли;

// Шаг 2. Выгрузка последней версии из хранилища
СтрокаВыгрузки = СтрШаблон(
    "%1 DESIGNER /F ""%2"" /DisableStartupMessages /ConfigurationRepositoryF ""%3"" /ConfigurationRepositoryN ""%4"" /ConfigurationRepositoryP ""%5"" /ConfigurationRepositoryDumpCfg ""%6"" -v -1",
    ПутьКПлатформе,
    КаталогВременнойБазы,
    АдресХранилища,
    ИмяПользователя,
    ПарольПользователя,
    ФайлКонфигурации
);

ЗапуститьПриложение(СтрокаВыгрузки, , Истина, КодВозврата);

// Шаг 3. Удаление временной базы
УдалитьФайлы(КаталогВременнойБазы);

Если КодВозврата = 0 Тогда
    Сообщить("Выгрузка конфигурации из хранилища успешно завершена.");
Иначе
    ВызватьИсключение СтрШаблон("Ошибка при выгрузке конфигурации из хранилища. Код ошибки: %1", КодВозврата);
КонецЕсли;

Посмотрим на важные нюансы работы этого кода:

  1. Использование ПолучитьИмяВременногоФайла() гарантирует уникальность пути во временной директории ОС, что исключает конфликты при параллельном запуске нескольких экземпляров скрипта.
  2. Третий параметр метода ЗапуститьПриложение установлен в Истина: процедура ожидает фактического завершения создания базы и выгрузки файлов перед переходом к следующей строке.
  3. Очистка временных файлов выполняется сразу после отработки пакетного режима, благодаря чему на жестком диске не скапливаются «одноразовые» базы данных.
← На главную