Организация многоуровневого и валютного учета



Posted by Васеленко Сергей, Фирма КАРДИНАЛ (62.118.138.232) on September 05, 2001 at 15:25:18:

Уважаемые коллеги!

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

Приведенная ниже схема используется в нашей системе FBP 2000H уже в течение 4 лет (с FBP System 98H) и может быть использована в готовом виде в сетевых системах.

Идея первая.

В программу "Финансы без проблем" включены стандартные механизмы описания бухгалтерских систем:

1. План счетов.

План счетов является двухуровневым - счет - субсчета.

Функции для работы с планом счетов: #,AS,SA,PA.

2. Проводка.

Дебет Кредит Сумма

В дебете и кредите указываются либо субсчета, либо счета без субсчетов.

Проводка отвечает за целостность и расчет бухгалтерских данных.

3. Функции определения бухгалтерских данных.

Сальдо: BA,EA.
Обороты: OD,OK
Корреспонденции: OP

4. Стандартные отчеты для просмотра оборотов, корреспонденций, проводок.

Все остальные отчеты реализуются на встроенном языке - пользователями или разрабочиками.

Идея вторая.

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

Стандартных механизмов не достаточно для простой реализации многоуровневого (счет, субсчет 1 уровня, субсчет 2 уровня, ...) и валютного учета.

Следовательно следует использовать какие-либо другие механизмы (в целом тоже стандартные для программы :) для реализации более сложных систем.

Идея третья.

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

Обсуждаемые механизмы являются "ядром" системы.
Ошибки в ядре будут стоить очень дорого. Это очень важный вопрос.

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

Требования к учету в наших системах.

Учет разделяется на синтетический и аналитический.

Синтетический учет подразумевает получение обобщенных данных в разрезе счетов и субсчетов плана счетов.
Аналитический учет подразумевает получение данных по каждому объекту аналитического учета - организации, сотруднику, ОС, товару и т.д.

Синтетический учет опирается на синтетический план счетов, далее просто план счетов.
Аналитический учет опирается на план счетов и аналитические справочники - организаций, сотрудников и т.д.

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

Один аналитический справочник можно использовать для расшифровки данных к нескольким синтетическим счетам.
Например, сотрудники могут иметь сальдо по 70,71,73 счетам, организации - по счетам 60,61,62,63,64,76.

Синтетический план счетов может быть многоуровневым.
Например:
Счет 62 "Расчеты с покупателями"
Субсчет 62.01 "Расчеты с покупателями оптового звена"
Субсчет 62.011 "Расчеты с покупателями оптового звена (дилеры)"

В принципе, синтетический учет обеспечивает "аналитический" учет, но понятие "аналитический" включает расшифровку именно в разрезе объектов аналитического учета.
Например,
Субсчет 62.011 "Расчеты с покупателями оптового звена (дилеры)", Аналитический счет - Фирма "КАРДИНАЛ".

На основе этого требования проводка должна иметь вид:

Дебет (Синт.счет,Ан.счет) Кредит (Синт.счет,Ан.Счет) Сумма

Функции определения бухгалтерских данных также дополняются:

Сальдо(Синт.счет) или Сальдо(Синт.счет,Ан.счет) и т.д. обороты и корреспонденции.

Учет должен позволять легко получать данные в разрезе документов (счетов, накладных, счетов-фактур, ...).

Следовательно, проводка модифицируется до вида:

Дебет (Синт.счет,Ан.счет,Документ) Кредит (Синт.счет,Ан.Счет,Документ) Сумма

И должны быть процедуры работы со списками документов и получения данных в разрезе документов.
Например, Сальдо(Синт.счет,Ан.счет,Документ).

Учет должен быть многовалютным.

Следовательно данные проводки:

Дебет (Синт.счет,Ан.счет,Документ,Сумма в валюте) Кредит (Синт.счет,Ан.Счет,Документ,Сумма в валюте) Сумма

И аналогично функции получения данных:

Сальдо(Синт.счет,Ан.счет,Документ) в валюте учета или
Сальдо(Синт.счет,Ан.счет,Документ) в валюте аналитического счета или
Сальдо(Синт.счет) в любой валюте.

Реализация системы учета в FBP 2000H.

Все синтетические счета и субсчета собраны в справочнике PLAN.

Иерархия счетов задается при инициализации системы в файлах-коэффициентах END_52, END_54 в виде:

[set Parent,<Счет>,<Счет-родитель>]

Возможна как автоматическая установка с использованием правил кодирования счетов, так и ручная установка.

На основе этих данных автоматически формируются данные:

[get AS,<Счет>] - количество субсчетов
[get Level,<Счет>] - уровень счета

Аналог #,AS,SA реализуется как

#PLAN
if [get Parent,[n1 #]]=<Счет-родитель>
...
endif
#

Система может содержать любое количество аналитических справочников.
Например, _76 "Организации", _70 "Сотрудники" и т.д.

Соответствие аналитических справочников и синтетических счетов задается при настройке в файлах END_52, END_54:

[set Subconto,<Счет>,<Справочник>]

Если счет является валютным (должен иметь аналитический справочник), то для него задается:

[set ModeCurr,<Счет>, 1]

Если к счету необходима расшифровка данных в разрезе документов, то задается:

[set ModeDoc$,<Счет>,<Справочник документов>]

Автоматически распознаются (в отчетах) справочники:

'60' - документы поставщиков
'62' - документы покупателям
'76' - прочие документы
'71' - авансовые отчеты

Таким образом, мы получаем:

структуру файла ACNT.A3P:

PLAN - синтетический план счетов,
_70 - справочник сотрудников,
_76 - справочник организаций, и т.д.

и настроечные файлы END_52, END_54 с описанием структуры.

Вместо стандартной проводки программы вызывается процедура ENTRY_FACT в следующем формате:

D1=<Синтетический счет дебета>
D2=<Аналитический счет дебета>
D3=<Документ дебета>
D4=<Сумма в валюте дебета>

K1=<Синтетический счет кредита>
K2=<Аналитический счет кредита>
K3=<Документ кредита>
K4=<Сумма в валюте кредита>

G2=<Сумма проводки>

call ENTRY_FACT

Процедура ENTRY_FACT выполняет все необходимое для поддержания целостности и вычисления бухгалтерских данных:

cтандартный факт ta заменен на полноформатный факт Entry и поддерживаются процедуры (через call):

BA,EA		- сальдо синтетических счетов в валюте учета
OD,OK - обороты синтетических счетов в валюте учета
OP - корреспонденции синтетических счетов в валюте учета

BA$,EA$ - сальдо синтетических счетов в валюте

BAA,EAA - сальдо аналитического счета в валюте учета
BAA$,EAA$ - сальдо аналитического счета в валюте

BAAL$,EAAL$ - сальдо аналитического счета по документу в валюте

Т.о. для составления отчетов на основе синтетического плана счетов готовы все данные и процедуры.

К примеру стандартный вызов EA=[ea <Счет>] заменяется на N1=<Счет>; call EA.

Для расчета данных по аналитическим счетам используется предварительное сканирование ленты фактов Entry.


Все приведенные механизмы и готовые отчетные формы можно посмотреть в системе-примере
http://www.cardinal-soft.com/download/demo2.zip.
Размер 154465 байт.

Это часть системы FBP 2000H с добавлением в качестве примера счетов 0 уровня 1x-9x.
Оставлено только самое необходимое.

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


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

1. Включение файлов в файлы или аналог FIRST для файлов-коэффициентов.

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

2. Вызов пользовательских функций с параметрами.

Например, EA=[call EA,<Счет>]
или для проводок [call ENTRY_FACT,G2,D1,D2,D3,D4,K1,K2,K3,K4]


С уважением, Васеленко Сергей.



Пpишедшие ответы: