Заметки для всех

Архивирование 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