на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: АРМ бухгалтера-расчетчика


“Расчет” - позволяет рассчитать квартплату на одного жильца, который находится в окне.выбор этой кнопки вызывает процедуру RAS_ON_ONE (см .прилож. 1.2 стр. 53). Здесь определяются переменные для работы это R-номер текущей записи в БД жильцов, Т-табельный номер, ORD_R-активный TAG в БД жильцов, Y- улица, D-дом, K-квартира.

После этого активной выбирается БД начислений и в ней, по табельному номеру, ищется запись, для которой делается расчет (LOCATE FOR t=tab). Если поиск не удачный, то для БД жильцов устанавливается фильтр, при котором доступны только записи с текущим адресом и командой APPEND FROM <БД жильцов> FIELDS <список одинаковых полей в БД жильцов и БД начислений> добавляются записи в БД начислений. Если поик удачный, то разрывается связь между базами, для работы команды обновления, с помощью которой одинаковые поля в БД начислений принимают значения такие какие в БД жильцов: UPDATE ON <ключевое поле> FROM <область БД жильцов> REPLACE <поле БД начислений> WITH <поле БД жильцов>.

Далее текущей выбирается БД начислений и для нее устанавливается связь ОДНА-КО-МНОГИМ с БД ставок и БД льгот, а также фильтр для обработке данных имеющим только адрес, который ранее был сохранен в переменных.

Далее обнуляются все поля начислений по льготам, это сделано для того, что если в окне изменен период или льгота отменена, то при расчете льгот эта запись игнорируется, но старые данные расчета сохраняются и чтобы этого не допустить они обнуляются.

После этого в SCAN-цикле рассчитывается квартплата, с помощью команды REPLACE <поле> WITH <выражение>, то есть <полю> присваивается значение <выражения>. Здесь в выражении используется расчет (REPLACE kw_pl WITH IIF(g.kwp_l=0, kv_pl, g.kwp_l)*IIF(kw_l=.t.,kv_m, 0)..).

Функция IIF(<условие>,<выражение1>,<выражение2>) – выдает значение <выражение1>, если <условие> истинно, и <выражение2> - если ложно. В нашем случае первый множитель – это ставка, и если поле ставки для этого жильца равно нулю, то применяется нормативная ставка, если же оно имеет значение, то применяется эта ставка. Второй множитель определяет выбор этой услуги, если поле фиксирующие выбор услуги равен .Т., то есть она выбрана для начислений, то умножение идет на квадратные метры(количество человек), иначе на 0.

После расчета квартплаты рассчитываются льготы. Здесь в SCAN-цикле предусмотрено условие при котором в расчет попадают только те жильцы, у которых либо не имеется периода действия льготы, либо текущая дата лежит в промежутке между началом и концом действия льготы. Расчет аналогичный описанному выше, различие только в том, что если по услуге расчет идет по квадратным метрам, то но высчитывается на одного человека (kv_m/kol_vo), и все значения умножаются на (-1), чтобы показать льготы с отрицательным знаком.

После окончания расчетов суммируются все начисления по льготам и заносятся в поля жильца, который платит за квартиру, для просмотра их в окнах, и расчета суммы к оплате. Затем разрываются все связи, отменяются фильтры, выполняется процедура открытия баз данных (см. прилож. 1.3 стр. 1), обновляются данные в окне и процедура завершается.

Выйти” – заканчивает работу с этим окном.

И теперь рассмотрим процедуру обновления окна tb_l(), которая включена в команду READ, с помощью опции SHOW (см. прилож. 1.2 стр.5-6). Здесь в нескольких циклах DO CASE анализируются значения переменных, которые в процессе выполнения принимают различные значения, и в зависимости от этих значений выполняются определенные действия.

Анализ переменной _FILTR – имеет числовое значение и служит для фильтра доступа к данным при их просмотре и редактирования. Значение 1 – устанавливается главным TAG ord, при котором доступны жильцы, которые платят за квартиру, 2 - – устанавливается главным TAG lgt, при котором доступны жильцы, которые имеют льготу, 3 - – устанавливается главным TAG adrr, при котором доступны все жильцы. А также на экран выводится строка-подсказка с выбранным фильтром

Далее анализируются категория жильца, и если это плательщик или льготник, то кнопки для выбора услуг – доступны для редактирования, если просто жилец то недоступны, при этом кнопки и область их расположения выделяются цветом.

Далее также анализируются категория жильца, если льготник – доступна кнопка “По льготе”, если плательщик – доступна кнопка “По оплате” и не доступны, если это не выполняется. Анализ выполняется в двух циклах по каждой кнопки, для того, что если плательщик имеет льготу, то ему доступны обе кнопки. Здесь также при анализе категории плательщика выводится разная информация по начислениям льгот (см. прилож. 1.2 стр. 4). Это – если плательщик выполняется процедура OB_NACH, которая выводит на экран общие (суммированные) начисления по льготам, если это жилец то выполняется процедура LG_NACH, которая выводит на экран начисления по льготе для данного жильца.

И последнее это анализ переменных “e” и “b”, которые служат для блокирования кнопок перемещений по БД в процедурах перемещений, при попытке выйти за пределы БД, а здесь они раз блокируются при удовлетворяющем значениии, которые присваиваются в процедурах перемещений.

 

“КАДРЫ”-“Квартиросъемщики”

При выборе этого пункта выводятся данные из БД жильцов в табличной форме с помощью команды BROWSE. Записи выводятся горизонтально в окне определенном ранее. Формат полей может настраиваться с помощью опции FIELDS <список полей>, а также иметь так называемые вычисляемые поля. Эти поля фактически не являются полями БД, но могут быть их функциями и отображаются на экране наравне с настоящими полями.

В данной процедуре KDR_R (см. прилож. 1.4 стр. 1) в окне KD открывается BROWSE-окно с полями табельного номера (tab), фамилии (fam), вычисляемым полем со значком ‘<’, который появляется у жильца, который является плательщиком и вычисляемым полем со значком ‘ü’, который появляется у жильцов, имеющих льготу – эти поля являются функциями от фактических полей, выполняемые с помощью функции IIF(<условие>,<выр1>,<выр2>). Предъявление данных часть экрана, а на свободной части, выводятся на экран информация с помощью команд @…SAY…GET остальная интересующая информация (см. прилож. 2 рис. 9), которая формируется в процедуре NACH (см. прилож. 1.2 стр. 37) , при этом если при перемещении по БД курсор находится в поле табельного номера, то эта информация автоматически обновляется в зависимости от активной записи БД, во всех других полях эту информацию необходимо выбрать из меню, которое появляется после нажатия клавиши Enter в любом поле.

Эти действия достигаются путем включения в имена полей ключей, которые выполняют контроль входа (:W), контроль выхода (:V), а также проверку постоянно (:F) здесь:

 Для поля табельного номера с помощью ключа - :W=NACH() установлен входной контроль, при котором обязательно - :F выполняется процедура вывода информации по жильцу (выполняется процедура NACH ).

Для остальных полей контроль входа - :W=EN(), которая назначает на выбор клавиши Enter выполнение процедуры POP_VIB и при выходе из поля - :V=NE() это назначение отменяется (см. прилож. 1.2 стр. 38), при чем это выполняется всегда - :F.

Выполнение процедуры POP_VIB предъявляет FOX-меню (см. отличия в описании меню), которое показано на рис. 10 прилож. 2 и описано в прилож. 1.2 стр. 39. Рассмотрим ее.

Сначала объявляется массив, элементы которого и будут пунктами меню, затем каждому элементу присваивается символьный тип с описанием названия, которое будет отображаться в меню. Далее с помощью команды READ оно активируется. После выбора из меню выполняется действие закрепленное за каждым пунктом в цикле DO CASE и оно “умирает”. Все пункты меню рассматривались выше.

“КАДРЫ”-“Картотека льготников”

Выбор зтого пункта также вызывает BROWSE-окно, открытое в окне KD1, которое открывается на весь экран, кроме двух последних строк, и предъявляет тех жильцов, которые имеют льготу (BROWSE FOR LGOT=.T.) Здесь выводятся поля фамилии, табельного номера, адреса, телефона, периода действия льготы, категории и номера удостоверения. При входе в поле выполняется процедура INFO (см. прилож. 1.2 стр. 41) с помощью ключей - :W=INFO() и - :F. Эта процедура выводит в нижних строках следующую информацию: если это плательщик, то суммы к оплате, остатка, количество льготников и количество жильцов, иначе фамилию и табельный номер того жильца, кто является плательщиком.

“КАДРЫ”-“База жильцов”

Работа процедуры, при выборе этого пункта аналогична описанной выше, только предъявляются все жильцы.

“КАДРЫ”-“Ввод данных счетчика”

Открывает в окне KD1 BROWSE-окно с плательщиками и полями табельного номера, фамилии, адреса, данными о старом и новом значениях счетчика и полем суммы начисленной за пользование электроэнергией из БД начислений (см. прилож. 1.4 стр. 3). Поля данных счетчика доступны к редактированию, остальные открыты только для просмотра, что достигается включением в имена полей ключа - :R. Также все поля имеют входной контроль - :W=INFO(), который описан выше, а поля данных счетчика и выходной контроль - :V=R() (см. прилож. 1.2 стр. 42), где при выходе рассчитывается сумма к оплате за электроэнергию и корректируется итоговые суммы.

“КАДРЫ”-“Ввод оплаты”

здесь в начале определяются две переменные, которые нужны для работы, это dat, которая содержит текущую дату (dat=DATE()) и opl, которая имеет нулевое значение и служит для того, чтобы в программе не было ошибки при обновлении полей, потому что используется одна процедура обновления полей с процедурой для ввода оплаты для одного жильца. Затем открывается в окне KD1 BROWSE-окно, в котором предъявляются поля из разных баз, это табельный номер, фамилия, поле для хранения суммы оплаты (OPL_TA), поле для хранения даты оплаты (D_OPL), и поле для хранения остатка(задолженности) (OST_K) из БД жильцов и поле итоговой суммы начислений (ITOG_N), итога начислений по льготам (SUM_IT) и суммы к оплате (ITOG) из БД начислений. (см. прилож. 1.4 стр. 3-4, прилож. 2 рис. 12). Доступные к редактированию является поле суммы оплаты которое имеет выходной контроль - :V=SV3() (см. прилож. 1.2 стр.40) , в которой полю остатка присваивается рассчитанное значение (введенная сумма – сумма к оплате), полю даты значение переменной dat, то есть текущая дата и здесь не используется ключ - :F, это значит, что если в поле, для которого предусмотрен контроль выхода (opl - :V=SV3), данные не изменялись то процедура игнорируется, а выполняется она только в том случае если данные изменялись. Также здесь используется другая информация в статус-строке :W=INFO3() (см. прилож. 1.2 стр. 42), где показывается адрес жильца, количество проживающих и количество льготников.

Пункт меню “РАСЧЕТ”

“РАСЧЕТ”-“Расчет квартплаты”

При выборе этого пункта появляется окно, где нужно подтвердить начало расчета выбором кнопки “Ок” (см. прилож. 1.6 стр.1). В окне выводится текущая дата и строка подсказка за какой месяц будет рассчитываться квартплата. Название месяца достигается с помощью массива и переменной mess, которые объявлены в файле MENI.PRG это массив mes(4,3), элементы которого содержат названия месяца и переменная mess содержит номер текущего месяца (=MONTH(DATE())) и выражение mes(mess) – выведет элемент массива по номеру, который содержится в переменной mess.

При подтверждении расчета выполняется процедура RAS_1 (см. прилож. 1.2 стр. 43-44). В первых строках деактивируется окно, выбирается активной БД начислений и из нее удаляются все записи командой ZAP, затем командой APPEND FROM <БД жильцов> FIELDS <список полей> добавляются все записи из БД жильцов. После этого все БД закрываются (CLOSE DATABASE) и в области “а” открывается БД жильцов, для которой устанавливается фильтр по полю OR_R то есть доступны только плательщики, в области “b” открывается БД начислений. После этого командой JOIN WITH <область> TO <имя новой БД> FOR <условие> FIELDS <список полей>, создается новая БД-RACH.DBF содержащая поля, которые перечислены после опции FIELDS и количеством равным в БД жильцов, что выполняется с помощью условия. Другими словами новая БД расчета содержит только плательщиков, с полями необходимыми для проведения расчета и хранения рассчитанных данных.

Далее снова закрываются все базы данных и в области “а” уже открывается новая БД расчетов, для которой создается структурный индекс для связи с другими БД. Затем устанавливается связь с БД жильцов и БД ставок и производится расчет, который аналогичен описанному, при рассмотрении кнопки “Расчет” в окне “Работа с картотекой” (“КАДРЫ”-“Работа с картотекой”). После завершения расчета, с помощью команды CALCULATE SUM(поле в котором храняться данные расчета) ТО <переменные в которые заносится результат работы команды> создаются переменные со значениями общих сумм начислений для каждой услуге, для формирования статус-строки при просмотре выполненного расчета. Далее с помощью команды @ …SAY они (переменные) выводятся в нижней части экрана и в окне KDR открывается BROWSE-окно с данными расчета и фамилией жильцов.

С помощью ключа входа в поле - :W=INFO1() внизу изменяет цвет сумма, которая относится к данной услуге (к примеру если курсор в поле горячая вода, то внизу окрашена область с общей сумме по горячей воде, как показано на рис. 14 прилож. 2), а с помощью контроля выхода - :V=INFO2() цвет принимает прежний цвет и с помощью ключа - :F выполняется всегда, независимо от изменения, это в основном нужно для ключа :V.

Работа этой процедуры показана на стр. 51 прилож. 1.2. здесь в структуре DO CASE анализируется в какое поле входит курсор (INFO1), и из какого выходит (INFO2) это достигается с помощью применения функции VARREAD()-которая возвращает прописными буквами имя поля(переменной), а с использованием с командой BROWSE/CHANGE возвращает имя поля строчными (кроме первой) буквами (см. также SYS(18)), и в зависимости от названия поля при входе, окрашивается определенная область внизу экрана, с помощью команды @…FILL TO … и цветовой схемы 12, а при выходе с помощью этих же команд этой области возвращается прежний цвет из цветовой схемы 1.

Перед открытием окна просмотра по начислениям, назначаются на клавиши выхода из BROWSE-окна, процедуры выхода (ON KEY LABEL ESC(CTRL+W,CTRL+Q) DO vib8), где активируется окно с кнопками “Сохранить” и “Отмена” (см. прилож. 1.2 стр. 45) и при выборе кнопки “Сохранить” открывается БД начислений, с помощью команды - UPDATE <ключевое поле> FROM <область> REPLACE <поле активной БД начислений> WITH <поле из указанной области (БД расчетов)>, переносятся рассчитанные данные в БД начислений. После этого выбирается активной БД расчетов, закрывается и удаляется с диска вместе со структурным индексом.

“РАСЧЕТ”-“Расчет по льготам”

Все действия, выполняемые при выборе этого пункта аналогичны как описано выше в расчете квартплаты за исключением некоторых отличий, которые не влияют на суть расчета описанного выше (см. прилож. 1.2 стр. 46).

Здесь имеющиеся записи не удаляются из БД начислений, так как предпологается, что расчет льгот производится после расчета квартплаты и все записи находящиеся в БД жильцов имеются в БД начислений (это достигается командой APPEND FROM описанной выше).

Также используется другой TAG при создании новой БД расчетов, а именно TAG date (см. прилож. 1.3 стр. 2) который делает доступными жильцов у которых текущая дата попадает в промежуток периода действия льготы и тех у кого период не определен.

При определении связи новая БД расчетов также имеет связь с БД льгот, для применения в расчете установленные проценты льготы по кодам.

Расчет льгот аналогичен описанному, при рассмотрению расчета на одного жильца в окне “Работа с картотекой” кнопка “Расчет”. (см. прилож. 1.2 стр.53)

И так как имена полей имеют разные имена, то для окрашивания общих сумм внизу экрана, при просмотре расчетов, применяется процедура для входа – INFO4, для выхода – INFO5 (см. прилож. 1.2 стр. 52 и рис. 15 прилож. 2)

“РАСЧЕТ”-“Слияние квартплаты с льготами”

Так как в программе отдельно насчитываются начисления по квартплате и льготам, то необходимо определить сумму к оплате, для чего и служит этот пункт. После выбора кнопки “Ок”, в окне описанном выше, выполняется процедура RAS_3 (см. прилож. 1.2 стр. 49).

Здесь после закрытия всех баз данных в области “а” открывается БД начислений, в области “b” БД жильцов, затем объявляется переменная “m”, для хранения количества записей в БД (m=RECCOUNT()), что необходимо для выхода из цикла. Далее организовываются четыре цикла, из которых только самый внутренний SCAN-цикл осуществляет перемещение указателя записей. Остальные WHILE-циклы контролируют заданные условия, инициализируют, формируют и заносят данные в поля БД.

Первый WHILE-цикл имеет условие !EOF(), то есть цикл выполняется до тех пор пока не будет достигнут конец БД. Для этого служит функция EOF(), котороя принимает значение .F. при попытке указателя записи выйти за предел последней записи БД. Следующей командой служит определения переменной содержащей имя улицы, для работы следующего WHILE-цикла.

Также при расчете для баз данных применяются TAG’и, которые позволяют предъявлять записи в систематизированном виде по адресу, что позволяет использовать WHILE-циклы, а также SCAN-цикл с включением в него WHILE-условия.

Второй WHILE-цикл предъявляет те записи у которых улица совпадает с переменной определенной в первом WHILE-цикле, то есть жильцов с одинаковой улицей, а также здесь определяется переменная, содержащая номер дома, для работы следующего WHILE-цикла.

Третий WHILE-цикл предъявляет те записи, у которых улица и дом совпадают, то есть жильцов проживающих в одном доме. И здесь определяется переменная, содержащая номер квартиры, для работы следующего SCAN-цикла и переменные помогающие формировать данные, числового типа, которым присваивается значение 0.

Четвертый SCAN-цикл обрабатывает записи для одной квартиры. Внутри этого цикла используются команды управления (IF…[ELSE]…ENDIF), которые позволяют от удовлетворяющих условий присваивать переменным нужные значения и затем переносить их в поля БД. Так в первой команде выявляется, является ли жилец плательщиком и при истинном значении, переменной it присваивается значение итоговой суммы по начислению квартплаты, переменной r-номер записи, для занесения в нее, после окончания цикла, в поля плательщика нужных результатов. Во второй команде анализируются льготники и с помощью переменных (определенных в третьем цикле) присваиваются результаты сумм начислений по льготам.

После завершения цикла по квартире указатель записей устанавливается на следующую запись, которая запоминается в переменной n, затем в переменную os заносится сумма к оплате, командой GO r указатель переходит на запись плательщика и в поля для этой записи переносятся полученные результаты. Затем активной делается БД жильцов и в ней ищется эта запись и в зависимости от условий корректируются поля по остатку и оплате. Так если оплата не производилась (поле OPL пусто), то остаток будет рассчитанная сумма к оплате с отрицательным значением, иначе результат остатка, полученный при вычитании из внесенной суммы начисления, рассчитанной суммы по оплате. После этого выбирается снова БД начислений, проверяется условие, при котором если переменная n (номер следующей записи) больше переменной m (количество записей) то выполняется процедура просмотра и слияние расчетов заканчивается, иначе расчет продолжается для следующих записей. Для чего нужно это условие?

Дело в том, что для просмотра и формирования отчетов целеобразно хранить все данные, относящиеся к начисленным суммам по начислениям квартплаты и льготам в записи одного жильца, являющегося плательщиком, для чего в цикле осуществляется переход на эту запись. А так как при начале цикла в первом WHILE-цикле определено условие окончания, если переменная !EOF() примет значение .F., то при таком подходе (возврате на нужную запись в процессе цикла) эта переменная никогда не примет этого значения, так как она изменяет свое значение не тогда когда указатель записи находится на последней записи, а когда указатель записи попытается выйти за пределы последней записи, вот для прекращения цикла и используется это условие. А именно: переменная m хранит число всех записей а n хранит номер последней записи. И если n будет больше m, то это значит, что все записи рассчитаны. Единственным недостатком (по моему мнению) такого подхода является то, что переменная m ранит все записи, включая записи помеченные на удаление, и в зтом случае расчет для последней записи производится столько раз, сколько в БД записей на удаление, что не влияет на результат, а только на скорость обработки, но это ограничение не касается моего расчета, по той причине, что записи помечаются только в БД жильцов, а в БД начислений их не существует, так как БД начислений формируется из БД жильцов, для которой определено игнорирование записей на удаление (SET DELETE ON).

И последняя команда, которая выполняется при истинном условии описанном выше, это просмотр расчетов. Он осуществляется с помощью команды BROWSE (см. прилож. 2 рис. 16) со следующими полями: фамилия, табельный номер из БД жильцов и результаты начислений по квартплате, льготам и сумме к оплате из БД начислений, также используются три вычисляемых поля. Это поле-функция от полей, со значком “ü”,показывающая жильцов, имеющих льготу и поля со значками: “+”, “=”,показывающих суть расчета. В нижней части в статус-строке показывается адрес жильца, количество проживающих и льготников (см. прилож. 1.2 стр. 42). А также здесь переменной _PAD_OTCH, присваивается значение .Т., которая позволяет формировать отчеты по выполненным данным.

Функция ПОИСКА

 На этом пункты меню по работе с данными заканчиваются и сейчас рассмотрим функцию поиска, которая выполняется во всех процедурах, предназначенных для обработки и просмотра данных. Эта процедура закреплена за клавишей F5, а в окне, которое вызывается при выборе “КАДРЫ”-“Квартиросъемщики”, закреплена за пунктом в Fox-меню “Поиск”.

Для выполнения этой функции используется:

меню, с пунктами определяющим по каким значениям будет производиться поиск (по фамилии, по табельному номеру, по адресу и отмена поиска), которое определено в файле MENI.PRG (см. прилож. 1.1 стр. 4).

Окно для задания критерия поиска, с помощью команды @…GET и переменной “а”, имеющей тип, в зависимости от выбора пункта меню. Окно также определено в начальном файле (см. прилож. 1.1 стр. 2).

А также используются разные процедуры. Для поиска по фамилии и табельному номеру – POISK, по адресу – PO_ADR. Это сделано для того, чтобы при поиске по адресу возможно оставлять пустыми значения номера дома и(или) квартиры.

Выполнение функции поиска построена таким образом, что при нажатии клавиши (пункта меню) активируется меню поиска (ON KEY LABEL F5 ACTIVATE POPUP POISK (ACTIVATE POPUP POISK)) , где нужно выбрать необходимый пункт, как показано на рис. 13 прилож. 2, где при работе с картотекой льготников нажата клавиша F5 и выбран пункт “По адресу”. Для пунктов меню POISK’a командой ON SELECTION BAR определено выполнение процедуры POISK (см. прилож. 1.2 стр. 24)

Здесь в переменной _REC запоминается номер текущей записи, для возврата при неудачном поиске. Далее в структуре DO CASE анализируется выбранный пункт.

Если PROMPT()=’По фамилии’(‘По табелю’), то главным выбирается TAG fam (tab), для поиска с помощью команды SEEK(), в команде @…GET определяется переменная “а” имеющая символьный тип (DEFAULT SPASE(25)) а для табеля числовой тип из четырех знаков (PICTURE ‘9999’), предъявляется окно POISK в котором расположено поле GET для занесения ключа поиска. После ввода искомого значения из него удаляются возможные пробелы (ALLTRIM(a)) для поиска по фамилии, что позволяет вести поиск и по не полному ключу (фамилии). Также значение переменной “а” запоминается в переменной “d”, а для табельного номера переменная “а” преобразуется в символьный тип (d=STR(a,4)), которая нужна для включения ключа поиска в сообщение WAIT о неудачном поиске. Сам поиск осуществляется после окончания команды DO CASE в команде IF…ENDIF - IF BAR()#4.AND.!EMPTY(a).AND.!SEEK(a) – если пункт не отмена и если переменная “а” не пуста и поиск неудачный, то выводится системное окно с помощью команды WAIT–WAIT ‘Поиск’+PROMPT+’:’+d+’ НЕУДАЧНЫЙ’ WINDOW – которое показано на рисунке:

Которое затем удаляется нажатием любой клавиши, и указатель записей возвращается на (GO _REC) старое место. Потом происходит возврат в команду из которой был вызов. Если в результате поиска была найдена нужная запись, то в команде BROWSE, курсор будет стоять на ней, если в команде READ, то будет переход на эту запись и обновление информации и GET-объектов для этой записи.

Если PROMPT()=’По адресу’, то выполняется процедура PO_ADR (см. прилож. 1.2 стр. 25). Здесь вначале определяется меню, массив и переменные с помощью которых в WHILE-цикле будут формироваться BAR-пункты из названий улиц. Затем массив переопределяется и его элементы – это пункты меню, которое активируется при входе в поле для ввода улицы и его выбор осуществляется в процедуре YLIZ (см. прилож. 1.2 стр. 29), где переменной m.yl присваивается значение параметра-mprompt. (ON SELECTION POPUP YL DO YLIZ WITH PROMPT()), где передаваемый параметр (PROMPT()) это название BAR-пункта, то есть название улицы. Работа с окном POISK осуществляется с помощью переменных полей адреса, которые создаются с помощью команды – SCATTER FIELDS yl, dom, kw_ra MEMVAR BLANK. После заполнения полей и нажатии клавиши Enter (начать поиск) в структуре DO CASE анализируется сколько полей заполнено и с помощью команды LOCATE c FOR условием ведется поиск. Если он удачный то осуществляется переход на найденную запись, и если это READ-окно то информация о жильце обновляется, иначе указатель записи возвращается на прежнюю запись.

Пункт меню “ОТЧЕТЫ”

Подготовка и оформление отчетных данных без сомнения являются кульминацией любого делового приложения. Так что стоит приложить усилия для того, чтобы все многообразие данных, записанных в БД приложения, нашло достойное отображение в отчетах, напечатанных на принтере.

FoxPro имеет мощные средства построения отчетов для вывода данных в желательном для пользователя виде на принтер, экран или в текстовый файл, но в своей дипломной работе я не пользовался этими средствами, а попытался программированием вручную создать нужные выводимые данные. Это связано с тем, что я не преследовал коммерческой цели, создавая приложение, а также для того, что бы лучше освоить язык программирования и задействовать как можно больше команд и функций FoxPro.

Все отчеты формируемые с помощью данных баз построены по одной схеме, поэтому я разберу одну из них более подробно, а в остальных только кратко дам описание.

“ОТЧЕТЫ”-“Списки по начислению”

При выборе этого пункта формируется отчет для каждого жильца с суммами начислений по каждой услуге и отдельно начисления по льготам, показывается сколько оплачено и остаток если остаток положительный, то это сумму необходимо заплатить плательщику за пользование услугами, если отрицательный то эта сумма должна перейти на следующий месяц в счет будующих платежей за услуги. Также в шапке по каждому жильцу выводится дата оплаты, количество проживающих, из них количество льготников, занимаемая площадь. (см. прилож. 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 (в которой открыта БД помощи) на запись номер К.

Здесь же определяется окно HELP, в которое с помощью команды MODIFY MEMO I.HLP WINDOW HELP NOEDIT выводится текст подсказки. Чтобы исключить случайную возможность порчи содержимого HELP пользователем, возможность редактирования исключена опцией NOEDIT.

В процедурах работы с приложением вначале переопределяется клавиша F1 для открытия соответствующей подсказки (ON KEY LABEL f1 DO help WITH 1(2,4,5,7,8)), а по завершении работы с любым окном клавише F1 определяется параметр 6 (…WITH 6). Это позволяет из любого места программы можно вызвать свою помощь нажатием клавиши F1. Доступ к нужной записи в файле помощи происходит очень быстро, поскольку ее не приходиться искать. Для этого нужно в соответствующих местах программы делать присвоения переменной К, то есть указывать номер нужной записи из файла HELP.DBF. В процедурах, где помощь не предусмотрена, переменной К задается значение 6, для вывода общей помощи по программе, которая также закреплена за пунктом меню “Помощь”.

Пункт меню “Выход”

Для корректного закрытия БД и завершения работы необходимо проконтролировать запросом попытку пользователя выйти из программы. Данная функция будет содержать обычный запрос на подтверждение выхода, и при положительном ответе (кнопка “Да”) осуществит закрытие всех активных файлов БД, сохранит в файле M_ZAR.MEM все переменные начинающиеся с символа “_” (SAVE TO m_zar ALL LIKE _*). В приложении зти переменные определены как глобальные и переменные нормативных ставок и после этого происходит выход из приложения (QUIT). При выборе кнопки “Нет” происходит возврат в приложение.

Заключение

В процессе работы над дипломным проектом был создан комплекс программных средств для обеспечения работы бухгалтера-расчетчика. Кроме того была разработана концепция проектирования информационно - справочных систем с применением функций экранного интерфейса, разработанных в рамках дипломного проекта. Применение специализированных функций позволило сократить время разработки основного модуля программы и обеспечило высвобождение времени на создание процедур обработки данных. В дипломном проекте представлен один из множества подходов к проектированию программного обеспечения информационного плана, дающий возможность на ранних этапах разработки учесть все нюансы будущей программы, необходимый набор функций, состав и структуру баз данных, что в дальнейшем исключает необходимость переработки уже написанных компонентов программы.

Данный дипломный проект разрабатывался не с коммерческой целью, а с целью показать возможности СУБД FoxPro, используя в приложении как можно больше команд и функций данной СУБД. Поэтому работа приложения не предусматривает сохранения и просмотра раннее сделанных расчетов и работа осуществляется только с текущим месяцем.

Хотя принцип работы приложения и язык программирования не исключают и коммерческое распространение. Достаточно лишь добавить модули сохранения данных при переходе на следующий месяц и просмотра из архивов этих данных.


Страницы: 1, 2, 3, 4, 5, 6


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.