Все отчеты формируемые с помощью данных баз построены по одной схеме, поэтому я разберу одну из них более подробно, а в остальных только кратко дам описание.
“ОТЧЕТЫ”-“Списки по начислению”
При выборе этого пункта формируется отчет для каждого жильца с суммами начислений по каждой услуге и отдельно начисления по льготам, показывается сколько оплачено и остаток если остаток положительный, то это сумму необходимо заплатить плательщику за пользование услугами, если отрицательный то эта сумма должна перейти на следующий месяц в счет будующих платежей за услуги. Также в шапке по каждому жильцу выводится дата оплаты, количество проживающих, из них количество льготников, занимаемая площадь. (см. прилож. 3 стр.1). формирование отчета выполняется в процедуре SP_NACH (см. прилож. 1.7 стр. 1). В первых строках убирается меню отчетов с экрана (HIDE POPUP VIEV), затем проверяется значение переменной _PAD_OTCH, она должна иметь значение “Истины” (.T.), если ее значение “Ложь” (.F.), то значит выполнялась процедура “Дополнения\Изменения” и появится системное окно, с просьбой сделать слияния расчетов. (см. выше).
Затем переопределяется клавиша F1 для открытия в окне помощь подсказку по этой процедуре, в переменную “i” заносится номер текущего месяца (MONTH(DATE())), для включения его в имя файла, чтобы в последующем было легко опознать данные файла по его имени. Например в переменной формируется имя за март месяц (T=’NACH-’+ALLTRIM(STR(i)))+’.’+’txt’, где “i” это цифра три и в результате получится файл NACH-3.TXT, что означает отчет за март (3) по начислениям (NACH). Эта переменная нужна чтобы после завершения формирования отчета его, с помощью макроподстановки (EVALUATE(‘T’)или(&T)) , можно было открыть в окне для просмотра и(или) редактирования. Ниже определяется это окно, оно не определяется заранее, для того чтобы его можно было закрыть с помощью мыши, щелкнув в левом углу по прямоугольнику (Опции “SYSTEM CLOSE”).
Далее с помощью команды SET ALTERNATE TO <имя файла> создается альтернативный файл и командой SET ALTERNATE ON он открывается для внесения в него данных, одновременно командой SET CONSOLE OFF выдача на экран формируемых данных не производится.
Формирование отчета выполняется с помощью циклов, а так как некоторые данные хранятся только в полях плательщика, то используются переменные для хранения данных которые будут выводится в файл и переменные позволяющие организовать циклы это:
Определяются два массива и переменные для вывода данных в файл:
NACH(12,1)-для хранения сумм начислений по квартплате каждой услуге, итоговых сумм и оплаты, LG(9) – для хранения сумм по начислениям по льготам каждой услуге, PL- содержит количество жильцов, L – количество льготников, FM-фамилия плательщика, OS-значение поля-OST_K (остатка), TB-табельный номер плательщика, KV_MET – значение поля KV_M (квадратные метры), DAT_OP – значения поля D_OPL (дата оплаты).
В циклах определяются переменные для систематизированного предъявления данных:
Y-значение поля YL (улицы), D-значение поля DOM (дома) и K- значение поля KW_RA (квартира).
В процедуре используются четыре цикла, аналогичных описанным в процедуре слияния квартплаты с льготами. То есть используются четыре цикла, где первый WHILE-цикл определяет, что циклы будут работать пока не будет попытки выйти за последнюю запись в БД (DO WHILE !EOF()). Второй предъявляет записи жильцов, живущих на одной улице (DO WHILE y=yl). Третий предъявляет записи жильцов (DO WHILE y=yl AND d=dom). И четвертый SCAN-цикл предъявляет жильцов одной квартиры (SCAN WHILE yl=y.and.dom=d.and.kw_ra=k), внутри которого, с помощью команды управления IF…ENDIF в зависимости от категории жильцов, переменным присваиваются соответствующие значения, которые затем с помощью команды ?\?? [<выр1>[PICTURE<символы шаблона предъявления данных>][FUNCTION<формат выводимых данных>]][АТ<номер столбца, с которого должен начинаться вывод>][,<выр2>]…] заполняют открытый альтернативный файл.
После обработки всех записей БД вывод в альтернативный файл запрещается (SET ALTERNATE OFF) и он закрывается (SET ALTERNATE TO). И созданный файл открывается в окне VEDOM для просмотра(редактирования) (MODIFY COMMAND EVALUATE(‘T’) WINDOW vedom).
После закрытия окна просмотра отчета появляется окно с предложением отправить документ на печать. В случае согласия (кнопка “Да”) опрашивается готовность принтера (PRITSTATUS=.T.) и документ распечатывается (TYPE (T) TO PRINT) иначе (кнопка “Нет”) работа процедуры заканчивается и печать отчета возможна из пункта меню “Печать”.
“ОТЧЕТ”-“Списки по льготам”
Формирует отчет по льготникам не зависимо от периода действия льготы (см. прилож. 1.7 стр 3). Здесь переменные почти не используются, в переменные заносится только фамилия и табельный номер плательщика и переменные для предъявления данных в циклах. Данные выводятся с помощью полей льготников в БД жильцов и БД начислений, где хранятся нужные данные. Распечатка отчета показана в прилож. 3 стр. 4.
“ОТЧЕТ”-“Оплата э\энергии”
Формируется отчет по оплате за электроэнергию, исходя из данных счетчика (см. прилож 1.7 стр.5). Здесь используются переменные только для систематизированного предъявления данных в циклах. Данные выводятся из полей плательщиков, так как льгота по этой услуге не предусмотрена. Распечатка показана в прилож. 3 стр. 5.
“ОТЧЕТ”-“Сальдо по квартиросъемщикам”
Формируется отчет по плательщикам с указанием суммы начислений по квартплате, сумме к оплате и суммы остатка (см.прилож. 1.7 стр. 7). Здесь также используются переменные только для систематизированного предъявления данных в циклах. Распечатка показана в прилож. 3 стр. 6.
“ОТЧЕТ”-“Свод по квартплате за месяц”
Формируется отчет по общим суммам всех начислений по каждой услуге и итоговые суммы за месяц (см. прилож. 1.7 стр. 8). В этой процедуре не используются циклы. Данные получаются с помощью команды математической обработки БД: CALCULATE [<границы>][WHILE<условие>][FOR<условие>]<список выражений>[TO <переменные>/TO ARRAY <массив>]. Эта команда позволяет вести математические расчеты в БД. <Список выражений> может содержать любую комбинацию внутренних для данной команды функций, которые также выполняют матаматическую обработку (AVG(<вырN>), CNT(), MAX(<выр>), MIN(<выр>), STD(<вырN>), SUM(<вырN>), VAR(<вырN>), NPV(…)). Здесь приведена полный перечень возможности для данной команды, а жирным шрифтом выделены опции, которые используются в процедуре. Так первая команда CALCULATE подчитывает общие начисления по квартплате (SUM<поле с суммой начислений квартплаты по услуге>), вторая общие начисления по льготам (SUM<поле с суммой начислений льготы по услуге>) и полученные результаты заносятся в переменные. Затем в переменные заносятся общие суммы начислений для получения организацией за предоставления услуг квартиросъемщикам за месяц. Они рассчитывается путем вычета из общих начислений квартплаты по услугам начисления льгот по услугам и полученные результаты выводятся в файл. Распечатка показана в прилож. 3 стр.7).
Пункт меню “ПЕЧАТЬ”
При выборе данного пункта активируется POPUP-меню описанное с опцией PROMPT FILES [LIKE<маска>] – элементами которого будут названия файлов, ограниченных маской (DEFINE POPUP prin_t FROM 1,31 PROMPT FILES LIKE *-1.TXT см.прилож. 1.1 стр.3), которое формирует меню из имен файлов, созданных при выборе соответствующего пункта “ОТЧЕТА” и определение реакции меню выполняется в процедуре print3 (ON SELECTION POPUP prin_t DO print3 WITH PROMPT(),LASTKEY()), куда передаются два параметра это-имя файла (vv - PROMPT()) и код нажатия клавиши (lk - LASTKEY()).
В процедуре (см. прилож. 1.2 стр. 28) в структуре DO CASE анализируются переданные параметры. Если нажата клавиша “Enter” (ВВОД), то код 13 (CASE lk=13) и осуществляется вызов соответствующего текстового файла в окно VEDOM для просмотра с возможностью редактирования (MODIFY COMMAND (vv) WINDOW VEDOM).
Если нажата клавиша “Spacebar” (ПРОБЕЛ), тол код 32 (CASE lk=32), происходит опрос готовности принтера (PRINTSTATUS()) и если он готов, файл печатается (TYPE (vv) TO PRINT), если нет – выдается соответствующее сообщение. Ниже приводятся мена файлов:
файл LG_KW-xx.TXT“Списки по льготам”
файл EL_PL-xx.TXT“Оплата электроэнергии”
файл SVOD-xx.TXT“Свод по квартплате за месяц”
Где хх – это номер месяца, за который сформирован отчет.
Пункт меню “ПОМОЩЬ”
Все файлы помощи хранятся в базе данных HELP.DBF, которая имеет только одно MEMO-поле. И по умолчанию имеет восемь, заполненных информацией, полей.
“ПОМОЩЬ”-“Помощь”
при выборе этого пункта командой ON SELECTION … DO HELP WIHT 6 выполняется процедура, в которой в окне открывается текст подсказки записанной в 6-ой записи MEMO-поля. Здесь описывается помощь по пунктам меню. (см прилож. 2 рис. 21)
“ПОМОЩЬ”-“Справка”
при выборе этого пункта командой ON SELECTION … DO HELP WIHT 3 выполняется процедура, в которой в окне открывается текст подсказки записанной в 3-ей записи MEMO-поля. Здесь описывается общее назначение и характеристика приложения.
Работа процедуры помощи будет рассмотрена ниже.
Создание контексно-зависимой экранной подсказки.
Каждое MEMO-поле в БД помощи (HELP.DBF), содержит конкретное описание помощи по работе с отдельными окнами. В начале работы программы, когда баз данных еще нет, описание помощи хранится в текстовых файлах. И при первом запуске приложения, с помощью языка SQL (см. прилож. 1.3 стр. 2), они создаются и в БД помощи последовательно в MEMO-поля переносятся содержимое текстовых файлов (APPEND MEMO HLP FROM HELP1.TXT).
Для экрана помощи определяется окно также с именем HELP, а клавиша F1 и два пункта данного меню закрепляются за процедурой с именем HELP, в которую передается один параметр К (ON KEY LABEL f1 DO help WITH k)
Этот параметр в дальнейшем будет указывать номер записи в файле HELP.DBF, где содержится нужная подсказка. В самой процедуре (см. прилож. 1.2 стр. 21) осуществляется перевод указателя записей в области I (в которой открыта БД помощи) на запись номер К.