Вверх ↑
Этот топик читают: Гость
Ответов: 824
Рейтинг: 138
#1: 2014-01-25 15:06:42 ЛС | профиль | цитата
Создание приложения для ведения бухгалтерской главной книги.
В продолжение темы Главная книга 1 (Excel)

Задумок много, и у меня уже сформировалась общая концепция приложения, но пока ещё не совсем четко.
Естественно, что в процессе дальнейшей разработки и изучения Sqlite, эта концепция может претерпеть изменения... Но всему свое время

Что же должна "делать" программа (основное):
Ввод и редактирование данных.
  Возможность ввода начальных остатков. (табл. ob_ost)
  Ввод и редактирование счетов. (табл. sch) - справочник счетов
  Ввод и редактирование проводок. (табл. provod) - журнал проводок
Формирование и печать отчетов.
  Анализ сета за произвольный период.
  Оборотно-сальдовая ведомость за произвольный период.
  Главная книга за произвольный период.
Как, я, представляю работу программы:
Из своей практики знаю, что наиболее удобным способом массового ввода однотипных данный есть табличный, так как никакие диалоги не закрывают обзор уже введенных. Поэтому буду пытаться реализовать именно этот метод ввода. Собственно это будет касаться ввода начальных остатков и проводок.

Предполагается, что основные вычисления, проверки вводимых данных, обновление таблиц будет возложено на саму базу sqlite. И здесь будут задействованы триггеры на добавление, изменение (обновление записей), удаление. Например: счет, который мы попытаемся ввести в журнал проводок должен быть проверен на существование в справочнике счетов, если такого счета нет в справочнике - выдать сообщение об ошибке или предложить внести его в справочник; проверка на введение чисел (сумма проводки), и т. п..

При первом запуске программа должна предложить пользователю выбрать начальный период ведения учета, после - предложить внести начальные остатки по счетам.
Тут нужно рассказать немного об остатках (табл. ob_ost). В этой таблице будут хранится: начальные остатки, обороты за период, и конечные остатки, одним словом - итоги.
В данной таблице предполагается, что каждый счет в определенном периоде может быть записан один раз, т. е. один и тот-же счет не может присутствовать в таблице с одним периодом: счет 201 "Материалы" не может быть записан в феврале дважды.
В нашем случае понятия "начальные" и "конечные" остатки относительные. Как-же определить начальные остатки? - Текущий период по счету минус 1 месяц = период начальных остатков по счету.
После внесения остатков (если это необходимо), можно приступать к внесению данных в журнал проводок. Если пользователь внес хотя-бы одну запись в журнал проводок - запретить редактирование начальных остатков. Разумеется, что пользователь может допустить ошибку при вводе начальных остатков, и выявить ее позже, не удалять же нам все данные из журнала проводок. Для такого случая нужно предусмотреть специальный режим изменения начальных остатков с пересчетом всех итогов больше даты начальных остатков.

Немного об отчетах. ....... (будет)
Все данные в базе будут заносится в кодировке utf-8
Поэтому, при разработке буду использовать нестандартные компоненты SQLite UTF8
А также последнюю Альтернативную сборку от CriDos

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

Sql код для создания таблиц:

#sql
CREATE TABLE "sch" (
"id" INTEGER,
"code" TEXT(8) NOT NULL,
"typ" TEXT(2) NOT NULL,
"name" TEXT,
PRIMARY KEY ("id") ,
UNIQUE ("code")
);

CREATE TABLE "ob_ost" (
"id" INTEGER,
"sch_id" INTEGER,
"period" DATE,
"ob_d" DECIMAL(10,2),
"ob_k" DECIMAL(10,2),
"ost" DECIMAL(10,2),
PRIMARY KEY ("id") ,
CONSTRAINT "fk_ob_ost_sch_1" FOREIGN KEY ("sch_id") REFERENCES "sch" ("id")
);

CREATE TABLE "provod" (
"id" INTEGER,
"period" DATE,
"sch_d" INTEGER,
"sch_k" INTEGER,
"suma" DECIMAL(10,2),
"comment" TEXT,
PRIMARY KEY ("id") ,
CONSTRAINT "fk_provod_sch_1" FOREIGN KEY ("sch_d") REFERENCES "sch" ("id"),
CONSTRAINT "fk_provod_sch_2" FOREIGN KEY ("sch_k") REFERENCES "sch" ("id")
);



(Редактирование этого поста не закончено! Продолжение следует!)
карма: 1

0
файлы: 1code_32923.txt [751B] [218]
Ответов: 8930
Рейтинг: 823
#2: 2014-01-25 15:34:31 ЛС | профиль | цитата
sashaoli,
Анекдот писал(а):
Не знаю, как в Херсоне, а у нас в Одесе: "А де мясо?", А де молоко?"

Tad советовал начинать с карандаша и бумаги. Ваш клиент допустил задолжность (недоимки за три года) и Вы хотите написать угрожающее письмо А де ФИО, А де адрес, А де банковские и другие реквизиты
А де Таблица остатков на 01/01/2014 от которой плясать и которая пригодится, когда Вы сохраните БАЗУ за 2014 год и начнёте с чистого листа, т. е. с остатков на 01/01/2015 ..........
карма: 19

0
Ответов: 824
Рейтинг: 138
#3: 2014-01-25 15:50:03 ЛС | профиль | цитата
Леонид писал(а):
Tad советовал начинать с карандаша и бумаги. Ваш клиент допустил задолжность (недоимки за три года) и Вы хотите написать угрожающее письмо А де ФИО, А де адрес, А де банковские и другие реквизиты
А де Таблица остатков на 01/01/2014 от которой плясать и которая пригодится, когда Вы сохраните БАЗУ за 2014 год и начнёте с чистого листа, т. е. с остатков на 01/01/2015 ..........

Леонид прошу - не спешите... Это пока "зародыш", "Усё будет...". Еще не описал в первом посте как представляю себе работу программы.
Поєтому - терпение.
Я догадываюсь к чему Вы ведете - Проектирование приложения "Сверху в низ", это да, предусмотреть все основные направления.
Но для такого проектирования нужен опыт которого у меня пока нету (Но это ведь поправимо? )

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

0
Ответов: 16884
Рейтинг: 1239
#4: 2014-01-25 15:57:26 ЛС | профиль | цитата
sashaoli писал(а):
Вот изложу в первом посте свои мысли (упорядочу их в голове, изложу на "бамажке")....
Если решил "Сверху в низ".
Вот изложи на бумажке, упорядочь мысли в голове, а потом можно и выложить на форуме для потомков.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 704
Рейтинг: 44
#5: 2014-01-25 16:02:14 ЛС | профиль | цитата
Леонид писал(а):
Tad советовал начинать с карандаша и бумаги

Если все писать на листе, то листов не хватит и карандаша , так что sashaoli пробуйте на реальности, тестируйте сразу, как говорится, (Как говорит наш дорогой шеф, "Куй железо не отходя от кассы"! ).
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#6: 2014-01-25 16:09:44 ЛС | профиль | цитата
Kazbek17 писал(а):
пробуйте на реальности
Вот тебе обычная реальность:
0ae1e8c194ab405327cf3cb2d465d4ef.jpg
Единственное утешение, что (в нашем случае) программист и клиент - одно лицо.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 10ae1e8c194ab405327cf3cb2d465d4ef.jpg [154.5KB] [435]
Ответов: 824
Рейтинг: 138
#7: 2014-01-25 16:15:00 ЛС | профиль | цитата
Tad писал(а):
Вот изложи на бумажке, упорядочь мысли в голове, а потом можно и выложить на форуме для потомков.

И все таки, если никто не будет против, я бы предпочел изложить их (мысли) здесь. А вдруг моя мысля ошибочна, или потянет в определенной реализации "тяжелые" последствия и т.п..
А тут знающие люди подскажут, предупредят - "Не пей водичку - козлёночком станешь" ...

карма: 1

0
Ответов: 824
Рейтинг: 138
#8: 2014-01-26 17:57:42 ЛС | профиль | цитата
Обновил первый пост
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#9: 2014-01-27 23:37:43 ЛС | профиль | цитата
sashaoli писал(а):
Все данные в базе будут заносится в кодировке utf-8
и что будет заноситься в UTF-8 ?
Названия месяцев ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#10: 2014-01-28 14:40:54 ЛС | профиль | цитата
Tad писал(а):
и что будет заноситься в UTF-8 ?
Названия месяцев ?

Да и комментарии, и коды (номера)счетов, и названия счетов...
Поскольку правила бухгалтерского учета универсальны практически для всего мира, то - текстовые данные могут быть записаны на разных языках.
Например: взять страны пост-советского пространства....
Коды счетов могут иметь не только цифровое обозначение но и символьно-цифровое.
------------ Дoбавленo в 14.40:
Сейчас занимаюсь логикой базы.
Штудирую триггеры. Маловато в тернете удобоваримой информации на русском, на эту тему...
карма: 1

0
Ответов: 824
Рейтинг: 138
#11: 2014-02-01 23:08:24 ЛС | профиль | цитата
Доброго времени суток!

Вот и первый вопрос.
Есть таблица "itogi"
idsch_idperiodob_dob_kostДолжно быть в поле "ost"
142012-01-01200 200200
3262012-01-01 200-200-200
442012-02-0150 50250
5262012-02-01 50-50-250
642012-03-0150 50300
7262012-03-01 50-50-300

Нужно в триггере на обновление обновить (рассчитать) поле "ost"
Поле "ost" рассчитывается по такой формуле:
"ost" на начало (предыдущий период) +  "ob_d" (текущий период) - "ob_k" (текущий период) и записать результат в "ost" (текущий период)
по условию, что период больше или равен текущему и равен определенному "sch_id"Вот запос:
update itogi set
ost = ifnull((SELECT ost FROM itogi WHERE date(period) = date('2012-01-01','-1 month') AND sch_id = 4),0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = 4 and date(period) >= date('2012-01-01');
Этот запрос не работает :( Чет я не догоняю как это правильно сделать....
------------ Дoбавленo в 21.13:
Наверное такое сделать на стороне базы невозможно. Э-эх...
------------ Дoбавленo в 23.08:
Или вообще не сохранять в базе вычисляемые данные?

карма: 1

0
Ответов: 16884
Рейтинг: 1239
#12: 2014-02-02 19:52:55 ЛС | профиль | цитата
sashaoli писал(а):
как это правильно сделать
Так как требует бухучёт. Сальдо на начало месяца, сальдо на конец месяца каждый месяц, а не раз в три месяца. И никаких проблем.
sashaoli_2.gif
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1sashaoli_2.gif [10.2KB] [298]
Ответов: 8930
Рейтинг: 823
#13: 2014-02-02 20:58:23 ЛС | профиль | цитата
sashaoli, [flood]Просто любопытства ради: есть-ли в бухгалтерии термины "Дебиторская задолжность", "Кредиторская задолжность" ?[/flood]
карма: 19

0
Гость
Ответов: 17029
Рейтинг: 0
#14: 2014-02-02 21:26:22 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-10 15:47:51
карма: 0

0
Ответов: 824
Рейтинг: 138
#15: 2014-02-03 01:29:23 ЛС | профиль | цитата
Выше - я.
А че это оно так?
------------ Дoбавленo в 01.29:
Дамп проекта базы
#sql
/*
SQLITE Backup
Source Server Version: 3.7.14
Source Database: main
Date: 02.02.2014 22:53:34
*/

-- ----------------------------
-- Table structure for "itogi"
-- ----------------------------
DROP TABLE IF EXISTS "itogi";
CREATE TABLE "itogi" (
"id" INTEGER,
"sch_id" INTEGER,
"period" DATE,
"ob_d" DECIMAL(10,2),
"ob_k" DECIMAL(10,2),
"ost_start" DECIMAL(10,2),
"ost_end" DECIMAL(10,2),
PRIMARY KEY ("id" ASC),
CONSTRAINT "fk_ob_ost_sch_1" FOREIGN KEY ("sch_id") REFERENCES "sch" ("id")
);

-- ----------------------------
-- Table structure for "provod"
-- ----------------------------
DROP TABLE IF EXISTS "provod";
CREATE TABLE "provod" (
"id" INTEGER,
"period" DATE,
"sch_d" INTEGER,
"sch_k" INTEGER,
"suma" DECIMAL(10,2),
"comment" TEXT,
PRIMARY KEY ("id") ,
CONSTRAINT "fk_provod_sch_1" FOREIGN KEY ("sch_d") REFERENCES "sch" ("id"),
CONSTRAINT "fk_provod_sch_2" FOREIGN KEY ("sch_k") REFERENCES "sch" ("id")
);

-- ----------------------------
-- Table structure for "sch"
-- ----------------------------
DROP TABLE IF EXISTS "sch";
CREATE TABLE "sch" (
"id" INTEGER,
"code" TEXT(8) NOT NULL,
"typ" TEXT(2) NOT NULL,
"name" TEXT,
PRIMARY KEY ("id") ,
UNIQUE ("code")
);

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO "itogi" VALUES (1,4,'2012-01-01',8,NULL,NULL,8);
INSERT INTO "itogi" VALUES (2,26,'2012-01-01',NULL,8,NULL,-8);
INSERT INTO "itogi" VALUES (3,4,'2012-02-01',330,200,8,138);
INSERT INTO "itogi" VALUES (4,26,'2012-02-01',NULL,110,-8,-118);
INSERT INTO "itogi" VALUES (5,4,'2012-03-01',100,NULL,138,235);
INSERT INTO "itogi" VALUES (6,26,'2012-03-01',NULL,100,-118,-215);
INSERT INTO "itogi" VALUES (7,7,'2012-02-01',200,NULL,NULL,200);
INSERT INTO "itogi" VALUES (8,15,'2012-02-01',NULL,220,NULL,-220);
INSERT INTO "provod" VALUES (1,'2012-01-01',4,26,8,NULL);
INSERT INTO "provod" VALUES (2,'2012-02-01',4,26,10,NULL);
INSERT INTO "provod" VALUES (3,'2012-03-01',4,26,100,NULL);
INSERT INTO "provod" VALUES (4,'2012-02-01',4,26,100,NULL);
INSERT INTO "provod" VALUES (5,'2012-02-01',7,4,200,'списання');
INSERT INTO "provod" VALUES (6,'2012-02-01',4,15,220,NULL);
INSERT INTO "sch" VALUES (1,10,'А','Основні засоби');
INSERT INTO "sch" VALUES (2,112,'А','Малоцінні необоротні активи');
INSERT INTO "sch" VALUES (3,'131/2','П','Знос основних засобів');
INSERT INTO "sch" VALUES (4,201,'А','Матеріали');
INSERT INTO "sch" VALUES (5,203,'А','Паливо-мастильні матеріали');
INSERT INTO "sch" VALUES (6,22,'А','Малоцінні та швидкозношувані предмети');
INSERT INTO "sch" VALUES (7,231,'А','Витрати на утримання житлофонду');
INSERT INTO "sch" VALUES (8,232,'А','Витрати на водовідведення');
INSERT INTO "sch" VALUES (9,233,'А','Витрати на водопостачання');
INSERT INTO "sch" VALUES (10,234,'А','Витрати на вивезення побутових відходів');
INSERT INTO "sch" VALUES (11,301,'А','Каса');
INSERT INTO "sch" VALUES (12,311,'А','Банк');
INSERT INTO "sch" VALUES (13,'311/2','А','Банк');
INSERT INTO "sch" VALUES (14,361,'АП','Розрахунки з покупцями');
INSERT INTO "sch" VALUES (15,372,'АП','Розрахунки з підзвітними особами');
INSERT INTO "sch" VALUES (16,376,'АП','Розрахунки за позиками членам кредитних спілок');
INSERT INTO "sch" VALUES (17,377,'АП','Розрахунки з іншими дебіторами');
INSERT INTO "sch" VALUES (18,'377/нвт','АП','');
INSERT INTO "sch" VALUES (19,378,'АП','Розрахунки з державними цільовими фондами');
INSERT INTO "sch" VALUES (20,39,'А','Витрати майбутніх періодів');
INSERT INTO "sch" VALUES (21,424,'П','Безоплатно одержані необоротні активи');
INSERT INTO "sch" VALUES (22,'424/2','П','Безоплатно одержані необоротні активи');
INSERT INTO "sch" VALUES (23,442,'А','Непокриті збитки');
INSERT INTO "sch" VALUES (24,48,'П','Цільове фінансування');
INSERT INTO "sch" VALUES (25,492,'П','Резерви із страхування життя');
INSERT INTO "sch" VALUES (26,631,'АП','Розрахунки з постачальниками');
INSERT INTO "sch" VALUES (27,641,'АП','Розрахунки з податками');
INSERT INTO "sch" VALUES (28,'641/1','АП','Податок на прибуток');
INSERT INTO "sch" VALUES (29,'641/2','АП','Податок на додану вартість');
INSERT INTO "sch" VALUES (30,'641/3','АП','Податок на доходи фізичних осіб');
INSERT INTO "sch" VALUES (31,'641/4','АП','Розрахунки з екологічним податком');
INSERT INTO "sch" VALUES (32,'641/5','АП','Розрахунки з платою за надра');
INSERT INTO "sch" VALUES (33,'641/682','АП','');
INSERT INTO "sch" VALUES (34,643,'АП','Податкові зобов''язання');
INSERT INTO "sch" VALUES (35,644,'АП','Податковий кредит');
INSERT INTO "sch" VALUES (36,651,'АП','Розрахунки зі страхування (ЄСВ)');
INSERT INTO "sch" VALUES (37,661,'П','Розрахунки по заробітній платі');
INSERT INTO "sch" VALUES (38,662,'П','Розрахунки за депонентами з працівниками');
INSERT INTO "sch" VALUES (39,663,'П','Інші розрахунки з працівниками');
INSERT INTO "sch" VALUES (40,685,'АП','Розрахунки з іншими кредиторами');
INSERT INTO "sch" VALUES (41,69,'П','');
INSERT INTO "sch" VALUES (42,703,'П','Дохід від реалізації послуг');
INSERT INTO "sch" VALUES (43,715,'П','Одержані штрафи, пені, неустойки');
INSERT INTO "sch" VALUES (44,718,'П','Дохiд вiд безоплатно одержаних оборотних активiв');
INSERT INTO "sch" VALUES (45,745,'П','Дохiд вiд безоплатно одержаних оборотних активiв');
INSERT INTO "sch" VALUES (46,791,'АП','Результат операцiйної діяльності');
INSERT INTO "sch" VALUES (47,903,'А','Собівартість реалізованих робіт і послуг');
INSERT INTO "sch" VALUES (48,91,'А','Загально виробничі витрати');
INSERT INTO "sch" VALUES (49,92,'А','Адміністративні витрати');
INSERT INTO "sch" VALUES (50,944,'А','Сумнівні та безнадійні борги');
INSERT INTO "sch" VALUES (51,948,'А','Визнані штрафи, пені, неустойки');
INSERT INTO "sch" VALUES (52,949,'А','Інші витрати операційної діяльності');
INSERT INTO "sch" VALUES (53,981,'А','Податок на прибуток від звичайної діяльності');

-- ----------------------------
-- Trigger definition for "insert_itogi_before"
-- ----------------------------
DROP TRIGGER IF EXISTS "insert_itogi_before";
CREATE TRIGGER "insert_itogi_before" BEFORE INSERT ON "itogi"
BEGIN
/*Если счет в периоде существует то - пропускаем его добавление в таблицу*/
select case when count(*) > 0 then raise(ignore) end from itogi where sch_id = NEW.sch_id and period = NEW.period;
END;

-- ----------------------------
-- Trigger definition for "insert_provod_after"
-- ----------------------------
DROP TRIGGER IF EXISTS "insert_provod_after";
CREATE TRIGGER "insert_provod_after" AFTER INSERT ON "provod"
BEGIN
/*Добавляем запись в итоги с дебетовым счетом*/
INSERT INTO itogi ("sch_id", "period") VALUES (NEW.sch_d, NEW.period);
/*Добавляем запись в итоги с кредитовым счетом*/
INSERT INTO itogi ("sch_id", "period") VALUES (NEW.sch_k, NEW.period);
/* Рассчитываем обороты по счетах */
update itogi set
ob_d = (select sum(suma) from provod where provod.sch_d = NEW.sch_d and provod.period = itogi.period)
where itogi.sch_id = NEW.sch_d and date(period) >= date(NEW.period);
update itogi set
ob_k = (select sum(suma) from provod where provod.sch_k = NEW.sch_k and provod.period = itogi.period)
where sch_id = NEW.sch_k and date(period) >= date(NEW.period);
/*Рассчитываем остатки по счетам*/
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = NEW.sch_d and date(period) >= date(NEW.period);
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = NEW.sch_k and date(period) >= date(NEW.period);
END;

-- ----------------------------
-- Trigger definition for "insert_provod_before"
-- ----------------------------
DROP TRIGGER IF EXISTS "insert_provod_before";
CREATE TRIGGER "insert_provod_before" BEFORE INSERT ON "provod"
BEGIN
/*Проверяем вводимые данные при добавлении проводок*/
select case when NEW.sch_d is null OR NEW.sch_k is null
then raise(abort,'No schot')
when typeof(NEW.suma) != 'integer'
then raise (abort, 'No integer')
end;
END;

-- ----------------------------
-- Trigger definition for "upd_itogi_b"
-- ----------------------------
DROP TRIGGER IF EXISTS "upd_itogi_b";
CREATE TRIGGER "upd_itogi_b" BEFORE UPDATE OF "ost_end" ON "itogi"
BEGIN
/*Рассчитываем начальные остатки по счету, который редактируем*/
UPDATE itogi SET
ost_start = (SELECT ifnull(ost_end,0) FROM itogi WHERE date(period) = date(NEW.period,'-1 month') and sch_id = NEW.sch_id)
WHERE sch_id = NEW.sch_id and date(period) = date(NEW.period);
/* UPDATE itogi SET
ost_start = (SELECT ifnull(ost_end,0) FROM itogi WHERE date(period) = date(OLD.period,'-1 month') and sch_id = OLD.sch_id)
WHERE sch_id = OLD.sch_id and date(period) = date(OLD.period);*/
END;

-- ----------------------------
-- Trigger definition for "upd_provod_after"
-- ----------------------------
DROP TRIGGER IF EXISTS "upd_provod_after";
CREATE TRIGGER "upd_provod_after" AFTER UPDATE OF "sch_d", "sch_k", "suma" ON "provod"
BEGIN
/*Добавляем запись в итоги с дебетовым счетом*/
INSERT INTO itogi ("sch_id", "period") VALUES (NEW.sch_d, NEW.period);
/*Добавляем запись в итоги с кредитовым счетом*/
INSERT INTO itogi ("sch_id", "period") VALUES (NEW.sch_k, NEW.period);
/*Удаляем записи из итогов по счетам, которые не участвуют в проводках*/
DELETE FROM itogi
WHERE sch_id = OLD.sch_d
and (select count(*) from provod where sch_d = OLD.sch_d or sch_k = OLD.sch_d) = 0
and period = NEW.period;
DELETE FROM itogi
WHERE sch_id = OLD.sch_k
and (select count(*) from provod where sch_d = OLD.sch_k or sch_k = OLD.sch_k) = 0
and period = OLD.period;
/* Рассчитываем обороты по счетах */
update itogi set
ob_d = (select sum(suma) from provod where provod.sch_d = NEW.sch_d and provod.period = itogi.period)
where itogi.sch_id = NEW.sch_d and date(period) >= date(NEW.period);
update itogi set
ob_d = (select sum(suma) from provod where provod.sch_d = OLD.sch_d and provod.period = itogi.period)
where sch_id = OLD.sch_d and date(period) >= date(NEW.period);
update itogi set
ob_k = (select sum(suma) from provod where provod.sch_k = NEW.sch_k and provod.period = itogi.period)
where sch_id = NEW.sch_k and date(period) >= date(NEW.period);
update itogi set
ob_k = (select sum(suma) from provod where provod.sch_k = OLD.sch_k and provod.period = itogi.period)
where sch_id = OLD.sch_k and date(period) >= date(NEW.period);
/*Рассчитываем конечные остатки по счетам*/
/*По дебету счета*/
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = NEW.sch_d and date(period) >= date(NEW.period);
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = Old.sch_d and date(period) >= date(NEW.period);
/*По кредиту счета*/
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = NEW.sch_k and date(period) >= date(NEW.period);
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = Old.sch_k and date(period) >= date(NEW.period);
END;

-- ----------------------------
-- Trigger definition for "upd_provod_before"
-- ----------------------------
DROP TRIGGER IF EXISTS "upd_provod_before";
CREATE TRIGGER "upd_provod_before" BEFORE UPDATE OF "sch_d", "sch_k", "suma" ON "provod"
BEGIN
/*Проверяем вводимые данные при редактировании проводок*/
select case when NEW.sch_d is null OR NEW.sch_k is null
then raise(abort,'No schot')
when typeof(NEW.suma) != 'integer'
then raise (abort, 'No integer')
end;
END;

Все завязано на добавлении и изменении в таблице "provod"
Еще не все доделано.
Тут у меня проблема, не всегда рассчитывается конечный остаток в последней записи по счету при редактировании таблицы "provod"
Так же прошу указать на ошибки, недочеты, друге варианты....
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)