Разработка программы
При запуске программы, первым делом, должна проводится авторизация пользователя. Для этого выводится стандартное диалоговое окно, в котором пользователя просят ввести имя пользователя (Login Name) и пароль. Введенная информация посылается через ODBC-драйвер в Систему Управления Базами Данных, а точнее в службу доступа СУБД, которая проверяет введенные данные и выдает либо положительный, либо отрицательный результат. При отрицательном результате пользователю предлагается повторить попытку регистрации в системе. Если пользователь отказывается от авторизации, выбрав кнопку отмены, программа завершает свою работу, выдав сообщение о невозможности продолжать работу из-за отсутствия возможности получить данные.
После успешной авторизации пользователя системой безопасности СУБД, происходит этап настройки. Для этого программа ищет настроечный файл, в котором хранится информация о предприятии пользователя и индивидуальные настройки для каждой станции сети. При отсутствии файла или при невозможности считать из него информацию, на экран выводится диалоговое окно настроек, в котором пользователю предлагается ввести информацию об его предприятии (полное и краткое наименование, полный адрес и банковские реквизиты). Это диалоговое окно не может быть закрыто и продолжена работа программы, пока пользователь не ввел все реквизиты. При ошибочном вводе или пропуске полей пользователю сообщается об ошибке и курсор автоматически позиционируется на место ошибки. В случае отказа пользователем вводить информацию и выборе кнопки отмены, программа выводит предупреждение, что часть реквизитов пусты и что программа будет аварийно завершена. При отказе пользователя от своих намерений покинуть программу, ему дается возможность исправить допущенные ошибки, а при подтверждении – программа завершается. Программу настроек можно также вызвать уже при роботе из главного окна, при помощи соответствующего пункта главного меню. Но и тогда при неправильном заполнении формы, программа автоматически завершает свою работу, а при успешном заполнении всех реквизитов предприятия программа продолжает свою работу.
Если файл настроек был найден и информация о предприятии пользователя успешно считана, то программа пытается считать из него параметры пользовательского окна и его компонент, а также параметры данных, такие как тип документа, фильтр по датам и расширенный фильтр. При отсутствии искомой информации или невозможности ее прочитать, программа подставляет значения фильтров по умолчанию зашитые в программу, т.е. выданные счета-фактуры, данные за весь период и пустой расширенные фильтр. Все эти значения подставляются в запрос к базе данных, для получения соответствующих данных. При получении данных они анализируются программой и инициализируются соответствующие кнопки на панели инструментов и соответствующие пункты главного и контекстного меню (т.к. может быть возвращен пустой массив данных и, следовательно, удаление, модификация и поиск данных невозможен).
Главное окно разделено на две логически зависимые части. В верхней, главной, находится непосредственно журнал регистрации счетов. Он получается из базы данных при помощи вспомогательной виртуальной таблицы (представления) V_Facture. Это представление собирает из разных таблиц информацию по документу, в том числе краткое наименовании клиента и суммы документа с налогом и без него. В нижней вспомогательной части окна находится информация о товарах, содержащихся в выбранном документе. При изменении положения курсора в верхнем окне, содержимое нижнего окна соответственно изменяется. Информация о товарах тоже берется из вспомогательной виртуальной таблицы V_Articles. Это представление содержит в себе кроме информации о товаре, также информацию о процентных ставках товара, и о суммах налогов, чистой сумме, сумме с акцизным налогом и общую сумму товара. Также главное окно имеет меню и панель инструментов, функции которого дублируют некоторые функции главного меню. Также верхняя (главная) часть окна имеет контекстное меню, функции которого дублируют некоторые функции панели инструментов.
После инициализации и получения данных от SQL сервера, программа ожидает дальнейших инструкций пользователя. Это может быть просто перемещение курсора по главной части окна. В таком случае нижняя часть, содержащая информацию о товаре, будет автоматически обновляться. При работе с программой пользователь может выбрать следующие возможности: печать или просмотр журнала регистрации или документа; просмотр и редактирование справочника по клиентам предприятия или государственным налогам; модификация (удаление, добавление, редактирование) счета-фактуры; вызов различных процедур фильтрации, такие как выбор типа документа (выданный или полученный), изменение периода просмотра информации, а также расширенный фильтр.
Вызов справочника, как налогов, так и клиентов предприятия из главной программы осуществляется при помощи выбора в главном меню «Файл» - «Справочники» и далее интересующий справочник. При выборе справочника программа пытается считать из файла настроек параметры соответствующего окна. При отсутствии данных подставляются параметры, зашитые в программу. Каждый справочник представляет собой окно просмотра информации и панели кнопок, с правой стороны, для редактирования, удаления и добавления информации, а также для выхода из справочника. Функции модификации могут быть вызваны также из всплывающего меню. Для удобства понимания и представления информации, в справочнике налогов выводится процентный эквивалент налога. При удалении записи в справочнике, пользователь должен подтвердить свое желание удалить запись. Запрос на удаление записи посылается на SQL сервер, и если, в справочнике клиентов, клиент участвует в каком-нибудь документе, SQL сервер вернет отказ в удалении клиента, при этом выдав соответствующее сообщение на экран о невозможности удаления записи из-за наличия записи в журнале регистраций, связанной с данной записью. При модификации (добавлении или редактировании) информации, пользователю на экран выводится форма (при редактировании уже заполненная данными) и предлагается ее заполнить. При неправильном заполнении или пропуске обязательных к заполнению полей и попытке записать введенную информацию, программа выдает сообщение об ошибке и курсор автоматически позиционируется на место ошибки. При правильном заполнении, программа подготавливает данные и посылает запрос к SQL серверу. После получения подтверждения от сервера о выполнении запроса программа закрывает окно ввода информации и позиционирует курсор на введенную или измененную запись в справочнике. После любой модификации данных программа производит обновление экрана просмотра информации и пере инициализацию кнопок и пунктов меню.
Модификация данных в главном окне зависит от того, было ли выбрано удаление или добавление и редактирование. Удаление записи в журнале регистрации происходит только после подтверждения пользователем. При модификации записи программа раскрывает окно для ввода информации, при этом если было выбрано редактирование, то в поля записывается соответствующая информация. Форма ввода информации разделена на две части: ввод информации по счету и ввод информации по товарам этого счета. Из формы редактирования можно попасть в формы просмотра и редактирования справочников, при этом в формах справочников появляется дополнительная возможность отменить вызов формы, а справочнике налогов также появляется возможность очистить соответствующее поле в форме ввода счета. В форме ввода счета можно вводить товары, включенные в счет, при этом возможна модификация введенной информации, такая как удаление, добавление и обновление введенной информации. Данная часть формы ввода счета содержит в себе окно просмотра введенной информации и форму ввода информации. При изменении позиции курсора в окне просмотра введенной информации по товарам, форма ввода автоматически заменяет свое содержимое. При добавлении и обновлении товаров, в программе предусмотрена проверка на правильность заполнения полей ввода. При ошибке, пользователю выдается сообщение об ошибке и автоматически позиционируется курсор на место ошибки. Если выбран режим добавления счета-фактуры, то ставка НДС по умолчанию устанавливается в 20%. При правильном заполнении всех полей программа подготавливает данные для ввода в базы данных и вводит их при помощи хранимой процедуры SP_ADD_FACT. Эта процедура имеет в параметрах все реквизиты документа и реквизиты одного товара. Остальные товары добавляются в базу данных циклически.
Печать документа вызывается из главного окна при помощи выбора соответствующей кнопки на панели инструментов или при выборе пункта в главном меню. При выборе печати из главного меню выводится стандартное окно выбора принтера и дальнейшей печати. Бланк документа зашит в программу и был спроектирован при помощи встроенного в Delphi дизайнера отчетов QuickReport. В документе выбран кириллический шрифт true type, размер и особенности шрифта (такие как наклон, толщина и т.д.) заданы при создании отчета, и не могут быть в дальнейшем изменены пользователем. Часть данных в форму документа передается через результат запроса (перечень товаров счета), а другая при непосредственной записи в соответствующие поля. В зависимости от типа документа (выданый или полученный) поля в документе меняются местами. Данные о предприятии пользователя считываются из файла настроек.
Печать или просмотр журнала регистрации вызывается из главного окна при помощи выбора соответствующей кнопки на панели инструментов или при выборе пункта в главном меню. При выборе печати из главного меню выводится стандартное окно выбора принтера и дальнейшей печати. Бланки отчетов (книга выданных или книга полученных) зашит в программу и был спроектирован при помощи встроенного в Delphi дизайнера отчетов QuickReport. В документе выбран кириллический шрифт true type, размер и особенности шрифта (такие как наклон, толщина и т.д.) заданы при создании отчета, и не могут быть в дальнейшем изменены пользователем. При вызове просмотра или печати журнала регистрации на экран выводится диалоговое окно, в котором пользователю предлагается ввести временной интервал, за который он хочет просмотреть или распечатать журнал регистрации. При этом если данные в главном меню уже отфильтрованы по дате, то программа подставляет этот временной интервал, если же данные небыли отфильтрованы, то подставляется текущий месяц целиком. После модификации пользователем временного интервала, интервал, вместе с типом счета, посылается с запросом в базу данных. При помощи хранимой процедуры SP_MAKE_BOOK, SQL сервер возвращает сформированные данные в программу. При отсутствии данных, пользователю выводится сообщение об отсутствии данных и предлагается ввести другой интервал. Пользователь может в любой момент отказаться от печати журнала регистрации. Если SQL сервер возвращает данные, то они подставляются, в зависимости от типа документа, в соответствующую форму.
Фильтрацию данных можно разделить на три части: фильтрация по типу документа, фильтрация по дате документа и расширенная фильтрация.
Фильтрация по типу документа осуществляется автоматически при переключении из журнала выданных документов в журнал полученных документов. Переключение осуществляется в главном окне при помощи кнопок на панели инструментов или при выборе соответствующего пункта главного меню. При переключении между журналами, данные закрываются, и формируется новый запрос к базе данных, при этом фильтры на дату и расширенные фильтры остаются.
Вызов пользователем фильтрации по дате активизирует подпрограмму фильтрации даты. На экран пользователя выводится диалоговое окно, в котором пользователю предлагается ввести новый временной интервал. Также в программе предусмотрена возможность отменить данный тип фильтрации, для чего на диалоговом окне существует соответствующая кнопка. Очистку фильтра пользователь должен подтвердить, так как очистка данного фильтра приведет к выдаче всех документов данного типа на экран. При выводе диалогового окна, программа считывает предыдущий фильтр, и подставляет в окно. Если данный тип фильтрации отсутствует, то программа подставляет по умолчанию только сегодняшний день. После выбора пользователем временного интервала, программа закрывает диалоговое окно и переинициализирует данные в соответствии с новым временным интервалом. После получения новых данных от сервера, программа инициализирует все кнопки на панели инструментов в пункты главного и всплывающего меню.
Вызов расширенного фильтра выводит окно, в котором пользователю предлагается ввести выражения для фильтрации данных. Это выражение должно быль написано на языке Transact-SQL, и программа подставляет его в запрос к базе данных после ключевого слова WHERE и фильтров по типу и дате документа. После этого расширенного фильтра, программа посылает запрос к базе данных и СУБД сама проводит синтаксический анализ введенного выражения. Если СУБД обнаружит ошибку, то пользователю сообщается об этом и предлагается исправить введенное выражение. При инициализации окна расширенного фильтра, программа считывает предыдущий расширенный фильтр и подставляет его в поле для ввода выражения - тем самым можно, очистив поле, очистить расширенный фильтр.
Подпрограмма поиска значений по журналу выводит диалоговое окно, в котором пользователю предлагается ввести искомое значение. При инициализации данного окна, в поле для ввода программа подставляет значение ячейки, на которой был установлен курсор. Поиск осуществляется в обоих направлениях, но тоже только по столбцу, на котором бал установлен курсор. При успешном выполнении поиска, курсор позиционируется на найденной значение, в противном случае остается на месте.