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

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

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

1. save.cmd

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

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

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

г) перейменовывает файл архива с «Arh.zip» в  чтото вроде этого «2024-11-30-AS_2024.zip»

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

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

taskkill /im 1cv7.exe* /f
start /W /D «C:Program Files1Cv77BIN» 1cv7.exe config /D «D:1s2024» /NUser  /PPassword /@D:Autosavearc.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:Autosavearc.zip D:Arhiv2024arc.zip
del D:Autosavearc.zip 
rename «D:Arhiv2024arc.zip» %_cy%%_yr%-%_mo%-%_da%-AS_2024.zip

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

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

; — Комментарий т.е. любой текст не обрабатывается программой 1С
;заглавные общие параметры
[General]
     ;Имя файла с отчетом
Output= D:AutosaveArc.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:AutosaveArc.zip    
;FileList=                   ; Имя файла со списком файлов для архивации

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

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

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

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

9 Comments

  1. MadDAD

    Есть нюанс. d_t.com который создается при выполнении скрипта является 16-разрядным приложением и не сможет работать на х64 ОС.

    Reply
  2. mt111

    (1) %date%тебе в помощь, возвращает тек.дату в cmd

    Reply
  3. 1qazxsw21QAZXSW2

    Перебори свою лень 1 раз и настрой все нормально

    Reply
  4. MadDAD

    (2) Так мне и не надо, это у тебя же в батнике начиная отсюда «:: Code by Herbert Kleebauer» создается com-файл. Только работать будет не везде. Поэтому нужно в описании разработки предупредить что «не работает на X64»

    Reply
  5. v3rter
    Reply
  6. mt111

    (3) для нашего сервачка-старичка этого вполне хватает.

    А вообще вариантов бекапов масса, и каждый выбирает для себя и под свои нужды, материал выставлен в ознакомительных целях, Архивирование проходит без проблем и на х32 и на х64, а уж что делать с архивом это уже личное дело каждого, как его назвать, куда его положить и что с ним делать дальше

    Reply
  7. v3rter

    (6)

    Согласен. По нынешним меркам объемы баз 7.7 настолько невелики, что на выбор архиватора и способа архивации стоит тратить время только при количестве баз от 10.

    Думаю, вместо

    start /W /D «C:Program Files1Cv77BIN» 1cv7.exe

    лучше будет

    start /W /D «» «C:Program Files1Cv77BIN1cv7.exe»

    или

    start /W /D «» «%programfiles%1Cv77BIN1cv7.exe»

    В своей практике в начале батника обычно прописываю все пути и некоторые параметры в переменные через SET. Это чтобы не искать их потом по всему коду и не тратить время на «найти-заменить».

    Reply
  8. mt111

    (7) по поводу переменных — дельное предложение, весьма упростит некоторые моменты

    Reply
  9. v3rter

    Собственно, сейчас у большинства архиваторов есть ключи типа «добавить дату к имени архива», но было интересно решить задачу получения даты-времени средствами bat-языка.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *