DEPO на Firebird 2.5: таблицы и процедуры обмена M2M (перенос с MSSQL), права, прогон на заглушках

Логика процедур Фонтвьель (22.10.2026) на PSQL; привязки к справочникам клиента — FTV_M2M_SETTINGS;
текст ошибки — в COMMENT через контекст транзакции. README — что проверить на базе клиента.
Проверено на встроенном Firebird 2.5.9 (test/run.sh): все ветки событий, операция с проводкой, справочник, ошибки.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 16:50:50 +03:00
parent d8649e2765
commit 5ef2bfcd78
7 changed files with 1897 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
# Прогон процедур обмена M2M на встроенном Firebird 2.5.9 (Classic, без службы и сетевого порта).
# Заглушки Fancy (stub_fancy.sql) — колонки таблиц по схеме Fancy MSSQL и упрощённые FU_NEXT_DOC_NUM / OD_PR_INS_WIRS.
# Использование: deploy/depo/fancy-m2m-firebird/test/run.sh [рабочий каталог, по умолчанию /tmp/bj-fb25]
set -euo pipefail
D=$(cd "$(dirname "$0")/.." && pwd)
W=${1:-/tmp/bj-fb25}
mkdir -p "$W"
if [ ! -x "$W/fb/opt/firebird/bin/isql" ]; then
curl -fsSL -o "$W/fbcs.tar.gz" https://github.com/FirebirdSQL/firebird/releases/download/R2_5_9/FirebirdCS-2.5.9.27139-0.amd64.tar.gz
mkdir -p "$W/dl" "$W/fb" "$W/emb" "$W/lock"
tar -xzf "$W/fbcs.tar.gz" -C "$W/dl"
tar -xzf "$W"/dl/*/buildroot.tar.gz -C "$W/fb"
F="$W/fb/opt/firebird"
ln -sf "$(ls /usr/lib/x86_64-linux-gnu/libncurses.so.6* | head -1)" "$F/lib/libncurses.so.5"
ln -sf "$(ls /usr/lib/x86_64-linux-gnu/libtinfo.so.6* | head -1)" "$F/lib/libtinfo.so.5"
ln -sf "$F/lib/libfbembed.so.2.5" "$W/emb/libfbclient.so.2"
fi
export ISC_USER=SYSDBA ISC_PASSWORD=masterkey # встроенный режим: пароль не проверяется
export FIREBIRD="$W/fb/opt/firebird" FIREBIRD_LOCK="$W/lock" LD_LIBRARY_PATH="$W/emb:$W/fb/opt/firebird/lib"
ISQL="$FIREBIRD/bin/isql"
rm -f "$W/t.fdb"
printf "CREATE DATABASE '%s/t.fdb' DEFAULT CHARACTER SET WIN1251;\nCOMMIT;\n" "$W" > "$W/c.sql"
"$ISQL" -q -i "$W/c.sql" </dev/null
sed 's/:BJ_USER/BJ_USER/' "$D/20_FTV_M2M_GRANTS.sql" > "$W/g.sql"
for f in "$D/test/stub_fancy.sql" "$D/00_FTV_M2M_TABLES.sql" "$D/10_FTV_M2M_PROCS.sql" "$W/g.sql" "$D/test/smoke.sql"; do
echo "== $(basename "$f")"
"$ISQL" -q -ch UTF8 -i "$f" "$W/t.fdb" </dev/null 2>&1 | sed -E 's/ {3,}/ /g' | { grep -v '^$' || true; }
done
@@ -0,0 +1,48 @@
/* Прогон процедур на заглушках Fancy: перевод IN (найден) и с неизвестным контрагентом; события PING, RECEIVED,
SENT, ORDER_ACCEPTED (операция, входящая запись, проводка), неизвестное, HANDBOOK. Привязки — значения Фонтвьель. */
UPDATE FTV_M2M_SETTINGS SET VAL = CASE NAME WHEN 'WHOS' THEN 383118 WHEN 'OPER_USER' THEN 84 WHEN 'FILER_CAT' THEN 255 WHEN 'D_NUM' THEN 313
WHEN 'K_NUM' THEN 836 WHEN 'MARKET' THEN 8106 WHEN 'B_TYPE' THEN 31 WHEN 'CORR_FACE' THEN 18174 WHEN 'FILER_RUBRICA' THEN 5 END;
INSERT INTO OD_FACES (ID, SELF_ID, LAST_FLAG, MNEM, NAME, E_DATE, S_TYPE) VALUES (1, 1, 1, 'M2M', 'Кодировщик M2M', '9999-01-01', 0);
INSERT INTO OD_FACES (ID, SELF_ID, LAST_FLAG, MNEM, NAME, E_DATE, S_TYPE) VALUES (2, 2, 1, 'НДЦ', 'Кодировщик НДЦ', '9999-01-01', 0);
INSERT INTO OD_FACES (ID, SELF_ID, LAST_FLAG, NAME, INN, E_DATE, S_TYPE) VALUES (10, 10, 1, 'АО Альфа', '7728168971', '9999-01-01', 1);
INSERT INTO OD_FACES (ID, SELF_ID, LAST_FLAG, NAME, DOC_SER, DOC_NUM, E_DATE, S_TYPE) VALUES (20, 20, 1, 'Лапшина Юлия Юрьевна', '4508', '147055', '9999-01-01', 0);
INSERT INTO OD_FACE_CODERS (CODE, CODER, FACE) VALUES ('MC000050MOST', 1, 10);
INSERT INTO OD_DOC_CATS (ID, SYS_NAME) VALUES (500, 'I_CLISER_M2M_ZACH');
INSERT INTO OD_DOC_CATS (ID, SYS_NAME) VALUES (501, 'I_CLISER_M2M_SPIS');
INSERT INTO OD_DOC_CATS (ID, SYS_NAME) VALUES (502, 'OP_INV_ZACH');
INSERT INTO OD_DOC_CATS (ID, SYS_NAME) VALUES (503, 'OP_INV_SPIS');
INSERT INTO OD_DOC_STATES (ID, SYS_NAME) VALUES (11, 'WAIT_RESP_DECIS');
INSERT INTO OD_STEP_TYPES (ID, SYS_NAME, D_CAT, OUT_STATE) VALUES (77, 'PROCESS', 502, 2);
INSERT INTO OD_SYS_TABS (CODE, NUM, NAME) VALUES ('DEPO96_DCLA', 31, 'Отчет депозитария');
INSERT INTO OD_VALUES (ID, ISIN) VALUES (300, 'RU000A0JVHH1');
INSERT INTO OD_VALUE_CODERS (SHARE, CODER, CODE) VALUES (300, 2, 'RU000A0JVHH1');
INSERT INTO OD_CLIENTS (ID, SELF_ID, FACE, NUMBER) VALUES (400, 400, 99, '36MC0413600000F00');
INSERT INTO OD_CLIENTS_REC (CLIENT, E_DATE, LINK_NUMBER) VALUES (400, '9999-01-01', 'HL171004001C');
INSERT INTO OD_CLIENTS (ID, SELF_ID, FACE, NUMBER) VALUES (401, 401, 20, 'ВТНКЦ00000060');
INSERT INTO FTV_M2M_HANDBOOK (INN, PARTICIPANT_CODE, KIND, NAME_SHORT, NAME_FULL) VALUES ('7728168971', 'MC000050MOST', 'depo', 'АО «АЛЬФА-БАНК»', 'АКЦИОНЕРНОЕ ОБЩЕСТВО «АЛЬФА-БАНК»');
INSERT INTO FTV_M2M_HANDBOOK (INN, PARTICIPANT_CODE, KIND, NAME_SHORT, NAME_FULL) VALUES ('7703807489', 'MC0413600000', 'depo', 'ООО "ИК "Фонтвьель"', 'ООО Инвестиционная Компания Фонтвьель');
INSERT INTO FTV_M2M (GUID, DIRECTION, CONTRAGENT_M2M_CODE, DEPONENT_NAME, DEPONENT_DOC) VALUES ('bae1fa60-eb0a-4fee-b12c-018d1eafcbd2', 'IN', 'MC000050MOST', 'Лапшина Юлия Юрьевна', '4508 147055');
INSERT INTO FTV_M2M_LINES (GUID, REFERENCE, ISIN, SEC_CODE, AMOUNT, PLACE_NUMBER, LINK_NUMBER, DEPO_NUMBER) VALUES ('BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', 'M2MREF_1', 'RU000A0JVHH1', 'RU000A0JVHH1', 11, '36MC0413600000F00', 'HL171004001C', 'ВТНКЦ00000060');
INSERT INTO FTV_M2M (GUID, DIRECTION, CONTRAGENT_M2M_CODE, DEPONENT_NAME, DEPONENT_DOC) VALUES ('00000000-0000-4000-8000-000000000002', 'IN', 'MC9999999999', 'Никто', '0000 000000');
COMMIT;
EXECUTE PROCEDURE FTV_M2M_JOB;
COMMIT;
INSERT INTO FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE) VALUES (NULL, NULL, 'BJ_PING', CURRENT_TIMESTAMP);
INSERT INTO FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE) VALUES ('BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', 'M2MREF_1', 'BJ_RECEIVED', CURRENT_TIMESTAMP);
INSERT INTO FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE) VALUES ('BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', 'M2MREF_1', 'BJ_SENT', CURRENT_TIMESTAMP);
INSERT INTO FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE, PARAMETERS) VALUES ('BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', 'M2MREF_1', 'BJ_ORDER_ACCEPTED', '2026-10-22 15:00:00', '1234567890 от 22.10.2026');
INSERT INTO FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE) VALUES ('BAE1FA60-EB0A-4FEE-B12C-018D1EAFCBD2', 'M2MREF_1', 'BJ_WHATEVER', CURRENT_TIMESTAMP);
INSERT INTO FTV_M2M_EVENTS (EVENT_TYPE, EVENT_DATE) VALUES ('HANDBOOK', CURRENT_TIMESTAMP);
COMMIT;
EXECUTE PROCEDURE FTV_M2M_JOB;
COMMIT;
SET LIST ON;
SELECT ID, GUID, STATE, DOC, CONTRAGENT, DEPONENT, CAST("COMMENT" AS VARCHAR(300)) C FROM FTV_M2M;
SELECT ID, STATE, DOC, DOL, SHARE, PLACE, DEPO FROM FTV_M2M_LINES;
SELECT ID, EVENT_TYPE, STATE, CAST("COMMENT" AS VARCHAR(600)) C FROM FTV_M2M_EVENTS;
SELECT ID, NUM, D_CAT, STATE, KVIT, WHOS FROM OD_DOCS ORDER BY ID;
SELECT DOC, D_NUM, K_NUM, MARKET, B_TYPE, B_NUM, CAST("COMMENT" AS VARCHAR(300)) C FROM U_OP_INV_ZACH;
SELECT DOC, RUBRICA, DOC_NUM, DOC_DATE, CORR_FACE, MESS FROM D_FILER;
SELECT DOC, CAST("COMMENT" AS VARCHAR(300)) C, CAST(DO_ING AS VARCHAR(100)) D FROM OD_INVALIDS;
SELECT CODE, CODER, FACE FROM OD_FACE_CODERS;
SELECT ID, DOC, A_DOC, S_TYPE, OUT_STATE, OPER FROM OD_STEPS;
@@ -0,0 +1,635 @@
CREATE TABLE D_CLISER_M2M (
"DOC" INTEGER,
"DEPONENT" INTEGER,
"B_DATE" TIMESTAMP,
"E_DATE" TIMESTAMP,
"DOC_GUID" VARCHAR(36),
"DOC_STATUS" INTEGER,
"IIS_TYPE" INTEGER,
"IIS_INN" VARCHAR(10),
"IIS_NUM" VARCHAR(64),
"IIS_DATE" TIMESTAMP);
CREATE TABLE D_CLISER_M2M_DOL (
"DOL" INTEGER,
"SHARE" INTEGER,
"AMOUNT" NUMERIC(18,7),
"CLIENT" INTEGER,
"SETTL" INTEGER,
"SETTL_ACCS" VARCHAR(255),
"PLACES" VARCHAR(255),
"ANSWER_ACC" INTEGER,
"M2M_STATUS" INTEGER,
"M2M_TEXT" VARCHAR(255),
"DEP_STATUS" INTEGER,
"DEP_TEXT" VARCHAR(255),
"DOL_REF" VARCHAR(36),
"G_SGD" INTEGER,
"PLACE" INTEGER);
CREATE TABLE D_FILER (
"DOC" INTEGER,
"COMMENT" VARCHAR(255),
"FILE_NAME" VARCHAR(255),
"MESS" BLOB SUB_TYPE TEXT,
"CORR_FACE" INTEGER,
"FAX_DATE" TIMESTAMP,
"ORI_DATE" TIMESTAMP,
"REP_DATE" TIMESTAMP,
"CORR_DATE" TIMESTAMP,
"CORR_NUM" VARCHAR(64),
"RUBRICA" INTEGER,
"DOC_NUM" VARCHAR(64),
"DOC_DATE" TIMESTAMP,
"CHILD_CAT" INTEGER,
"FUND" INTEGER,
"CORR_NAME" VARCHAR(255),
"STORED_IMAGE" BLOB,
"ACCOUNT" INTEGER,
"PLACE" INTEGER,
"FUND_NAME" VARCHAR(255),
"PASS_KIND" INTEGER);
CREATE TABLE OD_BALANCES (
"ID" INTEGER,
"ACC_PLAN" INTEGER,
"NAME" VARCHAR(255),
"IS_FICT" CHAR(1),
"IS_DIFF" CHAR(1),
"ACC_TYPE" INTEGER,
"REST_TYPE" INTEGER,
"RET_1" INTEGER,
"RET_2" INTEGER,
"RET_3" INTEGER,
"RET_4" INTEGER,
"RET_5" INTEGER,
"RET_6" INTEGER,
"COMM" BLOB SUB_TYPE TEXT,
"SYS_NAME" VARCHAR(24),
"PART" INTEGER,
"ISM_1" SMALLINT,
"ISM_2" SMALLINT,
"ISM_3" SMALLINT,
"ISM_4" SMALLINT,
"ISM_5" SMALLINT,
"ISM_6" SMALLINT,
"IS_BAL" SMALLINT,
"MAIN_REG" SMALLINT,
"IS_CUR" SMALLINT,
"IS_LF" SMALLINT,
"LEV_" INTEGER,
"OWNER_" INTEGER,
"WALK" INTEGER,
"AMOUNT" INTEGER,
"NUM" INTEGER,
"NUM_S" VARCHAR(255),
"AMOUNT_REG" SMALLINT,
"REVALUE_TYP" SMALLINT,
"REVALUE_ACC" INTEGER,
"REVALUE_ACD" INTEGER,
"PAIR_ACC" INTEGER,
"MASK_NAME" VARCHAR(255),
"MASK_NUM" VARCHAR(25),
"ISG_1" SMALLINT,
"ISG_2" SMALLINT,
"ISG_3" SMALLINT,
"ISG_4" SMALLINT,
"ISG_5" SMALLINT,
"ISG_6" SMALLINT,
"EXP_TYPE" INTEGER,
"NUM_1" INTEGER,
"IS_SYNT" INTEGER,
"NUM_2" INTEGER);
CREATE TABLE OD_CLIENTS (
"ID" INTEGER,
"NUMBER" VARCHAR(128),
"STATE" INTEGER,
"D_OPEN" TIMESTAMP,
"D_CLOSE" TIMESTAMP,
"FACE" INTEGER,
"PARENT" INTEGER,
"PLAN_ID" INTEGER,
"RELATION" INTEGER,
"OPER" INTEGER,
"R_DATE" TIMESTAMP,
"SUBTYPE" INTEGER,
"IS_TERM" CHAR(1),
"LEV" INTEGER,
"SELF_ID" INTEGER,
"NAME" VARCHAR(255),
"TYPE_" INTEGER,
"DD_DATE" TIMESTAMP,
"DD_NUM" VARCHAR(64),
"PLACE" INTEGER,
"ISSUER" INTEGER,
"IS_MANAGER" SMALLINT,
"IS_VOICE" SMALLINT,
"IS_PRIV" SMALLINT,
"IS_SOV" SMALLINT,
"BAL_ACC" INTEGER,
"IS_BCLIENT" SMALLINT,
"F_DATE" TIMESTAMP,
"TRANSIT" INTEGER,
"CLI_ORG" INTEGER,
"USER_CODE" VARCHAR(64),
"SEP_SET" INTEGER,
"E_OWNER" INTEGER,
"EDO_TYPE" SMALLINT,
"IS_MAIN" SMALLINT);
CREATE TABLE OD_CLIENTS_REC (
"ID" INTEGER,
"CLIENT" INTEGER,
"LINK_NUMBER" VARCHAR(64),
"INCOME_MOD" INTEGER,
"INCOME_ACC" INTEGER,
"INCOME_FACE" INTEGER,
"INCOME_ADR" VARCHAR(255),
"INCOME_REC" VARCHAR(255),
"INCOME_VERBAL" VARCHAR(4000),
"O_MAIL_MOD" INTEGER,
"O_MAIL_ADR" VARCHAR(255),
"I_MAIL_MOD" INTEGER,
"I_MAIL_ALT" INTEGER,
"I_MAIL_ADR" VARCHAR(255),
"B_DATE" TIMESTAMP,
"E_DATE" TIMESTAMP,
"OPER" INTEGER,
"IUD" INTEGER,
"TARIF" VARCHAR(64),
"EXTRA_INT" INTEGER,
"EXTRA_TYPE" INTEGER,
"IS_NZ" SMALLINT,
"Z_DATE" TIMESTAMP,
"Z_AMOUNT" NUMERIC(18,7),
"PORT_NAME" VARCHAR(255));
CREATE TABLE OD_DOC_CATS (
"ID" INTEGER,
"OWNER" INTEGER,
"LEV" INTEGER,
"AMOUNT" INTEGER,
"WALK" INTEGER,
"NAME" VARCHAR(128),
"D_MODE" SMALLINT,
"ADD_TABLE" VARCHAR(64),
"KEY_FIELD" VARCHAR(32),
"INFO_FIELDS" BLOB SUB_TYPE TEXT,
"EDITOR" VARCHAR(64),
"FORM_COMP" VARCHAR(32),
"SYS_NAME" VARCHAR(64),
"PROFILE" INTEGER,
"EDITOR_TYPE" SMALLINT,
"IS_ONCE" SMALLINT,
"FUN_FORM" VARCHAR(255),
"ADD_VIEW" VARCHAR(64),
"B_DATE" TIMESTAMP,
"IS_UNUM" SMALLINT,
"NUM_RULE" SMALLINT,
"FOOTER_VIEW" INTEGER,
"DEL_FUNC" BLOB SUB_TYPE TEXT,
"FOOT_STR" SMALLINT,
"FOOT_TABLE" VARCHAR(64),
"FOOT_FIELD" VARCHAR(64),
"C_MARK" VARCHAR(32),
"C_KIND" SMALLINT,
"UNUM_DIR" SMALLINT,
"FOOTERS" VARCHAR(1024),
"FOOT_COMP" VARCHAR(32),
"FOOT_DEL" SMALLINT,
"MD5_HASH" VARCHAR(32),
"MD5_STAMP" TIMESTAMP,
"IS_TERM" VARCHAR(1),
"IS_AUTO" INTEGER,
"MIN_VERSION" VARCHAR(10));
CREATE TABLE OD_DOC_STATES (
"ID" INTEGER,
"D_CAT" INTEGER,
"IS_IN" CHAR(1),
"IS_OUT" CHAR(1),
"NAME" VARCHAR(128),
"SYS_NAME" VARCHAR(64),
"PROFILE" INTEGER);
CREATE TABLE OD_DOCS (
"ID" INTEGER,
"NUM" VARCHAR(64),
"OPER" INTEGER,
"R_DATE" TIMESTAMP,
"D_CAT" INTEGER,
"D_DATE" TIMESTAMP,
"PROC_DATE" TIMESTAMP,
"DIRECTION" INTEGER,
"WHOS" INTEGER,
"PARAM" INTEGER,
"KVIT" INTEGER,
"U_FLAG" INTEGER,
"A_FLAG" INTEGER,
"STATE" INTEGER,
"LAST_STEP" INTEGER,
"ERR_CODE" INTEGER,
"CREATOR" INTEGER,
"SECURITY" VARCHAR(255),
"IMAGEFILE" VARCHAR(1024),
"INTNUM" INTEGER,
"NUMSFX" VARCHAR(255),
"NUM_DATE" VARCHAR(78),
"D_MONTH" INTEGER,
"D_YEAR" INTEGER,
"D_DAY" TIMESTAMP);
CREATE TABLE OD_DOLS (
"ID" INTEGER,
"DOC" INTEGER,
"NUM" INTEGER,
"TAG" INTEGER,
"NUM_1" INTEGER,
"NUM_2" INTEGER,
"IS_TERM" CHAR(1),
"FOOTER" INTEGER,
"STATUS" INTEGER);
CREATE TABLE OD_FACE_CODERS (
"CODER" INTEGER,
"CODE" VARCHAR(64),
"FACE" INTEGER);
CREATE TABLE OD_FACES (
"ID" INTEGER,
"S_TYPE" INTEGER,
"NAME" VARCHAR(255),
"MAIL_ADR" VARCHAR(255),
"HOME_ADR" VARCHAR(255),
"FACT_ADR" VARCHAR(255),
"HOME_KLADR" VARCHAR(255),
"MAIL_KLADR" VARCHAR(255),
"FACT_KLADR" VARCHAR(255),
"EMAIL" VARCHAR(255),
"FAX" VARCHAR(64),
"DATE_DEPTH" TIMESTAMP,
"TELEX" VARCHAR(255),
"INN" VARCHAR(15),
"KPP" VARCHAR(9),
"PHONE" VARCHAR(64),
"DOC_TYPE" INTEGER,
"DOC_SER" VARCHAR(25),
"DOC_NUM" VARCHAR(20),
"DOC_DAT" TIMESTAMP,
"DOC_PLACE" VARCHAR(255),
"DOC_CODE" VARCHAR(128),
"DOC_END" TIMESTAMP,
"DATE_BIRTH" TIMESTAMP,
"SELF_ID" INTEGER,
"B_DATE" TIMESTAMP,
"E_DATE" TIMESTAMP,
"OPER" INTEGER,
"UPTYPE" SMALLINT,
"PROFILE" INTEGER,
"LAST_FLAG" SMALLINT,
"STATE" CHAR(3),
"MNEM" VARCHAR(64),
"REGN" INTEGER,
"BRANCHES" INTEGER,
"NORM_NAME" VARCHAR(255),
"ENG_NAME" VARCHAR(255),
"ENG_MAIL_ADR" VARCHAR(255),
"IMAGEFILE" VARCHAR(255),
"IS_NERES" SMALLINT,
"TAXIS" VARCHAR(64),
"TIN" VARCHAR(24));
CREATE TABLE OD_IN_DOCS (
"DOC" INTEGER,
"FROM_FACE" INTEGER,
"THEIR_DATE" TIMESTAMP,
"I_NUM" VARCHAR(64),
"OUR_O_DOC" INTEGER,
"FILE_NAME" VARCHAR(128),
"THEIR_NUM" VARCHAR(80),
"CODER" INTEGER,
"PASS_KIND" INTEGER);
CREATE TABLE OD_INVALIDS (
"DOC" INTEGER,
"DOL" INTEGER,
"STATUS" INTEGER,
"COMMENT" VARCHAR(255),
"DO_ING" VARCHAR(255));
CREATE TABLE OD_OBJECTS (
"ID" INTEGER,
"DMY" CHAR(1));
CREATE TABLE OD_OUT_DOCS (
"DOC" INTEGER,
"TO_FACE" INTEGER,
"O_NUM" VARCHAR(64),
"OUR_I_DOC" INTEGER,
"FILE_NAME" VARCHAR(128),
"PASS_KIND" INTEGER);
CREATE TABLE OD_SHARES (
"ID" INTEGER,
"MNEM" VARCHAR(255),
"BIRTHDATE" TIMESTAMP,
"DEATHDATE" TIMESTAMP,
"CLASS" INTEGER,
"MODE" INTEGER,
"ISSUER" INTEGER,
"NOMINAL" DOUBLE PRECISION,
"NOM_VAL" INTEGER,
"NOM_TYPE" SMALLINT,
"ISNUM" CHAR(1),
"NUM_REG" VARCHAR(124),
"ORG_REG" INTEGER,
"COUNT_" NUMERIC(18,0),
"ISSUENUM" INTEGER,
"LINK" INTEGER,
"TYPE_" INTEGER,
"IS_MARGIN" SMALLINT,
"IS_MCS" SMALLINT,
"STATUS" SMALLINT,
"DATE_REG" TIMESTAMP,
"PMFU" SMALLINT,
"SELF_ID" INTEGER,
"B_DATE" TIMESTAMP,
"E_DATE" TIMESTAMP,
"REP_DATE" TIMESTAMP,
"R_DATE" TIMESTAMP,
"R_COMMENT" VARCHAR(255),
"OPER" INTEGER);
CREATE TABLE OD_STEP_TYPES (
"ID" INTEGER,
"NAME" VARCHAR(200),
"IN_STATE" INTEGER,
"OUT_STATE" INTEGER,
"COND" BLOB SUB_TYPE TEXT,
"BODY" BLOB SUB_TYPE TEXT,
"D_CAT" INTEGER,
"A_CAT" INTEGER,
"SYS_NAME" VARCHAR(64),
"HINT" VARCHAR(255),
"ROLLBACK_" BLOB SUB_TYPE TEXT,
"ALT_STATE" INTEGER,
"IMPORTANCE" SMALLINT,
"MD5_HASH" VARCHAR(32),
"MD5_STAMP" TIMESTAMP);
CREATE TABLE OD_STEPS (
"ID" INTEGER,
"DOC" INTEGER,
"A_DOC" INTEGER,
"S_TYPE" INTEGER,
"S_DATE" TIMESTAMP,
"ERR_CODE" INTEGER,
"NUM" INTEGER,
"OPER" INTEGER,
"OUT_STATE" INTEGER);
CREATE TABLE OD_SYS_TABS (
"NUM" INTEGER,
"CODE" VARCHAR(24),
"NAME" VARCHAR(255),
"DOP" VARCHAR(255),
"ALT" VARCHAR(255),
"EXT" VARCHAR(255));
CREATE TABLE OD_U_FACES (
"FACE" INTEGER,
"OKPO" VARCHAR(64),
"OKONX" VARCHAR(64),
"DOL_1" VARCHAR(255),
"DOL_2" VARCHAR(255),
"DOL_OTV" VARCHAR(255),
"FIO_1" VARCHAR(64),
"FIO_2" VARCHAR(64),
"FIO_OTV" VARCHAR(64),
"FIO_BUG" VARCHAR(64),
"TEL_1" VARCHAR(24),
"TEL_2" VARCHAR(24),
"TEL_OTV" VARCHAR(24),
"TEL_BUG" VARCHAR(24),
"OSN_1" VARCHAR(64),
"OSN_2" VARCHAR(64),
"OPF" VARCHAR(10),
"CAPITAL" NUMERIC(18,7),
"REESTR" INTEGER,
"DEPOT" INTEGER,
"DEP_NUM" VARCHAR(20),
"DEP_DAT" TIMESTAMP,
"UPTYPE" SMALLINT,
"FS" INTEGER,
"OGRN" VARCHAR(24),
"OGRN_DATE" TIMESTAMP,
"OGRN_PLACE" VARCHAR(255),
"OKOGU" VARCHAR(24),
"OKATO" VARCHAR(24),
"FULL_NAME" VARCHAR(255),
"ENG_FULL_NAME" VARCHAR(255),
"EXEC_ORGAN" INTEGER,
"NAL_ORGAN" INTEGER,
"ENSURNUM" VARCHAR(10));
CREATE TABLE OD_VALUE_CODERS (
"CODER" INTEGER,
"CODE" VARCHAR(64),
"LOT_SIZE" INTEGER,
"SHARE" INTEGER,
"IND_CODE" VARCHAR(64),
"CODE_NAME" VARCHAR(255));
CREATE TABLE OD_VALUES (
"ID" INTEGER,
"SYSNAME" VARCHAR(64),
"NAME" VARCHAR(255),
"V_TYPE" INTEGER,
"B_DATE" TIMESTAMP,
"ISIN" VARCHAR(12),
"MFU" SMALLINT,
"IS_IN" SMALLINT,
"CFI" CHAR(6),
"BASE_VAL" INTEGER);
CREATE TABLE OD_WIRING (
"ID" INTEGER,
"PLAN_ID" INTEGER,
"WIRDATE" TIMESTAMP,
"NAME" VARCHAR(255),
"COMMENT" VARCHAR(255),
"D_REST" INTEGER,
"K_REST" INTEGER,
"EQ_" NUMERIC(18,7),
"O_STEP" INTEGER,
"CHANGED_BY" INTEGER,
"IS_PLAN" CHAR(1),
"BLANKS" BLOB SUB_TYPE TEXT,
"DOL" INTEGER,
"LINK" INTEGER,
"TAG" INTEGER,
"D_SUMMA" NUMERIC(18,7),
"K_SUMMA" NUMERIC(18,7),
"D_AMOUNT" NUMERIC(18,7),
"K_AMOUNT" NUMERIC(18,7));
CREATE TABLE OD_OPERATORS (
"ID" INTEGER,
"USER_ID" VARCHAR(24),
"NAME" VARCHAR(128),
"DEP" INTEGER,
"COMM" BLOB SUB_TYPE TEXT,
"U_FACE" INTEGER,
"PLAN_ID" INTEGER,
"F_FACE" INTEGER,
"IS_ENCRYPT" SMALLINT,
"IS_DISPERS" SMALLINT,
"IS_MONITOR" SMALLINT,
"USER_DOL" VARCHAR(255),
"USER_CODE" VARCHAR(64),
"SMTP_PARAM" VARCHAR(255),
"QUIK_CODE" VARCHAR(255),
"PROXY_PARAM" VARCHAR(255),
"EVENT_MAIL" VARCHAR(255),
"IS_ONE" SMALLINT,
"BLOCK_DATE" TIMESTAMP,
"PASS_DAYS" INTEGER,
"LOGIO_DATE" TIMESTAMP,
"B_DATE" TIMESTAMP,
"E_DATE" TIMESTAMP,
"IS_ROBOT" SMALLINT,
"EMAIL" VARCHAR(255));
CREATE TABLE OD_SETS (
"WHOS" INTEGER,
"PROFIT_TYPE" INTEGER,
"PROFIT_MODE" INTEGER,
"WIRING_MODE" INTEGER,
"IS_RED_SALDO" SMALLINT,
"SAVE_MODE" INTEGER,
"IS_PLACED" SMALLINT,
"TAX_CODE" VARCHAR(9),
"CASHIER" VARCHAR(64),
"REPORTER" VARCHAR(255),
"DOL_REPORTER" VARCHAR(255),
"LABEL_FILENAME" VARCHAR(255),
"TAX_ORG" VARCHAR(255),
"NDS_RATE" NUMERIC(18,7),
"IS_NDS" SMALLINT,
"IS_BOOK" SMALLINT,
"A_MODE" SMALLINT,
"O_MODE" SMALLINT,
"STOP_DATE" TIMESTAMP,
"A_RATER" INTEGER,
"O_RATER" INTEGER,
"IS_RED_STORNO" SMALLINT,
"IS_TEST" SMALLINT);
CREATE TABLE U_OP_INV_SPIS (
"DOC" INTEGER,
"DEPO" INTEGER,
"AMOUNT" NUMERIC(18,7),
"BLANKS" VARCHAR(255),
"B_TYPE" INTEGER,
"B_DATE" TIMESTAMP,
"B_NUM" VARCHAR(255),
"DD_DATE" TIMESTAMP,
"DD_NUM" VARCHAR(255),
"MARKET" INTEGER,
"D_NUM" INTEGER,
"K_NUM" INTEGER,
"PLACE" INTEGER,
"SHARE" INTEGER,
"DD_TYPE" INTEGER,
"TAX_R" NUMERIC(18,7),
"IS_98053" SMALLINT,
"IS_REG" SMALLINT,
"IS_BLOCK" SMALLINT,
"COMMENT" VARCHAR(255),
"FROM_FACE" INTEGER,
"WIR_DATE" TIMESTAMP,
"REG_DATE" TIMESTAMP,
"NOTIFY_DATE" TIMESTAMP,
"REJECT_REASON" VARCHAR(255),
"REESTR" INTEGER,
"OLD_CONDITIONS" INTEGER);
CREATE TABLE U_OP_INV_ZACH (
"DOC" INTEGER,
"DEPO" INTEGER,
"SHARE" INTEGER,
"AMOUNT" NUMERIC(18,7),
"BLANKS" VARCHAR(255),
"B_TYPE" INTEGER,
"B_DATE" TIMESTAMP,
"B_NUM" VARCHAR(255),
"DD_TYPE" INTEGER,
"DD_DATE" TIMESTAMP,
"DD_NUM" VARCHAR(255),
"MARKET" INTEGER,
"D_NUM" INTEGER,
"K_NUM" INTEGER,
"PLACE" INTEGER,
"TAX_R" NUMERIC(18,7),
"IS_98053" SMALLINT,
"IS_REG" SMALLINT,
"IS_BLOCK" SMALLINT,
"COMMENT" VARCHAR(255),
"FROM_FACE" INTEGER,
"WIR_DATE" TIMESTAMP,
"REG_DATE" TIMESTAMP,
"NOTIFY_DATE" TIMESTAMP,
"REJECT_REASON" VARCHAR(255),
"REESTR" INTEGER,
"CONDITION" INTEGER);
CREATE GENERATOR OD_DOC_ID_GEN;
SET GENERATOR OD_DOC_ID_GEN TO 1000;
CREATE GENERATOR OD_DOL_ID_GEN;
SET GENERATOR OD_DOL_ID_GEN TO 1000;
CREATE GENERATOR OD_STEPS_ID_GEN;
SET GENERATOR OD_STEPS_ID_GEN TO 1000;
CREATE GENERATOR OD_FACES_ID_GEN;
SET GENERATOR OD_FACES_ID_GEN TO 1000;
SET TERM ^ ;
CREATE PROCEDURE FU_NEXT_DOC_NUM (CAT_SYS_NAME VARCHAR(64), D_DATE TIMESTAMP, DIRECTION SMALLINT, FOR_DOC INTEGER)
RETURNS (NUM VARCHAR(255), NEW_DATE TIMESTAMP) AS
BEGIN
NUM = 'N' || COALESCE(FOR_DOC, 0); NEW_DATE = D_DATE;
END^
CREATE PROCEDURE OD_PR_INS_WIRS (WIR_ID INTEGER, PLAN_ID INTEGER, WIRDATE TIMESTAMP, NAME VARCHAR(255), "COMMENT" VARCHAR(255),
D_SUMMA DOUBLE PRECISION, K_SUMMA DOUBLE PRECISION, EQ_ DOUBLE PRECISION, D_AMOUNT DOUBLE PRECISION, K_AMOUNT DOUBLE PRECISION,
BLANKS VARCHAR(2000), O_STEP INTEGER, DOL INTEGER, CHANGED_BY INTEGER, IS_PLAN CHAR(1),
D_BAL_ACC INTEGER, D_VALUE INTEGER, D_REG_1 INTEGER, D_REG_2 INTEGER, D_REG_3 INTEGER, D_REG_4 INTEGER, D_REG_5 INTEGER, D_REG_6 INTEGER,
K_BAL_ACC INTEGER, K_VALUE INTEGER, K_REG_1 INTEGER, K_REG_2 INTEGER, K_REG_3 INTEGER, K_REG_4 INTEGER, K_REG_5 INTEGER, K_REG_6 INTEGER)
RETURNS (NEW_ID INTEGER, WIR_LIST VARCHAR(255), DEB_ID INTEGER, KRD_ID INTEGER) AS
DECLARE VARIABLE R INTEGER;
BEGIN
NEW_ID = 1; WIR_LIST = ''; DEB_ID = 0; KRD_ID = 0;
R = RDB$SET_CONTEXT('USER_TRANSACTION', 'STUB_WIRS', 'D' || D_BAL_ACC || ' K' || K_BAL_ACC || ' ' || D_SUMMA || ' ' || NAME || ' / ' || "COMMENT");
END^
SET TERM ; ^
SET TERM ^ ;
/* как Fancy OD_DOCS_BU: ID = 0 в UPDATE — служебное изменение, ID остаётся прежним */
CREATE TRIGGER OD_DOCS_BU FOR OD_DOCS ACTIVE BEFORE UPDATE AS
BEGIN
IF (NEW.ID = 0 OR NEW.ID IS NULL) THEN NEW.ID = OLD.ID;
END^
/* версия юрлица: SELF_ID = ID, действующая */
CREATE TRIGGER OD_FACES_BI FOR OD_FACES ACTIVE BEFORE INSERT AS
BEGIN
IF (NEW.SELF_ID IS NULL) THEN NEW.SELF_ID = NEW.ID;
IF (NEW.LAST_FLAG IS NULL) THEN NEW.LAST_FLAG = 1;
IF (NEW.E_DATE IS NULL) THEN NEW.E_DATE = '9999-01-01';
END^
SET TERM ; ^