Как известно файловые базы 1С очень «ламучие» и должны сопровождаться частым бэкапом.
Здесь же и таится опасность, о которой администратор 1С может и не подозревать, конечно, пока в очередном «аврале» не попробует выполнить восстановление ИБ.
Да, как вы уже догадались, архив «битый», DT-ха не хочет загружаться или еще вагон и телега ошибок после так называемого «теневого копирования» какой ни будь именитой программы по резервному копированию баз 1С.
Здесь даже и не знаю, что будет хуже, зло – ДТ как вариант бэкапа или копия на уровне файлов без штатного выгона пользователей из базы 1С.
Да, что говорить, «боль» администрирования файловых 1С знакома всем )
Часто базы оказываются сломанными, и даже «Тестирование и исправление» порой не дает нужного результата.
Конечно лучшее, что можно здесь предпринять это правильный подход к созданию самого бэкапа в «файле»!
Собственно, пользоваться той кучей скриптов, которыми мы обычно снимаем копии, мягко говоря, не совсем удобно, да и не безопасно.
А программные аналоги стоят немало, и также не работают как от них ожидаешь.
Так я в 2024 – том сел снова писать скрипт ), который будет делать прозрачно и безопасно то, что от него требуется, а именно корректный бэкап файловой базы 1С.
1C_SafeArchive – скрипт для создания безопасной резервной копии файловой базы 1С.
Работать со скриптом очень просто, достаточно заполнить всего пару основных параметров, таких как расположения базы, куда копировать и пользователя для штатного завершения сеансов 1С – все!
Вкратце, о работе крипта:
Создает резервную копию используя бесплатный архиватор 7-zip и штатные механизмы завершения работы в 1С, исключительно при необходимости, применяет принудительное завершение процессов 1С. (Причем все гибко вы сможете настроить под себя).
Также меня всегда бесили битые копии, которые не редко создают как программы, так и скрипты, здесь это исключено, разве что кто-то грубо прервёт работу скрипта )
Описание работы скрипта:
- Настройки скрипта:
- Определены основные параметры, такие как расположение базы данных 1С (base_location), имя пользователя в 1С (user_name), пароль пользователя (user_pass), расположение платформы 1С (platforma_1C), расположение утилиты 7-Zip (a7z), и т.д.
- Получение текущей даты и времени:
- Скрипт использует PowerShell для получения текущей даты и времени, сохраняя их в переменной current_datetime.
- Очистка лога:
- Предыдущий лог очищается перед выполнением скрипта.
- Завершение процессов 1С:
- Если опция taskkill_on установлена в “yes”, скрипт пытается завершить процессы 1С командой taskkill перед выполнением резервного копирования.
- Если опция perform_taskkill также установлена в “yes”, то только после успешного штатного завершения процессов 1С командой “%platforma_1C%” ENTERPRISE /F%base_location% /N”%user_name%” /P”%user_pass%” /WA- /CЗавершитьРаботуПользователей /UCКодРазрешения /DisableStartupMessages
, скрипт принудительно завершает указанный процесс (process_mask) с использованием taskkill.
- Блокировка входа в базу 1С:
- Вход в базу 1С блокируется, и выполняется штатное завершение сеансов 1С.
- “%platforma_1C%” ENTERPRISE /F%base_location% /N”%user_name%” /P”%user_pass%” /WA- /CЗавершитьРаботуПользователей /UCКодРазрешения /DisableStartupMessages
- Создание бэкапа:
- Скрипт использует 7-Zip для создания архива (бэкапа) базы данных 1С в указанное место (kuda) с именем, включающим текущую дату и время.
- for /r “%base_location%” %%i in (%file_filter%) do (
“%a7z%” a “%kuda%\%backup_name%_%current_datetime%.7z” “%%i” >> “%~dp0full_log.txt” 2>&1
)
- Удаление старых бэкапов:
- Скрипт удаляет старые бэкапы, оставляя только заданное количество (backup_old).
- Принудительное завершение процессов 1С:
- Если опция perform_taskkill установлена в “yes” и процессы 1С успешно завершены командой taskkill, скрипт принудительно завершает процессы 1С что могли остаться, например “Конфигуратор” у разработчика 1С (process_mask) с использованием taskkill.
- Разрешение входа пользователям:
- Если ранее был заблокирован вход в базу 1С, скрипт разрешает вход пользователям.
- Логирование:
- Весь процесс логируется в файл txt, включая информацию о завершении процессов, создании бэкапа и другие шаги. Лог файл содержит дату и время для каждого события.
- Обработка ошибок:
- В случае ошибки при создании бэкапа, скрипт удаляет неудачный бэкап и записывает соответствующую информацию в лог.
- Завершение скрипта:
- Скрипт завершает работу, записывая соответствующую информацию в лог.
Без проблем батник будет работать в планировщике windows, и на автомате создавать резервные копии ваших файловых баз 1С.
ВАЖНО! Если работа скрипта завершилась аварийно, удалите лишние файлы в каталоге ИБ, чтоб разблокировать доступ к ИБ (Достаточно удалить 1Cv8.cdn) из папки (или все кроме 1Cv8.1CD).
ВИДЕО КАК НАСТРАИВАТЬ СКРИПТ:
Что нового на версии 1.1:
- Более простая настройка скрипта
- Бэкап выполняется путем копирования только файла базы 1Cv8.1CD
Что нового на версии 1.2:
- Добавлена возможность корректного завершения сеансов 1С на веб сервере Apache
Что нового на версии 1.3:
- Путь к лог файлу можно указать в переменной
Пишите в комментарии, что используете вы для резервного копирования баз 1С, конечно, буду рад предложениям по улучшению работы скрипта!
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>
Все ок !!
Отлично !!
Супер! Планирую еще поработать над скриптом!
Добрый день! подскажите пожалуйста как правильно настроить? вроде по описанию сделал но чет не работает
Попробовал самостоятельно настроить теперь в базу не могу зайти, пишет HTTP: Forbidden
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:
по причине:
Начало сеанса с информационной базой запрещено.
Для администратора:
Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите “1С:Предприятие” с параметрами:
ENTERPRISE /F”D:\База_рабочая” /CРазрешитьРаботуПользователей /UC
по причине:
Для администратора:
Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите “1С:Предприятие” с параметрами:
ENTERPRISE /F”D:\База_рабочая” /CРазрешитьРаботуПользователей /UC
[StoredDataError]
Удалите файл 1Cv8.cdn файл блокировки скрипт копирует также (все копирует)
Можно оставить только сам 1Cv8.1CD
И отправьте пожалуйста мне на почту team@kuharbogdan.com что и как вы настроили.
Отправил, к сожалению по почте gmail вложения блокировались. пришлось весь текст в письме скопировать
Жду от вал лог файл скрипта, чтоб разобраться в ошибке, спасибо
И почему не комильфо) он что работать не будет? ) на питоне пишут другие вещи, не надо всюду пихать питон, у него свое предназначение
Вы “накидайте” вот такой функционал для начала как я сделал и уже будет супер, ну а за дополнения любые вам отдельное спасибо! Суть не в том на чем пишеш, а в том что пишеш.
Ну вот мы и увидили ваш скрипт для бэкапа файловых баз 1С, спасибо! От всего сообщества питонистов ) Groovy и Jenkins’е и прочей чепухи которую вы здесь написали, спасибо. Пока не понял зачем вы потратили мое время и свое также, вот это вопрос конечно.
Жаль нет функционала по архивированию файловых баз, которые работают с публикацией в веб через apache или IIS. Да и пользователи, которые работают через локальную сеть не выбьются.
Ну как же нет! скрипт завершает работу всех пользователей! Не пишите пожалуйста если не запускали скрипт.
А в поле “куда” копировать мы можем указать сетевой путь?
Здравствуйте. Да, конечно
А если пользователь без пароля, просто оставляем пусто в скобках где вводится пароль?
Пароль можно не указывать но пользователь должен быть администратор в базе 1с у вас если это не так то завершение сеансов не произойдет, а если у вас у пользователя что в базе 1С имеет права администратора и нет пароля тогда это уже серьёзный вопрос безопасности!
Когда компьютер в сети, да еще и с выходом в интернет, то да, без паролей никак нельзя, но если это отдельно стоящий компьютер без интернета, да и в базе работает один человек человек, то думаю можно (но не очень приветствуется) то и без пароля
при запуске C:\Users\Администратор\Desktop\1C_SafeArchive_1_1>я╗┐
“я╗┐” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
вылезает окно 1с и пишет информационная база не найдена пытается её создать.
Пути естественно все свои прописал.
Здравствуйте, Все пути перепишите на латынь включая расположение самого скрипта.
Всё отлично, но, как всё таки прописать русский путь к базе? Нет возможности переименовать каталог базы.
Попробуйте поиграть с кодировками сохранить в ansi 1251 или utf 8 .
Вам стоит сменить на латынь пути и здесь дело даже не в скрипте. Такие пути для расположения баз делать нельзя. Могут быть различные ошибки
Доброго времени! Спасибо за статью! Подскажите, как реализовать один скрипт для нескольких файловых баз. Или если для каждой базы создать свой скрипт(а) и еще один скрипт(б), который будет запускать последовательно скрипты(а) с проверкой завершения предыдущего скрипта(а). Заранее спасибо!
Здравствуйте.
Проще будет в планировщике зарядить в интервале несколько скриптов для каждой базы. Например есть 5 баз, тогда каждый час запускать новый скрипт для базы. 01:00 база 1 в 02:00 база два. И тд
Если баз много, например больше 7-ми, я бы рекомендовал использовать тогда уже программу, тот же handy backup или эффектор сейвер.
Effector Saver v4.12 не умеет выгонять пользователей из базы, если просто копирует файл базы. Только при выгрузке в .dt.
Привет, спасибо за скрипт и статью) Все работает штатно! Но: чтобы посмотреть логи на упаковку нескольких баз, пришлось отключать удаление лога в каждом скрипте, либо можно складывать их в разные папки, т.е. придется переделывать планировщик, но лень)) Поэтому пока просто отключил. Буду сам не забывать посматривать. Всего хорошего. Если что-то придумаете с этим, обязательно использую)))
Здравствуйте.
Спасибо, что сообщили! На версии 1.3 исправлю этот момент!
(Как вариант можно просто скрипт запускать из разных папок) Так как он создает лог в том расположении, где стартует
Было бы замечательно иметь переменную, в которой можно переопределить путь для лога.
Сделаю, обязательно в самое ближайшее время.
Уже сделал
Добрый день! А можно посмотреть скрипт резервного копирования опубликованной базы на apache? Я мало в этом понимаю, но и жить хочется, а то бухгалтеры будут очень недовольны если 1С сломается. Базу опубликовал на apache, а как бэкап делать ума не хватает!))))
Здравствуйте.
Я не понимаю, что вы написали.
Если не разбираетесь, а работать надо, рекомендую в обязательном порядке пройти курс Администратор 1С https/a.kuharbogdan.com
Добрый день! попробовал сегодня скрипт, вот такой лог вывалил. Где я накосячил?
Попытка заблокировать вход в базу 1С и вызов штатного завершения сеансов 1С…
Процесс 1C с маской “1cv8” не найден.
[2024-08-01_0839] Создаю бэкап…
‘”C:\Program Files\7-Zip\7z.exe”‘ is not recognized as an internal or external command,
operable program or batch file.
[2024-08-01_0839] Создание бэкапа завершилось с ошибкой: 9009
[2024-08-01_0839] Скрипт завершился из-за сбоя при создании резервной копии.
[2024-08-01_0839] Удаление неудачного бэкапа…
Could Not Find D:\backUp4iki\SCripT\MyBackup_2024-08-01_0839.7z
[2024-08-01_0839] …
[2024-08-01_0839] Попытка разрешить вход в базу 1С
[2024-08-01_0839] Вход в базу 1С разрешен
[2024-08-01_0839] Скрипт завершил работу
отвечу сам себе, так как стоит ещё и WinRAR, файлы 7z открывались по умолчанию им. Поставить открытие архиватором 7-Zip – всё заработало. Спасибо!
Здравствуйте. Спасибо что поделились!
Как быть с путем к 1С?
set “platforma_1C=C:\Program Files\1cv8\8.3.24.1368\bin\1cv8.exe”
Если платформу сами пользователи обновляют через режим Предприятие.
Как универсальный путь указать?
Здравствуйте.
Всегда можно использовать C:\Program Files\1cv8\common\1cestart.exe
Я если я хочу делать backup всей базы (всего каталога) за исключением содержимого каталога 1Cv8Log
я модифицировал строку
“%a7z%” a “%kuda%\%backup_name%_%current_datetime%.7z” “%base_location%” -xr!*lgf -xr!*lgp
но получаю ошибку
Command Line Error:
Incorrect wildcard type marker
r*lgp
подскажите пожалуйста , что нужно подправить
что нужно
Здравствуйте.
Надо разбираться. Напишите мне на почту team@kuharbogdan.com отправьте ваш вариант скрипта, я посмотрю.
Также имейте введу, что в каталоге из базой создается и файл блокировки который вам также будет скопирован, поэтому и файл блокировки входа в базу также следует исключить, не только лог.
мне помогло следующее изменение
“C:\Program Files\7-Zip\7z.exe” a “C:\1C\BackUp\1c_bases_2.0_2024-08-10_TEST.7z” “C:\1C\1c_bases 2.0\base.1CD” -xr^^!*lgp -xr^^!*lgp
или удаление этих строк
setlocal enabledelayedexpansion
chcp 65001 > nul
я не понял как это сработало, но помогло
тестил на
Windows 11 Eng and Windows Server 2016 Rus
Отлично! Еще проверьте файл блокировки не попадет в архив ? Если нет, тогда все ок!
этот 1Cv8.cdn ?
Да, он, там либо его фильтровать или отредактировать сменив значение в нем в первой строке первый символ 1 на 0
Я посмотрел.
1Cv8.cdn в архив не попадает.
у меня перед архивацией все пользователи выходят из 1C
Всё работает, кроме путей. C:\Distr\ooo_acc>remThe system cannot write to the specified device. Всё время выдает такие ошибки.
Здравствуйте.
Пробовали с другими путями ?
Кирилица точно не сработает, возможно скрип не может верно определить сам диск.