Учет квартплаты (АРМ бухгалтера-расчетчика)

Автор работы: Пользователь скрыл имя, 23 Апреля 2013 в 18:48, контрольная работа

Описание работы

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

Файлы: 1 файл

АРМ бухгалтера.docx

— 135.40 Кб (Скачать файл)

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

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

При выборе этого пункта появляется окно, где нужно подтвердить начало расчета выбором кнопки “Ок” (см. прилож. 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-окно то информация о жильце обновляется, иначе указатель записи возвращается на прежнюю запись.

Информация о работе Учет квартплаты (АРМ бухгалтера-расчетчика)