В процессе командной разработки или администрирования систем на платформе 1С:Предприятие часто возникает ситуация, когда стандартный доступ к Конфигуратору заблокирован. Например, в базе одновременно работают несколько разработчиков, выполняются длительные фоновые процессы, или у вас просто отсутствует возможность запустить интерактивную сессию Конфигуратора из-за ограничений прав доступа или инфраструктурных особенностей (работа через веб-клиент, удаленные серверы без GUI).
Особенно остро эта проблема встает, когда необходимо оперативно «вытащить» текущие наработки программистов (включая промежуточные, еще не примененные к базе данных изменения), не прерывая их работу и не заставляя всех пользователей покидать систему. В этой статье мы подробно разберем, как решить эту задачу различными способами: от штатного использования командной строки до низкоуровневого извлечения конфигурации напрямую из СУБД или файловой базы.
Если у вас есть административные права в операционной системе и доступ к исполняемым файлам платформы, наиболее простым и безопасным методом является использование штатного механизма командной строки. Этот способ запускает Конфигуратор в «невидимом» для пользователя режиме, выполняет выгрузку файла .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;
Преимущества метода: Полная легальность и безопасность для целостности базы данных. Платформа самостоятельно контролирует корректность выгружаемых метаданных.
Недостатки метода: Требует монопольного (или квазимонопольного) запуска Конфигуратора. Если другой разработчик заблокировал конфигурацию (например, открыл окно редактирования метаданных монопольно), фоновый запуск завершится ошибкой, которая запишется в файл лога.
Рассмотрим более сложную, но максимально эффективную ситуацию. Что делать, если Конфигуратор заблокирован другими разработчиками, а вам необходимо выгрузить конфигурацию прямо сейчас, не мешая их работе? Более того, вам могут потребоваться изменения, которые программисты сохранили, но еще не применили к базе данных (не нажали клавишу F7).
В клиент-серверных базах (MS SQL Server, PostgreSQL) вся конфигурация хранится в виде бинарных данных непосредственно в таблицах СУБД. Проанализируем структуру хранения:
Данные конфигурации хранятся в сжатом формате по алгоритму 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С. Вы можете забирать конфигурацию прямо в процессе активной работы программистов, не вызывая у них никаких прерываний сессий или зависаний интерфейса.
Если ваша информационная база развернута в файловом варианте, вы также можете столкнуться с проблемой занятости файла базы данных 1Cv8.1CD. В этом случае прямое копирование файла стандартными средствами операционной системы может быть заблокировано процессами пользователей.
Для решения этой проблемы мы можем использовать следующие подходы:
1Cv8.1CD из теневого тома в безопасное временное место и работать уже с копией.
# Концептуальный вызов утилиты чтения файловой базы для экспорта конфигурации
e8tools.exe export -d "C:\Bases\Trade\1Cv8.1CD" -o "C:\temp\extracted.cf" --config
Этот подход гарантирует получение актуального состояния конфигурации файловой базы без необходимости завершения работы пользователей и остановки бизнес-процессов компании.
Если у вас есть доступ только к Веб-клиенту или Тонкому клиенту через HTTP-соединение без прямого доступа к серверу или СУБД, получить бинарный .cf файл стандартными путями невозможно. Однако мы можем прибегнуть к методу программной генерации описания метаданных.
Мы можем написать внешнюю обработку, которая обходит дерево метаданных конфигурации и сериализует его структуру в XML-формат. Выясним, как выглядит базовый обход метаданных в коде 1С:
// Пример обхода справочников для выгрузки их структуры в текстовый файл
ФайлЭкспорта = Новый ЗаписьТекста("C:\temp\structure.xml", КодировкаТекста.UTF8);
ФайлЭкспорта.ЗаписатьСтроку("<MetadataStructure>");
Для Каждого Справочник Из Метаданные.Справочники Цикл
ФайлЭкспорта.ЗаписатьСтроку(" <Catalog Name=""" + Справочник.Имя + """ Синоним=""" + Справочник.Синоним + """>");
// Выгружаем реквизиты справочника
Для Каждого Реквизит Из Справочник.Реквизиты Цикл
ФайлЭкспорта.ЗаписатьСтроку(" <Attribute Name=""" + Реквизит.Имя + """ Type=""" + Строка(Реквизит.Тип) + """/>");
КонецЦикла;
ФайлЭкспорта.ЗаписатьСтроку(" </Catalog>");
КонецЦикла;
ФайлЭкспорта.ЗаписатьСтроку("</MetadataStructure>");
ФайлЭкспорта.Закрыть();
Полученный файл структуры не является полноценной конфигурацией .cf, однако он позволяет детально проанализировать состав объектов метаданных, типы их реквизитов и даже программный код модулей (если дополнительно использовать чтение текстов модулей объектов). Это отличное компромиссное решение для проведения экспресс-аудита кода подрядчиков в условиях жестких инфраструктурных ограничений.
Мы рассмотрели четыре принципиально разных подхода к получению конфигурации из базы данных 1С. Выбор конкретного метода зависит от вашей текущей задачи: