Формирование отчета по Excel-скому шаблону (Другой вариант) доработан
Скачать (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
Создаем 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) )