Программа для учета финансовых операций предприятия.
Программа FN предназначена для учета финансовых операций предприятия. Для дальнейшего использования наработанных данных предусмотрен их экспорт в 1С-бухгалтерию. Далее описывается внутреннее устройство программы FN в версии 0.01.
1.Описание структуры данных.
Программа FN при работе использует следующие таблицы с данными: из которых три таблицы заполняются извне и только читаются в FN:
KK_Cards | Справочник контрагентов предприятия. Программа FN использует лишь три поля этой таблицы:
|
SY_Users | База логинов пользователей. Текущий пользователь по этой базе определяется внешней переменной CurrentUser. Программа FN использует лишь четыре поля из этой таблицы:
|
SY_VarsContainer | Таблица предпочтений пользователей. Непосредственно в финансовых расчетах не задействована - используется лишь при отображении логинов (полный/сокращенный). В программе FN версии 0.01 обрабатывается только переменная sVarID =2. |
Следующие таблицы непосредственно ведутся в программе FN:
FN_KassUser | Таблица назначения кассиров - многие ко многим - хранит кому именно разрешена работа кассиром и в каких именно кассах. |
FN_ListAccount | Перечень расчетных и кассовых счетов, ведущихся программой FN:
|
FN_ListAccountType | Типы счетов
|
FN_ListCurrency | Валюты, по которым могут проводится операции на счетах. Это квадратная матрица валют при трех валютах имеющая три столбца с наименованиями TO_x - соответственно при девяти валютах - столбцы будут c наименованиями от TO_1 до TO_9.
Если диагональ матрицы курсов не равна 1 - то такие данные не считаются корректными и процедуры завершаются аварийно.
|
FN_ListEnaStatus | Состояние операции. Связи с тем, что некоторые финансовые операции происходят не мгновенно (например, деньги забронированы, а кассир их еще не выдал или на них еще не получено разрешение) - для операций устанавливается статус:
|
FN_ListLogType | Тип финансовой операции.
|
FN_Log | Журнал финансовых операций. Собственно основной журнал финансовых операций:
|
FN_SortFields |
|
Кроме FlexGridST (о котором сказано выше) при работе используется еще несколько контролов из библиотеки SPctlib.ocx: DateBoxST, NumBoxST, TextBoxST - которые не столь сильно функционально ограничены по сравнению со стандартными и не привносят так много недостатков в программу, как FlexGridST. Они могут быть легко заменены на стандартные - MaskedEdit, например - в том числе и на современные .NET-контролы, доступные через Web-интерфейс.
2.Описание форм.
В этой программы FN версии задействовано семь форм:
FN_PersonalAccountUser | Форма выполнения расчетов пользователем. |
FN_PersonalAccountKassa | Форма работы кассира. |
FN_KassAdmin | Администратор кассиров, назначающий логинам права быть кассирами в отношении многие-ко-многим. |
FN_Kurs | Форма для установки курса. Работает с произвольным числом валют. |
FN_PersonalAccountAdmin | Состоит из двух вкладок - администратор счетов и администратор расчетов. |
FN_PersonalAccountAdd | Вариант формы администратора счетов. Вызывается непосредственно с формы FN_PersonalAccountUser при наличии соответствующих прав. |
FN_PersonalAccountEdit | Карточка редактирования счета. Вызывается с таба управления счетами формы FN_PersonalAccountAdmin. В принципе имеет несколько вариантов запуска:
|
3.Описание контролов и модулей.
В состав программы FN входит один контрол:
MyNewControl | Используется для работы с произвольным курсом валют на форме FN_Kurs |
Примечание1. Функционально на формах с состоянием существуют еще подмаргивающие комбобоксы и ФлексГриды, привлекающие внимание пользователя - которые в версии 0.01 в отдельные контролы пока не выделены. | |
Примечание2. Модуль FN_Grid лучше было бы преобразовать в полнофункциональный контрол, самостоятельно работающий с данными, однако возникла проблема: хотя вызывающая программа передает Рекордсет, в контроле видится только одна коллекция Рекордсета - Fields. |
и три модуля:
FN_Grid | Сервис, расширяющий возможности стандартного MSFlexGrid. В версии 0.01 состоит из восьми методов:
|
FN_Print | Печать из программы FN вынесена в этот отдельный модуль. |
API_Registry | Непосредственно для финансовых расчетов не используется. Используется для чтения/записи произвольных ключей реестра. Задействован в определении версии MDAC. |
4.Описание хранимых процедур.
Весь доступ к данным осуществляется посредством 31 хранимой процедуры и двух функций:
FN_User_AccountClose | Закрывает счет. Используется на формах FN_PersonalAccountAdmin, FN_PersonalAccountAdd. В параметре принимает:
@Account - номер закрываемого счета. |
FN_User_AccountGetFreeNumber | Это сервис для открытия нового счета. Находит следующий свободный номер счета по порядку от 1. Параметров не требует. Используется на формах FN_PersonalAccountAdd, FN_PersonalAccountEdit.
Возвращает - номер. |
FN_User_AccountRead | Используется при редактировании данных счета. Используется на формах FN_PersonalAccountAdd, FN_PersonalAccountEdit.В параметре принимает
@Account - номер счета. Возвращает - RecordSet. |
FN_User_AccountReadAll | Используется для чтения всех счетов пользователя. Используется на форме FN_PersonalAccountAdmin. Видит закрытые счета. В параметре принимает
@Owner - номер владельца счета по KK_Cards. Возвращает - RecordSet. |
FN_User_AccountReadFromOwner | Для той же цели, что и FN_User_AccountReadAll, однако имеет несколько сокращенный (пользовательский) формат и не видит закрытых счетов. Используется на формах FN_PersonalAccountAdd и FN_PersonalAccountUser. В параметре принимает
@Owner - номер владельца счета по KK_Cards. Возвращает - RecordSet. |
FN_User_AccountUpdate | Используется для создания нового и обновления данных существующего счета. Используется на формах FN_PersonalAccountAdd, FN_PersonalAccountEdit. В параметрах принимает:
@Account int - номер счета, задается для существующего счета, @ID int - номер счета, задается для нового счета, @Type int - тип счета по базе FN_ListAccountType, в котором его вид (касса/не_касса, валюта и прочее). @sName nvarchar(50) - наименование счета, @LimitKassa int - предельный размер разового заказа денег в кассе без подписи администратора, @LimitOver int - размер Овердрафта, т.е. минусового значения счета, который позволяет выполнить платежи без подписи администратора, @KKID int - номер владельца счета по KK_Cards, @NewRecord bit - если 1 - создание нового счета, если 0 - обновление данных существующего. |
FN_User_Convert | Используется для конвертации валют по произвольному количеству валют, зарегистрированному в таблице FN_ListCurrency. Непосредственно с форм программы FN не вызывается. Используется в процедурах FN_User_LogUpdate и FN_User_LogSumAccount. Принимает на вход следующие параметры:
@FromVal int - номер валюты по FN_ListCurrency из которой производим конвертацию, @FromSum money - сумма, которую конвертируем, @ToVal int - номер валюты, куда конвертируем. Возвращает: @ToSum money OUTPUT - результат конвертации. |
FN_User_CurrencyList | Выводит список валют, зарегистрированных в FN_ListCurrency в удобочитаемом формате. Используется на форме FN_Kurs. При вызове принимает необязательный параметр:
@NumVal - номер валюты, если он задан то выводится таблица курсов только по одной валюте, если не задан - то вся матрица валют. Возвращает - RecordSet. |
FN_User_CurrencyUpdate | Устанавливает новый курс валют. Используется на форме FN_Kurs. Принимает параметры:
@From nvarchar(10)- имя валюты из которой выполняется конвертирование, @To nvarchar(10)- имя валюты, куда производится конвертирование, @Kurs real - курс. |
FN_User_EnableKassaIdForLogin | Используется на форме администратора кассиров для определения касс, доступных на заданный логин. В параметрах принимает:
@Login - номер логина по SY_Users. Возвращает - номер по KK_Cards. |
FN_User_EnableLoginIdForKassa | Аналогично предыдущей прицедуре FN_User_EnableKassaIdForLogin, только наоборот - определить логины, доступные на заданную кассу. В параметрах принимает:
@Account - номер счета кассы. Возвращает - номер по SY_Users. |
FN_User_GetCurrencyCount | Используется на форме FN_Kurs для определения количества валют, зарегистрированных в FN_ListCurrency (для последующего динамического создания необходимого количества контролов MyNewControl). Параметров не требует.
Возвращает - число валют в справочнике валют. |
FN_User_GetOwnerForCurrentUser | Получает владельца (по таблице KK_Card) для пользователя известного по номеру по SY_Users. Используется на формах FN_PersonalAccountUser и FN_PersonalAccountAdd для предварительной загрузки на форму счетов, принадлежащих CurrentUser. Принимает параметр:
@SY_User - CurrentUser. Возвращает - номер пользователя по KK_Cards. |
FN_User_KassaDelete | Применяется на форме FN_KassAdmin для запрета некоторому логину работать кассиром некоторой кассы. Принимает параметр:
@Account - номер счета кассы, @Login - номер логина по SY_Users. |
FN_User_KassaInsert | Выполняет действие, противоположное FN_User_KassaDelete. Параметры те же. |
FN_User_KassaList | На форме FN_KassAdmin получает список счетов типа Касса. Параметры не требуются.
Возвращает - RecordSet. |
FN_User_KassaListForLogin | На форме кассира FN_PersonalAccountKassa позволяет выбрать перечень доступных касс. Принимает параметр:
@Login - CurrentUser Возвращает - RecordSet. |
FN_User_KassaReadQueue | На форме кассира FN_PersonalAccountKassa отбирает список документов, по которым кассир уже может выполнять операции. Принимает параметры:
@KassAccount int - если задано, то отбор только по конкретной кассе, @LogID int - если задано, то в отборе участвует конкретный номер документа, @IsPrinato bit - если 1, то отбор только утвержденных ордеров, @IsFinished bit - если 1, то отбор только исполненных ордеров, @Date1 smalldatetime - если задано, то отбор исполненных ордеров по конкретной дате. Возвращает - RecordSet. |
FN_User_LogAccountReadTo | Эта процедура формирует на форме FN_PersonalAccountUser список счетов куда переводятся деньги. Этот список отличается от списка откуда переводятся деньги - там не видно остатков по счетам, зато видны все возможные счета в зависимости от типа выбранной операции - кассовая/некассовая. Процедура принимает параметр:
@Kassa - кассовая/некассовая операция. Возвращает - RecordSet. |
FN_User_LogAssign | Процедура позволяет администратору разрешить финансовую операцию - на которую требуется его разрешение. Вызывается на форме FN_PersonalAccountAdmin. Принимает параметр:
@ID - номер документа, который подписывается. |
FN_User_LogDelete | Позволяет удалить запись в журнале финансовых операций (если ее удаление разрешено) - например неподписанную администратором заявку в кассу. Используется на форме FN_PersonalAccountUser. Принимает параметр:
@ID - номер удаляемого документа. Возвращает - код возврата, 0 - если удаление произведено. |
FN_User_LogGetSortFields | Эта процедура вызывается для использования совместно с FlexGridST на форме FN_PersonalAccountUser и считывает из таблицы FN_SortFields перечень столбцов, который будет отображать FlexGridST. Параметров не требуется. |
FN_User_LogGetStatus | Это служебная процедура, вызываемая из FN_User_LogUpdate для расчета статуса вводимого в журнал документа. Имеет параметры:
@IsTypeKassa bit - тип записи в журнале, @OverDraft bit - имеется ли Овердрафт, @OverKassa bit - имеется ли превышение лимита по кассе, @IsFromKassa bit - если деньги переводятся из кассы, @IsToKassa bit - если движение денег производится в кассу, Возвращает: @Result int OUTPUT - рассчитанный статус, который будет вписан в журнал финансовых операций. |
FN_User_LoginList | Получает список всех логинов в SY_Users (с учетом предпочтения). Используется на форме FN_KassAdmin. Параметров не требуется. |
FN_User_LogIsMayDelete | Определяет - может ли быть удалена запись в журнале финансовых операци FN_Log. Используется на форме FN_PersonalAccountUser. Принимает параметр:
@LogID - номер записи в FN_log. Возвращает - номер записи или NULL. |
FN_User_LogRead | Основная процедура, формирующая дружественное представление данных журнала финансовых операций FN_Log. Используется на формах FN_PersonalAccountUser, FN_PersonalAccountAdmin и при экспорте данных в 1С-бухгалтерию. Принимает параметры:
@Date1 smalldatetime - обязательный параметр, начальная дата отчета, @Date2 smalldatetime - обязательный параметр, конечная дата отчета, @CurrentUser int - обязательный параметр, номер пользователя по таблицу SY_Users. При формировании журнала используется для вывода представления пользователей полный/сокращенный. @Owner int - отбор операций по одному владельцу, @SortFields - поле сортировки (как в таблице FN_SortFields), @ID int - задается ТОЛЬКО для чтения ОДНОЙ записи, @Type int - отбор пи типу операций по таблице FN_ListLogType @Status int - отбор по статусу операции по таблице FN_ListEnaStatus. Возвращает - RecordSet. |
FN_User_LogSetNewStatus | Процедура исполнения документа кассиром. Применяется на форме FN_PersonalAccountKassa. Принимает параметры:
@LogId - номер исполняемой записи в журнале, @ExecUser - CurrentUser кассира. |
FN_User_LogSumAccount | Подсчитывает общую сумму в основной валюте на всех разновалютных счетах пользователя. Используется на форме FN_PersonalAccountUser. Принимает параметры:
@Owner int - номер пользователя по KK_Cards, Возвращает: @SumAccount money OUTPUT - результат подсчета сумма, @SumBron money OUTPUT - результат подсчета - сумма забронированная к кассе. Общая сумма принадлежащих пользователя средств - @SumAccount + @SumBron. |
FN_User_LogTo_IsKassa | Эта процедура, вызываемая на форме FN_PersonalAccountUser, при выборе типа операции - определяет, является ли выбранная операция кассовой - для последующего отбора счетов назначения, для которых допустимы выбранные операции. Принимает параметр:
@Type - выбранный на форме тип операции (в текстовом виде по таблице FN_ListLogType. |
FN_User_LogUpdate | Эта процедура, вызываемая на форме FN_PersonalAccountUser - единственная процедура, которая заносит финансовую операцию в журнал операций FN_Log. Принимает параметры:
@Udate - выбранная на форме учетная дата операции, @FormSum - выбранная на форме сумма, @FormCur - выбранная на форме валюта, @CrUser - пользователь, создавший запись по таблице SY_Users - CurrentUser @FromAccount - номер исходного счета, @ToAccount - номер счета назначения, @LogType - тип финансовой операции по таблице FN_ListLogType @InRecord - номер заказа (не задействовано в дальнейшей обработке) @sName - комментарий, введенный на форме. Возвращает - двадцать кодов возврата, каждый из которых связан с конкретным запретом выполнения финансовой операции. |
FN_User_Mimimum_Init | Процедура минимальной инициализации справочников для возможности начала работы программы FN. |
FN_User_GetUserName | Функция, формирующая полное либо сокращенное имя пользователя, в соответствии предпочтениями, записанными в SY_VarsContainer. Используется в процедурах FN_User_LoginList и FN_User_LogRead. Принимает параметры:
@SY_ID int - номер логина пользователя, для которого мы хотим получить имя, @CurrentUser int - номер логина текущего пользователя. Возвращает - имя указанного пользователя в соответствии с выбранными предпочтениями текущего пользователя. |
FN_User_LoadVar | Эта функиция используется в функции FN_User_GetUserName и возвращает значение заданной переменной в текстовом виде с учетом умолчаний по таблице SY_VarsContainer. Принимает параметры:
@SY_ID int - номер пользователя, для которого мы возвращаем переменную, @NumVar as int - номер переменной, которую мы возвращаем, @IfEmpty as - умолчание, если заданная переменная на задана ни для пользователя №1 (по SY_Users) ни для текущего пользователя. Возвращает - текстовое значение указанной переменной. |
Работа с данными минуя эти процедуры не производится. Имеется лишь одно нарушение этого принципа - использование программы LoadListFromDB, которая грузит Combo-боксы на формах непосредственно по именам полей в базе, минуя представления данных, заданные процедурами.
5.Интеграция программы FN в SVA.
Работа программы FN невозможна вообще без минимальной инициализации справочников, поэтому в состав программы включена процедура минимальной инициализации справочников. Также для работы программы FN необходимо определить логины, которым даны следующие права:
53 | Право выполнять расчеты по личному счету |
54 | Право администрировать расчеты |
55 | Право администрировать расчетные счета пользователей |
57 | Право назначать кассиров |
Вызов программы производится путем добавления в ToolBar на форме MainMDI кнопки tbtDropDown:
1 | Расчеты | FN_USER |
2 | Касса | FN_KASSA |
3 | Контроль | FN_ADMIN |
4 | Курс валют | FN_KURS |
5 | Права на кассы | FN_KassAdmin |
|