Выше - я. А че это оно так? ------------ Д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" Так же прошу указать на ошибки, недочеты, друге варианты....
|