[[shared:zametki_dlja_vseh]]
==== Архивирование APUVWIN с помощью 7zip ====
В стандартной поставке архивирование базы данных делается с помощью архиватора ARJ32 \\
При этом имя файла выглядит так Pггммдд.ARJ (где гг - последние две цифры года, мм - две цифры месяца, дд - день месяца).
Это вызывает пару неудобств. \\
1. Если в день несколько раз завершать работу APUVWIN - сохраняется только последняя версия архива. \\
2. Архивация проходит достаточно медленно. \\
Поскольку в поставке apuvwin уже используется модули архиватора 7zip (для работы со служебными файлами при отправке-получении), можно использовать его для штатного архивирования базы.
Для этого сделаем изменение для файла ARXIV.BAT Вот его "исходная версия"
:!://Учтите, что для командных файлов windows обычно используется DOS кодировка//
@echo off
rem
rem На входе необходимо задать два параметра:
rem 1-й параметр это имя архива (Pггммдд.ARJ)
rem 2-й параметр это путь к базе данных (C:\APUVWIN\DBF\)
rem
if %1.==. goto NOPARAM
arj32 a %1 %2*.dbf %2*.cdx %2*.fpt \apuvwin\apu8.* -xlocal*.* -xillicit.* -xpension.* -xrsck_lpu_hys*.*
if errorlevel 1 goto WARNING
goto EXIT
:NOPARAM
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ Не задан параметр имени архива !!! │
@echo │ Обратитесь к программисту сопровождения. │
@echo │ Нажмите любую клавишу. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
@pause >nul
goto QUIT
:WARNING
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ Архивирование завершилось аварийно !!! │
@echo │ │
@echo │ Проверьте наличие и установку архиватора AR32J, │
@echo │ или наличие свободного места для копии. │
@echo │ Обратитесь к программисту сопровождения. │
@echo │ Нажмите любую клавишу. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
@pause >nul
goto QUIT
:EXIT
@cls
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ КОПИРОВАНИЕ ПРОШЛО УСПЕШНО. │
@echo │ │
@echo │ ПРИЯТНОЙ ВАМ РАБОТЫ ! │
@echo │ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
rem @pause >nul
:QUIT
Изменим его. Во первых, будем использовать имя архива, включающее время его создания: \\
Pггддмм-ччмм
Для этого создадим вспомогательный командный файл с именем pnmgen.cmd
@ECHO OFF
ECHO Генерирование имени файла вида PГГММДД-ччмм
::считываем системное время в переменную ТММ
:: пробел равно и процент нужны чтобы заменить в строке времени все пробелы на 0
SET TMM=%TIME: =0%
:: считываем системную дату в переменную DTA (вдруг у нас скрипт в полночь работает)
SET DTA=%DATE%
:: показываем наши переменные
ECHO Текущая дата: %DTA%
ECHO Текущее время: %TMM%
::строковыми операциями извлекаем из строки даты и времени нужные циферки
::и складываем их в переменную F7ZNAME
SET F7ZNAME=P%DTA:~-2%%DTA:~3,2%%DTA:~,2%-%TMM:~,2%%TMM:~3,2%
::показываем что получилось
ECHO Имя файла: "%F7ZNAME%"
REM ECHO Пример имени архива: %F7ZNAME%.7z
::все описания команды SET можно "подглядеть"
::набрав в командной строке
::help set
GOTO :EOF
Размещаем этот скрипт в папке APUVWIN
И модифицируем скрипт архивирования заменив архиватор на 7zip использующий эквивалентные опции командной строки
@echo off
rem
rem На входе необходимо задать два параметра:
rem 1-й параметр это имя архива (Pггммдд.ARJ)
rem 2-й параметр это путь к базе данных (C:\APUVWIN\DBF\)
rem
if %1.==. goto NOPARAM
ECHO Start with: %0 %1 %2
ECHO.
REM arj32 a %1 %2*.dbf %2*.cdx %2*.fpt \apuvwin\apu8.* -xlocal*.* -xillicit.* -xpension.* -xrsck_lpu_hys*.*
REM ниже эквивалентная команда для 7z.exe
REM 7z.exe a %1.7z -mx4 -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.*
:: был вариант более длинного имени файла, включающего четыре цифры года, для этого использовался файл pnamegen.cmd
:: но потом отказался от этого. При желании можно на свой вкус переделать.
REM longname PГГГГММДД-ччмм.7z
REM CALL pnamegen.cmd
REM shortname PГГММДД-ччмм.7z
CALL pnmgen.cmd
ECHO 7z.exe a %F7ZNAME%.7z -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.*
7z.exe a %F7ZNAME%.7z -mx4 -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.*
if errorlevel 1 goto WARNING
goto EXIT
:NOPARAM
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ Не задан параметр имени архива !!! │
@echo │ Обратитесь к программисту сопровождения. │
@echo │ Нажмите любую клавишу. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
@pause >nul
goto QUIT
:WARNING
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ Архивирование завершилось аварийно !!! │
@echo │ │
@echo │ Проверьте наличие и установку архиватора AR32J, │
@echo │ или наличие свободного места для копии. │
@echo │ Обратитесь к программисту сопровождения. │
@echo │ Нажмите любую клавишу. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
@pause >nul
goto QUIT
:EXIT
@cls
@echo ┌────────────────────────────────────────────────────┐
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ КОПИРОВАНИЕ ПРОШЛО УСПЕШНО. │
@echo │ │
@echo │ ПРИЯТНОЙ ВАМ РАБОТЫ ! │
@echo │ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ. │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo │ │
@echo └────────────────────────────────────────────────────┘
rem @pause >nul
:QUIT
Теперь в папке APUVWIN копируем оригинальный файл скрипта (для сохранения)
copy ARXIV.BAT ARXIVarj.BAT
и подсовываем новый скрипт архивирования
copy ARXIV7zip.bat ARXIV.BAT
После этого, при выходе из программы, архивирование будет производится с помощью 7zip (значительно быстрее, при этом архив получается почти в два раза меньше, например вместо 115Мб - 72Мб
PS: После каждого обновления APUVWIN следует повторить подмену скрипта архивирования
copy ARXIV7zip.bat ARXIV.BAT
поскольку в процессе обновления восстанавливается версия скрипта архивирования с ARJ