ОСТАТКИ И ОБОРОТЫ ПО СЧЕТАМ

Для получения остатков на счетах в ИБС "Бисквит" существует базовая процедура acct-pos, которая описана в base-pp.p, но не объявлена в basefunc.def. base-pp.p вызывается как PERSISTENT процедура с handle - h_base, таким образом, вызов процедуры acct-pos выглядит следующим образом:

RUN acct-pos in h_base (acct,
                        currency,
                        beg-date,
                        end-date,
                        minStatus).

  • acct - счет, тип CHAR;
  • currency - валюта счета (для рублей - это значение "пусто"), тип CHAR;
  • beg-date - начальная дата периода, тип DATE;
  • end-date - конечная дата периода, тип DATE;
  • minStatus - минимальный учитываемый статус документов, тип CHAR.

результат процедуры acct-pos записывается в переменных объявленных в {sh-defs.i}, следовательно данный инклюд-файл должен быть предварительно подключен в процедуре из которой осуществляется вызов процедуры acct-pos.

  • sh-in-bal - входящий остаток в рублях, тип DECIMAL;
  • sh-bal - исходящий остаток в рублях, тип DECIMAL;
  • sh-in-val - входящий остаток в валюте, тип DECIMAL;
  • sh-val - исходящий остаток в валюте, тип DECIMAL;
  • sh-dbдебетовые обороты в рублях, тип DECIMAL;
  • sh-cr - кредитовые обороты в рублях, тип DECIMAL;
  • sh-vdb - дебетовые обороты в валюте, тип DECIMAL;
  • sh-vcr - кредитовые обороты в валюте, тип DECIMAL;
  • lastmove - дата последнего рублевого движения по счету, тип DATE;
  • lastcurr - дата последнего валютного движения по счету, тип DATE.

Здесь существуют одна тонкость. Если счет валютный (под валютным понимается счет валюта которого отлична от рублей), то возвращаемые значения sh-in-val, sh-val и sh-vdb, sh-vcr будут содержать соответствующие значения в валюте счета, а sh-in-bal, sh-bal и sh-db, sh-cr соответствующие им рублевые эквиваленты по курсу ЦБ. А если счет рублевый, то значения sh-in-val, sh-val и sh-vdb, sh-vcr будут нулевыми.

Расчет остатков на счетах в том числе и рублевые эквиваленты осуществляются на основе таблиц acct-pos (Остатки на лицевых счетах), acct-cur (инвалютные остатки на счетах), а также на основе таблицы op-entry (проводки), по полям amt-rub (рублевая сумма) и amt-cur (ин. валюта).

Записи в таблицах acct-pos и acct-cur формируются при закрытии операционного дня, следовательно и определить остаток по счету по этим таблицам можно только по закрытым дням.

Если счет является валютным (валюта отличная от рубля), то записи по операции проведенной по счету формируются в обоих таблицах: в таблице acct-cur - запись в валюте счета и в таблице acct-pos - рублевый эквивалент по курсу ЦБ.

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

Для примера, рассмотрим как отрабатывает процедура acct-pos по долларовому счету, если в выходные дни не проводилась операция курсовой разницы (курс взят условный):

День недели Курс ЦБ Входящий остаток
(USD)
Входящий остаток
(RUR)
Исходящий остаток
(USD)
Исходящий остаток
(RUR)
пятница 30 100 2900 100 3000
суббота 31 100 3000 100 3000
воскресенье 31 100 3000 100 3000
понедельник 31 100 3000 100 3100

Можно еще порассуждать на предмет правильности того, что входящий остаток (рублевый эквивалент) всегда равен исходящему остатку (рублевый эквивалент) предыдущего дня, ведь на утро действует уже новый курс, не тот что был вчера на вечер. 

Пример:

{globals.i}
{sh-defs.i}
RUN acct-pos IN h_base ("40702810000000000001", "", 01/01/2012, TODAY, "?").
DISPLAY sh-in-bal sh-db sh-cr sh-bal lastmove.

Дата последнего рублевого движения lastmove определяется до даты окончания заданного периода end-date. Если в запрашиваемом периоде рублевого движения по счету не было, но оно было до указанного периода, то lastmove вернет эту дату.

Аналогично определяется дата последнего валютного движения по счету lastcurr.

Для примера рассмотрим долларовый счет. Предположим, что 01.05.2012 на счет поступила сумма $100 и далее никакого движения по счету не проводилось, т.е. остаток на счете оставался $100. При этом, проводились операции переоценки (курсовой разницы) рублевого эквивалента согласно ежедневно изменяющемуся курсу доллара, т.е. создавались проводки изменения рублевого эквивалента. Таким образом, датой последнего валютного движения будет дата 01.05.2012, а датой последнего рублевого движения - дата последней операции курсовой разницы.   

Полярность возвращаемых значений остатков и оборотов зависит от полярности счета. Так для активных счетов, возвращаемые значения будут отрицательными.


ДОСТУПНЫЙ ОСТАТОК


Есть еще один остаток, который очень интересен клиенту - это доступный остаток, т.е. сумма доступная клиенту для совершения расходных операций. Такой остаток складывается учитывая все операций со статусом выше указанного, кроме неподтвержденных кредитовых.

Процедура acct-pos-exc-cr позволяет получить такой остаток.

RUN acct-pos-exc-cr IN h_base (acct,
                               currency,
                               end-date,
                               minStatus).

  • acct - счет тип CHAR;    
  • currency - валюта счета (для рублей - это значение "пусто") тип CHAR;
  • end-date - расчетная дата, тип DATE;
  • minStatus - минимальный учитываемый статус дебетовых операций, тип CHAR.

Результат процедуры записывается в те же переменные, что и процедуры acct-pos. При этом дата начала периода (beg-date) принимается равной дате последнего закрытого опер. дня.

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

beg-date = FGetLastClsDate(iDate,acct.acct-cat).

Пример:

{globals.i}
{sh-defs.i}
RUN acct-pos-exc-cr IN h_base ("40702810000000000001", "", TODAY, "П").
DISPLAY sh-in-bal sh-db sh-cr sh-bal.


АНАЛИТИЧЕСКИЕ ОСТАТКИ И ОБОРОТЫ


Все сказанное выше относится к балансовым остаткам и оборотам. Но помимо балансовых в АБС БИСквит для некоторых счетов ведутся еще аналитические остатки и обороты. Примером таких счетов являются счета срочных вкладов.

Процедура kau-pos.p предназначена для определения аналитических остатков и оборотов счетов.

RUN kau-pos.p (acct,
               currency,
               beg-date,
               end-date,
               minStatus,
               kauCode).

  • acct - счет тип CHAR;
  • currency - валюта счета (для рублей - это значение "пусто") тип CHAR;
  • beg-date, end-date - начальная и конечная даты периода тип DATE;
  • minStatus - минимальный учитываемый статус дебетовых операций, тип CHAR;
  • kauCode - код аналитики, тип CHAR.

Результаты этой процедуры записываются в переменные описанные в инклюд-файле {ksh-defs.i}

  • ksh-in-bal - входящий аналитический остаток в рублях, тип DECIMAL;
  • ksh-bal - исходящий аналитический остаток в рублях, тип DECIMAL;
  • ksh-in-val - входящий аналитический остаток в валюте, тип DECIMAL;
  • ksh-val - входящий и исходящий аналитический остаток в валюте, тип DECIMAL;
  • ksh-db - дебетовые аналитические обороты в рублях, тип DECIMAL;
  • ksh-cr - кредитовые аналитические обороты в рублях, тип DECIMAL;
  • ksh-vdb - дебетовые аналитические обороты в валюте, тип DECIMAL;
  • ksh-vcr - кредитовые аналитические обороты в валюте, тип DECIMAL;
  • ksh-lastmove - дата последнего рублевого аналитического движения по счету, тип DATE;
  • ksh-lastcurr - дата последнего валютного аналитического движения по счету, тип DATE.

Пример:

{ksh-defs.i} 
RUN kau-pos.p ("42305810000000000001", "", TODAY, TODAY,  "П", "ОстВклС"
).
DISPLAY ksh-in-bal ksh-db ksh-cr ksh-bal.      
Вы здесь: Главная ИБС Бисквит БАЗОВЫЙ ОСТАТКИ И ОБОРОТЫ ПО СЧЕТАМ