powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Дерево. План счетов.
25 сообщений из 63, страница 2 из 3
Дерево. План счетов.
    #36339153
Cheprasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давай те не сбиваться истинного направления темы))
Алексей, это все из-за тебя.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339166
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cheprasov, а какая СУБД, если не секрет.
Если мне не изменяет склероз, ты смотрел в сторону postgresql, а там есть такой тип как ltree .
Посмотри в его сторону.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339176
Cheprasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОКТОГЕН, oracle 10g
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339186
Dmitry6237
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CheprasovegorychCheprasovВ бухгалтерии есть такое понятие как план счетов. Это некий список, древовидный.организационно, да, план счетов можно представить в виде дерева, однако, имхо, его программная реализация в виде дерева кроме геморроя, никакого выигрыша не даёт. Как совершенно справедливо заметил Dmitry6237 "в банковском софте принято использовать просто таблицу". Забейте на дерево, зачем оно вам здесь тут?

Ну может это в банковском. Но всетаки для ведения качественного управленческого учета удобно план счетов представлять в виде дерева. (если интересно где удобно могу рассказать боле подробно)

Вот такой у меня вариант:
Первичный ключ сделать целочисленным числом с макс кол-вом знаков - 10 (По опыту это более чем достаточно). И дерево будет выглядеть так

1000000000 - счет
1010000000 - под счет
1020000000 - еще подсчет
Получается чтоб выбрать мне операции по 10 счету (включая все подсчета) необходимо будет задать условие типа):

Код: plaintext
Where int(Ключ/ 10000000 )= 10 

Что думаете?
Так какой сделать ключ чтоб запросы выполнялись быстро?
ну как бэ мое предложение и обсуждаете.
делается таблица.
номер_счета - строка
наименование - строка
номер счета формируется как xxyyzz. xx- счет первого порядка, yy -счет второго порядка и т.п. (сорри за терминологию как в бухгалтерии предприятия называется не помню уже.)
соответственно что бы выбрать все операции по тому же 10 счет условие у нас будет
where номер_счета like('10%')
либо
where left(номер_счета,2)= '10'
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339193
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CheprasovОКТОГЕН, oracle 10g
должен быть аналог и там. Я знаю, что-то подобное есть и в m$sql.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339196
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry6237, а тормозов не будет?
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339235
Dmitry6237
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

ну смотря конечно что делать.
но подобный мехнизм вполне работал при количестве счетов порядка 35 тысяч
и нескольких тысяч проводок в день. при чем и на dbf.
не думаю что у автора темы будет количество счетов большее.
и все таки оракл я думаю пошустрее нежели дбфки работать будет))
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339255
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример конечно упрощенный:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE ACCOUNTTABLE( --план счетов
      ID Integer NOT NULL, --первичный ключ
      LEFTBOUND Integer NOT NULL, --левая граница вложения
      RIGHTBOUND Integer NOT NULL, --правая граница вложения
      PARENT Integer,--ссылка на счет непосредственного владельца, для первого уровня NULL (можно не создавать, оно вычисляется)
      CODE Char( 10 ) NOT NULL, --код счета
      NAME Varchar( 50 ) NOT NULL, --наименование счета
      ISGROUP Integer NOT NULL --признак: 0,1 - счет является группой субсчетов или нет (для групп корреспонденции запрещены)
--..прочие  поля-признаки счета
)
правило: если субсчет А11 принадлежит А1, а то принадлежит А, то:
A.LEFTBOUND<A1.LEFTBOUND<A11.LEFTBOUND<=A11.RIGHTBOUND<A1.RIGHTBOUND<A.RIGHTBOUND
то есть диапозон LEFTBOUND ... RIGHTBOUND охватывает вложенные субсчета

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE ACCTRANS( --проводки бухучета
      ID Integer NOT NULL, --первичный ключ
      TRANSDATE DATETIME NOT NULL, --дата/время проводки
      ACCDEBET Integer, --ссылка на счет по дебету
      ACCCREDIT Integer, --ссылка на счет по кредиту
      ACCSUM DECIMAL( 15 , 2 ) NOT NULL, --сумма проводки
--..прочие  поля
)

запрос выводит оборот по дебету счета Х
Код: plaintext
1.
2.
3.
4.
SELECT SUM(ACCSUM)
FROM ACCTRANS
INNER JOIN ACCOUNTTABLE AS A1 ON (ACCTRANS.ACCDEBET=A1.ID)
INNER JOIN ACCOUNTTABLE AS A2 ON (A1.LEFTBOUND BETWEEN A2.LEFTBOUND AND A2.RIGHTBOUND)
WHERE A2.ID=X
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339268
Dmitry6237
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,

а стоит так усложнять? каковы плюсы?
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339269
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а учитывая, что план счетов достаточно редко изменяемая таблица, то можно сделать столь сложный алгоритм ее модификации
С уважением, Naf
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339271
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry6237Naf,
а стоит так усложнять? каковы плюсы?
плюс в легкости получения иерархических данных по субсчетам
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339289
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafDmitry6237Naf,
а стоит так усложнять? каковы плюсы?
плюс в легкости получения иерархических данных по субсчетам
Вариант вполне рабочий, только стоит помнить , что при обновлении плана счетов нужно менять
соответствующие поля во всей таблице плана.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339294
Dmitry6237
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafDmitry6237Naf,
а стоит так усложнять? каковы плюсы?
плюс в легкости получения иерархических данных по субсчетам

честно говоря не особо заметно.
таблица получается больше, алгоритм вставки сложнее
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339299
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы так часто меняете план счетов?
С уважением, Naf
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339302
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНNafDmitry6237Naf,
а стоит так усложнять? каковы плюсы?
плюс в легкости получения иерархических данных по субсчетам
Вариант вполне рабочий, только стоит помнить , что при обновлении плана счетов нужно менять
соответствующие поля во всей таблице плана.
Как вариант, можно использовать ещё DECIMAL/NUMERIC типы, тогда менять всю таблицу не
придётся, но надо быть осторожным с границей точности.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339306
Cheprasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf, Что то есть интересное в твоих рассуждениях. Но запрос все равно сводится к тому:
1: получить список счетов
2: полученный список счетов обьединить с таблицей проводок.

Ты оригинальным способом получаешь список счетов. Интересно а как ты формируешь правую и левую границу подсчетов, это какой то специальный алгоритм.
А если список редактируется что происходит с границами?

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

Если делать запрос из журнала операций по индексу : where номер_счет_дебет=индекс_номер_счет, - запрос происходи моментально
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339310
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С запросом, кстати, наврал
С уважением, Naf
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339311
Cheprasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafа учитывая, что план счетов достаточно редко изменяемая таблица, то можно сделать столь сложный алгоритм ее модификации
С уважением, Naf

Тут сомнений нет.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339319
Dmitry6237
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cheprasov,

сложные алгоритмы ведут к сложным ошибкам, которые потом сложно исправлять
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339331
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CheprasovПовторю большое время уходи на запрос из журнала операций. т.к. журнал операций около 5 млн. Хочу сделать так что бы оперативные отчеты не приходилось долго ждать (менее секунды).
А что мешает сделать таблицу функционалов, которая заполняется при добавлении операций?
А выборки делать не из журналов операций, а из таблицы функционалов.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339334
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При добавлении операций будет уходить чуть больше времени, зато итоговые выборки
будут моментальными.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339343
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что строить оперативный учет на бухгалтерском плане счетов дело не очень приятное. Особенно, когда у вас будут не только субсчета, но и аналитика внутри субсчетов (контрагенты, товары, склады и т.д.) Кроме того оперативный учет манипулирует также сущностями, которые не имеют отражения в бухгалтерском учете.
С уважением, Naf
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339368
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот правильный тынц http://www.sql.ru/articles/mssql/01091502TreesInSQL.shtml

Шайтан
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339534
Cheprasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно всем спасибо за участие. Буду сам эксперементировать результаты потом расскажу.
...
Рейтинг: 0 / 0
Дерево. План счетов.
    #36339786
Вчем проблема-то?
Организуй ты этот план счетов как угодно - аналитика-то будет собираться по суррогатному ключу. Тоесть в итоге-то будет всё равно что-то вроде
Код: plaintext
1.
2.
Select opername,sum(opersum),schetname from operations,schets where 
operations.schetid = schet.id and
operations.schetid in (select id from schets тут уж как угодно, всё равно не соизмеримого размера выборка с operations)
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Дерево. План счетов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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