S-market без слез. Настраиваем автоматическое зарытие касс.

Автоматизированная система управления товародвижением S-market имеет в своем функционале такой мощный инструмент автоматизации, как автоматическое закрытие касс.
Рассмотрим эту технологию. Цитата из руководства:

Функция автоматической загрузки \ закрытия касс позволяет осуществлять взаимодействие кассового ПО с АСУТ S-Market при минимальном участии пользователя.
Общий порядок настройки автоматической загрузки \ выгрузки касс:
1. Заполнить параметры загрузки \ выгрузки касс в КОНФИГУРАТОРЕ в группе Кассы.
2. Определить параметры подключения к базе данных в файле SMLoadCash.ac (SMCloseCash.ac) по следующему шаблону: · user – идентификатор пользователя подключения; · password – пароль пользователя; · filialindex – идентификатор филиала.
3. Проверить наличие в корневом каталоге АСУТ S-Market файлов: · SMLoadCash.exe, · SMCloseCash.exe, · S_marketLoadBpl.ini, · файла инициализации закрытия касс.
4. Проверить наличие необходимых библиотек в каталоге BPL_Main: · SMLicenseIb.bpl; · TaskLdr.bpl; · Frames.bpl; · Cash.bpl; · Crystal4.bpl (для касс с форматом обмена SET Retail (dbf/COM-объекты)); · Crystal5.bpl (для касс с форматом обмена SET Retail (dbf/COM-объекты)).
5. Автоматическая загрузка касс любого типа осуществляется с помощью файла SMLoadCash.exe со следующими параметрами: · autostart - полностью автоматическая загрузка, в отсутствие данного параметра запуск файла SMLoadCash.exe к запуску окна настройки загрузки касс (аналогичное окно вызывается при выполнении команду ЗАГРУЗКА КАСС из меню СЛУЖЕБНЫЕ ФУНКЦИИ / КАССЫ); · COM - используется для загрузки касс с форматом обмена SET Retail (dbf/COM-объекты) через СОМ-интерфейс, в отсутствие параметра производится стандартная загрузка для касс всех типов; · Full - используется при стандартной загрузке (т.е. без параметра СОМ) для идентификации полной загрузки касс, в отсутствие параметра будет производится частичная загрузка, начиная с наименьшего времени последней удачной загрузки для выбранных касс; · autoclose - автоматическое закрытие модуля после загрузки. При появлении проблемы в момент загрузки модуль все равно закрывается. Сообщение об ошибке вносится в файл протокола (по умолчанию cash_bpl.log).
6. Автоматическое закрытие касс любого типа осуществляется с помощью файла SMCloseCash.exe со следующими параметрами: · autostart - автоматическое закрытие касс с использованием стандартного интерфейса закрытия касс; · СОМ - автоматическое закрытие касс с форматом обмена SET Retail (dbf/COM-объекты) с использованием интерфейса закрытия касс через СОМ-интерфейс; · SES - автоматическое закрытие касс с использованием интерфейса закрытия касс с форматом обмена SET Retail (dbf/COM-объекты) через прямое подключение к базе СТО; · autoclose - автоматическое закрытие модуля после загрузки. При появлении проблемы в момент выгрузки модуль все равно закрывается. Сообщение об ошибке вносится в файл протокола (по умолчанию cash_bpl.log).
7. Сформировать в корневом каталоге АСУТ S-Market bat-файл, содержащий команду для автоматической загрузки \ выгрузки касс (например, следующего содержания: "SMLoadCash.exe autostart full autoclose") и воспользоваться стандартными средствами операционной системы для запуска bat-файла по расписанию (например, "Назначенные задания" для ОС линейки Windows). При использовании утилиты SMCloseCash.exe для закрытия касс существует возможность использования инициализационного файла. Строка запуска файла закрытия касс имеет вид: SMCloseCash.exe [Autostart] [Ini=Имя_файла_инициализации] [COM] где: · AutoStart – при запуске с установленным параметром производится автозапуск без дополнительных действий со стороны пользователя. Если параметр не установлен, сразу после запуска файла отображается окно закрытия касс, загрузка производится только по команде пользователя. · Ini=Имя_файла_инициализации – имя инициализационного файла (без указания пути). Файл инициализации должен находится в директории запуска утилиты SMCloseCash.exe. Если параметр не установлен либо в директории запуска утилиты отсутствует указанный файл, то в качестве инициализационного принимается файл SMCloseCash.ac, расположенный в директории запуска файла SMCloseCash.exe · СОМ – при установленном параметре закрытие касс производится с использованием СОМ-интерфейса для касс с форматом обмена SET Retail (dbf/COM-объекты). Если параметр не установлен, то закрытие для всех прочих типов касс производится средствами АСУТ S-Market.

Приступим к реализации задуманного. Для начала не плохо было бы удалить блокировки из БД, чтобы избежать конфликтов внутри неё:

CD d:\smdk
echo %date% %time%: Удаление блокировок FB >>_LOG.txt
ibescript.exe del_lock.sql >>_LOG.txt
echo %date% %time%: Удаление блокировок завершено >> _LOG.txt

Здесь папка с S-market-ом это d:\smdk
В папке d:\smdk мы и будем хранить наши файлы сценариев в формате *.cmd Далее в файл _LOG.txt пишутся логи выполнения операций.
Команда ibescript.exe del_lock.sql >>_LOG.txt запускает SQL скрипт из файла del_lock.sql Вот его текст:

SET NAMES WIN1251;
SET CLIENTLIB 'fbclient.dll';
CONNECT 'путь до файла БД' USER 'SYSDBA' PASSWORD 'masterkey';
execute procedure LOCK_SWEEP;

Вместо 'путь до файла БД' подставьте путь к БД с точки зрения сервера.
Далее следует непосредственно закрытие касс:

echo %date% %time%: Закрытие касс >> _LOG.txt
start d:\smdk\SMCloseCash.exe ini=1_cash.ini autostart autoclose
SmWaitCloseCash.exe
echo %date% %time%: Кассы закрыты >> _LOG.txt

Тут у меня только 1 филиал, если надо больше повторяем следующие 2 строки, меняя только имя ini файла в строке: start d:\smdk\SMCloseCash.exe ini=1_cash.ini autostart autoclose
SmWaitCloseCash.exe - что именно делает эта часть понять не удалось. Все равно кассы закрываются одна за другой филиал за филиалом. Может кто и знает.
Текст файла 1_cash.ini:

user=580
Password=0
Shopindex=54
Filialindex=56
Cashes=30,31,32,33
LogFileName=_LOG.txt

Как вы уже наверное догадались наш ini файл это замена SMCloseCash.ac Пройдемся по секциям.
User
Идентификатор пользователя для подключения к базе данных и выполнения закрытия касс
Password
Пароль пользователя
Shopindex
Идентификатор торгового партнера, в рамках которого будет производится закрытие касс
Filialindex
Идентификатор филиала, принадлежащего указанному выше торговому партнеру
Cashes
Список касс, принадлежащих указанному выше филиалу (указывается через запятую без пробелов)
LogFileName
Имя файла протокола дейтвий утилиты SMCloseCash.exe. Если параметр LogFileName в инициализационном файле не указан либо инициализационный файл не используется, то протоколирование действий утилиты SmCloseCash.exe производится в файл cash_bpl.log, который располагается в корневом каталоге установки АСУТ S-Market.

Совсем скучно и не интересно останавливаться на этом. Поэтому до кучи еще и пересчитаем партионку, оперативные остатки и прайс-листы!

echo %date% %time%: Пересчитываем партионку >> _LOG.txt
d:\smdk\CalcPart.exe autostart autoclose
echo %date% %time%: Готово >> _LOG.txt
echo %date% %time%: Пересчет оперативных остатков >> _LOG.txt
ibescript.exe Ostatok_Short_Recalc.sql >> _LOG.txt
echo %date% %time%: Окончание пересчета >> _LOG.txt
echo %date% %time%: Песчитываем продажи >> _LOG.txt
ibescript.exe sales_calc.sql >> _LOG.txt
echo %date% %time%: Пересчитали продажи >> _LOG.txt
echo %date% %time%: Сборка мусора в базе >> _LOG.txt
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -sweep -user sysdba -password masterkey xmzmarket:D:\smdk\dbase\Sm_pit.fdb >>_sweep.txt
echo %date% %time%: Все операции завершены, перегружаемся >>_LOG.txt
shutdown.exe /f/r

Вот тексты скриптов Ostatok_Short_Recalc.sql и sales_calc.sql:

Ostatok_Short_Recalc.sql
SET NAMES WIN1251;
SET CLIENTLIB 'fbclient.dll';
CONNECT 'тут путь до файла БД' USER 'SYSDBA' PASSWORD 'masterkey';
execute procedure ostatok_short_recalc;

sales_calc.sql
SET NAMES WIN1251;
SET CLIENTLIB 'fbclient.dll';
CONNECT 'тут путь до файла БД' USER 'SYSDBA' PASSWORD 'masterkey';
execute procedure SCHEDULER_CALC_SALES(1)

В завершении работы сценария компьютер перезагружается командой shutdown.exe /f/r
Вот текст файла autoclose.cmd:

CD d:\smdk
echo %date% %time%: Удаление блокировок FB >>_LOG.txt
ibescript.exe del_lock.sql >>_LOG.txt
echo %date% %time%: Удаление блокировок завершено >> _LOG.txt
echo %date% %time%: Закрытие касс >> _LOG.txt
start d:\smdk\SMCloseCash.exe ini=1_cash.ini autostart autoclose
choice /T 10 /D y
SmWaitCloseCash.exe
echo %date% %time%: Кассы закрыты >> _LOG.txt
echo %date% %time%: Пересчитываем партионку >> _LOG.txt
d:\smdk\CalcPart.exe autostart autoclose
echo %date% %time%: Готово >> _LOG.txt
CD d:\smdk
echo %date% %time%: Пересчет оперативных остатков >> _LOG.txt
ibescript.exe Ostatok_Short_Recalc.sql >> _LOG.txt
echo %date% %time%: Окончание пересчета >> _LOG.txt
echo %date% %time%: Песчитываем продажи >> _LOG.txt
ibescript.exe sales_calc.sql >> _LOG.txt
echo %date% %time%: Пересчитали продажи >> _LOG.txt
echo %date% %time%: Сборка мусора в базе >> _LOG.txt
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -sweep -user sysdba -password masterkey xmzmarket:D:\smdk\dbase\Sm_pit.fdb >>_sweep.txt
echo %date% %time%: Все операции завершены, перегружаемся >>_LOG.txt
shutwown.exe /f/r

Все данные о ошибках в ходе выполнения сценария будут записаны в файл _LOG.txt
Этот сценарий выполняется при помощи стандартного планировщика заданий в любой удобное время (обычно ночью).

Tags: