/* переносит все устр с ретр-в фобос АРМ CODE_FOBOS на альтаир 1 к 1*/ /* !!!!!!! Расширители Атлас не поддерживаются !!!!!!!!!*/ /* Пультовые номера не меняются*/ /* code_fobos = номер раб места фобос */ /* code_altair = код сервиса альтаир (новый) */ /* code_duty = код нового АРМ дежурного (может совпадать со старым) */ SET TERM ^ ; CREATE PROCEDURE MOVE_FOBOS_TO_ATAIR ( code_fobos integer, code_altair integer, code_duty integer) as declare variable cretr integer; declare variable caretr integer; declare variable cext integer; declare variable even integer; declare variable alt_inp integer; declare variable cdvc integer; declare variable cobj integer; declare variable num_finput integer; declare variable num_fretr integer; begin for select CODE_DEVICE_LIST, ID_NUMBER from device_list where CODE_TASK = :CODE_FOBOS into :cretr, :NUM_FRETR do begin for select CODE_DEVICE_LIST, PARENT_INPUT, CODE_OBJECT from device_list where PARENT_DEVICE_CODE = :CRETR into :cdvc, :NUM_FINPUT, :cobj do begin /*беру код ретр альтаир*/ CARETR=NULL; select first 1 CODE_DEVICE_LIST from DEVICE_LIST where CODE_TASK=:code_altair and ID_NUMBER = (:NUM_FRETR-1)/2 + 1 into :caretr; /*беру код расширителя альтаир*/ CEXT=NULL; even = (:NUM_FRETR-1) - (((:NUM_FRETR-1)/2) * 2); select first 1 CODE_DEVICE_LIST from DEVICE_LIST where PARENT_DEVICE_CODE = :CARETR and PARENT_INPUT = (:NUM_FINPUT-1)/20 + 1 + (:EVEN * 6) into :CEXT; if(CEXT is not null) then begin /*переключаю устройство*/ alt_inp = :NUM_FINPUT - (((:NUM_FINPUT-1)/20) * 20); update device_list set PARENT_DEVICE_CODE = :CEXT, PARENT_INPUT = :ALT_INP where CODE_DEVICE_LIST = :CDVC; /*переключаю объект*/ update defence_object set MAIN_HANDLER = :CODE_DUTY where code_object = :cobj; end end end end^ SET TERM ; ^ execute PROCEDURE MOVE_FOBOS_TO_ATAIR ( /*!!!!!! Здессь вставить параметры !!!!!!*/ code_fobos, code_altair, code_duty ); drop PROCEDURE MOVE_FOBOS_TO_ATAIR; commit work;