Как программно выгрузить информационную базу 1С в файл dt

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

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

Особенности и системные ограничения выгрузки базы в dt

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

Проанализируем ключевые моменты, которые необходимо учитывать при настройке автоматической выгрузки:

  1. Монопольный доступ к базе данных: параметр выгрузки требует монопольной блокировки информационной базы. Если в момент запуска процесса в системе работают активные сеансы пользователей, пакетный режим завершится с ошибкой блокировки.
  2. Ограничения серверного контекста: фоновые и регламентные задания всегда исполняются на стороне сервера. Запуск внешнего процесса с помощью команды ЗапуститьПриложение() на сервере возможен только в том случае, если отключен безопасный режим (БезопасныйРежим = Ложь). В противном случае платформа заблокирует запуск исполняемого файла операционной системы.
  3. Права системной службы: сервер 1С:Предприятия запускается от имени специальной системной учетной записи (например, USR1CV8). Эта учетная запись должна обладать полными правами на чтение и запись как в каталог назначения, так и к каталогу исполняемых файлов платформы 1cv8.exe или ibcmd.exe. При указании сетевых папок (UNC-путей) локальная служба сервера может не иметь к ним доступа.
  4. Событие запуска: регламентные задания запускаются по расписанию, а не по событию входа пользователя. Если выгрузку необходимо выполнять строго при первом входе, логику проверки следует разместить в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы(), проверяя дату последней копии в константе или регистре сведений, и уже оттуда программно вызывать фоновое задание через ФоновыеЗадания.Выполнить().

Способ 1. Использование пакетного режима Конфигуратора

Основной и самый распространенный метод — запуск Конфигуратора в пакетном режиме с ключом /DumpIB. Для реализации сформируем командную строку с необходимыми параметрами запуска и вызовем ее через функцию ЗапуститьПриложение().

Рассмотрим структуру ключевых параметров командной строки:

  1. DESIGNER: указывает на запуск платформы в режиме Конфигуратора.
  2. /IBConnectionString: передает строку подключения к информационной базе. Для файловой базы можно также использовать параметр /F, а для клиент-серверной — /S.
  3. /N и /P: логин и пароль пользователя с административными правами.
  4. /DumpIB <ИмяФайла>: задает полный путь к результирующему файлу .dt.
  5. /Out <ИмяФайла> -NoTruncate: записывает протокол выполнения операций в текстовый лог, что позволяет программно анализировать ошибки.
  6. /UC <КодРазрешения>: передает код блокировки установки соединений, если на базу предварительно был наложен запрет входа пользователей.

Посмотрим на пример процедуры на стороне сервера, которая формирует команду и выполняет выгрузку:


Процедура ВыгрузитьБазуВФорматDT(КаталогВыгрузки, ИмяФайлаАрхива) Экспорт

    // Определяем пути к исполняемому файлу и логу
    КаталогПлатформы = "C:\Program Files\1cv8\current\bin\";
    ИсполняемыйФайл = КаталогПлатформы + "1cv8.exe";
    ПутьКЛогу = КаталогВыгрузки + "\dump_log.txt";
    ПолныйПутьКDT = КаталогВыгрузки + "\" + ИмяФайлаАрхива;

    // Собираем параметры подключения
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    ИмяПользователя = "Администратор";
    ПарольПользователя = "СекретныйПароль";

    // Формируем командную строку запуска
    КомандаЗапуска = СтрШаблон(
        """%1"" DESIGNER /IBConnectionString ""%2"" /N ""%3"" /P ""%4"" /DumpIB ""%5"" /Out ""%6"" -NoTruncate",
        ИсполняемыйФайл,
        СтрокаСоединения,
        ИмяПользователя,
        ПарольПользователя,
        ПолныйПутьКDT,
        ПутьКЛогу
    );

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

    Если КодВозврата <> 0 Тогда
        ЗаписьЖурналаРегистрации(
            "Выгрузка DT",
            УровеньЖурналаРегистрации.Ошибка,
            ,
            ,
            "Ошибка при выгрузке. Проверьте лог: " + ПутьКЛогу
        );
    Иначе
        ЗаписьЖурналаРегистрации(
            "Выгрузка DT",
            УровеньЖурналаРегистрации.Информация,
            ,
            ,
            "Выгрузка успешно завершена в файл: " + ПолныйПутьКDT
        );
    КонецЕсли;

КонецПроцедуры

Обратите внимание на третий параметр метода ЗапуститьПриложение(). Значение Истина указывает платформе дожидаться полного окончания выгрузки внешнего процесса, после чего переменная КодВозврата заполнится кодом завершения операционной системы.

Способ 2. Выгрузка с помощью системной утилиты ibcmd

В современных версиях платформы 1С:Предприятие (начиная с релиза 8.3.14) доступна консольная утилита ibcmd.exe. Она предназначена для работы с автономным сервером и выполнения административных процедур без запуска графического окружения Конфигуратора.

Разберем подробнее запуск этой утилиты. Команда infobase dump позволяет осуществить экспорт данных напрямую. Посмотрим на пример параметров для автономной утилиты:


// Пример формирования команды для утилиты ibcmd
// Для файловой информационной базы:
КомандаIBCMD = "ibcmd infobase dump --path=""D:\Bases\MyBase"" --data=""D:\Backup\backup.dt""";

// Для клиент-серверной информационной базы (с указанием параметров СУБД):
// ibcmd infobase dump --dbms=MSSQLServer --db-server=SQL_SRV --db-name=BaseName --db-user=sa --db-pwd=pass --data="D:\Backup\backup.dt"

КодВозврата = 0;
ЗапуститьПриложение(КомандаIBCMD, "C:\Program Files\1cv8\current\bin\", Истина, КодВозврата);

Утилита ibcmd работает быстрее традиционного запуска 1cv8.exe DESIGNER, так как не тратит время на инициализацию интерфейсных библиотек Конфигуратора.

Рекомендации по архивации рабочих баз

Важно помнить, что выгрузка в формат .dt предназначена главным образом для переноса конфигурации и учетных данных между различными СУБД (например, при переходе с файловой базы на PostgreSQL или Microsoft SQL Server). Фирма «1С» не рекомендует использовать файл .dt в качестве единственного средства регулярного резервного копирования высоконагруженных промышленных баз данных.

Для надежного регулярного резервирования применяются альтернативные подходы:

  1. В клиент-серверном варианте: использование встроенных инструментов СУБД (создание бэкапов через SQL Server Management Studio или утилиту pg_dump для PostgreSQL). Такие копии создаются без остановки работы пользователей и значительно быстрее формируются.
  2. В файловом варианте: прямое копирование основного файла 1Cv8.1CD средствами операционной системы в момент отсутствия активных подключений к базе.

Таким образом, для программной выгрузки базы в .dt в коде регламентного или фонового задания достаточно сформировать корректную строку запуска Конфигуратора с ключом /DumpIB либо воспользоваться утилитой ibcmd, обеспечив серверной службе монопольный доступ и необходимые права в файловой системе.

← На главную