До старта конференции

Автоматическое сохранение базы штатными средствами

Администрирование - Архивирование (backup)

Всё началось с того, что я лентяй. Когда пришел на работу в первый раз, мне сообщили, что уже лет 10 делают сохранение  базы каждый день в конце рабочего дня. Из этого вытекает, что  если кто-то решит подтянуть свои хвосты, то мне приходится сидеть на работе тоже. Честно, мягко говоря, меня это не особо радовало... Порывшись на просторах инета, было принято решение сделать "автосохранялку". Как уже говорилось, "Я ЛЕНИВЫЙ", поэтому мне было попросту лень ставить всякие утилиты и программки, реализовал все штатными средствами.

Прилагаю два файла

1. save.cmd

а) завершает все процессы 1С у всех пользователей терминала, запускает конфигуратор 1С 7.7 в пакетном режиме с параметрами

б) определяет текущую дату

в) копирует сохраненный архив (Arh.zip) в нужную мне папку (в ней у меня хранятся все дампы), это D:\Arhiv\2016

г) перейменовывает файл архива с "Arh.zip" в  чтото вроде этого "2016-11-30-AS_2016.zip"

д) удаляет "Arh.zip" с текущей папки

Содержимое файла:

taskkill /im 1cv7.exe* /f
start /W /D "C:\Program Files\1Cv77\BIN\" 1cv7.exe config /D "D:\1s\2016" /NUser  /PPassword /@D:\Autosave\arc.prm

@echo off
:: Code by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>d_t.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>d_t.com
echo LisqMz`wGH@wKuur`G@w?ogBgGG}G?j_egoNOG?w?`gBLksqgG`w?WgBgG>>d_t.com
echo G}G?R_MgoNMy?wSx@W?s?W?@zAB`LrFuBLyt~vuco{@LuKooD?BFHqrIcP>>d_t.com
echo _sdDxb1T??=?rILO_sdDqx1T??=?rILO_sdDnl1T??=?rILO_sdD`c1T??>>d_t.com
echo =?rILO_sdDgg1T??=?rILO_sdDll1T??=?rILO_sdDrr1T??=??IL?0xxx>>d_t.com

FOR /F "delims=" %%i IN ('d_t.com') DO %%i
del d_t.com

echo century: %_cy%
echo    year: %_yr%
echo   month: %_mo%
echo     day: %_da%
echo    hour: %_hh%
echo  minute: %_mm%
echo  second: %_ss%
echo     all: %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss%
echo.
echo         %DATE% %TIME%
copy D:\Autosave\arc.zip D:\Arhiv\2016\arc.zip
del D:\Autosave\arc.zip 
rename "D:\Arhiv\2016\arc.zip" %_cy%%_yr%-%_mo%-%_da%-AS_2016.zip

2. arc.prm - файл параметров конфигуратора в пакетном режиме. Там указано, что нужно сделать сохранение базы, сделать переиндексацию и закрыть конфигуратор, можно добавить любые пункты из меню "Тестирование и исправление БД". также в этом файле прописано в какую папку сохранится файл архива и как он будет называться (у меня это D:\Autosave\Arc.zip), собственно в этой же папке хранится и первый файл.

Содержимое файла:

; - Комментарий т.е. любой текст не обрабатывается программой 1С
;заглавные общие параметры
[General]
     ;Имя файла с отчетом
Output= D:\Autosave\Arc.txt
Quit=1                    ; Закрывать 1С после выполнения задания
CheckAndRepair=1          ; Выполнять тестирование и исправление БД
UnloadData=0             ; Делать выгрузку данных (НЕ автообмен, а первую выгрузку!!!)
SaveData= 1            ; Делать архив БД
AutoExchange=0         ; Делать автообмен

;параметры тестирования и восстановления
[CheckAndRepair]

Repair=0              ; соответствуют галочкам в диалоговом окне при выборе
PhysicalIntegrity=0   ; в конфигураторе "Тестирования и исправления БД
Reindex=1
Logicalintegrity=0
RecalcSecondaries=0
RecalcTotals=0
Pack=0
;SkipUnresolved=
;CreatForUnresolved=
;Reconstruct=

;параметры выгрузки данных
;[UnloadData]   ; Рекомендую не использовать

;UnloadToFile=
;IncludeUserDef=
;Password=

;параметры сохранения данных в архиве
[SaveData] ; Имя файла для сохранения архива БД
; Имя файла архива
SaveToFile= D:\Autosave\Arc.zip    
;FileList=                   ; Имя файла со списком файлов для архивации

;описание параметров для работы с РИБ
[AutoExchange]

SharedMode=1 ; Выполнять автообмен в случае, если в БД кто-то сидит
;ReceiveFrom=* ; В случае автообмена посредством e-mail - адрес отправителя
ReadFrom=* ; Оставить путь к файлу для загрузки по умолчанию. Иначе - вписать нужный путь
WriteTo=*  ; Аналогично для выгрузки
;SendTo=*

P.S. запускать первый файл желательно от имени администратора в нужное время. Можно кинуть в назначение заданий сервера.

Все замечания и предложения по функционалу приветствуются. 

Скачать файлы

Наименование Файл Версия Размер
файлы
.zip 1,70Kb
02.01.17
1
.zip 1,70Kb 1 Скачать

См. также

Комментарии
1. Дмитрий Дрейцер (MadDAD) 118 15.12.16 16:45 Сейчас в теме
Есть нюанс. d_t.com который создается при выполнении скрипта является 16-разрядным приложением и не сможет работать на х64 ОС.
2. Роман Сафонов (mt111) 3 21.12.16 18:03 Сейчас в теме
(1) %date%тебе в помощь, возвращает тек.дату в cmd
3. Артем T. (1qazxsw21QAZXSW2) 4 21.12.16 18:24 Сейчас в теме
Перебори свою лень 1 раз и настрой все нормально
4. Дмитрий Дрейцер (MadDAD) 118 22.12.16 08:28 Сейчас в теме
(2) Так мне и не надо, это у тебя же в батнике начиная отсюда ":: Code by Herbert Kleebauer" создается com-файл. Только работать будет не везде. Поэтому нужно в описании разработки предупредить что "не работает на X64"
5. Роберт В е р т и н с к и й (v3rter) 22.12.16 09:51 Сейчас в теме
Нагуглил другой способ извлечения даты-времени http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us
и переделал

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,14%
echo Local date is [%ldt%]

На выходе будет Local date is [20161222094850]

Переделать исходный скрипт можно, например, так:
rename "D:\Arhiv\2016\arc.zip" %ldt%-AS.zip

Для 1C 7.7 эффективнее будут разностные архивы 7zip, так как 80% архива - пакеты регламентной отчетности прошлых годов.
http://dkrichun.blogspot.ru/2012/07/7-zip.html
Один раз в неделю (в выходные) создавать полный архив каталога:
7z a "D:\Backup\full.7z" -r "C:\Data"

Ежедневно (по рабочим дням) создавать разностный архив:
7z u "D:\Backup\full.7z" -r -u- -up0q3x2z0!"D:\Backup\diff-%date%.7z" "C:\Data"

При этом:
Полный архив изменяться не будет, благодаря опции -u-.
Если файл попал в полный архив, но к моменту создания разностного архива был удален из исходного каталога, он будет удален при распаковке разностного архива поверх полного, за это отвечает опция q3.
Если файл в исходном каталоге старее чем файл в полном архиве (не важно, по какой причине), он будет добавлен в разностный архив и при его распаковке поверх полного архива заменит более новый, за это отвечает опция x2.

7z a -mx0 "C:\Backup\dimas\docs.7z" -r "D:\Users\dimas\Documents"
7z a -mx0 "C:\Backup\dimas\pics.7z" -r "D:\Users\dimas\Pictures"
7z a -mx0 "D:\Backup\dimas\gdisk.7z" -r "C:\Users\dimas\Google Диск"

7z u -mx0 "C:\Backup\dimas\docs.7z" -r -u- -up0q3x2z0!"C:\Backup\dimas\docs-%date%.7z" "D:\Users\dimas\Documents"
7z u -mx0 "C:\Backup\dimas\pics.7z" -r -u- -up0q3x2z0!"C:\Backup\dimas\pics-%date%.7z" "D:\Users\dimas\Pictures"
7z u -mx0 "D:\Backup\dimas\gdisk.7z" -r -u- -up0q3x2z0!"D:\Backup\dimas\gdisk-%date%.7z" "C:\Users\dimas\Google Диск"
Кстати, тот же случай, когда вместо %date% удобнее будет использовать %ldt% из примера выше.

Можно еще попробовать Cobian Backup. По личному опыту для кобиана на диске с базами надо включать теневое копирование (защиту системы).
6. Роман Сафонов (mt111) 3 22.12.16 11:57 Сейчас в теме
(3) для нашего сервачка-старичка этого вполне хватает.
А вообще вариантов бекапов масса, и каждый выбирает для себя и под свои нужды, материал выставлен в ознакомительных целях, Архивирование проходит без проблем и на х32 и на х64, а уж что делать с архивом это уже личное дело каждого, как его назвать, куда его положить и что с ним делать дальше
7. Роберт В е р т и н с к и й (v3rter) 22.12.16 12:48 Сейчас в теме
(6)
Согласен. По нынешним меркам объемы баз 7.7 настолько невелики, что на выбор архиватора и способа архивации стоит тратить время только при количестве баз от 10.

Думаю, вместо
start /W /D "C:\Program Files\1Cv77\BIN\" 1cv7.exe
лучше будет
start /W /D "" "C:\Program Files\1Cv77\BIN\1cv7.exe"
или
start /W /D "" "%programfiles%\1Cv77\BIN\1cv7.exe"

В своей практике в начале батника обычно прописываю все пути и некоторые параметры в переменные через SET. Это чтобы не искать их потом по всему коду и не тратить время на "найти-заменить".
8. Роман Сафонов (mt111) 3 23.12.16 09:21 Сейчас в теме
(7) по поводу переменных - дельное предложение, весьма упростит некоторые моменты
9. Роберт В е р т и н с к и й (v3rter) 27.12.16 11:54 Сейчас в теме
Собственно, сейчас у большинства архиваторов есть ключи типа "добавить дату к имени архива", но было интересно решить задачу получения даты-времени средствами bat-языка.
Оставьте свое сообщение