Задача:
Имеется MoneyS3 + MonExcel + Thunderbird (версии 2.0.0.21)
Требуется сгенерировать xls файл и отправить по почте.
Для этого нужно на интересующем документе зайти в диалог печати и нажать кнопку экспорт Export.
Скрипт который выполняет межутилитную работу можно взять здесь.
Программа MonExcel написана также с отклонениями от требований Windows NT/XP/Vista. Она ожидает допуска на запись в каталоге где находятся бинарные файлы. Поэтому на правильно настроенной системе приходится разрешать пользователям модифицировать файл конфигурации.
При пользовании программой MonExcel в многопользовательском режиме очень важно следить за шаблонами. Их может по ошибке перенастроить другой пользователь. Шаблон MoneyS3 который в диалоге экспорта называется и как следствие имя файла из MoneyS3 попадает в соответствие с шаблоном MonExcel только по выбору пользователя. Это нужно сделать хотя бы один раз. После чего информация: ИМЯ ФАЙЛА MONEY <=> ШАБЛОН MONEXCEL будет записана в файл конфигурации convert.tab
Файл конфигурации утилиты MonExcel в базовой установке находится
“C:\Program Files\LAN Consult\MonExcel\convert.tab”
Он имеет следующий формат:
“CSVName”,”LstFileName”,
“FAKTURA VYSTAVENA.CSV”,”VFAKT_CM.LST”,
“FORMULAR K PRIZNANI DPH.CSV”,”UCDPHEU.LST”,
“HLAVNI KNIHA.CSV”,”UCHKNIHA.LST”,
“ROZVAHA ZA OBDOBI.CSV”,”UCROZVAH.LST”,
“SEZNAM DOKLADU PRO PRIZNANI DPH.CSV”,”UCDPHEU.LST”,
“VYSLEDOVKA.CSV”,”UCVYSLED.LST”,
“VYUCTOVANI MEZD.CSV”,”VYUCTO.LST”,
Содержимое его может немного отличаться от приведённого, но суть ясна: первое поле – имя файла экспорта, второе поле – имя шаблона утилиты MonExcel. Изначально файл содержит только первую строку и заполняется одной записью только тогда, когда пользователь нажимает кнопку экспорта. Если запись уже присутствуе в файле, но отличается – она перезаписывается.
Проблемой многопользовательской работы алгоритма на терминальном сервере будет то, что при одновременной работе пользователей с экспортом одного и того же документа может произойти его подмена. Например пользователь 1 запускает экспорт – формируется файл csv. Затем отрабатывает MonExcel и формирует xls файл который требуется отправить. Запускается ThunderBird и ждёт пока пользователь исправит адрес и нажмёт кнопку отправить. И только в этот момент произойдёт чтение файла с диска. И как раз до этого момента пользователь 2 формирует отчёт используя тот же шаблон экспорта. Он имеет тоже имя и перезаписывает уже существующий cvs файл. Как результат пользователь 1 и 2 отправят один и тот же файл. Чтобы хоть как-то смягчить эту проблему я в скрипте я изменил заложенный мной сразу алгоритм. Сейчас создаваемый MoneyS3 файл лишь короткий промежуток времени существует на диске в общем каталоге. Как только скрипт получает управление файл сразу переносится во временный каталог пользователя, который в NT/XP/Vista у каждого свой. Когда пользователь при экспорте получает сообщение – файл уже существует – значит что кто-то пользуется экспортом, либо скрипт завершился некорректно и не смог удалить файлы. В любом случае пользователь должен спросить у остальных – пользуется ли кто-то экспортом. Таким образом возможность отправить не тот файл минимальная.