Формирование писем поселенцам

Все вопросы по АС Бюджет
Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Формирование писем поселенцам

Сообщение Val » 13.05.2008 15:56

есть каталог в который АС Бюджет складывает файлы принятые из ОФК
......
20080506\
20080507\
20080508\
20080512\
20080513\
.....
в подкаталогах файлы типа
.....
15000D00.CE5
15000D00.PE5
15200D00.CE5
15200D00.PE5
15500D00.CE5
.....
D - это обозначение номера файла с начала месяца
первые три цифры идентифицируют поселение.
задача:
найти нужный(е) каталог(и) и на базе их содержимого сформировать письма поселениям,
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: Формирование писем поселенцам

Сообщение Val » 22.05.2008 16:44

Скрипт VBS формирует письмо. Сделан для пробы.
Требует 3 процедуры в базе. Требует уникальности темы письма.

В принципе возможно использования ID, но придется для создания заголовка письма использовать select * from insmailcaption("111","222",0), результат возвращать в файл и этот файл обрабатывать средствами vbs.
Я просто не знаю как это можно красивее сделать.


Код: Выделить всё

Const ForAppending = 8
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("c:\3\a.sql", ForWriting, True)

objTextFile.WriteLine("execute procedure insmailcaption('proba005','proba005',0);")
objTextFile.WriteLine("execute procedure insmaildest('proba005','22');")
objTextFile.WriteLine("execute procedure insmaildetail('proba005','file005.txt');")
objTextFile.WriteLine("commit work;")
objTextFile.Close

Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.Run("Y:\Progra~1\Yaffil\BIN\isql.exe 192.168.100.1:d:\budgetax2008\database\budget2008_tst99.gdb -u sysdba -p password -i c:\3\a.sql")
Set oShell = Nothing


Код: Выделить всё

SET TERM ^ ;

CREATE PROCEDURE INSMAILCAPTION (
    subject varchar(255),
    filename varchar(1024),
    remind smallint)
as
begin
  insert into remotemailmessages (subject,textfilename,reminder,createdate) values (:subject,:filename,:remind,'now');
end^

SET TERM ; ^

GRANT INSERT ON REMOTEMAILMESSAGES TO PROCEDURE INSMAILCAPTION;

GRANT EXECUTE ON PROCEDURE INSMAILCAPTION TO SYSDBA;


Код: Выделить всё

SET TERM ^ ;

CREATE PROCEDURE INSMAILDEST (
    subject varchar(255),
    dest integer)
as
declare variable mail_dest integer;
declare variable mail_id integer;
begin
  select id from remoteclient where clientid=:dest into :mail_dest;
  select max(id) from remotemailmessages where subject=:subject into :mail_id;
  insert into remotemailclientmessages (messageref,remoteclientref) values (:mail_id,:mail_dest);
end^

SET TERM ; ^

GRANT SELECT ON REMOTECLIENT TO PROCEDURE INSMAILDEST;

GRANT SELECT ON REMOTEMAILMESSAGES TO PROCEDURE INSMAILDEST;

GRANT INSERT ON REMOTEMAILCLIENTMESSAGES TO PROCEDURE INSMAILDEST;

GRANT EXECUTE ON PROCEDURE INSMAILDEST TO SYSDBA;


Код: Выделить всё

SET TERM ^ ;

CREATE PROCEDURE INSMAILDETAIL (
    subject varchar(255),
    attachedfilename varchar(1024))
as
declare variable mail_id integer;
begin
  select max(id) from remotemailmessages where subject=:subject into :mail_id;
  insert into remotemailattachedfiles (attachedfilename,messageref) values (:attachedfilename,:mail_id);
end^

SET TERM ; ^

GRANT SELECT ON REMOTEMAILMESSAGES TO PROCEDURE INSMAILDETAIL;

GRANT INSERT ON REMOTEMAILATTACHEDFILES TO PROCEDURE INSMAILDETAIL;

GRANT EXECUTE ON PROCEDURE INSMAILDETAIL TO SYSDBA;

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: Формирование писем поселенцам

Сообщение Val » 20.11.2008 13:43

что то поправил
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: Формирование писем поселенцам

Сообщение Val » 16.06.2009 12:34

На СЭД включен экспорт по получении "информации из расчетных документов". Они падают в каталог, откуда их при обработке забирает АС Бюджет и перекладывает в каталог из своих настроек в виде
...
20090609\
20090610\
20090611\
20090615\
...
внутри каждого некоторый набор файлов типа
...
02671F00.BDI
02672F00.BDI
02673F00.BDI
02674F00.BDI
02675F00.BDI
...
3-5 цифра имени файла идентифицируют поселение.

Скрипт который мы используем ищет каталоги соответствующие диапазону дат на форме диалога (рис окно диалог).
Параметр "почтовый каталог" - это то что стоит в настройках АС Бюджет для почтовых сообщений урмщикам.
Параметр "буферный каталог" - это любой каталог.
Параметр "отклонение даты" - это сколько дней назад искать возможные дубликаты (чтоб повторной отправки не было).
Остальные параметры - фильтры.
Скрипт обрабатывает нужные каталоги и на основе файлов в этих каталогах в АС Бюджет формирует письма УРМ соответствующим поселенцам.
Соответствие 3-5 цифры имени файла и поселения задана статически (для других районов надо будет подправить).

Код: Выделить всё

//  автоформирование писем для поселений с файлами полученными из ОФК
//  Ейский район
//  13.02.2008
// 02.05.2009 под пересылку BD файлов, без удаления из исходного каталога
включить "Project";
включить "\Библиотеки\LibRu.lib";
включить "\Библиотеки\ABLtools.lib";
включить "\Библиотеки\SysUtils.lib";    // операции с файлами

константы
  УзелИмя = 'Бюджет\Объекты\Интерфейсы\{5BA0A88A-9B78-44C8-AB3B-765F20230FFF}\настройки\Создание_BD_Параметры';
  //стрПуть = "z:\buffer\";                       // каталог для промежуточной сортировки
 // стрПутьНаОтправку = "z:\messages\";           // каталог с письмами УРМ
 // стрПутьИсх = "G:\Банк\katalog\UFK\OK\";       // каталог с файлами из ОФК
 
переменные
  стрПуть, стрПутьНаОтправку,стрПутьИсх : строка;
  дат : целое;                  // цикл по датам
  дата_нач, дата_кон : целое;
  длг : ДиалогПараметров;
  стрПутьНаОтправкуГотов : строка;
  мас,сдБуфер : статическиеданные;
  фСсылка : целое;
  ОбщееУникальноеИмя : строка;  //
  провНачДата, провКонДата : строка;
  Узел : УзелРеестра;
//====================================================================================================
функция ВыполнитьЗапросКБазе(запрос : строка; сс : статическиеДанные) : целое;
переменные
  фЗапрос : строка;
начало
  результат := -1;     
  попытка
    сс.Закрыть;
    фЗапрос := "[PumpData] { " + запрос + " }";   
    сс.СоединитьБД;
    сс.Запрос := фЗапрос;
    сс.Открыть;
    сс.ВНачало;
    результат := сс.ЧислоЗаписей;
  обязательно
  конец;     
конец;   
//====================================================================================================
функция СоздатьКаталог(фИмя : строка):целое;
переменные
 фИмяФайла : строка;
начало
        findfirst(фИмя + "\*.*",32,фИмяФайла);
        если фИмяФайла <> "" и FileExists(фИмя + "\" + фИмяФайла) тогда
        начало
        //сообщение(Подстрока(фИмяФайла,1,2));
        если (Подстрока(фИмяФайла,1,2)<>"m_" и Диалог.Флаг("ПроверкаНаПустыеКаталоги")) тогда ВызватьОшибку("Промежуточные каталоги не пусты");
        пока findnext(фИмя + "\*.*")<>0 и FileExists(фИмя + "\" + фИмяФайла) делать
                        начало
                                если (Подстрока(фИмяФайла,1,2)<>"m_" и Диалог.Флаг("ПроверкаНаПустыеКаталоги")) тогда ВызватьОшибку("Промежуточные каталоги не пусты");
                        конец;
        конец;
        если не DirectoryExists(фИмя) тогда CreateDir(фИмя);
конец;
//==================================================================================================== 
//  Создает html файл для письма. Пока содержание для всех одинаково
функция ВыбратьТекстовыйФайл(Тип : строка): строка;
 переменные
 УникальноеИмя : строка;
начало
        попытка
        УникальноеИмя := ОбщееУникальноеИмя;
        если не FileExists(стрПутьНаОтправку + УникальноеИмя + ".html") тогда фСсылка := FileCreate(стрПутьНаОтправку + УникальноеИмя + ".html");
        FileClose(фСсылка);
        фСсылка := FileOpen(стрПутьНаОтправку + УникальноеИмя + ".html",1);
       
        результат := стрПутьНаОтправку + УникальноеИмя + ".html";
        выбрать тип из
         "1" : FileWriteln(фСсылка,"Это сообщение ФУ для УРМ ",24);
         иначе ВозбудитьОшибку("Нет такого типа сообщения");
        конец;
         обязательно
               FileClose(фСсылка);
         конец     
конец;   
//====================================================================================================
// возвращает iD сообщения по типу, теме и напоминанию
функция ВыбратьИдСообщения(Тип : строка;Тема : строка;Напоминание : строка): целое;
переменные
 ЗапросСообщений : Строка;
начало
  результат :=-1;
  попытка
    ЗапросСообщений := "select id from remotemailmessages where 1=1";
    если тип<>"" тогда ЗапросСообщений := ЗапросСообщений +  " and textfilename='" + ВыбратьТекстовыйФайл(тип) + "'";
    если  тема<>"" тогда ЗапросСообщений := ЗапросСообщений +  " and subject='" + тема +  "'";
    если напоминание<>"" тогда ЗапросСообщений := ЗапросСообщений +  " and reminder='" + напоминание + "'";
    ВыполнитьЗапросКБазе(ЗапросСообщений,сдБуфер);
    Если сдБуфер.ЧислоЗаписей = 0 тогда  ВозбудитьОшибку("Не найдено сообщение");
    Если сдБуфер.ЧислоЗаписей > 1 тогда  ВозбудитьОшибку("Больше 1 сообщения найдено");
    результат := сдБуфер.ПолеПоИмени("ID").КакЦелое;
  обязательно
  конец;
конец;   
//====================================================================================================
функция СоздатьЗаголовокПисьма(Тип : строка;Тема : строка;Напоминание : целое): целое;
переменные
        фЗапрос : строка;
начало
        фЗапрос := "insert into remotemailmessages (subject,textfilename,reminder,createdate) values ('" + тема + "','" + ВыбратьТекстовыйФайл(тип) + "','" + ЦелоеВСтроку(напоминание)+ "','NOW')";
        //Сообщение(фЗапрос);
        ВыполнитьЗапрос(фЗапрос);     
конец;   
//====================================================================================================
функция СоздатьПолучателяПисьма(ИД : целое;Получатель:Целое): целое;
переменные
        фЗапрос : строка;
начало
        фЗапрос := "insert into remotemailclientmessages (messageref,remoteclientref) values ('" + ЦелоеВстроку(ИД) + "','" + ЦелоеВстроку(Получатель) + "')";
        //Сообщение(фЗапрос);
        ВыполнитьЗапрос(фЗапрос);     
конец;   
//====================================================================================================
функция СоздатьВложениеПисьма(стрИмяФайла:строка;ИД : целое): целое;
переменные
        фЗапрос : строка;
начало
        фЗапрос := "insert into remotemailattachedfiles (attachedfilename,messageref) values ('" + стрИмяФайла + "','" + ЦелоеВстроку(ИД) + "')";
        //Сообщение(фЗапрос);
        ВыполнитьЗапрос(фЗапрос);     
конец; 
//====================================================================================================
функция ПроверкаОтсылки(фИмя : строка) : строка;
переменные
  фМас : статическиеДанные;
  фф : строка;
начало
        фМас := создатьстатическиеданные;
        результат := "";
        провКонДата := ДатаВСтроку(ТекущаяДата);
        провНачДата := ДатаВСтроку(РасширДатаВОбычную( ОбычнаяДатаВРасшир(ТекущаяДата) - СтрокаВцелое(длг.Значение("ОтклонениеДаты")) )); 
        ВыполнитьЗапросКБазе("select * from remotemailmessages m,remotemailattachedfiles f where m.id=f.messageref and m.createdate>'" + провНачДата + "' and m.createdate<'" + провКонДата + "'" ,фМас);
        фМас.ВНачало;
        пока не ФМас.ВКонце делать
        начало
        фф := ExtractFileName(фМас.ПолеПоИмени("attachedfilename").какСтрока);
        если фф = фИмя тогда
        начало
                результат := "Уже отсылался файл " + фИмя + "! найден : " + фМас.ПолеПоИмени("attachedfilename").какСтрока + " : " + фМас.ПолеПоИмени("subject").какСтрока + " : " + фМас.ПолеПоИмени("createdate").какСтрока + " Продолжить обработку?";
                если Сообщение(результат, 1, кнопка_Да + кнопка_Нет)=результат_Да тогда результат := "";
        конец;   
        фМас.Следующая;               
        конец;     
конец;
//====================================================================================================
функция ПроверкаОтсылкиВсех(фМас : статическиеДанные) : строка;
начало
//       результат := "";
//        фМас.ВНачало;
//        пока не ФМас.ВКонце делать
//        начало 
//                результат := ПроверкаОтсылки(фМас.ПолеПоИмени("имя").КакСтрока);
//                если результат <> "" тогда
//                начало
//                        если Сообщение(результат, Соообщение_Предупреждение, кнопка_Да + кнопка_Нет)=результат_Нет тогда ВызватьОшибку("Прервано пользователем с целью недопущения повторной обработки")
//                        иначе результат := "";
 //               конец;
//        фМас.Следующая;   
//        конец;     
конец;
//====================================================================================================
функция СоздатьКаталоги: целое;
начало
  результат :=-1;
  попытка
        СоздатьКаталог(стрПуть + "671");
        СоздатьКаталог(стрПуть + "672");
        СоздатьКаталог(стрПуть + "673");
        СоздатьКаталог(стрПуть + "674");
        СоздатьКаталог(стрПуть + "675");
        СоздатьКаталог(стрПуть + "676");
        СоздатьКаталог(стрПуть + "677");
        СоздатьКаталог(стрПуть + "678");
        СоздатьКаталог(стрПуть + "679");
        СоздатьКаталог(стрПуть + "680");
        СоздатьКаталог(стрПуть + "681");
        СоздатьКаталог(стрПуть + "50");
        СоздатьКаталог(стрПуть + "999");
  обязательно
  конец;     
конец;   
//====================================================================================================
функция ВернутьНомерКлиента(Имя : строка) : целое;
начало
  результат :=-1;
  попытка
    выбрать имя из
       "александровское" : результат:= 1883439;
       "должанское"  : результат:= 1883566;
       "ейское" : результат:= 1887680;
       "камышеватское" : результат:=1885677;
       "копанское" : результат:=1887754;
       "красноармейское" : результат:= 1887653;
       "кухаривское" : результат:=1885637;
       "моревское" : результат:=1885657;
       "трудовое" : результат:=1887711;
       "ясенское" : результат:=1887769;
       "ейск" : результат:=2801084;
       "урм" : результат:=999;
       "671" : результат:= 1883439;
       "672"  : результат:= 1883566;
       "674" : результат:= 1887680;
       "675" : результат:=1885677;
       "676" : результат:=1887754;
       "677" : результат:= 1887653;
       "678" : результат:=1885637;
       "679" : результат:=1885657;
       "680" : результат:=1887711;
       "681" : результат:=1887769;
       "673" : результат:=2801084;
     конец; 
  обязательно
  конец;     
конец;   
//====================================================================================================
// создает в каталоге сообщений УРМ подкаталог для хранения вложений письма
функция СоздатьКаталогНаОтправку(доб : строка) : строка;
переменные
   УникальноеИмя : строка;
начало
  результат :=-1;
  попытка
        УникальноеИмя := ОбщееУникальноеИмя + "_files";
        CreateDir(стрПутьНаОтправку + УникальноеИмя);
        результат := стрПутьНаОтправку + УникальноеИмя;
  обязательно
  конец;     
конец;     
//====================================================================================================
// на основе данных полученных "проверитьКаталог" формируем письмо и переносим файлы из промежуточного
функция ОбработатьКаталог(имя:строка;фмас : статическиеданные);
переменные
  времИмя : строка;
начало
 //сообщение(фмас.ЧислоЗаписей);
 если фмас.ЧислоЗаписей >0 и фмас.ПолеПоИмени("имя").КакСтрока<>"" тогда
 начало
        //показатьданные(фмас);
        фмас.вначало;
        СоздатьЗаголовокПисьма(1,ОбщееУникальноеИмя,0);
        СоздатьПолучателяПисьма(ВыбратьИДСообщения(1,ОбщееУникальноеИмя,0),ВернутьНомерКлиента(имя));
        стрПутьНаОтправкуГотов := создатькаталогнаотправку(имя);
        пока не фмас.вконце делать
        начало
                renamefile(стрПуть + имя  + "\" +  фмас.ПолеПоИмени("имя").КакСтрока, стрПутьНаОтправкуГотов + "\" +  фмас.ПолеПоИмени("имя").КакСтрока);
                времИмя := стрПутьНаОтправкуГотов + "\" +  фмас.ПолеПоИмени("имя").КакСтрока;
                СоздатьВложениеПисьма(времИмя,ВыбратьИДСообщения(1,ОбщееУникальноеИмя,0));
                фмас.следующая;     
        конец;       

 конец;
конец;
//====================================================================================================
// получаем в промежуточную таблицу информацию о содержиимом каталога
функция проверитьКаталог(имя : строка;фмас : статическиеданные) : целое;
переменные
фИмя : строка;
начало
  результат :=-1;
  попытка
     findfirst(стрПуть + имя + "\*.*",32,фИмя);
     если фИмя<>"" и  FileExists(стрПуть + имя + "\" + фИмя) тогда
     начало
        фмас.Вставить;
        фмас.ПолеПоИмени("имя").КакСтрока := фИмя;
        фмас.ПолеПоИмени("признак").КакЦелое := FileGetAttr(стрПуть + имя  + "\" +  фИмя);
        пока findnext(фИмя)<>0 и FileExists(стрПуть + имя + "\" + фИмя) делать
                        начало
                                 фмас.Вставить;
                                 фмас.ПолеПоИмени("имя").КакСтрока := фИмя;     
                                 фмас.ПолеПоИмени("признак").КакЦелое := FileGetAttr(стрПуть + имя  + "\" +  фИмя);
                        конец;
     конец;
  обязательно
          фмас.сохранить;
          findclose();
  конец;
конец;   
// Комментарий
функция ПроверкаНеобходимости(стр : строка) : строка;
начало
        результат := "нет";
               если Подстрока(стр,3,3)="671" и Диалог.Флаг("671_александровское") тогда результат := "да";
               если Подстрока(стр,3,3)="672" и Диалог.Флаг("672_должанское") тогда результат := "да";
               если Подстрока(стр,3,3)="674" и Диалог.Флаг("674_ейское") тогда результат := "да";
               если Подстрока(стр,3,3)="675" и Диалог.Флаг("675_камышеватское") тогда результат := "да";
               если Подстрока(стр,3,3)="676" и Диалог.Флаг("676_копанское") тогда результат := "да";
               если Подстрока(стр,3,3)="677" и Диалог.Флаг("677_красноармейское") тогда результат := "да";
               если Подстрока(стр,3,3)="678" и Диалог.Флаг("678_кухаривское") тогда результат := "да";
               если Подстрока(стр,3,3)="679" и Диалог.Флаг("679_моревское") тогда результат := "да";
               если Подстрока(стр,3,3)="680" и Диалог.Флаг("680_трудовой") тогда результат := "да";
               если Подстрока(стр,3,3)="681" и Диалог.Флаг("681_ясенское") тогда результат := "да";
               если Подстрока(стр,3,3)="673" и Диалог.Флаг("673_ейск") тогда результат := "да";

конец;


//====================================================================================================
// переносим файлы из каталога с файлами ОФК в промежуточный каталог
функция проверитьКаталогИсх(фстрПутьИсх : строка;фстрПуть : строка) : целое;
переменные
фИмя : строка;
начало
  результат :=-1;
  попытка
     findClose;
     findfirst(фстрПутьИсх + "*.*",32,фИмя);
     если фИмя<>"" и FileExists(фстрПутьИсх + фИмя) тогда
        начало
         если СтрокаВЦелое(подстрока(фИмя,1,3))>0 тогда
         начало
          если (ПроверкаОтсылки(фИмя) = "" и ПроверкаНеобходимости(фИмя) = "да") тогда copyfile(фстрПутьИсх + фИмя,фстрПуть + подстрока(фИмя,3,3)+ "\" + фИмя,0)
         конец
         иначе copyfile(фстрПутьИсх + фИмя,фстрПуть + "0" + "\" + фИмя,0);
               
        пока findnext(фИмя)<>0 и FileExists(фстрПутьИсх + фИмя) делать
                        начало
                                если фИмя<>"" и FileExists(фстрПутьИсх + фИмя) тогда
                                        начало
                                                 если СтрокаВЦелое(подстрока(фИмя,1,3))>0 тогда
                                                          начало
                                                                  если (ПроверкаОтсылки(фИмя) = "" и ПроверкаНеобходимости(фИмя) = "да") тогда copyfile(фстрПутьИсх + фИмя,фстрПуть + подстрока(фИмя,3,3)+ "\" + фИмя,0)
                                                          конец
                                                иначе copyfile(фстрПутьИсх + фИмя,фстрПуть + "0" + "\" + фИмя,0);
                                        конец;         
                        конец;
               
        конец;
  обязательно
  конец;     
конец;
//====================================================================================================
// глобальный вызов для обработки одного каталога
функция Вызов(фИмя : строка;фмас : статическиеданные) : целое;
начало
          фмас := СоздатьСтатическиеДанные;
          фмас.добавитьстроковоеполе("имя",255);
          фмас.добавитьцелоеполе("признак");
          фмас.открыть;
          фмас.редактировать;
         ОбщееУникальноеИмя := фимя + ФорматироватьВремя("YYMMDD" + "HHMMSS", ТекущаяДата);
         проверитькаталог(фимя,фмас);
         //проверкаОтсылкиВсех(фмас);
         обработатьКаталог(фимя,фмас);
                 
конец;
//====================================================================================================

начало
        попытка                Узел := Реестр.Узел(УзелИмя); 
                сдБуфер := СоздатьСтатическиеДанные;                    // для запросов к базе
               
              //  стрПуть := "z:\buffer\";
              //  стрПутьНаОтправку := "z:\messages\";
              //  стрПутьИсх := "G:\Банк\katalog\UFK\OK\";
               
                длг := Диалог;
                //-----------------------------------------
                длг.Очистить;
                длг.Заголовок := "Обработка пакетов";
                длг.Добавить("НачальнаяДата","Дата1",0,Календарь,"00.00.0000");
                длг.Добавить("КонечнаяДата","Дата2",0,Календарь,"00.00.0000");
                длг.Добавить("Каталог исходных","Каталог_исх", 0, 8, "");
                длг.Добавить("Буферный каталог","Каталог_буф", 0, 8, "");
                длг.Добавить("Почтовый каталог","Каталог_почта", 0, 8, "");
                длг.Добавить("ОтклонениеДаты","ОтклонениеДаты",0,0,"");
                длг.Добавить("ПроверкаНаПустыеКаталоги","ПроверкаНаПустыеКаталоги",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("Поселения","Поселения",0,0);
                длг.Добавить("671_александровское","671_александровское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("672_должанское","672_должанское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("674_ейское","674_ейское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("673_ейск","673_ейск",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("675_камышеватское","675_камышеватское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("676_копанское","676_копанское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("677_красноармейское","677_красноармейское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("678_кухаривское","678_кухаривское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("679_моревское","679_моревское",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("680_трудовой","680_трудовой",1,Проверка+ТолькоЧтение,"");
                длг.Добавить("681_ясенское","681_ясенское",1,Проверка+ТолькоЧтение,"");
               
                //-----------------------------------------               
                длг.Значение("Дата1") := (ТекущаяДата);
                длг.Значение("Дата2") := (ТекущаяДата);
                длг.Флаг("ПроверкаНаПустыеКаталоги") := 1;
                длг.Флаг("671_александровское") := 1;
                длг.Флаг("672_должанское") := 1;
                длг.Флаг("674_ейское") := 1;
                длг.Флаг("673_ейск") := 1;
                длг.Флаг("675_камышеватское") := 1;
                длг.Флаг("676_копанское") := 1;
                длг.Флаг("677_красноармейское") := 1;
                длг.Флаг("678_кухаривское") := 1;
                длг.Флаг("679_моревское") := 1;
                длг.Флаг("680_трудовой") := 1;
                длг.Флаг("681_ясенское") := 1;
                длг.Значение("ОтклонениеДаты") := 3;   // сколько дней назад проверять отосланные файлы
                длг.Значение("Каталог_исх") := Узел.Значение("КаталогИсходных").КакСтрока; //"G:\Банк\katalog\UFK\OK\";
                длг.Значение("Каталог_буф") := Узел.Значение("КаталогБуфер").КакСтрока; //"z:\buffer\";
                длг.Значение("Каталог_почта") := Узел.Значение("КаталогПочта").КакСтрока;
                //-----------------------------------------
                если не (длг.выполнить) тогда выход;
                стрПуть := длг.Значение("Каталог_буф");
                стрПутьНаОтправку := длг.Значение("Каталог_почта");
                стрПутьИсх :=  длг.Значение("Каталог_исх");
                Узел.Значение("КаталогИсходных").КакСтрока := длг.Значение("Каталог_исх");
                Узел.Значение("КаталогБуфер").КакСтрока := длг.Значение("Каталог_буф");
                Узел.Значение("КаталогПочта").КакСтрока := длг.Значение("Каталог_почта");
                СоздатьКаталоги;     // подкаталоги в промежуточном каталоге
                дата_нач := ОбычнаяДатаВРасшир(СТРОКАВДАТУ(длг.Значение("Дата1")));
                дата_кон := ОбычнаяДатаВРасшир(СТРОКАВДАТУ(длг.Значение("Дата2")));
                Если дата_нач>дата_кон тогда вызватьошибку("НачальнаяДата больше чем КонечнаяДата");
                Если дата_кон-дата_нач>СтрокаВЦелое(Диалог.Значение("ОтклонениеДаты")) тогда вызватьошибку("Разница между НачальнойДатой и КонечнойДатой больше 3 дней");           
               
                если не(DirectoryExists(стрПуть)) тогда ВозбудитьОшибку("Нет исходного каталога " + стрПуть);
                если не(DirectoryExists(стрПутьНаОтправку)) тогда ВозбудитьОшибку("Нет каталога сообщений " +стрПутьНаОтправку);
                если не(DirectoryExists(стрПутьИсх)) тогда ВозбудитьОшибку("Нет каталога исходных " +стрПутьИсх);
               
               //от дат:=дата_нач до дата_кон делать ПроверитьКаталогИсх(стрПутьИсх,стрПуть); // все дни перегоняем в промежуточный         
               от дат:=дата_нач до дата_кон делать ПроверитьКаталогИсх(стрПутьИсх + ЦелоеВСтроку(дат) + "\" ,стрПуть); // все дни перегоняем в промежуточный           
               
               если Диалог.Флаг("671_александровское") тогда вызов(671,мас);
               если Диалог.Флаг("672_должанское") тогда вызов(672,мас);
               если Диалог.Флаг("674_ейское") тогда  вызов(674,мас);
               если Диалог.Флаг("675_камышеватское") тогда  вызов(675,мас);
               если Диалог.Флаг("676_копанское") тогда вызов(676,мас);
               если Диалог.Флаг("677_красноармейское") тогда вызов(677,мас);
               если Диалог.Флаг("678_кухаривское") тогда вызов(678,мас);
               если Диалог.Флаг("679_моревское") тогда вызов(679,мас);
               если Диалог.Флаг("680_трудовой") тогда вызов(680,мас);
               если Диалог.Флаг("681_ясенское") тогда вызов(681,мас);
               если Диалог.Флаг("673_ейск") тогда вызов(673,мас);
               
               обязательно
        конец;
конец.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: Формирование писем поселенцам

Сообщение Val » 22.06.2009 11:26

Скрипт для пересылки обычных файлов урмщикам (работает в связке со скриптом пересылки файлов ОФК).
Делаем почтовый каталог с подкаталогами каждого поселения.
Юзеры вываливают в эти каталоги архивные файлы на отправку (автоархивирование не делал! будьте аккуратны, если каждому поселению выложить по 1Мб, то каналы будут долго заняты), говорят программистам - те нажимают кнопку для данного скрипта, потом кнопку для отсылки файлов ОФК. Данный скрипт только перемещает файлы на отправку в буфферный каталог, а непосредственно формирует письма скрипт отсылки файлов ОФК.

Код: Выделить всё

//  автоформирование писем для поселений с файлами полученными из ОФК
//  Ейский район
//  13.02.2008
включить "Project";
включить "\Библиотеки\LibRu.lib";
включить "\Библиотеки\ABLtools.lib";
включить "\Библиотеки\SysUtils.lib";    // операции с файлами

константы
  УзелИмя = 'Бюджет\Объекты\Интерфейсы\{5BA0A88A-9B78-44C8-AB3B-765F20230FFF}\настройки\Создание_Параметры';
  стрПуть = "z:\buffer\";                       // каталог для промежуточной сортировки
  стрПутьИсх = "U:\Почта\Почтовые ящики\Поселения\";       // каталог с файлами из ОФК
 
//====================================================================================================
// переносим файлы из каталога с файлами ОФК в промежуточный каталог
функция ПереместитьФайлы(фстрПутьИсх : строка;фстрПуть : строка) : целое;
переменные
фИмя : строка;
начало
  результат :=-1;
  попытка
     findClose;
     findfirst(фстрПутьИсх + "*.*",32,фИмя);
     если фИмя<>"" и FileExists(фстрПутьИсх + фИмя) тогда
        начало
          renamefile(фстрПутьИсх + фИмя, фстрПуть + "\m_" + фИмя);
          пока findnext(фИмя)<>0 и FileExists(фстрПутьИсх + фИмя) делать
             начало
               если фИмя<>"" и FileExists(фстрПутьИсх + фИмя) тогда renamefile(фстрПутьИсх + фИмя,фстрПуть + "\m_" + фИмя);
             конец; 
        конец;
  обязательно
  конец;     
конец;
//====================================================================================================

начало
        попытка
               // Узел := Реестр.Узел(УзелИмя); 
                //сдБуфер := СоздатьСтатическиеДанные;                    // для запросов к базе
                ПереместитьФайлы(стрПутьИсх + "Александровское\",стрПуть + "671\");
                ПереместитьФайлы(стрПутьИсх + "Должанское\",стрПуть + "672\");
                ПереместитьФайлы(стрПутьИсх + "Ейское\",стрПуть + "674\");
                ПереместитьФайлы(стрПутьИсх + "Камышеватское\",стрПуть + "675\");
                ПереместитьФайлы(стрПутьИсх + "Копанское\",стрПуть + "676\");
                ПереместитьФайлы(стрПутьИсх + "Красноармейское\",стрПуть + "677\");
                ПереместитьФайлы(стрПутьИсх + "Кухаривское\",стрПуть + "678\");
                ПереместитьФайлы(стрПутьИсх + "Моревское\",стрПуть + "679\");
                ПереместитьФайлы(стрПутьИсх + "Трудовое\",стрПуть + "680\");
                ПереместитьФайлы(стрПутьИсх + "Ясенское\",стрПуть + "681\");
                ПереместитьФайлы(стрПутьИсх + "Ейск\",стрПуть + "673\");
               обязательно

        конец;
конец.

Аватара пользователя
Name
старший сотрудник
старший сотрудник
Сообщения: 296
Зарегистрирован: 09.06.2004 11:43
Откуда: Мостовской
Контактная информация:

Re: Формирование писем поселенцам

Сообщение Name » 23.06.2009 17:44

Спасибо!!!


Вернуться в «АС Бюджет»

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex и 2 гостя

cron