$PBExportHeader$uo_mtrlpz.sru forward global type uo_mtrlpz from nonvisualobject end type end forward global type uo_mtrlpz from nonvisualobject end type global uo_mtrlpz uo_mtrlpz type variables end variables forward prototypes public function integer save_mtrlpz (s_mtrl_pz arg_s_mp, ref string arg_msg) public function integer delete_configuretype (long arg_configutetypeid, ref string arg_msg) public function s_mtrlpz_array getconfiguremx (long arg_configuretypeid) public function integer add_configuretype (s_mtrlpz_array arg_s_ma, string arg_contfigtypename, integer arg_contfigtype, ref string arg_msg) public function integer setdefaultpz (integer arg_flag, long arg_mtrlid, ref string arg_msg, long arg_cid) public function s_mtrlpzmx getpzmx (long arg_cid) end prototypes public function integer save_mtrlpz (s_mtrl_pz arg_s_mp, ref string arg_msg);Long cnt = 0,ls_i string ls_pzname long ll_mtrlid IF arg_s_mp.mode = 2 THEN //如果是删除 select name,mtrlid into :ls_pzname,:ll_mtrlid from u_mtrl_configure where cid = :arg_s_mp.cid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料配置信息失败,'+sqlca.sqlerrtext ROLLBACK; RETURN 0 END IF delete from u_mtrl_planprice where mtrlid = :ll_mtrlid and status = :ls_pzname; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料配置计划成本价资料失败,'+sqlca.sqlerrtext ROLLBACK; RETURN 0 END IF DELETE FROM u_mtrl_configure Where cid = :arg_s_mp.cid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除物料配置失败' ROLLBACK; RETURN 0 END IF RETURN 1 END IF IF arg_s_mp.mode = 0 THEN //如果是新建,则获取新id,并检查重复的配置 //获得新的cid arg_s_mp.cid = f_sys_scidentity(0,"u_mtrl_configure","cid",arg_msg,TRUE,sqlca) IF arg_s_mp.cid < 0 THEN ROLLBACK; RETURN 0 END IF //检查重复配置 SELECT count(*) INTO :cnt FROM u_mtrl_configure Where mtrlid = :arg_s_mp.mtrlid AND code = :arg_s_mp.code; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查配置失败' RETURN 0 END IF IF IsNull(cnt) THEN cnt = 0 END IF IF cnt > 0 THEN arg_msg = '更新失败,重复的配置码' RETURN 0 END IF END IF IF arg_s_mp.mode = 0 THEN INSERT INTO u_mtrl_configure (mtrlid,cid,code,Name,TYPE) Values(:arg_s_mp.mtrlid,:arg_s_mp.cid,:arg_s_mp.code,:arg_s_mp.Name,2); IF sqlca.SQLCode <> 0 THEN arg_msg = '插入物料配置失败' ROLLBACK; RETURN 0 END IF ELSE UPDATE u_mtrl_configure Set mtrlid = :arg_s_mp.mtrlid,code = :arg_s_mp.code,Name = :arg_s_mp.Name Where cid = :arg_s_mp.cid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料配置失败' ROLLBACK; RETURN 0 END IF END IF RETURN 1 end function public function integer delete_configuretype (long arg_configutetypeid, ref string arg_msg);Long cnt = 0 //SELECT count(*) INTO :cnt FROM u_mtrldef Where colorprp = :arg_configutetypeid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = "删除配置类型失败,不能检查类型是否已经使用" // RETURN 0 //END IF //IF cnt > 0 THEN // arg_msg = "删除配置类型失败,该类型已经在使用,不允许删除" // RETURN 0 //END IF // //DELETE FROM u_configure_typemx Where contfigtypeid = :arg_configutetypeid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '删除配置类型明细失败' // ROLLBACK; // RETURN 0 //END IF // //DELETE FROM u_configure_type Where contfigtypeid = :arg_configutetypeid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '删除配置类型失败' // ROLLBACK; // RETURN 0 //END IF RETURN 1 end function public function s_mtrlpz_array getconfiguremx (long arg_configuretypeid);s_mtrlpz_array s_mpz // long cur_pzid // string cur_name,cur_pzcode // // // declare cur_pz cursor for // SELECT u_configure_code.pzcode, u_configure_code.name,u_configure_code.pzid // FROM u_configure_typemx INNER JOIN // u_configure_code ON u_configure_typemx.pzid = u_configure_code.pzid // where u_configure_typemx.contfigtypeid = :arg_configuretypeid; // open cur_pz; // fetch cur_pz into :cur_pzcode,:cur_name,:cur_pzid; // long ls_mxrow=0 // long cnt=0 // if sqlca.sqlcode <> 0 then // s_mpz.pzcode[1] = '' // s_mpz.pzname[1] = '' // s_mpz.pzid[1] = 0 // end if // do while sqlca.sqlcode = 0 // cnt++ // s_mpz.pzcode[cnt] = cur_pzcode // s_mpz.pzname[cnt] = cur_name // s_mpz.pzid[cnt] = cur_pzid // fetch cur_pz into :cur_pzcode,:cur_name,:cur_pzid; // loop // close cur_pz; return s_mpz end function public function integer add_configuretype (s_mtrlpz_array arg_s_ma, string arg_contfigtypename, integer arg_contfigtype, ref string arg_msg);Long ls_configuretypeid,ls_i ls_configuretypeid = f_sys_scidentity(0,"u_configure_type","contfigtypeid",arg_msg,TRUE,sqlca) IF ls_configuretypeid <= 0 THEN RETURN 0 END IF INSERT INTO u_configure_type (contfigtypeid, contfigtypename , contfigtype ) Values (:ls_configuretypeid,:arg_contfigtypename,:arg_contfigtype); IF sqlca.SQLCode <> 0 THEN arg_msg = '插入新配置类型失败' ROLLBACK; RETURN 0 END IF //FOR ls_i = 1 TO UpperBound(arg_s_ma.pzid ) // INSERT INTO u_configure_typemx (contfigtypeid, pzid ) Values (:ls_configuretypeid,:arg_s_ma.pzid[ls_i]); // IF sqlca.SQLCode <> 0 THEN // arg_msg = '插入新配置类型明细失败' // ROLLBACK; // RETURN 0 // END IF //NEXT RETURN 1 end function public function integer setdefaultpz (integer arg_flag, long arg_mtrlid, ref string arg_msg, long arg_cid);Long cnt = 0,cur_cid cur_cid = arg_cid IF arg_flag = 0 THEN //检查arg_cid是否是物料arg_mtrld的配置 SELECT count(*) INTO :cnt FROM u_mtrl_configure Where Mtrlid = :arg_mtrlid AND cid = :arg_cid ; IF sqlca.SQLCode <> 0 THEN arg_msg = "检查物料配置ID失败" RETURN 0 END IF IF IsNull(cnt) THEN cnt = 0 //检查物料原来的默认配置数 Long cnt1 = 0 SELECT count(*) INTO :cnt1 FROM u_mtrl_configure Where Mtrlid = :arg_mtrlid AND DefaultPZ = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料默认配置失败" RETURN 0 END IF IF IsNull(cnt1) THEN cnt1 = 0 IF cnt = 0 THEN //如果arg_cid不是物料arg_mtrlid的配置 IF cnt1 > 1 THEN //如果该物料有多于一个默认配置,则选他的最新的物料配置作为默认配置 UPDATE u_mtrl_configure Set DefaultPZ = 0 Where Mtrlid = :arg_mtrlid AND DefaultPZ = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = "初始化物料默认配置失败" ROLLBACK; RETURN 0 END IF ELSEIF cnt1 = 1 THEN //如果物料已经有一个默认配置,则返回 RETURN 1 END IF //获得物料最新配置的id SELECT Max (cid) INTO :cur_cid FROM u_mtrl_configure Where Mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查找最新物料配置失败" RETURN 0 END IF IF IsNull(cur_cid) OR cur_cid <= 0 THEN RETURN 1 //如果该物料没有配置,则返回 ELSEIF cnt = 1 THEN //arg_cid是物料arg_mtrlid的配置 IF cnt1 >= 1 THEN //取消物料原来的默认配置 UPDATE u_mtrl_configure Set DefaultPZ = 0 Where Mtrlid = :arg_mtrlid AND DefaultPZ = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = "初始化物料默认配置失败" ROLLBACK; RETURN 0 END IF END IF END IF //把arg_cid设成默认配置 UPDATE u_mtrl_configure Set DefaultPZ = 1 Where cid = :cur_cid; IF sqlca.SQLCode <> 0 THEN arg_msg = "设置默认物料配置失败" ROLLBACK; RETURN 0 END IF ELSE UPDATE u_mtrl_configure Set DefaultPZ = 0 Where cid = :cur_cid; IF sqlca.SQLCode <> 0 THEN arg_msg = "设置默认物料配置失败" ROLLBACK; RETURN 0 END IF END IF RETURN 1 end function public function s_mtrlpzmx getpzmx (long arg_cid);s_mtrlpzmx s_mm //declare cur cursor for //SELECT // u_configure_code.pzid, // u_configure_codemx.pzcodemx, // u_configure_codemx.namemx, // u_configure_codemx.printid //FROM u_configure_code INNER JOIN // u_configure_codemx ON // u_configure_code.pzid = u_configure_codemx.pzid INNER JOIN // u_mtrl_configuremx ON // u_configure_codemx.printid = u_mtrl_configuremx.printid AND // u_configure_code.pzid = u_mtrl_configuremx.pzid //where u_mtrl_configuremx.cid = :arg_cid; // //open cur; // //long cnt = 0 //long ls_pzid,ls_printid //string ls_pzcodemx,ls_namemx //fetch cur into :ls_pzid,:ls_pzcodemx,:ls_namemx,:ls_printid; //do while sqlca.sqlcode = 0 // cnt++ // s_mm.pzid[cnt] = ls_pzid // s_mm.pzcodemx[cnt] = ls_pzcodemx // s_mm.namemx[cnt] = ls_namemx // s_mm.printid[cnt] = ls_printid // fetch cur into :ls_pzid,:ls_pzcodemx,:ls_namemx,:ls_printid; //loop // //close cur; return s_mm end function on uo_mtrlpz.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mtrlpz.destroy TriggerEvent( this, "destructor" ) call super::destroy end on