LOM.d32 - Библиотека дополнительных классов для RSL

Автор:moleg
Дата:10.06.2005
Просмотров:2487
Скачиваний:776
Оценка:, Оценок - 2
Скачать (RAR-файл; Размер - 87486)

Обсудить в форуме

Описание

Библиотека дополнительных классов для RSL.
1. Виртуальная таблица
2. Сравнение строк с шаблоном
3. Копирование файлов по протоколу FTP

Текст примера

 -----------------------------------------------------------------------
Класс-контейнер TLomCursor(pBaseClass:Object)
-----------------------------------------------------------------------
Виртуальная таблица - предназначена для хранения временных данных в виде 
таблицы не создавая её физически. Для определения структуры полей 
используется пользовательский базовый класс (pBaseClass).
Пример базового класса: 
                                                                
CLASS TAcc
    VAR Account  = "";
    VAR Chapter  = 0;
    VAR Sum      = $0.00;
    VAR RestDate = TArray;
END;

В качестве полей можно использовать объекты(например TArray).

Методы класса:  
  аналогичные методам класса Tbfile:
    Rewind, Next, Prev, Insert, Delete, Update, GetDirect, GetPos,
    Nrecords, FldIndex, Item;
  специфичные методы:
     Sort() - Сортировка. В качестве параметров передаются наименования 
              полей или их номера(нумерация с 0) через запятую. Если в
              качестве последнего параметра передается false, то сорти-
              ровка происходит по убыванию. Иначе, если последний пара-
              метр равен true или не является типом V_BOOL, сортировка
              происходит по возрастанию. После выполнения метода 
              происходит rewind.
              пример: Sort ("Chapter", "Account");
                      Sort (1,0);
                      Sort (1,0,false);

     Seek(pName, pParm[, pRewind]) - Поиск записи у которой поле pName 
          равно значению pParm. Если параметр pRewind равен True или 
          не установлен, то предварительно выполняется Rewind, иначе 
          поик идет с текущей записи.

При добавлении новой записи необходимо использовать метод Clear:
  MyAcc = TLomCursor(TAcc);
  MyAcc.Clear;
  MyAcc.Rec.Account = "999981000000000000";
  MyAcc.Rec.Chapter = 3;
  MyAcc.Rec.Oper    = 9999;
  MyAcc.Insert;


Объекты данного класса можно использовать в Grid-е библиотеки VCH, если
в файле VCH.MAC в методе Grid.AddField(fld:TField) заменить строку
idx = FldIndex(dbfile, fld.Name) на idx = dbfile.FldIndex(fld.Name).

Необходимо так же учитывать то, что чем больше записей, тем больше
требуется для объекта оперативной памяти на сервере. Рекомендуемый
размер виртульной таблици не более 20 тыс. записей.

-----------------------------------------------------------------------
Класс для работы с шаблонами TLomTmpl([Parm:string])
-----------------------------------------------------------------------
Свойства: Separator - признак учета разделителя в шаблоне(;).
                      По умолчанию равен true. Используется для
                      метода Compare

Метод для сравнения строк:   

          Compare(Строка:sting,Шаблон:string) - сравнивает строку с 
          шаблоном. Если строка соответсвует шаблону, то возвращает 
          true, иначе false.
           
          Пример: 

          Obj.compare("4550181000000000111","455?1*")
          Obj.compare("4550181000000000111","455?1*;455?2*");

Методы для сравнения счетов с установленным шаблоном:   

          SetTmplAcc(Строка:string) - устанавливает шаблон для работы 
          со счетами по первым символам, понимает знаки "!", ":",
          "?",";" и ",". Можно установить шаблон и в момент инициа-
          лизайии объекта, есле передать ему первый параметр в качестве
          шаблона.

          !!! Не поддерживает знак "*" !!!
            Пример: Obj = TLomTmpl();
                    Obj.SetTmplAcc("450:457(02,04:06);!45305");
                    Или так:
                    Obj = TLomTmpl("450:457(02,04:06);!45305");

                    В данном примере указан шаблон для балансовых 
                    счетов : 45002, 45004, 45005, 45006, 45102 и т.д.,
                    исключая балансовый счет 45305.


         
          CompareAcc(Строка:string) - метод сравнивает строку с 
          шаблоном указанным функцией SetTmplAcc(Строка:string).
          Если строка соответсвует шаблону, то возвращает true, 
          иначе false.

          Пример: 

          import lom;
          file acc(account);
          ob = TLomTmpl;
          ob.SetTmplAcc("450:457(02,04:06);!45305");
          InitProgress(Nrecords(acc),"","Просмотр лицевых счетов");
          rewind(acc); i = 0;
          while(next(acc))
            i = i + 1; UseProgress(i);
            if(ob.CompareAcc(acc.Account))
              println(acc.Account);
            end;
          end;
          RemProgress();

Методы работы с формулами-шаблонами для счетов:   

          Допускается работа с формулами типа:
            1. "455(01:02) + 454(01,02,03)/423*422";
            2. "455(01:02) + Если(455>454, Число(1), Число(2))";

          Для работы с формулой необходимо:
            1. Установить формулу методом SetTmplAcc(Формула:string)
               или указать параметр в момент инициализации объекта.
            2. Заполнить значения из формулы с помощью методов
               NextTmpl(Строка:string) и SetValue(val);
            3. Получить результат методом GetValue - возвращает
               значение типа V_DOUBLE;

          SetTmplAcc(Строка:string) - устанавливает формулу.

          NextTmpl(Формула:string) - переход к следующему элементу
          формулы, при успешном выполнении вернёт true и установит
          значение Формула равным этому элементу. 

          SetValue(val) - устанавливает на место текщего элемента
          значение val. Val может быть следующих типов :
          V_DOUBLE, V_DOUBLEL, V_MONEY, V_MONEYL, V_INTEGER.
          При установке, значение преобразуется в тип V_DOUBLE.

          GetValue() - возвращает результат формулы.

          GetFormula() - возвращает формулу. Если метод вызван
          после GetValue(), то возвращает формулу где все элементы
          заменены на их результат. 

          Refresh() - возвращает позицию для NextTmpl в начало формулы.

          В формулах можно использовать функцию ЕСЛИ(IFF), которая 
          аналогична такой же в MS EXCEL.

          Для ввода в формулу любого не изменяемого значения 
          предусмотрена функция ЧИСЛО(VAL).

          Пример: 

          import lom, BankInter;
          file acc(account);
          
          var МежфилРасчетыПасс = 
          "ЕСЛИ((303(02,04)-303(01,03,05))<ЧИСЛО(0),303(01,03,05),ЧИСЛО(0))";
          var ob = TLomTmpl, CurAcc, stat, Result;

          ob.SetTmplAcc(МежфилРасчетыПасс);
          while(ob.NextTmpl(CurAcc))
             Result = $0.00;
             acc.Account = CurAcc;
             stat = GetGE(acc);
             while(stat and ob.Compare(acc.account,CurAcc+"*"))
               Result = Result + RestA(acc.account);
               stat = Next(acc);
             end;
             ob.SetValue(Result);
          end;
          println(ob.GetValue);
          println(ob.GetFormula);



-----------------------------------------------------------------------
TLomFTP() - Клиент FTP
-----------------------------------------------------------------------
Класс для копирования файлов по протоколу FTP;
Свойства: 
 szProxy   - Адрес Proxy в локальной сети         
 szHost    - Адрес FTP-сервера                    
 intPort   - Порт                                 
 FlagActv  - Режим: false - пассивный(по умолчанию),true - активный
 szDir     - Директория поиска файлов на сервере               
 szUser    - Логин                                
 szPass    - Пароль                              
 TmplFile  - Шаблон файлов(по умолчанию "*.*")                        
 isDelete  - Признак удаления файлов c сервера(по умолчанию false)             
 szLoclDir - Локальный путь для копирования файлов
 ReportArr - Список полученных файлов. Имеет следующие свойства:
             FileName - имя файла
             Message  - сообщение о результате копирования
             CodeErr  - код ошибки

Методы:
  Connect       - установить соединений(при успехе вернет true)
  CloseConnect  - разорвать соединение
  CopyFile      - поиск и копирование файлов(при успехе вернет true)