Вверх ↑
Ответов: 824
Рейтинг: 138
#1: 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