Недавно столкнулся с необходимостью создания резервных копий баз (файловый вариант, архивы в виде dt-файла) и, конечно, сразу захотелось автоматизировать сей процесс, и так, чтобы было как можно проще, но работало. Было найдено достаточно большое количество решений. Наиболее простым показалось использование bat-файла: одна строчка и всё работает, НО при условии, что в базе никого нет. Наложение данного условия значительно усложнило задачу (можно, конечно, было перезапускать кластер, добавив ragent.exe -stop, ragent.exe -start в bat-файл, но это грубый способ, а хотелось корректного отключения пользователей). Задача архивирования с отключением пользователей решалась использованием vbs-файла, но при этом соответствующий скриптовый код уже не отличался простотой понимания и объемом содержания, что вызывало определенные трудности.
В общем, я пришел к следующему (по-моему простому) способу автоматического бэкапа:
1. Создание "выгонялки" средствами 1С.
2. Создание bat-файла, с параметрами запуска "выгонялки", а затем архивирования базы.
3. Добавление bat-файла в планировщик событий Windows.
Итак:
1. В типовых конфигурациях в общем модуле ГлобальныйМодуль есть процедура отключения пользователей ЗавершитьРаботуПользователей() (в УТ, БП, ЗУП, УПП есть точно). Вот её нам и необходимо запустить перед архивацией.
Для этого в конфигураторе создаем обработку, для обработки создаем форму и в модуль формы вставляем следующий текст:
Процедура ПриОткрытии()
ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
ТекущийРежим.КодРазрешения = "КодРазрешения";
ТекущийРежим.Начало = ТекущаяДата();
ТекущийРежим.Конец = ТекущаяДата() + 300;
ТекущийРежим.Установлена = Истина;
УстановитьБлокировкуУстановкиСоединений(ТекущийРежим);
ЗавершитьРаботуПользователей();
КонецПроцедуры
Здесь перед вызовом процедуры ЗавершитьРаботуПользователей() необходимо установить блокировку соединений с базой, иначе она просто не сработает. Число 300 в ТекущийРежим.Конец означает 300 секунд, получается блокировка базы будет установлена на 5 мин с момента запуска обработки - вполне достаточно, чтобы отключить всех пользователей от базы. Сохраним обработку (у меня Epf81.epf). Для 8.1 и 8.2 код идентичен, достаточно переконвертировать обработку для 8.1.
2. Запустим блокнот и вставим следующий текст:
chcp 1251
@echo off
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F"D:\Base" /NПользователь /PПароль /DisableStartupMessages /Execute Epf81.epf
"C:\Program Files\1cv81\bin\1cv8.exe" CONFIG /F"D:\Base" /NПользователь /PПароль /UCКодРазрешения /DisableStartupMessages /DumpIB"D:\Backup\backup_%date%.dt"
Сохраним как backup81.dat
Первой строчкой мы запускаем обработку Epf81.epf от имени Пользователь (подставляете своего с администраторскими правами) с соответствующим паролем. Затем после того, как все пользователи будут отключены (отключаются и те, у которых стоит запрос на выход из программы, только чуть дольше) отработает вторая строчка, которая запускает систему 1С в режиме конфигуратора под тем же пользователем и создает dt-шник в папке D:\Backup, в имя файла будет подставлена текущая дата.
Путь к исполняемому фалу "C:\Program Files\1cv81\bin\1cv8.exe" заменяете, если у вас другой. Соответственно меняете путь к базе "D:\Base". Во второй строчке, для того, чтобы база нас пустила, в параметре /UC указывается код блокировки ТекущийРежим.КодРазрешения = "КодРазрешения", заданный в обработке Epf81.epf.
3. Добавляем в планировщик Windows или любой другой. (Можно посмотреть здесь http://www.ithowto.ru/376-kak-sozdat-naznachennoe-zadanie-pri-pomoshhi-planirovshhika-zadanij-windows.html)
P.S. В описании, с целью простоты понимания, текст bat-файла урезан. В том, который во вложении, добавлено создание лога процесса архивирования, дата создания dt-шника указывается с точностью до секунды и пути к исполняемому файлу, базе и архиву вынесены в переменные. Лог создается в той же дирректории, где находится сам bat-файл.
Данный способ тестировался только на файловых базах типовых УТ, ЗУП, БП 8.1 и 8.2, как работает на клиент-серверных не знаю.