Формирование отчета по Excel-скому шаблону (Другой вариант) доработан

Автор:Uvarov
Дата:29.07.2005
Просмотров:2754
Скачиваний:786
Оценка:, Оценок - 2
Скачать (rar-файл; Размер - 49143)

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

Описание

1.Мысль
Создаем EXCEL-ский шаблон в ячейке А1 первого листа которого
находятся инструкции по наполнению этого шаблона смыслом:

LIST(2); DN(E3); DK(F3); IN(C,20,40,D); OUT(C,20,39,E); PROTOCOL(3); OUT(C,40,40,E); PROTOCOL(0); NEXT(1,A2);

Затем выполняем макрос RepXLS.mac, который читает эти инструкции
и пытается их выполнить...
В данном примере будет выполнено следующее:
LIST(2); - Устанавливается номер листа с которым будут производится дальнейшие действия
DN(E3); - В ячейку E3 листа 2 (установленного выше) выводится дата начала периода расчета.
DN(F3); - В ячейку F3 листа 2 выводится дата конца периода расчета.
IN(C,20,40,D); - Из ячейки С20 берется список счетов и по ним находятся остатки на начало периода. результат заносится в ячейку D20. Затем тоже самое проделывается с ячейками С21->D21, C22->D22,... C40->D40.

OUT(C,20,39,E); - тоже самое но только выбираются остатки на конец периода.
PROTOCOL(3); - Включает вывод протокола. Есть три уровня протокола:
1 -вывод формул
2 -вывод формул и итогов по БС
3 -вывод формул и итогов по БС и ЛС
OUT(C,40,40,E); - надеюсь понятно.
PROTOCOL(0); - Отключает вывод протокола.
NEXT(1,A2); - Выбирает инструкции расчета из ячейки А2 первого листа и продолжает их выполнение. Кстати эта инструкция может стоять в любом месте в списке инструкций. Выполнение этой инструкции не означает что следующие за ней инструкции не выполняются.


Примеры заполнения ячейки со списком БС и ЛС:
'3
'301
'30110
'455П
'42302...42307,40701...40709
'401...445А,455,-45515,-422А, 20202,-20202810100000000023
Начинать заполнение ячейки лучше с одиночной кавычки чтобы она всегда воспринималась экзелем как строка

2.Настройка

катаог MAC с подкаталогами скопировать в МАС RSBank-а.
Шублоны - Положить на общедоступный диск.
В файле MAC\OWNER\REPORT\RepXLS.mac настроить путь на шаблоны
PRIVATE VAR PathTempl="L:\\Шаблоны\\";


3.Запуск
Для ленивых MAC\main.mac
для остальных MAC\OWNER\REPORT\RepXLS.mac

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

 12.08.2005 г.

Добавленны функции:
   DEBET(cтолбец1,строка1,строка2,столбец2)  - Дебетовые обороты по счетам
   KREDIT(cтолбец1,строка1,строка2,столбец2) - Кредитовые обороты по счетам
   DEBET2(cтолбец1,строка1,строка2,столбец2,столбец3)  - Дебетовые обороты по счетам
   KREDIT2(cтолбец1,строка1,строка2,столбец2,столбец3) - Кредитовые обороты по счетам
                столбец1 - указывает столбец в котором находятся ячейки
                           со списками БС и ЛС для которых вычисляется оборот
                строка1  - начальная строка для которой выполняется вычисление
                строка2  - конечная строка для которой выполняется вычисление
                столбец2 - указывает столбец в который заносятся результы вычисления
                столбец3 - указывает столбец в котором находятся ячейки
                           со списками БС и ЛС в корреспонденции с которыми вычисляются обороты

     DEBET3(cтолбец1,строка1,строка2,столбец2,столбец3)  - Дебетовые обороты по счетам
     KREDIT3(cтолбец1,строка1,строка2,столбец2,столбец3) - Кредитовые обороты по счетам
             столбец1 - указывает столбец в котором находятся ячейки
                        со списками БС и ЛС для которых вычисляется оборот
             строка1  - начальная строка для которой выполняется вычисление
             строка2  - конечная строка для которой выполняется вычисление
             столбец2 - указывает столбец в который заносятся результы вычисления
             столбец3 - указывает столбец в котором находятся ячейки
                        со списками БС и ЛС за исключением корреспонденции
                        с которыми вычисляется обороты


  ТЕПЕРЬ МОЖНО ФИЛЬТРОВТЬ СЧЕТА ПО ЗНАЧЕНИЯМ ДРУГИХ ПОЛЕЙ ТАБЛИЦ
  account.dbt( obacnt.dbt) client.dbt и pcacc.dbt
  ИСПОЛЬЗУЯ ФИЛЬТРЫ НА СЧЕТА:
    FLT_CLR() - Очистить фильтры
    FLT_OR()  - Добавить следующую группу фильтров по условию ИЛИ
    FLT(not,table,field,from,to) - Добавить фильтр по диапазону
    FLT_SUB(not,table,field,str,sensetive) - Добавить фильтр по подстроке
           not       - Отрицание условия (T/F)
           table     - имя таблицы (пока доступны: account,client,pcacc)
           field     - имя поля в таблице
           from, to  - диапазон значений
           str       - искомая подстрока
           sensetive - чувствительность к регистру (T/F)

     Если запись в соответствующей таблице для указанного счета или поле
     не найдено то условие считается не выполненым 
     ПРИМЕР ФИЛЬТРА:
     FLT(T,client,UserType,A,C); FLT(F,client,client,1,1000); FLTOR(); FLT_SUB(F,pcacc,usertype,В,T)
    Означает:
    (
       (NOT ((Client.UserType>="A") AND (Client.UserType<="C")) ) AND 
       ((Client.Client>=1) AND (Client.Client<=1000))
    ) OR
    (
      (index(strupr(pcacc.UserType),strupr("В"))>0)
    )