Как выгрузить конфигурацию (cf-файл) из 1С без использования графического режима Конфигуратора?

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

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

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

Способ 1. Запуск Конфигуратора в фоновом (пакетном) режиме через командную строку

Если у вас есть административные права в операционной системе и доступ к исполняемым файлам платформы, наиболее простым и безопасным методом является использование штатного механизма командной строки. Этот способ запускает Конфигуратор в «невидимом» для пользователя режиме, выполняет выгрузку файла .cf и закрывает сессию.

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


// Определяем путь к исполняемому файлу платформы 1С
ПутьКПлатформе = "C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe";

// Формируем параметры запуска для выгрузки конфигурации
// /F - путь к файловой базе (или /S для клиент-серверного варианта)
// /N - имя администратора, /P - пароль
// /DumpCfg - команда выгрузки конфигурации в указанный файл
// /Out - файл лога, куда запишется результат выполнения
ИмяФайлаВыгрузки = "C:\temp\extracted_config.cf";
ФайлЛога = "C:\temp\log_dump.txt";

ПараметрыЗапуска = "DESIGNER /F""C:\Bases\Trade"" /N""Администратор"" /P""ПарольАдмина"" /DumpCfg """ + ИмяФайлаВыгрузки + """ /Out """ + ФайлЛога + """ /NoKeepConnection";

// Запускаем процесс в синхронном режиме (ожидаем завершения)
ЗапуститьПриложение(ПутьКПлатформе + " " + ПараметрыЗапуска, , Истина);

// Проверяем лог-файл на наличие ошибок
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ФайлЛога);
ТекстЛога = ТекстовыйДокумент.ПолучитьТекст();

Если Найти(ТекстЛога, "Конфигурация успешно выгружена") > 0 Тогда
    Сообщить("Выгрузка конфигурации завершена успешно!");
Иначе
    ВызватьИсключение "Ошибка при выгрузке конфигурации: " + ТекстЛога;
EndIf;

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

Недостатки метода: Требует монопольного (или квазимонопольного) запуска Конфигуратора. Если другой разработчик заблокировал конфигурацию (например, открыл окно редактирования метаданных монопольно), фоновый запуск завершится ошибкой, которая запишется в файл лога.

Способ 2. Прямое извлечение конфигурации из таблиц SQL (для клиент-серверных баз)

Рассмотрим более сложную, но максимально эффективную ситуацию. Что делать, если Конфигуратор заблокирован другими разработчиками, а вам необходимо выгрузить конфигурацию прямо сейчас, не мешая их работе? Более того, вам могут потребоваться изменения, которые программисты сохранили, но еще не применили к базе данных (не нажали клавишу F7).

В клиент-серверных базах (MS SQL Server, PostgreSQL) вся конфигурация хранится в виде бинарных данных непосредственно в таблицах СУБД. Проанализируем структуру хранения:

  1. Таблица Config — содержит текущую активную конфигурацию базы данных (которая работает у пользователей).
  2. Таблица ConfigSave — содержит сохраненную конфигурацию разработчика. Именно здесь лежат те самые «промежуточные» наработки подрядчиков, которые еще не были обновлены в основной конфигурации.

Данные конфигурации хранятся в сжатом формате по алгоритму deflate (zlib). Из-за ограничений СУБД на размер одной строки, файлы конфигурации разбиваются на части. В таблицах присутствует поле PartNo (номер части).

Чтобы вытащить конфигурацию без использования 1С, мы можем выполнить прямой запрос к СУБД, собрать части двоичных данных воедино, распаковать их и сохранить как файл .cf. Для этого можно использовать скрипты на PowerShell или Python. Рассмотрим пример концептуального SQL-запроса, который выбирает нужные данные для последующей склейки:


-- Запрос для получения частей сохраненной конфигурации (ConfigSave)
SELECT 
    [FileName],
    [PartNo],
    [BinaryData]
FROM 
    [ИмяВашейБазыДанных].[dbo].[ConfigSave]
WHERE 
    [FileName] = 'root' -- или другие служебные файлы конфигурации
ORDER BY 
    [FileName], 
    [PartNo];

Специализированные внешние обработки (например, доступные на профессиональных ИТ-ресурсах) автоматизируют этот процесс: они подключаются к SQL-серверу через ADODB-соединение, вычитывают бинарные данные из таблиц Config или ConfigSave, выполняют декомпрессию на лету средствами zip-библиотек и собирают полноценный файл .cf на диске.

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

Способ 3. Извлечение конфигурации из файловой базы данных (.1CD)

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

Для решения этой проблемы мы можем использовать следующие подходы:

  1. Использование механизма теневого копирования Windows (VSS): Мы можем создать теневую копию тома, на котором лежит файл базы данных, скопировать заблокированный файл 1Cv8.1CD из теневого тома в безопасное временное место и работать уже с копией.
  2. Использование утилиты Tool1CD (или аналогичных консольных решений): Специализированное ПО для низкоуровневого чтения файловых баз 1С позволяет открывать файлы баз данных напрямую в режиме чтения (даже при наличии активных блокировок). С помощью консольных команд этих утилит можно извлечь таблицу конфигурации одной командой. Пример консольного вызова сторонней утилиты:

# Концептуальный вызов утилиты чтения файловой базы для экспорта конфигурации
e8tools.exe export -d "C:\Bases\Trade\1Cv8.1CD" -o "C:\temp\extracted.cf" --config

Этот подход гарантирует получение актуального состояния конфигурации файловой базы без необходимости завершения работы пользователей и остановки бизнес-процессов компании.

Способ 4. Сериализация метаданных через программный интерфейс (XML)

Если у вас есть доступ только к Веб-клиенту или Тонкому клиенту через HTTP-соединение без прямого доступа к серверу или СУБД, получить бинарный .cf файл стандартными путями невозможно. Однако мы можем прибегнуть к методу программной генерации описания метаданных.

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


// Пример обхода справочников для выгрузки их структуры в текстовый файл
ФайлЭкспорта = Новый ЗаписьТекста("C:\temp\structure.xml", КодировкаТекста.UTF8);
ФайлЭкспорта.ЗаписатьСтроку("<MetadataStructure>");

Для Каждого Справочник Из Метаданные.Справочники Цикл
    ФайлЭкспорта.ЗаписатьСтроку("  <Catalog Name=""" + Справочник.Имя + """ Синоним=""" + Справочник.Синоним + """>");
    
    // Выгружаем реквизиты справочника
    Для Каждого Реквизит Из Справочник.Реквизиты Цикл
        ФайлЭкспорта.ЗаписатьСтроку("    <Attribute Name=""" + Реквизит.Имя + """ Type=""" + Строка(Реквизит.Тип) + """/>");
    КонецЦикла;
    
    ФайлЭкспорта.ЗаписатьСтроку("  </Catalog>");
КонецЦикла;

ФайлЭкспорта.ЗаписатьСтроку("</MetadataStructure>");
ФайлЭкспорта.Закрыть();

Полученный файл структуры не является полноценной конфигурацией .cf, однако он позволяет детально проанализировать состав объектов метаданных, типы их реквизитов и даже программный код модулей (если дополнительно использовать чтение текстов модулей объектов). Это отличное компромиссное решение для проведения экспресс-аудита кода подрядчиков в условиях жестких инфраструктурных ограничений.

Резюме

Мы рассмотрели четыре принципиально разных подхода к получению конфигурации из базы данных 1С. Выбор конкретного метода зависит от вашей текущей задачи:

← На главную