Pull to refresh
2
0
Send message

Да, в проводке хранится только самьій "низкий" уровень счета.
Не думаю что некоторая избьіточность полей в таблице журналов является веской причиной для отдельньіх таблиц.

С производительностью проблем нет. Для примера, у меня основная таблица проводок >15М записей. Дополнительно раз в месяц происходит закрьітие периода (можно и чаще), во время которого собираются промежуточньіе итоги (они тоже хранятся в таблице проводок). Большинство отчетов получается за время не более 2х секунд.

Я ранее здесь давал ссьілку на SQLru, там описана структура таблиц детальнее

Мне кажется что разделение проводок по разным таблицам-журналам это неправильный подход. Вы привязываетесь к номерам журналов и конкретному плану счетов. Они имеют свойство меняться. Я не знаком с этими номерами в РФ, но мне кажется номер журнала можно хранить в проводке. И изменение страны для которой происходит учет не должно влиять на структуру таблиц.

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


У меня структура таблиц в бухгалтерии:
1. Документ (набор таблиц с датой, типом, контрагентами, списком товаров и т.д.). У меня 2 основные таблицы. Документ имеет 2 состояния: черновик и проведенный документ.
В момент проведения на основе настроек конкретного типа документа, вида товаров и т.д. формируются проводки.

2. Проводки (или точнее полупроводки). При проведении документа формируется набор проводок, где каждая проводка это 2 строки и полями: id_документа, дата, счет, организация, сумма, знак (1=дебет, -1=кредит), примечание, id_операции (связь дебета с кредитом). Сюда же можно и воткнуть номер журнала.

3. Движение товаров. При перемещении товаров у меня формируется таблица похожая на проводки, но немного проще: id_документа, дата, id_товара, id_склада, кол-во, сумма, знак (1=приход, -1=расход), id_партии (для партионного учета)


4. Справочники (счетов, организаций, товаров и т.д.)

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

Поле признак, для дебета = "+1", для кредита = "-1".

Проводка разбивается на две строки: дебетная и кредитная. Поля в строке: счет, склад/организация, дата, сумма, знак, id_проводки (дополнительно можно примечание, id_документа, и т.д.)
id_проводки в вашем случае может соответствовать general_journal.id и нужно в дальнейшем для отображения проводки в "канонической форме" (должно быть уникальным для обеих строк)
Столбцы: дата, сумма, id_проводки у обеих строк одинаковые.

Ха! У меня один "нелетальщик", говорит людей не посылали, а послали автоматическую станцию

Получаем из журнала проводок главную книгу и сохраняем ее

При использовании структуры таблиц, в котором проводка разбита на 2 строки получение оборотов + остатки на начало и на конец периода (сальдо) это запрос вида

select account_id,
sum(case when DATE >= '01.01.2021' and "Знак" = 1 then amount else 0) AS debit_turnout,
sum(case when DATE >= '01.01.2021' and "Знак" = -1 then amount else 0) AS credit_turnout,
sum("Знак" * amount) AS saldo,
sum(case when DATE < '01.01.2021' then "Знак"* amount) AS saldo_begin
from "Таблица_полупроводок"
group by account_id


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

Ваша структура легко приводится к такой путем добавлением триггера на general_journal (здесь разделять на 2 строки). Хотя конечно, с моей т.з. дублирование всех полей на счет, субсчет, склад для дебета и кредита себе идея.

Как выше уже сказали сальдо и обороты это результат суммирования проводок за весь период.

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

У меня для структура таблицы для проводок

Id_счета, Знак, Сумма, id_контрагента, id_проводки

id_проводки связывает 2 строки в одну (и соответствует понятию "двойная запись")
id_контрагента - это как организации так и свои склады/кассы/расч. счета
Знак позволяет различить ситуацию Дт 10 Кт 60 сумма -125 и Дт 60 Кт 10 сумма 125
Такая структура большинство отчетов делает тривиальными

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

Когда-то здесь описывал упрощенный вариант моего учета https://www.sql.ru/forum/1321016/zhurnal-dvizheniya-deneg

Ну и "кровосісі" упомянуты же :)

А зачем в этой системе вообще нужны месяцы? 5 штук, которые с сезонами вообще не связаны.
Проще писать 2021-205, меньше проблем с високосным годом, можно его записывать нулевым, или 366. Но месяцев нет, дней недели, кстати тоже.

А секунду не трогать, она базовая единица измерения.

Отличный вопрос. Есть только один способ это знать — отправить самому :)
TVTools_AlterID.exe
Для тех кому надо сменить ID в TeamViewer, гугл в помощь. Работает для всех версий
Да, ладно разве проблема исключить контакты которые больше нигде не встречаются?
Эти фейковые контакты режутся методом исключения на сервере
Как мне кажется будущее все же за гибридами, где ДВС крутит генератор, а колеса приводятся в движение электродвигателем. Плюс небольшой аккумулятор на 10-50км для поездок в городе.
У меня машина дизель со Старт-Стоп. На светофоре двигатель и так выключается
Мне кажется в этом случае лучшим приспособлением будут перчатки
У меня китайский фонарик, приспособленный в качестве фары, в одном из режимов мигает сигналом SOS. И если неудачно переключился будет моргать пока не отключишь.
А фонарик накрыть чем-то разве не выход? Какие-то детские меры безопасности
Зачем плодить сущности? Зачем много вселенных?
Очень хорошее место с полной тишиной — Одесские катакомбы. Ракушняк хорошо гасит звук, а зайдя за 3-4 поворот каких-либо звуков уже не слышно

Information

Rating
Does not participate
Location
Украина
Registered
Activity