Установка автозаказа — различия между версиями
Agk (обсуждение | вклад) |
Agk (обсуждение | вклад) |
||
(не показано 46 промежуточных версии 6 участников) | |||
Строка 2: | Строка 2: | ||
Заменить '''ManagerXP2.exe''' на версию '''2.272.26''' от октября 2014 г. или более новую. | Заменить '''ManagerXP2.exe''' на версию '''2.272.26''' от октября 2014 г. или более новую. | ||
− | == | + | ==Установить процедуру PR_ALTER_VIEW== |
− | + | [[Изменения представления| '''PR_ALTER_VIEW''']] | |
− | == | + | ==Выполняем скрипт== |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | <pre> | |
− | + | ||
− | + | ||
− | + | SET TERM ^ ; | |
− | + | ||
+ | execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_ID','','BIGINT NOT NULL','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_STATUS','','INTEGER','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_DATETIME','','TIMESTAMP','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_TEXT1024','','VARCHAR(1024) CHARACTER SET WIN1251 COLLATE WIN1251','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_DOUBLE','','DOUBLE PRECISION','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ | ||
+ | execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ | ||
+ | |||
+ | |||
+ | EXECUTE BLOCK AS BEGIN | ||
+ | if (not exists(select 1 from rdb$relations where rdb$relation_name = 'ELNAKLS')) then | ||
+ | execute statement 'CREATE TABLE ELNAKLS(FILENAME DM_TEXT1024);'; | ||
+ | END^ | ||
+ | |||
+ | |||
+ | EXECUTE BLOCK AS BEGIN | ||
+ | if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EXT_DATA')) then | ||
+ | execute statement 'CREATE TABLE EXT_DATA(ID DM_ID NOT NULL);'; | ||
+ | END^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','SNAME','DM_TEXT1024','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','ORIG_NAME','DM_TEXT1024','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_SOURCE','DM_TEXT1024','TABLE'); ^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','QUANT','DM_DOUBLE','TABLE'); ^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','PRICE','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','SUMMA','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','SDOC_TYPE','DM_TEXT1024','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','COMMITDATE','DM_DATETIME','TABLE'); ^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','DOC_TYPE','DM_STATUS','TABLE'); ^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','STATUS','DM_STATUS','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_ID','DM_ID_NULL','TABLE'); ^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','INSERTDT','DM_DATETIME','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('','','GEN_EXT_DATA_ID','generator');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','ID','EXT_DATA_IDX1','INDEX');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','SNAME','EXT_DATA_IDX2','INDEX');^ | ||
+ | execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_ID','EXT_DATA_IDX3','INDEX'); ^ | ||
CREATE OR ALTER TRIGGER EXT_DATA_BI FOR EXT_DATA | CREATE OR ALTER TRIGGER EXT_DATA_BI FOR EXT_DATA | ||
Строка 36: | Строка 57: | ||
if (new.id is null) then | if (new.id is null) then | ||
new.id = gen_id(gen_ext_data_id,1); | new.id = gen_id(gen_ext_data_id,1); | ||
− | end; | + | end;^ |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | execute procedure PR_ALTER_VIEW('WARES','SNAME','DM_TEXT1024','TABLE');^ | |
− | + | execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','DM_TEXT1024','TABLE');^ | |
− | + | execute procedure PR_ALTER_VIEW('WARES','MGN_ID','DM_ID_NULL','TABLE'); ^ | |
− | + | execute procedure PR_ALTER_VIEW('WARES','MGN_SOURCE','DM_BLOBTEXT','TABLE');^ | |
+ | execute procedure PR_ALTER_VIEW('WARES','MGN_SOURCE','DM_BLOBTEXT','TABLE');^ | ||
− | + | execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','WARES_IDX3','INDEX');^ | |
− | + | execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','WARES_IDX4','INDEX');^ | |
− | MGN_NAME, | + | execute procedure PR_ALTER_VIEW('WARES','MGN_ID','WARES_IDX7','INDEX'); ^ |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | MGN_ID, | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | CREATE OR ALTER TRIGGER WARES_BU_MGN FOR WARES | ||
+ | ACTIVE BEFORE UPDATE POSITION 0 | ||
+ | AS | ||
+ | begin | ||
if (new.name_id <> old.name_id) then | if (new.name_id <> old.name_id) then | ||
begin | begin | ||
Строка 99: | Строка 79: | ||
new.mgn_id = 0; | new.mgn_id = 0; | ||
end | end | ||
− | |||
new.sname = (select svalue from vals where id = new.name_id); | new.sname = (select svalue from vals where id = new.name_id); | ||
− | + | end;^ | |
− | end; | + | CREATE OR ALTER TRIGGER WARES_BI_SNAME FOR WARES |
− | + | ACTIVE BEFORE INSERT POSITION 0 | |
+ | AS | ||
+ | begin | ||
+ | new.sname = (select svalue from vals where id = new.name_id); | ||
+ | end;^ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | = | + | EXECUTE BLOCK AS BEGIN |
− | + | if (not exists(select 1 from rdb$relations where rdb$relation_name = 'ORDER_DATA')) then | |
− | CREATE TABLE ORDER_DATA ( | + | execute statement 'CREATE TABLE ORDER_DATA (ID DM_ID NOT NULL);'; |
− | + | END^ | |
− | + | execute procedure PR_ALTER_VIEW('ORDER_DATA','ID','','PRIMARY KEY');^ | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','DM_TEXT1024','TABLE');^ | |
− | + | execute procedure PR_ALTER_VIEW('ORDER_DATA','ORDER_QUANT','DM_DOUBLE','TABLE');^ | |
− | + | execute procedure PR_ALTER_VIEW('ORDER_DATA','SHORT_ORDER_QUANT','DM_DOUBLE','TABLE');^ | |
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','OPTIMAL_ORDER_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','ASSORT_ORDER_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','REALQUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_DATE','DM_DATETIME','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_PRICE','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_WEEK_SUM','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_2WEEKS_SUM','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PERIOD_SUM','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_MONTH_SUM','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','SEASON_SUM','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','RASHOD_DOC_QUANT','DM_STATUS','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','PRIHOD_DOC_QUANT','DM_STATUS','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_DATE','DM_DATETIME','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','ELNAKL_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','ACTIVE_PRIHOD_DOC_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_PRICE','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_RASHOD_DATE','DM_DATETIME','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','ACTIVE_ORDER_QUANT','DM_DOUBLE','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_ID','DM_ID_NULL','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','BAD_FLAG','DM_STATUS','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','INSERTDT','DM_DATETIME','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ | ||
+ | |||
+ | execute procedure PR_ALTER_VIEW('','','GEN_ORDER_DATA_ID','generator');^ | ||
+ | |||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','ORDER_DATA_IDX1','INDEX');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','ORDER_DATA_IDX2','INDEX');^ | ||
+ | execute procedure PR_ALTER_VIEW('ORDER_DATA','ID','ORDER_DATA_IDX3','INDEX');^ | ||
CREATE OR ALTER TRIGGER ORDER_DATA_BI FOR ORDER_DATA | CREATE OR ALTER TRIGGER ORDER_DATA_BI FOR ORDER_DATA | ||
Строка 165: | Строка 137: | ||
if (new.id is null) then | if (new.id is null) then | ||
new.id = gen_id(gen_order_data_id,1); | new.id = gen_id(gen_order_data_id,1); | ||
− | end; | + | end;^ |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | create or alter procedure | + | create or alter procedure PR_INSTALL_UPDPR_REPARWARES |
− | + | ||
− | + | ||
as | as | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
begin | begin | ||
− | delete from DOC_DETAIL_ACTIVE_LOG; | + | |
− | for select min(id), NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID from wares | + | if (( |
− | group by NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID | + | select |
− | having count(1)>1 | + | upper(rf.rdb$field_source) |
− | into id, NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID do | + | from RDB$RELATION_FIELDS rf |
+ | where 1=1 | ||
+ | and rf.rdb$field_name='ID' | ||
+ | and rf.rdb$relation_name='WARES')='DM_UUID' | ||
+ | ) then | ||
+ | EXECUTE STATEMENT (' | ||
+ | create or alter procedure UPDPR_REPARWARES | ||
+ | returns ( | ||
+ | ID DM_TEXT) | ||
+ | as | ||
+ | declare variable NAME_ID DM_UUID; | ||
+ | declare variable IZG_ID DM_TEXT; | ||
+ | declare variable COUNTRY_ID DM_TEXT; | ||
+ | declare variable ORIG_CODE DM_TEXT; | ||
+ | declare variable ORIG_NAME_ID DM_TEXT; | ||
+ | declare variable ORIG_IZG_ID DM_TEXT; | ||
+ | declare variable ORIG_COUNTRY_ID DM_TEXT; | ||
+ | declare variable T_ID DM_UUID; | ||
+ | begin | ||
+ | --BASE WITH GLOBAL ID | ||
+ | delete from DOC_DETAIL_ACTIVE_LOG; | ||
+ | for select min(id), NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID from wares | ||
+ | group by NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID | ||
+ | having count(1)>1 | ||
+ | into id, NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID do | ||
+ | begin | ||
+ | for | ||
+ | select id from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE | ||
+ | and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id into :t_id do | ||
+ | begin | ||
+ | update DOC_DETAIL_ACTIVE set ware_id=:id where ware_id=:t_id; | ||
+ | update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; | ||
+ | -- update DOC_DETAIL_ACTIVE_LOG set ware_id=:id where ware_id=:t_id; | ||
+ | update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; | ||
+ | update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; | ||
+ | if (( | ||
+ | select | ||
+ | count(1) | ||
+ | from RDB$RELATIONS r | ||
+ | where 1=1 | ||
+ | and upper(r.rdb$relation_name)=''DOC_DETAIL_ACTIVE_TREB'' | ||
+ | )>0 | ||
+ | ) THEN | ||
+ | EXECUTE STATEMENT (''update DOC_DETAIL_ACTIVE_TREB set ware_id=''||:id||'' where ware_id=''||:t_id); | ||
+ | if (( | ||
+ | select | ||
+ | count(1) | ||
+ | from RDB$RELATIONS r | ||
+ | where 1=1 | ||
+ | and upper(r.rdb$relation_name)=''OUT$ZAKAZ'' | ||
+ | )>0 | ||
+ | ) THEN | ||
+ | EXECUTE STATEMENT (''update OUT$ZAKAZ set ware_id=''||:id||'' where ware_id=''||:t_id); | ||
+ | |||
+ | update PARTS set ware_id=:id where ware_id=:t_id; | ||
+ | update PARTS_LOG set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASE set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASEFOLDERS set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASENAMEID set ware_id=:id where ware_id=:t_id; | ||
+ | delete from wares where id=:t_id; | ||
+ | end | ||
+ | -- suspend; | ||
+ | /* delete from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE | ||
+ | and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id; | ||
+ | suspend; | ||
+ | */ | ||
+ | end | ||
+ | -- suspend; | ||
+ | end; | ||
+ | '); | ||
+ | else | ||
+ | EXECUTE STATEMENT (' | ||
+ | create or alter procedure UPDPR_REPARWARES | ||
+ | returns ( | ||
+ | ID DM_TEXT) | ||
+ | as | ||
+ | declare variable NAME_ID DM_ID; | ||
+ | declare variable IZG_ID DM_TEXT; | ||
+ | declare variable COUNTRY_ID DM_TEXT; | ||
+ | declare variable ORIG_CODE DM_TEXT; | ||
+ | declare variable ORIG_NAME_ID DM_TEXT; | ||
+ | declare variable ORIG_IZG_ID DM_TEXT; | ||
+ | declare variable ORIG_COUNTRY_ID DM_TEXT; | ||
+ | declare variable T_ID DM_ID_NULL; | ||
+ | begin | ||
+ | --BASE WITHOUT GLOBAL ID | ||
+ | delete from DOC_DETAIL_ACTIVE_LOG; | ||
+ | for select min(id), NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID from wares | ||
+ | group by NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID | ||
+ | having count(1)>1 | ||
+ | into id, NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID do | ||
+ | begin | ||
+ | for | ||
+ | select id from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE | ||
+ | and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id into :t_id do | ||
+ | begin | ||
+ | update DOC_DETAIL_ACTIVE set ware_id=:id where ware_id=:t_id; | ||
+ | update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; | ||
+ | -- update DOC_DETAIL_ACTIVE_LOG set ware_id=:id where ware_id=:t_id; | ||
+ | update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; | ||
+ | if (( | ||
+ | select | ||
+ | count(1) | ||
+ | from RDB$RELATIONS r | ||
+ | where 1=1 | ||
+ | and upper(r.rdb$relation_name)=''DOC_DETAIL_ACTIVE_TREB'' | ||
+ | )>0 | ||
+ | ) THEN | ||
+ | EXECUTE STATEMENT (''update DOC_DETAIL_ACTIVE_TREB set ware_id=''||:id||'' where ware_id=''||:t_id); | ||
+ | if (( | ||
+ | select | ||
+ | count(1) | ||
+ | from RDB$RELATIONS r | ||
+ | where 1=1 | ||
+ | and upper(r.rdb$relation_name)=''OUT$ZAKAZ'' | ||
+ | )>0 | ||
+ | ) THEN | ||
+ | EXECUTE STATEMENT (''update OUT$ZAKAZ set ware_id=''||:id||'' where ware_id=''||:t_id); | ||
+ | update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; | ||
+ | update PARTS set ware_id=:id where ware_id=:t_id; | ||
+ | update PARTS_LOG set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASE set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASEFOLDERS set ware_id=:id where ware_id=:t_id; | ||
+ | update WAREBASENAMEID set ware_id=:id where ware_id=:t_id; | ||
+ | delete from wares where id=:t_id; | ||
+ | end | ||
+ | -- suspend; | ||
+ | /* delete from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE | ||
+ | and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id; | ||
+ | suspend; | ||
+ | */ | ||
+ | end | ||
+ | -- suspend; | ||
+ | end; | ||
+ | '); | ||
+ | end;^ | ||
+ | |||
+ | GRANT EXECUTE ON PROCEDURE PR_INSTALL_UPDPR_REPARWARES TO SYSDBA;^ | ||
+ | execute procedure PR_INSTALL_UPDPR_REPARWARES;^ | ||
+ | DROP PROCEDURE PR_INSTALL_UPDPR_REPARWARES;^ | ||
+ | |||
+ | create or alter procedure PR_INSTALL_PR_GET_WARE | ||
+ | as | ||
begin | begin | ||
− | + | if (( | |
− | select id from wares where NAME_ID=: | + | select |
− | and ORIG_NAME_ID=: | + | upper(rf.rdb$field_source) |
− | begin | + | from RDB$RELATION_FIELDS rf |
− | + | where 1=1 | |
− | update | + | and rf.rdb$field_name='ID' |
− | -- | + | and rf.rdb$relation_name='WARES')='DM_UUID' |
− | + | ) then | |
− | + | EXECUTE STATEMENT (' | |
− | + | create or alter procedure PR_GET_WARE ( | |
− | + | SNAME type of DM_TEXT, | |
− | + | SIZG type of DM_TEXT, | |
− | + | SCOUNTRY type of DM_TEXT, | |
− | + | ORIG_CODE type of DM_TEXT, | |
− | + | SORIG_NAME type of DM_TEXT, | |
− | + | SORIG_IZG type of DM_TEXT, | |
− | + | SORIG_COUNTRY type of DM_TEXT, | |
− | + | BARCODE type of DM_TEXT, | |
− | -- | + | Z_ID type of DM_ID, |
− | + | SKLAD_ID DM_TEXT, | |
− | + | ALTTYPE DM_STATUS, | |
− | suspend; | + | MNN DM_TEXT = '''') |
− | + | returns ( | |
− | end | + | W_ID type of DM_UUID_NULL) |
− | + | as | |
− | end^ | + | declare variable OLD_BARCODE DM_TEXT1024; |
+ | declare variable NAME_ID type of DM_UUID_NULL; | ||
+ | declare variable IZG_ID type of DM_UUID_NULL; | ||
+ | declare variable COUNTRY_ID type of DM_UUID_NULL; | ||
+ | declare variable ORIG_NAME_ID type of DM_UUID_NULL; | ||
+ | declare variable ORIG_IZG_ID type of DM_UUID_NULL; | ||
+ | declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL; | ||
+ | begin | ||
+ | --BASE WITH GLOBAL ID | ||
+ | if (orig_code is null) then orig_code=''''; | ||
+ | select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id; | ||
+ | select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id; | ||
+ | select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id; | ||
+ | select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id; | ||
+ | select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id; | ||
+ | select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id; | ||
+ | select id, barcode from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and | ||
+ | ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and | ||
+ | ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id into :w_id, :old_barcode; | ||
+ | if (w_id is null) then | ||
+ | begin | ||
+ | -- exception EX_WRONG_OPER; | ||
+ | --w_id=gen_id(gen_wares_id,1); | ||
+ | w_id=UUID_TO_CHAR(GEN_UUID()); | ||
+ | insert into wares (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID) | ||
+ | values | ||
+ | (:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID); | ||
+ | end | ||
+ | else if (old_barcode <> barcode) then update wares set barcode = :barcode where id = :w_id; | ||
+ | suspend; | ||
+ | end; | ||
+ | '); | ||
+ | else | ||
+ | EXECUTE STATEMENT (' | ||
+ | create or alter procedure PR_GET_WARE ( | ||
+ | SNAME type of DM_TEXT, | ||
+ | SIZG type of DM_TEXT, | ||
+ | SCOUNTRY type of DM_TEXT, | ||
+ | ORIG_CODE type of DM_TEXT, | ||
+ | SORIG_NAME type of DM_TEXT, | ||
+ | SORIG_IZG type of DM_TEXT, | ||
+ | SORIG_COUNTRY type of DM_TEXT, | ||
+ | BARCODE type of DM_TEXT, | ||
+ | Z_ID type of DM_ID, | ||
+ | SKLAD_ID DM_TEXT, | ||
+ | ALTTYPE DM_STATUS, | ||
+ | MNN DM_TEXT = '''') | ||
+ | returns ( | ||
+ | W_ID type of DM_ID) | ||
+ | as | ||
+ | declare variable OLD_BARCODE DM_TEXT1024; | ||
+ | declare variable NAME_ID type of DM_ID; | ||
+ | declare variable IZG_ID type of DM_ID; | ||
+ | declare variable COUNTRY_ID type of DM_ID; | ||
+ | declare variable ORIG_NAME_ID type of DM_ID; | ||
+ | declare variable ORIG_IZG_ID type of DM_ID; | ||
+ | declare variable ORIG_COUNTRY_ID type of DM_ID; | ||
+ | begin | ||
+ | --BASE WITHOUT GLOBAL ID | ||
+ | if (orig_code is null) then orig_code=''''; | ||
+ | select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id; | ||
+ | select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id; | ||
+ | select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id; | ||
+ | select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id; | ||
+ | select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id; | ||
+ | select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id; | ||
+ | select id, barcode from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and | ||
+ | ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and | ||
+ | ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id into :w_id, :old_barcode; | ||
+ | if (w_id is null) then | ||
+ | begin | ||
+ | -- exception EX_WRONG_OPER; | ||
+ | w_id=gen_id(gen_wares_id,1); | ||
+ | --w_id=UUID_TO_CHAR(GEN_UUID()); | ||
+ | insert into wares (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID) | ||
+ | values | ||
+ | (:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID); | ||
+ | end | ||
+ | else if (old_barcode <> barcode) then update wares set barcode = :barcode where id = :w_id; | ||
+ | suspend; | ||
+ | end; | ||
+ | '); | ||
+ | end;^ | ||
+ | |||
+ | GRANT EXECUTE ON PROCEDURE PR_INSTALL_PR_GET_WARE TO SYSDBA;^ | ||
+ | execute procedure PR_INSTALL_PR_GET_WARE;^ | ||
+ | DROP PROCEDURE PR_INSTALL_PR_GET_WARE;^ | ||
+ | |||
+ | EXECUTE BLOCK AS BEGIN | ||
+ | if(not exists(select id from DOC_TYPES where id = 36)) then | ||
+ | execute statement 'INSERT INTO DOC_TYPES (ID, CAPTION, BASE_TYPE, STATINI, REPORTS, VTYPE) VALUES (36, ''Заказ оптовику'', 4, '' | ||
+ | [main] | ||
+ | koef=0 | ||
+ | |||
+ | [freereport] | ||
+ | enabled=1 | ||
+ | caption=Печать пакета документов | ||
+ | tmplpath=zakaz_opt.cffr3 | ||
+ | |||
+ | [dbf] | ||
+ | inipath=dbf.ini | ||
+ | '', NULL, 1);'; | ||
+ | END;^ | ||
+ | |||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_NAME','w.mgn_name');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_ID','w.mgn_id');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_SOURCE','cast(w.mgn_source as dm_text_big)');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_WARES','MGN_NAME','w.mgn_name');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_WARES','MGN_ID','w.mgn_id');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_WARES','MGN_SOURCE','cast(w.mgn_source as dm_text_big)');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_NAME','(select mgn_name from wares where id = da.ware_id) as mgn_name');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_ID','(select mgn_id from wares where id = da.ware_id) as mgn_id');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_SOURCE','(select mgn_source from wares where id = da.ware_id) as mgn_source');^ | ||
+ | execute procedure PR_ALTER_VIEW('VW_WAREBASE','MGN_NAME','(select mgn_name from wares where id = wb.ware_id)');^ | ||
+ | |||
SET TERM ; ^ | SET TERM ; ^ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | / | + | </pre> |
− | + | ==Дополнительно== | |
− | + | Проверить, что индекс WARES_IDX1 уникален, если нет, то выполнить процедуру UPDPR_REPARWARES и сделать индекс уникальным (возможно потребуется монопольный доступ к БД). | |
+ | Если таблицы OUT$ZAKAZ или DOC_DETAIL_ACTIVE_TREB в БД нет, создавать их не обязательно, можно закомментировать обращение к ним в UPDPR_REPARWARES. | ||
− | == | + | ==Сетки и печатная форма == |
+ | 1) Сетка автозаказа: | ||
Прикрепленный файл [[Файл: Сетка_автозаказа.zip]] | Прикрепленный файл [[Файл: Сетка_автозаказа.zip]] | ||
+ | |||
+ | 2) Сетка заказа оптовику: | ||
+ | Прикрепленный файл [[Файл: Заказ_оптовику_сетка.zip]] | ||
+ | |||
+ | 3) Печатная форма для заказа оптовику: | ||
+ | Прикрепленный файл [[Файл: zakaz_opt.zip]] | ||
==Проверка себя== | ==Проверка себя== | ||
− | В Менеджере, перед проверкой убедитесь, что в '''"Сервис"-"Параметры системы"-"Глобальный справочник"''' указаны корректные параметры '''"Строка подключения Общего заказа"''' и '''"Путь к Общему заказу"''' (при наличии программы Общий заказ). | + | В Менеджере, перед проверкой убедитесь, что в '''"Сервис"-"Параметры системы"-"Глобальный справочник"''' указаны корректные параметры '''"Строка подключения Общего заказа"''' (пример: localhost:C:\Program Files\ZClientXP4\ZBASE.FDB) и '''"Путь к Общему заказу"''' (пример: C:\Program Files\ZClientXP4\) (при наличии программы Общий заказ). |
− | После чего в меню '''"Сервис-Заказ"''' открываем окно Автозаказа и нажимаем кнопку '''"Рассчитать заказ"''', после расчета мы должны увидеть позиции в кратком, оптимальном и ассортиментном заказе. Пример внешнего вида см. ниже. | + | После чего в меню '''"Сервис-Заказ"''' открываем окно Автозаказа и нажимаем кнопку '''"Рассчитать заказ"''', после расчета мы должны увидеть позиции в кратком, оптимальном и ассортиментном заказе. Пример внешнего вида см. ниже. |
+ | Проведите любой документ, убедитесь, что исправления в базе прошли корректно. | ||
+ | *Cмотрим таблицу vals, если поле id имеет тип bigint (dm_id) - это обычные наименования, если DM_UUID - это глобальные | ||
Теги: автозаказ, автозаявка, заказ, заявка | Теги: автозаказ, автозаявка, заказ, заявка | ||
[[Файл:Автозаказ_внешний_вид.png|left|Окно программы]] | [[Файл:Автозаказ_внешний_вид.png|left|Окно программы]] |
Текущая версия на 19:23, 24 августа 2017
Содержание
Заменить версию Менеджера
Заменить ManagerXP2.exe на версию 2.272.26 от октября 2014 г. или более новую.
Установить процедуру PR_ALTER_VIEW
Выполняем скрипт
SET TERM ^ ; execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_ID','','BIGINT NOT NULL','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_STATUS','','INTEGER','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_DATETIME','','TIMESTAMP','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_TEXT1024','','VARCHAR(1024) CHARACTER SET WIN1251 COLLATE WIN1251','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_DOUBLE','','DOUBLE PRECISION','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ execute procedure PR_ALTER_VIEW('DM_ID_NULL','','BIGINT','DOMAIN');^ EXECUTE BLOCK AS BEGIN if (not exists(select 1 from rdb$relations where rdb$relation_name = 'ELNAKLS')) then execute statement 'CREATE TABLE ELNAKLS(FILENAME DM_TEXT1024);'; END^ EXECUTE BLOCK AS BEGIN if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EXT_DATA')) then execute statement 'CREATE TABLE EXT_DATA(ID DM_ID NOT NULL);'; END^ execute procedure PR_ALTER_VIEW('EXT_DATA','SNAME','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','ORIG_NAME','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_SOURCE','DM_TEXT1024','TABLE'); ^ execute procedure PR_ALTER_VIEW('EXT_DATA','QUANT','DM_DOUBLE','TABLE'); ^ execute procedure PR_ALTER_VIEW('EXT_DATA','PRICE','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','SUMMA','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','SDOC_TYPE','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','COMMITDATE','DM_DATETIME','TABLE'); ^ execute procedure PR_ALTER_VIEW('EXT_DATA','DOC_TYPE','DM_STATUS','TABLE'); ^ execute procedure PR_ALTER_VIEW('EXT_DATA','STATUS','DM_STATUS','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_ID','DM_ID_NULL','TABLE'); ^ execute procedure PR_ALTER_VIEW('EXT_DATA','INSERTDT','DM_DATETIME','TABLE');^ execute procedure PR_ALTER_VIEW('EXT_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ execute procedure PR_ALTER_VIEW('','','GEN_EXT_DATA_ID','generator');^ execute procedure PR_ALTER_VIEW('EXT_DATA','ID','EXT_DATA_IDX1','INDEX');^ execute procedure PR_ALTER_VIEW('EXT_DATA','SNAME','EXT_DATA_IDX2','INDEX');^ execute procedure PR_ALTER_VIEW('EXT_DATA','MGN_ID','EXT_DATA_IDX3','INDEX'); ^ CREATE OR ALTER TRIGGER EXT_DATA_BI FOR EXT_DATA ACTIVE BEFORE INSERT POSITION 0 as begin new.insertdt = 'now'; if (new.id is null) then new.id = gen_id(gen_ext_data_id,1); end;^ execute procedure PR_ALTER_VIEW('WARES','SNAME','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('WARES','MGN_ID','DM_ID_NULL','TABLE'); ^ execute procedure PR_ALTER_VIEW('WARES','MGN_SOURCE','DM_BLOBTEXT','TABLE');^ execute procedure PR_ALTER_VIEW('WARES','MGN_SOURCE','DM_BLOBTEXT','TABLE');^ execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','WARES_IDX3','INDEX');^ execute procedure PR_ALTER_VIEW('WARES','MGN_NAME','WARES_IDX4','INDEX');^ execute procedure PR_ALTER_VIEW('WARES','MGN_ID','WARES_IDX7','INDEX'); ^ CREATE OR ALTER TRIGGER WARES_BU_MGN FOR WARES ACTIVE BEFORE UPDATE POSITION 0 AS begin if (new.name_id <> old.name_id) then begin new.mgn_name = null; new.mgn_id = 0; end new.sname = (select svalue from vals where id = new.name_id); end;^ CREATE OR ALTER TRIGGER WARES_BI_SNAME FOR WARES ACTIVE BEFORE INSERT POSITION 0 AS begin new.sname = (select svalue from vals where id = new.name_id); end;^ EXECUTE BLOCK AS BEGIN if (not exists(select 1 from rdb$relations where rdb$relation_name = 'ORDER_DATA')) then execute statement 'CREATE TABLE ORDER_DATA (ID DM_ID NOT NULL);'; END^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ID','','PRIMARY KEY');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','DM_TEXT1024','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ORDER_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','SHORT_ORDER_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','OPTIMAL_ORDER_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ASSORT_ORDER_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','REALQUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_DATE','DM_DATETIME','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PRIHOD_PRICE','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_WEEK_SUM','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_2WEEKS_SUM','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_PERIOD_SUM','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_MONTH_SUM','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','SEASON_SUM','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','RASHOD_DOC_QUANT','DM_STATUS','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','PRIHOD_DOC_QUANT','DM_STATUS','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_DATE','DM_DATETIME','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ELNAKL_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ACTIVE_PRIHOD_DOC_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_OZ_PRICE','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','LAST_RASHOD_DATE','DM_DATETIME','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ACTIVE_ORDER_QUANT','DM_DOUBLE','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_ID','DM_ID_NULL','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','BAD_FLAG','DM_STATUS','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','INSERTDT','DM_DATETIME','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','G$PROFILE_ID','DM_ID_NULL','TABLE');^ execute procedure PR_ALTER_VIEW('','','GEN_ORDER_DATA_ID','generator');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','ORDER_DATA_IDX1','INDEX');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','MGN_NAME','ORDER_DATA_IDX2','INDEX');^ execute procedure PR_ALTER_VIEW('ORDER_DATA','ID','ORDER_DATA_IDX3','INDEX');^ CREATE OR ALTER TRIGGER ORDER_DATA_BI FOR ORDER_DATA ACTIVE BEFORE INSERT POSITION 0 as begin if (new.id is null) then new.id = gen_id(gen_order_data_id,1); end;^ create or alter procedure PR_INSTALL_UPDPR_REPARWARES as begin if (( select upper(rf.rdb$field_source) from RDB$RELATION_FIELDS rf where 1=1 and rf.rdb$field_name='ID' and rf.rdb$relation_name='WARES')='DM_UUID' ) then EXECUTE STATEMENT (' create or alter procedure UPDPR_REPARWARES returns ( ID DM_TEXT) as declare variable NAME_ID DM_UUID; declare variable IZG_ID DM_TEXT; declare variable COUNTRY_ID DM_TEXT; declare variable ORIG_CODE DM_TEXT; declare variable ORIG_NAME_ID DM_TEXT; declare variable ORIG_IZG_ID DM_TEXT; declare variable ORIG_COUNTRY_ID DM_TEXT; declare variable T_ID DM_UUID; begin --BASE WITH GLOBAL ID delete from DOC_DETAIL_ACTIVE_LOG; for select min(id), NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID from wares group by NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID having count(1)>1 into id, NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID do begin for select id from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id into :t_id do begin update DOC_DETAIL_ACTIVE set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; -- update DOC_DETAIL_ACTIVE_LOG set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; if (( select count(1) from RDB$RELATIONS r where 1=1 and upper(r.rdb$relation_name)=''DOC_DETAIL_ACTIVE_TREB'' )>0 ) THEN EXECUTE STATEMENT (''update DOC_DETAIL_ACTIVE_TREB set ware_id=''||:id||'' where ware_id=''||:t_id); if (( select count(1) from RDB$RELATIONS r where 1=1 and upper(r.rdb$relation_name)=''OUT$ZAKAZ'' )>0 ) THEN EXECUTE STATEMENT (''update OUT$ZAKAZ set ware_id=''||:id||'' where ware_id=''||:t_id); update PARTS set ware_id=:id where ware_id=:t_id; update PARTS_LOG set ware_id=:id where ware_id=:t_id; update WAREBASE set ware_id=:id where ware_id=:t_id; update WAREBASEFOLDERS set ware_id=:id where ware_id=:t_id; update WAREBASENAMEID set ware_id=:id where ware_id=:t_id; delete from wares where id=:t_id; end -- suspend; /* delete from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id; suspend; */ end -- suspend; end; '); else EXECUTE STATEMENT (' create or alter procedure UPDPR_REPARWARES returns ( ID DM_TEXT) as declare variable NAME_ID DM_ID; declare variable IZG_ID DM_TEXT; declare variable COUNTRY_ID DM_TEXT; declare variable ORIG_CODE DM_TEXT; declare variable ORIG_NAME_ID DM_TEXT; declare variable ORIG_IZG_ID DM_TEXT; declare variable ORIG_COUNTRY_ID DM_TEXT; declare variable T_ID DM_ID_NULL; begin --BASE WITHOUT GLOBAL ID delete from DOC_DETAIL_ACTIVE_LOG; for select min(id), NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID from wares group by NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID having count(1)>1 into id, NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID do begin for select id from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id into :t_id do begin update DOC_DETAIL_ACTIVE set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; -- update DOC_DETAIL_ACTIVE_LOG set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; if (( select count(1) from RDB$RELATIONS r where 1=1 and upper(r.rdb$relation_name)=''DOC_DETAIL_ACTIVE_TREB'' )>0 ) THEN EXECUTE STATEMENT (''update DOC_DETAIL_ACTIVE_TREB set ware_id=''||:id||'' where ware_id=''||:t_id); if (( select count(1) from RDB$RELATIONS r where 1=1 and upper(r.rdb$relation_name)=''OUT$ZAKAZ'' )>0 ) THEN EXECUTE STATEMENT (''update OUT$ZAKAZ set ware_id=''||:id||'' where ware_id=''||:t_id); update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; update PARTS set ware_id=:id where ware_id=:t_id; update PARTS_LOG set ware_id=:id where ware_id=:t_id; update WAREBASE set ware_id=:id where ware_id=:t_id; update WAREBASEFOLDERS set ware_id=:id where ware_id=:t_id; update WAREBASENAMEID set ware_id=:id where ware_id=:t_id; delete from wares where id=:t_id; end -- suspend; /* delete from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and ORIG_CODE=:ORIG_CODE and ORIG_NAME_ID=:ORIG_NAME_ID and ORIG_IZG_ID=:ORIG_IZG_ID and ORIG_COUNTRY_ID=:ORIG_COUNTRY_ID and id<>:id; suspend; */ end -- suspend; end; '); end;^ GRANT EXECUTE ON PROCEDURE PR_INSTALL_UPDPR_REPARWARES TO SYSDBA;^ execute procedure PR_INSTALL_UPDPR_REPARWARES;^ DROP PROCEDURE PR_INSTALL_UPDPR_REPARWARES;^ create or alter procedure PR_INSTALL_PR_GET_WARE as begin if (( select upper(rf.rdb$field_source) from RDB$RELATION_FIELDS rf where 1=1 and rf.rdb$field_name='ID' and rf.rdb$relation_name='WARES')='DM_UUID' ) then EXECUTE STATEMENT (' create or alter procedure PR_GET_WARE ( SNAME type of DM_TEXT, SIZG type of DM_TEXT, SCOUNTRY type of DM_TEXT, ORIG_CODE type of DM_TEXT, SORIG_NAME type of DM_TEXT, SORIG_IZG type of DM_TEXT, SORIG_COUNTRY type of DM_TEXT, BARCODE type of DM_TEXT, Z_ID type of DM_ID, SKLAD_ID DM_TEXT, ALTTYPE DM_STATUS, MNN DM_TEXT = '''') returns ( W_ID type of DM_UUID_NULL) as declare variable OLD_BARCODE DM_TEXT1024; declare variable NAME_ID type of DM_UUID_NULL; declare variable IZG_ID type of DM_UUID_NULL; declare variable COUNTRY_ID type of DM_UUID_NULL; declare variable ORIG_NAME_ID type of DM_UUID_NULL; declare variable ORIG_IZG_ID type of DM_UUID_NULL; declare variable ORIG_COUNTRY_ID type of DM_UUID_NULL; begin --BASE WITH GLOBAL ID if (orig_code is null) then orig_code=''''; select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id; select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id; select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id; select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id; select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id; select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id; select id, barcode from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id into :w_id, :old_barcode; if (w_id is null) then begin -- exception EX_WRONG_OPER; --w_id=gen_id(gen_wares_id,1); w_id=UUID_TO_CHAR(GEN_UUID()); insert into wares (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID) values (:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID); end else if (old_barcode <> barcode) then update wares set barcode = :barcode where id = :w_id; suspend; end; '); else EXECUTE STATEMENT (' create or alter procedure PR_GET_WARE ( SNAME type of DM_TEXT, SIZG type of DM_TEXT, SCOUNTRY type of DM_TEXT, ORIG_CODE type of DM_TEXT, SORIG_NAME type of DM_TEXT, SORIG_IZG type of DM_TEXT, SORIG_COUNTRY type of DM_TEXT, BARCODE type of DM_TEXT, Z_ID type of DM_ID, SKLAD_ID DM_TEXT, ALTTYPE DM_STATUS, MNN DM_TEXT = '''') returns ( W_ID type of DM_ID) as declare variable OLD_BARCODE DM_TEXT1024; declare variable NAME_ID type of DM_ID; declare variable IZG_ID type of DM_ID; declare variable COUNTRY_ID type of DM_ID; declare variable ORIG_NAME_ID type of DM_ID; declare variable ORIG_IZG_ID type of DM_ID; declare variable ORIG_COUNTRY_ID type of DM_ID; begin --BASE WITHOUT GLOBAL ID if (orig_code is null) then orig_code=''''; select val_id from pr_getval_id(:sname,0,:alttype,:mnn) into :name_id; select val_id from pr_getval_id(:sizg,3,:alttype) into :izg_id; select val_id from pr_getval_id(:scountry,2,:alttype) into :country_id; select val_id from pr_getval_id(:sorig_name,1,:alttype) into :orig_name_id; select val_id from pr_getval_id(:sorig_izg,6,:alttype) into :orig_izg_id; select val_id from pr_getval_id(:sorig_country,5,:alttype) into :orig_country_id; select id, barcode from wares where NAME_ID=:name_id and IZG_ID=:izg_id and COUNTRY_ID=:country_id and ORIG_CODE=:orig_code and ORIG_NAME_ID=:orig_name_id and ORIG_IZG_ID=:orig_izg_id and ORIG_COUNTRY_ID=:orig_country_id into :w_id, :old_barcode; if (w_id is null) then begin -- exception EX_WRONG_OPER; w_id=gen_id(gen_wares_id,1); --w_id=UUID_TO_CHAR(GEN_UUID()); insert into wares (ID,NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE,Z_ID,SKLAD_ID) values (:W_ID,:NAME_ID,:IZG_ID,:COUNTRY_ID,:ORIG_CODE,:ORIG_NAME_ID,:ORIG_IZG_ID,:ORIG_COUNTRY_ID,:BARCODE,:Z_ID,:SKLAD_ID); end else if (old_barcode <> barcode) then update wares set barcode = :barcode where id = :w_id; suspend; end; '); end;^ GRANT EXECUTE ON PROCEDURE PR_INSTALL_PR_GET_WARE TO SYSDBA;^ execute procedure PR_INSTALL_PR_GET_WARE;^ DROP PROCEDURE PR_INSTALL_PR_GET_WARE;^ EXECUTE BLOCK AS BEGIN if(not exists(select id from DOC_TYPES where id = 36)) then execute statement 'INSERT INTO DOC_TYPES (ID, CAPTION, BASE_TYPE, STATINI, REPORTS, VTYPE) VALUES (36, ''Заказ оптовику'', 4, '' [main] koef=0 [freereport] enabled=1 caption=Печать пакета документов tmplpath=zakaz_opt.cffr3 [dbf] inipath=dbf.ini '', NULL, 1);'; END;^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_NAME','w.mgn_name');^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_ID','w.mgn_id');^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL','MGN_SOURCE','cast(w.mgn_source as dm_text_big)');^ execute procedure PR_ALTER_VIEW('VW_WARES','MGN_NAME','w.mgn_name');^ execute procedure PR_ALTER_VIEW('VW_WARES','MGN_ID','w.mgn_id');^ execute procedure PR_ALTER_VIEW('VW_WARES','MGN_SOURCE','cast(w.mgn_source as dm_text_big)');^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_NAME','(select mgn_name from wares where id = da.ware_id) as mgn_name');^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_ID','(select mgn_id from wares where id = da.ware_id) as mgn_id');^ execute procedure PR_ALTER_VIEW('VW_DOC_DETAIL_ACTIVE','MGN_SOURCE','(select mgn_source from wares where id = da.ware_id) as mgn_source');^ execute procedure PR_ALTER_VIEW('VW_WAREBASE','MGN_NAME','(select mgn_name from wares where id = wb.ware_id)');^ SET TERM ; ^
Дополнительно
Проверить, что индекс WARES_IDX1 уникален, если нет, то выполнить процедуру UPDPR_REPARWARES и сделать индекс уникальным (возможно потребуется монопольный доступ к БД). Если таблицы OUT$ZAKAZ или DOC_DETAIL_ACTIVE_TREB в БД нет, создавать их не обязательно, можно закомментировать обращение к ним в UPDPR_REPARWARES.
Сетки и печатная форма
1) Сетка автозаказа: Прикрепленный файл Файл:Сетка автозаказа.zip
2) Сетка заказа оптовику: Прикрепленный файл Файл:Заказ оптовику сетка.zip
3) Печатная форма для заказа оптовику: Прикрепленный файл Файл:Zakaz opt.zip
Проверка себя
В Менеджере, перед проверкой убедитесь, что в "Сервис"-"Параметры системы"-"Глобальный справочник" указаны корректные параметры "Строка подключения Общего заказа" (пример: localhost:C:\Program Files\ZClientXP4\ZBASE.FDB) и "Путь к Общему заказу" (пример: C:\Program Files\ZClientXP4\) (при наличии программы Общий заказ).
После чего в меню "Сервис-Заказ" открываем окно Автозаказа и нажимаем кнопку "Рассчитать заказ", после расчета мы должны увидеть позиции в кратком, оптимальном и ассортиментном заказе. Пример внешнего вида см. ниже. Проведите любой документ, убедитесь, что исправления в базе прошли корректно.
*Cмотрим таблицу vals, если поле id имеет тип bigint (dm_id) - это обычные наименования, если DM_UUID - это глобальные
Теги: автозаказ, автозаявка, заказ, заявка