При разработке и сопровождении конфигураций нередко возникает задача автоматизировать создание архивных копий или выгрузить информационную базу в файл формата .dt без интерактивного участия пользователя. Рассмотрим особенности этой задачи, проанализируем ограничения платформы и разберем по шагам практические способы программной выгрузки базы данных.
Прежде чем приступать к написанию программного кода, выясним причину, по которой данная операция вызывает затруднения у начинающих разработчиков. Во встроенном языке 1С:Предприятия нет прямого метода вроде «ВыгрузитьИнформационнуюБазуВФайл()». Создание архива .dt является функцией конфигуратора или системных утилит платформы, поэтому выгрузка всегда инициируется через вызов внешнего системного процесса.
Проанализируем ключевые моменты, которые необходимо учитывать при настройке автоматической выгрузки:
ЗапуститьПриложение() на сервере возможен только в том случае, если отключен безопасный режим (БезопасныйРежим = Ложь). В противном случае платформа заблокирует запуск исполняемого файла операционной системы.USR1CV8). Эта учетная запись должна обладать полными правами на чтение и запись как в каталог назначения, так и к каталогу исполняемых файлов платформы 1cv8.exe или ibcmd.exe. При указании сетевых папок (UNC-путей) локальная служба сервера может не иметь к ним доступа.ПриНачалеРаботыСистемы(), проверяя дату последней копии в константе или регистре сведений, и уже оттуда программно вызывать фоновое задание через ФоновыеЗадания.Выполнить().Основной и самый распространенный метод — запуск Конфигуратора в пакетном режиме с ключом /DumpIB. Для реализации сформируем командную строку с необходимыми параметрами запуска и вызовем ее через функцию ЗапуститьПриложение().
Рассмотрим структуру ключевых параметров командной строки:
/F, а для клиент-серверной — /S..dt.Посмотрим на пример процедуры на стороне сервера, которая формирует команду и выполняет выгрузку:
Процедура ВыгрузитьБазуВФормат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
);
КонецЕсли;
КонецПроцедуры
Обратите внимание на третий параметр метода ЗапуститьПриложение(). Значение Истина указывает платформе дожидаться полного окончания выгрузки внешнего процесса, после чего переменная КодВозврата заполнится кодом завершения операционной системы.
В современных версиях платформы 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 в качестве единственного средства регулярного резервного копирования высоконагруженных промышленных баз данных.
Для надежного регулярного резервирования применяются альтернативные подходы:
pg_dump для PostgreSQL). Такие копии создаются без остановки работы пользователей и значительно быстрее формируются.1Cv8.1CD средствами операционной системы в момент отсутствия активных подключений к базе.Таким образом, для программной выгрузки базы в .dt в коде регламентного или фонового задания достаточно сформировать корректную строку запуска Конфигуратора с ключом /DumpIB либо воспользоваться утилитой ibcmd, обеспечив серверной службе монопольный доступ и необходимые права в файловой системе.