powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблицы бухгалтерских проводок не дает покоя !!!!
43 сообщений из 43, показаны все 2 страниц
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32351546
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять пытаюсь узнать ваше мнение по стругтуре таблицы для бухгалтерских проводок...
Оч. хочется создать более менее унифицированую бухгалтерскую подсистему в своей программе чтобы там уживалась как основная деятельность (лизинг и кредитование, и учет любой прочей хозяйственной деятельности - аренда, зарплаты, покупка продажа основных средств и тому подобное).

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

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

Теперь я сомневаюсь как хранить привязку проводок к аналитикам счетов, т.к. 90% а может и больше проводок идут имено по основной деятельности по лизингу и происходят в пределах одного договора. Чтобы быстро получать все необходимые отчеты и остатки по договорам достаточно к каждой проводке добавить ID договора и все работает очень быстро и красиво. Причем если добавить ID_K и ID_D тоесть договор дебетного счета и договор кредитоного счета то расчет остатков производиться в два раза дольше (а таких проводок 1% не больше) потому выгоднее проводки между счетами двух разных договорами делать через промежуточный счет двумя операциями.

Так вот для реализации рагистрации различных хоз. операций и т.д. надо вобще возможность хранить в проводке аналитики не только договора но и какието другие неизвестные. Возможно также необходима возможность привязать несколько различных видов аналитик к проводке (доп. связанная таблица таблица) причем и к дебетному счету и кредитному счету, все это должно дать возможность бухгалтерам свободно учитывать различные хоз. операции. Но из за этих 7-10% проводок время получения отчетов и разноски по аналитикам 90% проводок основной деятельности будет в десятки раз медленней !!

У когонибудь была подобная сутуация ? Что вообще теоретически можете посоветовать в данном случае ?

Большое всем кто до читал до сюда (особенно тем кто что-то понял ! :))
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32352813
Alex S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брр... не совсем понял, но кину свои 3 копейки.
А что тебе мешает хранить так:
1)Табличка "Хоз.Операции" где будеш хранить ссылки на договора и прочее.
2) Табличка "Проводки" где будет ссылка на хоз. операцию
3) Табличка "Движение по аналитики" где у тебя тож будет ссылка на хоз. операцию

Или я не так тебя понял?
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32352920
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с Алексом.
1. Хоз операция
- №пп
- Дата
- От кого
- Кому
- Сумма
Основание
- Тип (допустим ДОГ.-Договор)
- №
- от
2. Журнал проводок
- Связь с Хоз.опер.
- Номеклатура
- Дт
- Аналитика 1ур. (поле со списком - данные из справочника)
- Аналитика 2ур.
... сколько надо
- Кт
- Аналитика 1ур.
- Аналитика 2ур.
... столько сколько по Дт
- Кол-во
- Цена
- Сумма

ВОТ ВРОДЕ БЫ И ВСЕ!!!
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32353895
gringo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> DIGITALPRO

не совсем согласен
если по хоз. операции идут 2 и более договоров?

например, всякого рода взаимозачеты?
у нас поэтому договора хранятся как аналитика к проводкам
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32354150
Alex S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весело. Только насколько мне известно хоз. операция создается на основании документа. Ну и сделай 2 и больше договора, элементами документа.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32355961
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так ... я уже думал ни у кого нет никаких мыслей по этому поводу ... :)
в принципе я так примерно и планировал хранить проводки :
1.хоз операции
2.проводки привязаные к ним
но главный вопрос был как в проводке хранить связь с аналитикой

пара вопросов :
то Alex S.

>3) Табличка "Движение по аналитики" где у тебя тож будет ссылка на хоз. >операцию

что из себя представляет эта табличка ?

то DIGITALPRO

- Аналитика 1ур. (поле со списком - данные из справочника)
- Аналитика 2ур.

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

как я понимаю вы предлагаете хранить аналитики и дебета и кредита в одной проводке ?

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

В вою очередь обычно 95% проводок содержат и Дебете и Кредите одну и ту же аналитику (проводка в пределах одного договора). Если деть вариант где дебета и кредита свои аналитики то при вычислении остатков придеться групировать записи два раза вместо одного (в случае когда у нас п проводке одна аналитика и для дебета и для кредита, а проводки между аналитиками идут через промеж. счет)
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32356348
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dennis_L

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

Послушайте совета - купите готовую - научитесь с ней работать и будете ценным специалистом (той же Axapt'ы). Время кустарного/накаленного программирования проходит. Сейчас уже нет нужды изобретать велосипеды!
Более того (только не обежайтесь) - тот функционал, который вы привели - это как минимум год работы для команды с хорошим постановщиком и архитектором знакомым с предметной областью. Спрашивая о труктуре проводок вы автоматически из этих категорий себя исключаете - так что у вас нету шансов такое написать - не тут так та примете неверное архитектурное решение - и проекту конец

P.S> никаких обид - наоборот стараюсь предостеречь от напрасного труда. Мой совет - начинайте изучать какую-нибудь ERP - и в автоматизации предприятия разберетесь - и ценные навыки приобретете
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32357196
someone312002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эт конечно же хорошо - покупать готовую и пользоваться ею (при наличии "мозгов" для пользования)... Правда, по собственному опыту скажу - Аксапта довольно-таки тяжела.
По сути вопроса: Dennis_L ,ты сказал одну "ключевую" фразу - организовать бухгалтерские проводки ... Надеюсь, с бугалтерией вообще ты знаком... Объяснять не понадобится, что некоторые операции дебетуют тебя, некоторые - кредетуют... В результате чего твоё "состояние" либо увеличивается, либо уменьшается. Отсюда и плясать будем. Что имеем ? Операция, Клиент, Товар. Что ещё ? Документ. Для всего этого тебе ещё понадобятся "классифицирующие" справочники по типам операции, типам документов, типам товара, единиц измерения товара. Заметь - это как минимум. Дальше всё просто. Составляешь "описание" для каждого из "основных объектов" - вот тебе уже и таблицы. В них проставь ключи на классификаторы, связи между ними. Отработай "систему" движения данных для каждой операции будь то : заключение договора, оплата договора, оплата товара по заключённому договору (часть товара, долгоиграющий договор), выписка накладной для склада (коли он есть), выдача чека (если есть касса), выдача результирующих (ежемесячные, годовые отчёты) данных по...

Сложно ? Но можно!!!
УДАЧИ!!!


"...я не волшебник - я только учусь" (с)
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32358156
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насчет аксапты я не против ее изучить и т.д. а вы можете подсказать где можно было бы получить доступ к описанию или демо версии и т.д. ?

но в свою защиту :)) погу только сказать что один такой проект мне удалось запустить и все работает в компании с портфелем в 200 000 000 USD в котором около 20 000 договорв и работает непосредстванно с ней 60 человек.
Но в этой системе бухгалтерская часть сделана так чтобы хорошо работать с конкрентным направлением безнеса но вести учет произвольных бугалтерских операций не удобно (этого и ненадо т.к. фирма использует большую корпоративную бух. систему куда ипортируються проводки по основному виду деятельности + там же и регистрируються др. хоз. операции)

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

то someone312002 :
Идея вполне понятна ... но я какраз хотел услышать мнения людей которые делали для своих программ бух. подсистему как они организовывали таблицу проводок и ее связь с аналитиками (класифицирующими справочниами) , причем конкрентые примеры а не абстрактные рассуждения ...
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32358200
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri а вы не вкурсе сколько примерно стоит axapta ? дело в том что директор компании которая у меня заказала новую систему являеться финансовым директором в более большой компании где он сейчас занимаеться вводом именно axapt-ы и у него не возникало даже никаких мыслей по поводу того что вместо того чтобы использовать мою программу можно было бы поставить axcapt-у .... и я незнаю почему но спрашивать тоже не хочеться
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32358220
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не спецалист по erp-системам - так что врать не буду - но думаю стоит она не мало
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32358226
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и потом - на axapta`е свет клином не сошелся - есть разные предложения для разных заказчиков - так что просто надо изучить рынок - но повторюсь - дело это перспективное и у вас не будет складываться впечатление что делается никому не нужная работа (хотя кто знает )
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32358457
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня какраз не складываеться впечатление о том что делаеться ненужная работа, какраз такки у заказчиков часто складываеться впечателение что при покупке больших EPR систем они заплатят много денег за чужую работу над функциями программы которые им не нужны или не очень нужны ...
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32359960
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализация принципа двойной записи для общего случая
))На DB2
Могу выслать приложение которое тестирует эту модель.
Генерит N - ное количество счетов, делает по ним N проводок,
формирует выписки, ведомость остатков.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
CONNECT TO SAMPLE
@

DROP TRIGGER	kernel.BDTrnDays@
DROP TRIGGER	kernel.BDTrnDebet@
DROP TRIGGER	kernel.BDTrnCredit@
DROP TRIGGER	kernel.BITrnDays@
DROP TRIGGER	kernel.BITrnDebet@
DROP TRIGGER	kernel.BITrnCredit@
DROP TRIGGER	kernel.BUTrn@
DROP TRIGGER	kernel.ADTrn@
DROP TRIGGER	kernel.AITrn@

DROP TRIGGER 	kernel.ADJrn@
DROP TRIGGER 	kernel.BDJrn@
DROP TRIGGER 	kernel.BIJrn@
DROP TRIGGER	kernel.AIJrn@

DROP TRIGGER    kernel.BUAccount@
DROP TRIGGER	kernel.AIAccount@
DROP TRIGGER	kernel.BIAccount@

DROP TRIGGER	kernel.BIStuff@

DROP TRIGGER	kernel.AIOverdraft@
DROP TRIGGER	kernel.ADOverdraft@

DROP TRIGGER	kernel.BIDocumentDayCheck@
DROP TRIGGER	kernel.BDDocumentDayCheck@
DROP TRIGGER	kernel.BUDocument@
DROP TRIGGER 	kernel.BIDocument@
DROP TRIGGER	kernel.ADDocument@
DROP TRIGGER	kernel.AIDocument@

DROP TABLE		kernel.Overdraft@
DROP TABLE		kernel.Trn@
DROP TABLE		kernel.Document@
DROP TABLE 		kernel.Days@
DROP TABLE		kernel.Jrn@
DROP TABLE		kernel.Account@
DROP TABLE		kernel.Stuff@

CREATE TABLE kernel.Stuff (
	Stuff	INTEGER NOT NULL,
	Name	CHAR( 35 ),
    AddCnt  INTEGER,
    DelCnt  INTEGER,
	CONSTRAINT Pk PRIMARY KEY (STUFF)
)
@

CREATE TRIGGER kernel.BIStuff 
NO CASCADE BEFORE INSERT ON kernel.Stuff
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	SET N.AddCnt= 0 ;
    SET N.DelCnt= 0 ;
END
@


ECHO  -------------------------@
 
ECHO Импорт учетных плоскостей@
ECHO@
IMPORT FROM _Stuff.del OF DEL COMMITCOUNT  100 
	INSERT INTO kernel.Stuff (Stuff,Name)
@
ECHO  -------------------------@
 
ECHO@
ECHO@


 ----------------------------------------------------------------
 
 --	Stuff		Учетная плоскость
 
 --	Account		Аналитический счет
 
 --  Opened		Дата открытия/создания счета
 
 --  Closed		Дата закрытия счета
 
 --	Type		Тип счета Активный,Пассивный, Астивно-пассивный
 
 --	Overdraft	Глубина овердрафта
 
 --	Active		Входящий активный остаток
 
 --	Passive		Входящий пассивный остаток
 
 --	Debet		обороты по дебету
 
 --	Credit		обороты по кредиту
 
 ----------------------------------------------------------------
 
CREATE TABLE kernel.Account (
	Stuff	INTEGER NOT NULL,
	Account	INTEGER NOT NULL,
	Closed	DATE,
	Type	CHAR( 1 ) CHECK (Type IN ('A','P','M')),
	Overdraft	DECIMAL( 17 , 2 ) CHECK (Overdraft>= 0 )  DEFAULT  0 ,
	Active		DECIMAL( 17 , 2 ) CHECK (Active>= 0 )		DEFAULT  0 ,
	Passive		DECIMAL( 17 , 2 ) CHECK (Passive>= 0 )	DEFAULT  0 ,
	Debet		DECIMAL( 17 , 2 ) CHECK (Debet>= 0 )		DEFAULT  0 ,
	Credit		DECIMAL( 17 , 2 ) CHECK (Credit>= 0 )		DEFAULT	 0 ,
	DCnt		INTEGER DEFAULT  0 ,
	CCnt		INTEGER DEFAULT  0 ,
	CONSTRAINT	AtStuff FOREIGN KEY (Stuff) 
		REFERENCES kernel.Stuff (Stuff) ON DELETE RESTRICT,
	CONSTRAINT  AtAPMCheck CHECK (
		(	
			(Type='A' AND Active>= 0 . 00  AND Passive= 0 . 00 ) 
			OR (Type='P') 
			OR (Type='M')
		)
		AND (Active= 0 . 00  OR Passive= 0 . 00 )
	),
	CONSTRAINT  AtBalance CHECK (
		(Type='A' AND (Active-Passive+Debet-Credit)>= 0 . 00 )
		OR (Type='P' AND (Passive-Active+Credit-Debet+Overdraft)>= 0 . 00 )
		OR (Type='M')
	),
	CONSTRAINT	Pk PRIMARY KEY (Stuff,Account)
)
@
CREATE UNIQUE INDEX kernel.IAccountStuff
	ON kernel.Account (Stuff DESC,Account DESC)
@

 --------------------------------------------------------------------
 
 --  Журнал остатков по аналитическому счету
 
 --------------------------------------------------------------------
 
 --  Stuff		
 
 --  Account 	
 
 --  Dt			
 
 --  Type		
 
 --  Overdraft	
 
 --	Active		
 
 --	Passive		
 
 --	Debet		
 
 --	Credit		
 
 --	DCnt		
 
 --	CCnt		
 
 --------------------------------------------------------------------
 
CREATE TABLE kernel.Jrn (
    Stuff		INTEGER,
    Account 	INTEGER,
    Dt			DATE,
    Type		CHAR( 1 ),
    Overdraft	DECIMAL( 17 , 2 ),
	Active		DECIMAL( 17 , 2 ) CHECK (Active>= 0 )		DEFAULT  0 ,
	Passive		DECIMAL( 17 , 2 ) CHECK (Passive>= 0 )	DEFAULT  0 ,
	Debet		DECIMAL( 17 , 2 ) CHECK (Debet>= 0 )		DEFAULT  0 ,
	Credit		DECIMAL( 17 , 2 ) CHECK (Credit>= 0 )		DEFAULT	 0 ,
	DCnt		INTEGER DEFAULT  0 ,
	CCnt		INTEGER DEFAULT  0 ,
	CONSTRAINT	AtStuffAccount FOREIGN KEY (Stuff,Account)
		REFERENCES kernel.Account (Stuff,Account) ON DELETE RESTRICT,
	CONSTRAINT  AtAPMCheck CHECK (
		(	
			(Type='A' AND Active>= 0 . 00  AND Passive= 0 . 00 ) 
			OR (Type='P') 
			OR (Type='M')
		)
		AND (Active= 0 . 00  OR Passive= 0 . 00 )
	),
	CONSTRAINT  AtBalance CHECK (
		(Type='A' AND (Active-Passive+Debet-Credit)>= 0 . 00 )
		OR (Type='P' AND (Passive-Active+Credit-Debet+Overdraft)>= 0 . 00 )
		OR (Type='M')
	)
)
@

CREATE UNIQUE INDEX kernel.IJrnSAD ON kernel.Jrn (Stuff,Account,Dt) ALLOW REVERSE SCANS@
CREATE UNIQUE INDEX kernel.IJrnDSA ON kernel.Jrn (Dt,Stuff,Account)@

 ----------------------------------------------------------------
 
 -- Контроль допустимых значений параметров счета
 
 -- Если овердрафт NULL тогда - 0
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BUAccount
NO CASCADE BEFORE UPDATE ON kernel.Account
REFERENCING NEW AS N OLD AS O
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	SET N.Overdraft= 
		CASE 
			WHEN (N.Overdraft IS NULL) 
			THEN  0  ELSE N.Overdraft
        END;
END
@

 ----------------------------------------------------------------
 
 -- При добавлении новой записи в таблицу счетов
 
 -- обнуляются поля Overdraft,Active,Passive,Debet,Credit
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BIAccount 
NO CASCADE BEFORE INSERT ON kernel.Account
REFERENCING NEW AS N 
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	SET N.Closed=NULL;
	SET N.Overdraft= 0 ;
	SET N.Active= 0 ;
	SET N.Passive= 0 ;
	SET N.Debet= 0 ;
	SET N.Credit= 0 ;
	SET N.DCnt= 0 ;
	SET N.CCnt= 0 ;
END
@

CREATE TRIGGER kernel.AIAccount 
AFTER INSERT ON kernel.Account
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
UPDATE kernel.Stuff S
    SET S.AddCnt=S.AddCnt+ 1  WHERE S.Stuff=N.Stuff
@


ECHO  ---------------------------@
 
ECHO Импорт аналитических счетов@
ECHO@
IMPORT FROM _Account.del OF DEL COMMITCOUNT  100 
	INSERT INTO kernel.Account (Stuff,Account,Type)
@
ECHO  ---------------------------@
 
ECHO@
ECHO@

 ----------------------------------------------------------------
 
 --	Dt			Дата проведения операции
 
 --	Closed		Признак открыт/закрыт
 
 --	AddCnt	    Количество добавленных документов 
 
 --	DelCnt		Количество удаленных документов
 
 --	DebetCnt	Количество свернутых в журнал проводок по дебету
 
 --	CreditCnt	Количество свернутых в журнал проводок по кредиту
 
 --	TrnCnt		Количество тpанзакций * 2 в дне
 
 ----------------------------------------------------------------
 
CREATE TABLE kernel.Days (
	Dt			DATE NOT NULL, 
	Closed		CHAR( 1 ) CHECK (Closed in ('Y','N')) DEFAULT 'N', 
	AddCnt		INTEGER	DEFAULT  0 ,
	DelCnt		INTEGER DEFAULT  0 ,
	DebetCnt	INTEGER DEFAULT  0 ,
	CreditCnt	INTEGER DEFAULT  0 ,
	TrnCnt		INTEGER DEFAULT  0 ,
	CONSTRAINT  Pk PRIMARY KEY (Dt)
)
@

INSERT INTO kernel.Days (Dt,Closed) VALUES (CURRENT DATE,'N')
@





 ----------------------------------------------------------------
 
 --	Dt		Дата к которой относится документ
 
 --	DocID	Идентификатор документа в дне (порядковый номер)
 
 --	UserID	Пользователь, создавший документ
 
 --	DocType Тип документа
 
 --	DocTS	Дата и время создания документа
 
 ----------------------------------------------------------------
 
CREATE TABLE kernel.Document (
	Dt		DATE NOT NULL,
	DocID	INTEGER NOT NULL,
	UserID	CHAR( 12 ),
	DocType INTEGER,
	DocTS	TIMESTAMP,
	CONSTRAINT AtDt FOREIGN KEY (Dt) 
		REFERENCES kernel.Days (Dt) ON DELETE RESTRICT,
	CONSTRAINT Pk PRIMARY KEY (Dt,DocID)
)
@


 ----------------------------------------------------------------
 
 -- Триггер на добавление нового документа
 
 -- Увеличиваем количество введенных документов
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.AIDocument
AFTER INSERT ON kernel.Document
REFERENCING NEW AS N 
FOR EACH ROW MODE DB2SQL
	UPDATE kernel.Days Days set Days.AddCnt=Days.AddCnt+ 1 
       WHERE Days.Dt=N.Dt
@

 ----------------------------------------------------------------
 
 -- Триггер на удаление нового документа
 
 -- Уменьшаем количество введенных документов
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.ADDocument
AFTER DELETE ON kernel.Document
REFERENCING OLD AS O 
FOR EACH ROW MODE DB2SQL
	UPDATE kernel.Days Days set Days.DelCnt=Days.DelCnt+ 1 
       WHERE Days.Dt=O.Dt
@

 ----------------------------------------------------------------
 
 -- Триггер на добавление нового документа
 
 -- Контроль что операционный день открыт
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BIDocumentDayCheck 
NO CASCADE BEFORE INSERT ON kernel.Document
REFERENCING NEW AS Doc
FOR EACH ROW MODE DB2SQL
WHEN
	( 
		(SELECT Days.Closed 
			FROM kernel.Days Days 
			WHERE Days.Dt=Doc.Dt) = 'Y' 
	) SIGNAL SQLSTATE '75002' ('Попытка добавить документ в закрытый операционный день')
@

 ----------------------------------------------------------------
 
 -- Триггер на добавление нового документа
 
 -- Контроль что операционный день открыт
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BDDocumentDayCheck 
NO CASCADE BEFORE DELETE ON kernel.Document 
REFERENCING OLD AS Doc
FOR EACH ROW MODE DB2SQL
WHEN
	(
		(SELECT Days.Closed 
			FROM kernel.Days Days 
			WHERE Days.Dt=Doc.Dt) = 'Y' 
	) SIGNAL SQLSTATE '75003' ('Попытка удаления документа из закрытого операционного дня')
@

 ----------------------------------------------------------------
 
 -- Триггер на добавление нового документа
 
 -- Контроль кто и когда добавил документ
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BIDocument 
NO CASCADE BEFORE INSERT ON kernel.Document 
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	SET N.UserID=USER;
	SET DocTS=CURRENT TIMESTAMP;
END
@

 ----------------------------------------------------------------
 
 -- После того, как документ внесен нельзя менять его параметы
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BUDocument
NO CASCADE BEFORE UPDATE ON kernel.Document
FOR EACH ROW MODE DB2SQL
	SIGNAL SQLSTATE '75001' ('Hельзя изменять параметры документа')
@



 ----------------------------------------------------------------
 
 --  Проводки
 
 ----------------------------------------------------------------
 
CREATE TABLE kernel.Trn (
	Dt			DATE NOT NULL,
	DocID		INTEGER NOT NULL,
	TrnID		SMALLINT,
	Stuff		INTEGER,
	DAccount	INTEGER,
	CAccount	INTEGER,
	Summa		DECIMAL( 17 , 2 ) CHECK (Summa>= 0 ), 
	CONSTRAINT	AtDocument FOREIGN KEY (Dt,DocID)
		REFERENCES kernel.Document ON DELETE CASCADE,
	CONSTRAINT	AtStuff FOREIGN KEY (Stuff)
		REFERENCES kernel.Stuff ON DELETE RESTRICT,
	CONSTRAINT	AtDAccount FOREIGN KEY (Stuff,DAccount)
		REFERENCES kernel.Account (Stuff,Account),
	CONSTRAINT	AtCAccount FOREIGN KEY (Stuff,CAccount)
		REFERENCES kernel.Account (Stuff,Account)
)
@

CREATE UNIQUE INDEX kernel.IDTrn ON kernel.Trn (Stuff,DAccount,Dt,DocID,TrnID)@
CREATE UNIQUE INDEX kernel.ICTrn ON kernel.Trn (Stuff,CAccount,Dt,DocID,TrnID)@

 ----------------------------------------------------------------
 
 -- Этот триггер выполняет изменение остатков
 
 -- при добавлении проводки
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.AITrn
AFTER INSERT ON kernel.Trn
REFERENCING NEW AS N 
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	UPDATE kernel.Account Deb
		SET (Deb.Debet,Deb.DCnt)=(Deb.Debet+N.Summa,Deb.DCnt+ 1 )
		WHERE Deb.Stuff=N.Stuff AND Deb.Account=N.DAccount;
	UPDATE kernel.Account Cred
		SET (Cred.Credit,Cred.CCnt)=(Cred.Credit+N.Summa,Cred.CCnt+ 1 )
		WHERE Cred.Stuff=N.Stuff AND Cred.Account=N.CAccount;
	UPDATE kernel.Days
		SET TrnCnt=TrnCnt+ 2 
		WHERE Dt=N.Dt;
END
@

 ----------------------------------------------------------------
 
 -- Запpет на любые изменения в таблице Trn
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.BUTrn
	NO CASCADE BEFORE UPDATE ON kernel.Trn
	FOR EACH ROW MODE DB2SQL
	SIGNAL SQLSTATE '75004' ('Hельзя изменять таблицу TRN')
@

 ----------------------------------------------------------------
 
 -- Этот триггер выполняет изменение остатков
 
 -- при удалении проводки
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.ADTrn
AFTER DELETE ON kernel.Trn
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
	UPDATE kernel.Account Deb
		SET (Deb.Debet,Deb.DCnt)=(Deb.Debet-O.Summa,Deb.DCnt- 1 )
		WHERE Deb.Stuff=O.Stuff AND Deb.Account=O.DAccount;
	UPDATE kernel.Account Cred
		SET (Cred.Credit,Cred.CCnt)=(Cred.Credit-O.Summa,Cred.CCnt- 1 )
		WHERE Cred.Stuff=O.Stuff AND Cred.Account=O.CAccount;
	UPDATE kernel.Days
		SET TrnCnt=TrnCnt- 2 
		WHERE Dt=O.Dt;
END
@

 ----------------------------------------------------------------
 
 --	Stuff		Учетная плоскость
 
 --	Account		Аналитический счет
 
 --	Dt			Дата изменения
 
 --	Overdraft	Глубина овердрафта
 
 ----------------------------------------------------------------
 
CREATE TABLE kernel.Overdraft (
	Stuff		INTEGER NOT NULL,
	Account		INTEGER NOT NULL,
	Dt			DATE 	NOT NULL,
	Overdraft	DECIMAL( 17 , 2 ) CHECK (Overdraft >= 0 ),
	CONSTRAINT AtAccount FOREIGN KEY (Stuff,Account)
		REFERENCES kernel.Account (Stuff,Account) ON DELETE RESTRICT
)
@

CREATE UNIQUE INDEX kernel.IOverdraft 
	ON kernel.Overdraft (Stuff,Account,Dt) ALLOW REVERSE SCANS
@

 ----------------------------------------------------------------
 
 -- Изменение глубины овердрафта
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.AIOverdraft
AFTER INSERT ON kernel.Overdraft 
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN (
	N.Dt=
	(SELECT 
			CASE 
				WHEN Overdraft.Dt IS NULL THEN N.Dt
				ELSE Overdraft.Dt
			END
		FROM kernel.Overdraft Overdraft 
		WHERE 
			Overdraft.Dt=
				(SELECT MAX(O.Dt) FROM kernel.Overdraft O WHERE 
							O.Stuff=N.Stuff AND O.Account=N.Account	) 
			AND Overdraft.Stuff=N.Stuff 
			AND Overdraft.Account=N.Account
	)
) 
	UPDATE kernel.Account Account 
			SET Account.Overdraft=N.Overdraft
		WHERE Account.Stuff=N.Stuff AND Account.Account=N.Account
@

 ----------------------------------------------------------------
 
 -- Изменение глубины овердрафта
 
 ----------------------------------------------------------------
 
IMPORT FROM _Overdraft.del OF DEL COMMITCOUNT  100 
	INSERT INTO kernel.Overdraft (Stuff,Account,Dt,Overdraft)
@

 ----------------------------------------------------------------
 
 -- Изменение глубины овердрафта
 
 ----------------------------------------------------------------
 
CREATE TRIGGER kernel.ADOverdraft
AFTER DELETE ON kernel.Overdraft
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
UPDATE kernel.Account SET Overdraft=
	(SELECT Overdraft FROM kernel.Overdraft 
		WHERE Stuff=O.Stuff
				AND Account=O.Account
				AND Dt=
						(SELECT MAX(Dt) FROM kernel.Overdraft
							WHERE Stuff=O.Stuff AND Account=O.Account)
	)
@


CREATE TRIGGER kernel.BIJrn
NO CASCADE BEFORE INSERT ON kernel.Jrn
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
      SET (N.Active,N.Passive,N.Type) =
          (SELECT A.Active,A.Passive,A.Type FROM kernel.Account A WHERE 
                  A.Stuff=N.Stuff AND A.Account=N.Account);
      SET (N.DCnt,N.Debet) =
          (SELECT COUNT(*),VALUE(SUM(Summa), 0 ) FROM kernel.Trn D WHERE
                  D.Stuff=N.Stuff  
                  AND D.DAccount=N.Account
                  AND D.Dt=N.Dt); 
      SET (N.CCnt,N.Credit) =
          (SELECT COUNT(*),VALUE(SUM(Summa), 0 ) FROM kernel.Trn C WHERE
                  C.Stuff=N.Stuff
                  AND C.CAccount=N.Account
                  AND C.Dt=N.Dt);
      		
END
@


 --Автоматическая коppекция Accounts пpи добавлении записи
 
 --в жуpнал остатков
 
CREATE TRIGGER kernel.AIJrn
   AFTER INSERT ON kernel.Jrn
   REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL
   BEGIN ATOMIC
   UPDATE kernel.Account A SET
      (A.Debet,A.Credit,A.Active,A.Passive,A.DCnt,A.CCnt)=(
      A.Debet-N.Debet,
      A.Credit-N.Credit,
      ROUND((ABS(A.Active+N.Debet-A.Passive-N.Credit)+A.Active+N.Debet-A.Passive-N.Credit)/ 2 , 2 ),
      ROUND((ABS(A.Passive+N.Credit-A.Active-N.Debet)+A.Passive+N.Credit-A.Active-N.Debet)/ 2 , 2 ),
      A.DCnt-N.DCnt,
      A.CCnt-N.CCnt
   ) WHERE A.Stuff=N.Stuff AND A.Account=N.Account;
   UPDATE kernel.Days SET (DebetCnt,CreditCnt)=
      (DebetCnt+N.DCnt,CreditCnt+N.CCnt) WHERE Dt=N.Dt;
   END
@


 --Пpовеpка на возможность удаления записи из жуpнала
 
 --Записи из жуpнала должны удаляться только по поpядку
 
 --Запpет на удаление самой пеpвой записи в жуpнале
 
CREATE TRIGGER kernel.BDJrn
   NO CASCADE BEFORE DELETE ON kernel.Jrn
   REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL
   WHEN ( 
      (SELECT MAX(Dt) FROM kernel.Jrn A
          WHERE A.Stuff=O.Stuff AND A.Account=O.Account)<>O.Dt
   ) SIGNAL SQLSTATE '75008' ('Hельзя удалить эту запись из жуpнала')
@

 --Изменение Accounts после удаления записи из жуpнала
 
 --остатков
 
CREATE TRIGGER kernel.ADJrn
   AFTER DELETE ON kernel.Jrn
   REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL
   BEGIN ATOMIC
   UPDATE kernel.Account A SET
      (A.Active,A.Passive,A.Debet,A.Credit,A.DCnt,A.CCnt)=
      (O.Active,O.Passive,O.Debet+A.Debet,O.Credit+A.Credit,
       	  A.DCnt+O.DCnt,A.CCnt+O.CCnt)
      WHERE A.Stuff=O.Stuff and A.Account=O.Account;
   UPDATE kernel.Days SET (DebetCnt,CreditCnt)= 
      (DebetCnt-O.DCnt,CreditCnt-O.CCnt) WHERE Dt=O.Dt;
   END
@

 ------------------------------------------------------------------------------
 
 --Запpет на добавление новой тpанзакции если
 
 --был создан жуpнал движения по дебетуемому или кpедитуемому
 
 --внутpеннему счету или опеpационный день закpыт
 
 ------------------------------------------------------------------------------
 
CREATE TRIGGER kernel.BITrnDays
   NO CASCADE BEFORE INSERT ON kernel.Trn
   REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL
   WHEN (
      (SELECT Closed FROM kernel.Days A WHERE A.Dt=N.Dt)='Y'
   ) SIGNAL SQLSTATE '75003' ('Пеpед добавлением тpанзакции')
@

CREATE TRIGGER kernel.BITrnDebet
   NO CASCADE BEFORE INSERT ON kernel.Trn
   REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL
   WHEN ( 
      N.Dt <= (SELECT VALUE(MAX(Dt),DATE('01.01.0001')) FROM kernel.Jrn D
                       WHERE D.Stuff=N.Stuff AND D.Account=N.DAccount )
   ) SIGNAL SQLSTATE '75001' ('Существует журнал остатков по дебетуемому счету')
@

CREATE TRIGGER kernel.BITrnCredit
   NO CASCADE BEFORE INSERT ON kernel.Trn
   REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL
   WHEN ( 
      N.Dt <= (SELECT VALUE(MAX(Dt),DATE('01.01.0001')) FROM kernel.Jrn C
                       WHERE C.Stuff=N.Stuff AND C.Account=N.CAccount )
   ) SIGNAL SQLSTATE '75002' ('Существует журнал остатков по кредитуемому счету')
@

 ------------------------------------------------------------------------------
 
 --Запpет на удаление тpанзакции если
 
 --был создан жуpнал движения по дебетуемому или кpедитуемому
 
 --внутpеннему счету или опеpационный день закpыт
 
 ------------------------------------------------------------------------------
 
CREATE TRIGGER kernel.BDTrnDays
   NO CASCADE BEFORE DELETE ON kernel.Trn
   REFERENCING OLD AS N FOR EACH ROW MODE DB2SQL
   WHEN (
      (SELECT Closed FROM kernel.Days A WHERE A.Dt=N.Dt)='Y'
   ) SIGNAL SQLSTATE '75004' ('Пеpед добавлением тpанзакции')
@

CREATE TRIGGER kernel.BDTrnDebet
   NO CASCADE BEFORE DELETE ON kernel.Trn
   REFERENCING OLD AS N FOR EACH ROW MODE DB2SQL
   WHEN ( 
      N.Dt <= (SELECT VALUE(MAX(Dt),DATE('01.01.0001')) FROM kernel.Jrn D
                       WHERE D.Stuff=N.Stuff AND D.Account=N.DAccount )
   ) SIGNAL SQLSTATE '75005' ('Существует журнал остатков по дебетуемому счету')
@

CREATE TRIGGER kernel.BDTrnCredit
   NO CASCADE BEFORE DELETE ON kernel.Trn
   REFERENCING OLD AS N FOR EACH ROW MODE DB2SQL
   WHEN ( 
      N.Dt <= (SELECT VALUE(MAX(Dt),DATE('01.01.0001')) FROM kernel.Jrn C
                       WHERE C.Stuff=N.Stuff AND C.Account=N.CAccount )
   ) SIGNAL SQLSTATE '75006' ('Существует журнал остатков по кредитуемому счету')
@

...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360015
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение требует базу DB2 как я понимаю ? У меня MS SQL 2000 ... такчто использовать его наверно не выйдет

Но со структурой поразбираюсь ! Спасибо большое !

А вы у себя в базе используетьте такую структуру или это так для общего случая ? Всмысле можно ли спрашивать о возможных проблемах, ограничениях и производительности данной модели т.д. ... ?
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360044
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ради бога - обращайтесь...
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360057
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
производительность: на Intel Celron 1300/512 MB/Baracuda 7200 60GB
(под сервер б.д выделено всего 64МБ) ~ 120000 документов в час.
Удовлетворяет?
И это с полным контролем остатков.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360137
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну таких объемом у меня не намечаться конечно ... в принципе меня интересует чтобы за приемлимое время считались бы остатки на всех счета и разбиение остатка одного из счетов по аналитикам !

Но как я вижу у вас хранятся остатки по всем аналитикам тоже ... я этого не делаю т.к. объем не такой большой. Остатки + обороты по всем счетам у меня счас рассчитываються гдето за 10 сек. при количестве проводок в таблице 1 000 000 000.

Да ... удобно тригеры писать когда есть возможность FOR EACH ROW .... надеюсь в след. SQL Serverе она появиться

Вопросы :
1. В таблице где храняться сами проводки я невижу валюты ? предпологаеться что все происходит в одной валюте ?
2. Что значит учетная плоскость ? я это какраз и рассматриваю как аналитический счет ... тоесть в проводке оычно ДебетСчет + АналитДебетСчета , КредитСчет + АналитКредитСчета. Т.к. у вас только одна аналитика (Stuff) то между разными аналитиками проводки только через промежуточный счет ?
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360423
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миллиард проводок? круто...
если прикинуть - одна проводка 8 байт , дебетуемый счет - 4 байта, кредитуемый счет - 4 байта, (8+4+4)*1000 000 000= 16 GB - только таблица проводок...) без индексов...)) на интел платформе - очень круто...
уважаю...)

Учетная плоскость - это крубо говоря баланс.
В модели может храниться примерно 4 миллиарда балансов.
Одна Учетная плоскость - одна валюта... Валюта - не важно какая.
Можете учитывать доллара, можете рубли а можете литры, штуки, погонные метры,..валенки например)

Главное:
1)котроль остатков, чтоб никто не сделал перерасхода. вот)
2)производительность.
3)Чтоб баланс всегда сходился...)

А один документ= куча проводок в разнах валютах в разных учетных плоскостях.

Например, когда покупаете мартини - это покупаете за валюту, храните в литрах, а продаете за рубли...)) Гы...)
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360430
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь вообще - представлено только ядро системы.
Валюты , планы счетов и прочие артефакты вынесены за пределы
представленой части модели.

Из представленного ядра можно легко собрать либо банковскую систему, либо складскую, или любую бухгалтерскую систему.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360734
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой ! какой там милиард конечно милион (в нулях ошибся) ... потому и говорю что объемы небольшие !!!
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32360982
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понимаю связь проводок со всеми другими объектами происходит через документ (таблицу документов) ?

Пример : У меня есть
1. Таблица клиентов (Cust)
2. Таблица договоров с клиентами (Agrs)
3. Таблица счетов по договорам (Invoices)
4. Таблица отдельные сумм счета которые и разносяться по бух счетам (InvSums)
5. Таблица платежей по договорам (Payments)

плюс как дополнение у меня есть
6. таблица основных средств
7. таблица работников
...
допустим есть еще несколько таких таблиц

При том мне необходимо показывать пользователю :

1. все проводки по конкретному договору (могут быть проводки не только по счетам но и не связанные с ними)
2. проводки по конкретному счету
3. Проводки по платежу
4. Остатки на счетах для одного договора
5. Остатки на счете разнесенные по договорам
6. Остатки на какомто счете (где аналитика не договора а работники) разнесенные по работникам
7. Проводки связанные с конкрентным работником
9. Остатки на счете разнесенные по еще какойто таблице
10. Проводки связанные с запись из еще какойто таблицы

ВОПРОС:
как должна выглядеть связь с проводками для каждой из этих таблиц ?

Например для каждго договора с клиентом создаем документ в таблице документов (который содержит ID договора).
Потом для каждого счета также создаем документ ?
Как в этой модели делать связь с другими таблицами например платежей, работников и т.д. ???
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361117
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты даёшь...)
Хочешь чтоб я тебе вообще всю модель нарисовал?
Это я делать не буду...Такая работа денех стоит и времени.

Единственное что скажу:
1) Один договор - это несколько аналитических счетов в разных учетных плоскостях.
2) в таблице Docs есть поле типа документа. В завичимости от типа документа выполняешь проводки в нужных учетных плоскостях.
Например у меня в банке всякая платежный документ проходил по трем плоскостям:
-плоскость валюты дебетуемого счета
-плоскость валюты кредитуемого счета
-общая плоскость учета (рублевая)
а каждый счет имел два остатка в своей валюте и в валюте общей плоскости учета (рубли) и всякая операция соответственно меняла 6 остатков.
Иди по тому же пути. И всё будет ОК..

Когда создаешь договор - то ты должен открывать для него сразу несколько счетов в разных плоскостях учета...
Ну например, если учитывать э... кирпичи, то можно построить систему учета таким образом - открыть следующие счета:
1) денежный в рублях (в рублевой плоскости учета)
2) денежный в долларах (если кирпичи импортные) (плоскость учета валютных долларовых счетов)
3) создать плоскость учета "Валютные кирпичи" и хранить там остатки кирпичей в штуках.

Определить тип документа- "продажа кирпичей за нал. рачет".
при этом в процессе обработки подобного документа выполнять соответствуюшие проводки во всех трех плоскостях, и дополнительно в рублевой плоскости сделать еще проводку которая учтет прибыль-убытки от этой операции...
Да что тут говорить? Тут нужно просто сначала родить "что" тебе надо учитывать. Потом наложишь это на представленную модель и поймешь "как" это надо учитывать. Я не зная специфики того, чего вы там делаете не смогу тебе в этом помочь. Тут надо рисовать на доске, общаться с бухгалтерами, чтоб понять что они хотят.
Короче ищите и обрящите)
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361138
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще...
То что тут нарисовано - это всего лишь 5 таблиц. И реализация принципа двойной записи. А то что касается клиентов - это CRM - другая часть базы данных (у меня это ~ 15 таблиц). План счетов (они , планы счетов бываю не только бухгалтерскими), и собстенно договора - это третья часть системы...
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361222
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про то что в каждочасти базы может быть куча таблиц это понятно но в итоге все равно там есть таблица основных объектос с уникальным ID. И я пытаюсь решить как лучше этот самый ID связывать с бугалтерией тоесть с таблицей проводок ...особо много тут исовать и писать ненадо если придумать стандартную схему по которой связывать .... тоже самое что в этих несколькх таблицах можно описывать любые проводки в форме двойной записи ....

Честно про плоскости учета так и немогу въехать еще подумаю .... я это все делал до этого гораздо более упращенно вроде :

Doc_id int, - ID документа
Agr_id int, - ИД договора
TDate datetime, - дата проводки
DACC varchar(10), дебетный счет
KACC varchar(10), - кредитный счет
TCurr varchar(3), - валюта
TSum money, - сумма
TSumRUB money - сумма в базовой валюте

вот и все .... в принципе примерно этой же схемы я бы и хотел придерживаться и все вопросы связаны с полям и Agr_id (и возможно Doc_id)
варианты : 1. Analyt1_id, Analyt2_id ...
2. DAnalyt1_id, DAnalyt2_id ... KAnalyt1_id, KAnalyt2_id ...
3. Таблица TransAnalyt (Trans_id, Analyt_id, AnalytType ...)
4. возможно еще что то ...

продрузамеваеться что будет таблица где будут все возможные аналитические счета : Analytics (Analyt_id, Type, Descr, Sys_id ...)
и нуда будет помещатся все что может быть аналитиками для счета вроде

1 'A' 'AB16726', 100 - договор номер AB16726 с Agr_id=100 в таблице Agrs
2 'A' 'AV83274', 234 - договор номер AV83274 с Agr_id=234 в таблице Agrs
3 'S' 'Mazda 6', 100 - основное средство Mazda 6 с Asset_id=234 в таблице Assets
4 'U' 'Иванов', 4 - Работник Иванов с Employee_id=4 в таблице Employees

и т.д.

Есть вариант не делать такую общую таблицу а указвать тип объекта и его ID напрямую в проводке вместо Analyt_id - > Type , Sys_id - используя то что везде P.k. это int или smallint

Какие будут мнения насчет приведенных схем ?
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361281
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По плоскости учета:
Если выплнить:
select Stuff, sum(Active),Sum(Passive),Sum(debet),Sum(Credit) from kernel.Account group by Stuff

то всегда sum(Active)=Sum(Passive) и Sum(debet)=Sum(Credit)
грубо говоря в этой модели можно вести балны 4 000 000 000 предприятий.

А что касается какие счета открывать для договора и как - мне не ясно...
Я должен сначала понять что за договор

Если вот это: таблица, то
>Doc_id int, - ID документа
>Agr_id int, - ИД договора <- убей не пойму что делает тут это поле
>TDate datetime, - дата проводки
>DACC varchar(10), дебетный счет
>KACC varchar(10), - кредитный счет
>TCurr varchar(3), - валюта
>TSum money, - сумма
>TSumRUB money - сумма в базовой валюте


по мне так нужно несколько таблиц
1) Собственно договор
2) Клиент по договору->(Таблицы схемы CRM)
3) Свойства/сущности догвора (параметры которые буишь учитывать) ->(1:N)->kernel.Accounts
4) Справочник типов операций с договором
5) Таблица операций ->(1:1)-> kernel.Document->(1:N)->kernel.Trn

в общем все очень просто....
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361717
Dennis_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет stuff теперь более менее понятно, это для разделения всего что есть б базе на разные фирмы так скажем или филиалы там ...

>Agr_id int, - ИД договора <- убей не пойму что делает тут это поле

Это поле показывает что данная конкрентная проводка относиться к конкретному договору.

Например проводки :

Код: plaintext
1.
2.
3.
4.
5.
Tran_id, Doc_id, Agr_id, TDate,        DACC, KACC, TCurr, TSum, TSumRUB
 1              4       10       10 . 12 . 2003    2350     1360    USD    100        3000 
 2              4       10       10 . 12 . 2003    6450     1360    USD    200        6000 
 3              4       15       12 . 12 . 2003    1360     4560    EUR     50        170 
 4              5       16       11 . 12 . 2003    2350     1360    EUR    100        3400    


И потом надо получить остатки на счете 1360 разбитые по договорам тоесть по Agr_id (GROUP BY Agr_id). Кроме этого надо получать остатки на всех счетах для одного договора или просто просмотреть все проводки связанные с одним договором (WHERE Agr_id=X). Также часто надо делать группировки по другим параметрам догвора тоесть вначале JOIN c таблицей Agrs а потом GROUP BY Agrs.Type или что то в этом роде.
Для одного документа теоретически могут быть сделаны проводки которые относяться к разным договорам ...
В этом случае я считаю что Agr_id хранит аналитику счета 1360 или 2350 например.

Теперь мне надо сделать это в более общем случае когда есть не только договоры но и другие аналитики ... вот вобщемто и вся проблема. Кроме этого в преведущей схеме проводка содержала только одну аналитику для обоих счетов потому если аналитики у счетов разные то надо делать две проводки используя промежуточный счет.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #32361857
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос:
А может быть проводка между договорами?
Или..перефразируем - документ(проводка) относящаяся к нескольким договорам?
>Agr_id int, - ИД договора <- убей не пойму что делает тут это поле

Вообще, в бухгалтери есть только 4 вида отчетов:
1) оборотная ведомость (баланс)/Частный случай - сальдовая ведомость
2) журнал движения остатков
3) выписка по счету
4) журнал проводок
Все остальные отчеты - производные от этих четырех...

Собственно договор - это совокупность нескольких аналитических счетов.
И получить все операции/проводки - довольно элементарно....
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33056734
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый gardenman.
Времени прошло много с того момента, когда Вы описывали структуру БД для двойной записи.

Не внесла ли жизнь корректировок в эту структуру? Может есть чего добавить?


И еще хотел попросить, если это не комм. тайна, то может Вы можете показать как у Вас план счетов был устроен?

Заранее спаибо.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33056900
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все то, что здесь было написано - довольно оптимально, но как вы знаете предела совершенства нет. И в этой схеме многие вещи можно улучшить.
Этими вещами я уже не занимаюсь несколько лет. Могу разве что выслать работающий прототип (черновик) подобной системы сделанный для DB2.
Опять же в той же самой DB2 появилась с тех пор куча усовершенствований, а в этой схеме их нет.

Что касается плана счетов - это отдельная история. и мне как-то влом описывать как и что должно работать. Я за это не возьмусь. Эт слишком долго и бесплатно. так что - фантазируйте сами.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33057145
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dennis_LПро то что в каждочасти базы может быть куча таблиц это понятно но в итоге все равно там есть таблица основных объектос с уникальным ID. И я пытаюсь решить как лучше этот самый ID связывать с бугалтерией тоесть с таблицей проводок ...особо много тут исовать и писать ненадо если придумать стандартную схему по которой связывать .... тоже самое что в этих несколькх таблицах можно описывать любые проводки в форме двойной записи ....

Честно про плоскости учета так и немогу въехать еще подумаю .... я это все делал до этого гораздо более упращенно вроде :

Doc_id int, - ID документа
Agr_id int, - ИД договора
TDate datetime, - дата проводки
DACC varchar(10), дебетный счет
KACC varchar(10), - кредитный счет
TCurr varchar(3), - валюта
TSum money, - сумма
TSumRUB money - сумма в базовой валюте

вот и все .... в принципе примерно этой же схемы я бы и хотел придерживаться и все вопросы связаны с полям и Agr_id (и возможно Doc_id)
варианты : 1. Analyt1_id, Analyt2_id ...
2. DAnalyt1_id, DAnalyt2_id ... KAnalyt1_id, KAnalyt2_id ...
3. Таблица TransAnalyt (Trans_id, Analyt_id, AnalytType ...)
4. возможно еще что то ...

продрузамеваеться что будет таблица где будут все возможные аналитические счета : Analytics (Analyt_id, Type, Descr, Sys_id ...)
и нуда будет помещатся все что может быть аналитиками для счета вроде

1 'A' 'AB16726', 100 - договор номер AB16726 с Agr_id=100 в таблице Agrs
2 'A' 'AV83274', 234 - договор номер AV83274 с Agr_id=234 в таблице Agrs
3 'S' 'Mazda 6', 100 - основное средство Mazda 6 с Asset_id=234 в таблице Assets
4 'U' 'Иванов', 4 - Работник Иванов с Employee_id=4 в таблице Employees

и т.д.

Есть вариант не делать такую общую таблицу а указвать тип объекта и его ID напрямую в проводке вместо Analyt_id - > Type , Sys_id - используя то что везде P.k. это int или smallint

Какие будут мнения насчет приведенных схем ?
В проводке указывается аналитический разрез дебет, аналитический разрез кредит. Аналитический разрез - это комбинация значений аналитических признаков типа Разрез1=(товар А на складе Б). Разрез естественно участвует в разных проводках. Вопрос, как хранить разрез. Две тактики:
Статическое назначение колонок. Данная колонка разреза может относиться только к одному типу объекта, справочнику (5-я колонка - товар, используется счетами С1 и С4), тогда можно пользоваться FK, запросы проще, но изменение структуры аналитики - это изменение не только словаря системы но и структуры таблицы.
Динамическое назначение колонок. (5-я колонка - товар для счета С1, но договор для счета С2). Динамический вариант реализован например во ФЛАГМАНе. Конечно, тексты запросов также динамические и достаточно длинные, но система универсальна.
Если вы делаете систему для конкретного заказчика и разрезов в пределах 15 я бы рассмотрел статический вариант.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33057152
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanМогу разве что выслать работающий прототип (черновик) подобной системы сделанный для DB2.

Что касается плана счетов - это отдельная история. и мне как-то влом описывать как и что должно работать. Я за это не возьмусь.

В работающем прототипе план счетов же присутствует?
Если Вам не сложно, то пришлите прототип. И без комментариев это будет, я думаю, ценно. (прошу только базу в виде скриптов т.к. DB2 нет)

valmond##gmail.com

Заранее спасибо.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33057160
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в прототипе плана счетов нет.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33057174
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanв прототипе плана счетов нет.

Жалко конечно, но буду признателен и за то, что есть.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33284589
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR
В проводке указывается аналитический разрез дебет, аналитический разрез кредит. Аналитический разрез - это комбинация значений аналитических признаков типа Разрез1=(товар А на складе Б). Разрез естественно участвует в разных проводках. Вопрос, как хранить разрез. Две тактики:
Статическое назначение колонок. Данная колонка разреза может относиться только к одному типу объекта, справочнику (5-я колонка - товар, используется счетами С1 и С4), тогда можно пользоваться FK, запросы проще, но изменение структуры аналитики - это изменение не только словаря системы но и структуры таблицы.
Динамическое назначение колонок. (5-я колонка - товар для счета С1, но договор для счета С2). Динамический вариант реализован например во ФЛАГМАНе. Конечно, тексты запросов также динамические и достаточно длинные, но система универсальна.
Если вы делаете систему для конкретного заказчика и разрезов в пределах 15 я бы рассмотрел статический вариант.

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

А наделать всякоразных аналитических представлений, это не проблема.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33284869
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Полагаю, красивым решением будет создать для каждого типа хозяйственных операций свою таблицу, со своей структурой, которая наилучшим образом соответсвует содержанию данного типа операций.

А наделать всякоразных аналитических представлений, это не проблема.
Новый тип хозоперации - ежедневная рутина, и менять в таком темпе структуру таблиц продакшн системы ... Боюсь, бухгалтера и ДБА не оценят.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33292491
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для разных хозопераций надо делать таблицы первичных бухгалтерских документов - на каждый тип свою. А таблица проводок должна быть все же универсальной.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33293091
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже иногда думаю про про водку . В моем случае все обстоит полегче в силу универсальной структуры справочника объектов учета.
Теперь примеряю связь проводки со ссылками на объекты учета и запетлял вот такую декларацию:
Код: plaintext
1.
2.
3.
4.
.............
OBJ_D BIGINT [ 1 : 1000000000 ] NOT NULL,
OBJ_D BIGINT [ 1 : 1000000000 ] NOT NULL,
.............
и подумалось мне, что вполне это может быть востребовано, т.е. когда на одной стороне проводки, скажем, "Дебет", исользуется одна ссылка на объект, или, выражаясь в терминах 1С, "Субконто", а на другой стороне проводки, таких ссылок многие тысячи. Разумеется в обычных хоз.операциях это не нужно, но я могу захотеть родить некую исследовательскую операцию (на небалансовых счетах), с целью получения многомерного анализа своих данных и, сохраню результат в этом компактном виде, т.е. в виде такой асимметричной проводки. Приведенные декларации относятся к Interbase и компилируются без проблем и, насколько мне известно, пространство под массив выделяется только по факту его использования, т.е. здесь обозначены допустимые граница. Таким образом мы имеем: Произвольное количество субконто в проводке; каждое субконто может иметь произвольный уровень иерархии объектов; каждая проводка может(если нужно) иметь индивидуальную конфигурацию. Проводка получается компактной. Собираюсь еще поставить ссылку(наверное тоже нужен массив), котор. будет указывать на скрипт, которым она сгенерирована и котор. лежит в базе (используется FastScript). Хотелось бы услышать критические замечания в плане методологии учета произвольных фактов или может ссылки в те "места" , где это более уместно обсудить
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33296595
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programmer_Ortodox
и подумалось мне, что вполне это может быть востребовано, т.е. когда на одной стороне проводки, скажем, "Дебет", исользуется одна ссылка на объект, или, выражаясь в терминах 1С, "Субконто", а на другой стороне проводки, таких ссылок многие тысячи. Разумеется в обычных хоз.операциях это не нужно
Различное количество аналитик это очень часто используется именно "в обычных хоз.операциях" Например корреспонденция между 50-ым кассой, вообще без аналитики и 76-расчетами с дебиторами/кредиторами с аналитикой Лицо, Тип услуги, Документ основания и пр.

Хранение субконто в качестве массива имеет свои минусы, например сложность с выдачей остатков в разрезе определенной аналитики, например получить остатки по 76 счету в разрезе Лиц в виде
SUM, CLIENT_ID, "Наименование клиента"

2-ое достаточно сложно организовать проверку обязательности заполнения значения субконто, в зависимости от того на какой счет идет проводка. А проверка должна быть обязательно иначе невозможно будет получить данные в разрезе аналитики.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33297519
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets Programmer_Ortodox
и подумалось мне, что вполне это может быть востребовано, т.е. когда на одной стороне проводки, скажем, "Дебет", исользуется одна ссылка на объект, или, выражаясь в терминах 1С, "Субконто", а на другой стороне проводки, таких ссылок многие тысячи. Разумеется в обычных хоз.операциях это не нужно
Различное количество аналитик это очень часто используется именно "в обычных хоз.операциях" Например корреспонденция между 50-ым кассой, вообще без аналитики и 76-расчетами с дебиторами/кредиторами с аналитикой Лицо, Тип услуги, Документ основания и пр.

Хранение субконто в качестве массива имеет свои минусы, например сложность с выдачей остатков в разрезе определенной аналитики, например получить остатки по 76 счету в разрезе Лиц в виде
SUM, CLIENT_ID, "Наименование клиента"

2-ое достаточно сложно организовать проверку обязательности заполнения значения субконто, в зависимости от того на какой счет идет проводка. А проверка должна быть обязательно иначе невозможно будет получить данные в разрезе аналитики.
Различное, в данном случае, это единицы, тысячи, миллионы. Это вынуждает радикально пересмотреть структуру таблицы проводок. Ведь не будете же вы резервировать в проводке миллионы субконто?
PS
Мне все таки кажется, что подобные сингулярности в учете(в самом широком его понимании) могут иметь массу вкусностей!
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33297524
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картинку приложил для иллюстрации собсно объекта обсуждения.
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33297755
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменное число аналитик у счета и переменное число объетов проводке - разные вещи. Автор по-моему про второе : в одной проводке и сахар на склад 1 и пиво на склад 2.
Обсуждалось...
...
Рейтинг: 0 / 0
Структура таблицы бухгалтерских проводок не дает покоя !!!!
    #33298008
Programmer_Ortodox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно, о проводке и речь, как о некотором факте
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблицы бухгалтерских проводок не дает покоя !!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]