$PBExportHeader$uo_cusprice_change.sru forward global type uo_cusprice_change from nonvisualobject end type type s_cusprice_changemx from structure within uo_cusprice_change end type end forward type s_cusprice_changemx from structure long mtrlid string mtrlcode decimal{10} price decimal{5} lastprice string mxdscrp long printid string status string woodcode string pcode long pricelistid end type global type uo_cusprice_change from nonvisualobject end type global uo_cusprice_change uo_cusprice_change type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE String billcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep Long mtrlid DateTime billdate Long pricelistid String dscrp String inrep String relcode long billtype datetime workdate string uo_option_change_status,uo_option_change_woodcode,uo_option_change_pcode PRIVATE: Boolean it_newbegin = FALSE Boolean it_updatebegin = FALSE Boolean if_getid_ture = TRUE s_cusprice_changemx changemx[] Long it_mxbt = 0 end variables forward prototypes public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_pricelistid, long arg_mtrlid, string arg_mtrlcode, decimal arg_price, string arg_status, string arg_woodcode, string arg_pcode, string arg_mxdscrp, ref string arg_msg) public function integer p_reset () public function integer p_clearmx () public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer newbegin () public function integer getinfo (long arg_billid, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer del (long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) end prototypes public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_cusprice_change SET dscrp = dscrp+' '+:arg_newdescppart Where u_cusprice_change.billid = :billid ; IF sqlca.SQLCode <> 0 THEN ROLLBACK ; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF dscrp = dscrp+' '+arg_newdescppart ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Return(rslt) end function public function integer acceptmx (long arg_printid, long arg_pricelistid, long arg_mtrlid, string arg_mtrlcode, decimal arg_price, string arg_status, string arg_woodcode, string arg_pcode, string arg_mxdscrp, ref string arg_msg);Int rslt = 1 Int li_dftflag Long cnt Decimal ld_lastprice IF uo_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_price) THEN arg_price = 0 IF arg_mtrlid = 0 OR arg_price = 0 THEN rslt = 1 GOTO ext END IF IF arg_pricelistid = 0 THEN arg_msg = '请选择价格表' rslt = 0 GOTO ext END IF SELECT dftflag INTO :li_dftflag FROM u_sale_price_list Where pricelistid = :arg_pricelistid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询价格表资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF if f_check_status(1,arg_status) = 0 then rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_status+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_status goto ext end if if f_check_status(2,arg_woodcode) = 0 then rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_woodcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode goto ext end if if f_check_status(3,arg_pcode) = 0 then rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_pcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode goto ext end if IF li_dftflag = 1 THEN SELECT count(*) INTO :cnt FROM u_sale_price_mx,u_sale_price_list WHERE u_sale_price_mx.pricelistid <> :arg_pricelistid AND u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid AND u_sale_price_mx.mtrlid = :arg_mtrlid AND u_sale_price_mx.status = :arg_status AND u_sale_price_mx.woodcode = :arg_woodcode AND u_sale_price_mx.pcode = :arg_pcode and u_sale_price_list.dftflag = 1 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+arg_mtrlcode+'是否在其它标准价格表存在失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '物料:'+arg_mtrlcode+'在其它标准价格表存在,不能在本价格表调价' rslt = 0 GOTO ext END IF END IF //取上次价 SELECT u_sale_price_mx.price INTO :ld_lastprice FROM u_sale_price_mx WHERE u_sale_price_mx.pricelistid = :arg_pricelistid AND u_sale_price_mx.mtrlid = :arg_mtrlid AND u_sale_price_mx.status = :arg_status AND u_sale_price_mx.pcode = :arg_pcode AND u_sale_price_mx.woodcode = :arg_woodcode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+arg_mtrlcode+',上次价格失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_lastprice = 0 END IF it_mxbt++ changemx[it_mxbt].mtrlid = arg_mtrlid changemx[it_mxbt].price = arg_price changemx[it_mxbt].status = arg_status changemx[it_mxbt].woodcode = arg_woodcode changemx[it_mxbt].pcode = arg_pcode changemx[it_mxbt].lastprice = ld_lastprice changemx[it_mxbt].mxDscrp = arg_mxdscrp changemx[it_mxbt].printid = arg_printid changemx[it_mxbt].pricelistid = arg_pricelistid ext: RETURN rslt end function public function integer p_reset ();//INT p_RESET() //清除对象及其明细 billid = 0 billcode = '' flag = 0 inrep = '' pricelistid = 0 dscrp = '' setnull(workdate) it_newbegin = FALSE it_updatebegin = FALSE p_clearmx( ) RETURN 1 end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 return 1 end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法调价单唯一码" GOTO ext END IF SELECT Billcode, billdate, pricelistid, flag, dscrp, inrep, relcode, mtrlid, billtype, workdate INTO :Billcode, :billdate, :pricelistid, :flag, :dscrp, :inrep, :relcode, :mtrlid, :billtype, :workdate FROM u_cusprice_change Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误调价单唯一码),调价单"+sqlca.SQLErrText GOTO ext END IF billid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer newbegin ();p_reset() it_newbegin=TRUE it_updatebegin=FALSE return 1 end function public function integer getinfo (long arg_billid, ref string arg_msg); Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "非法调价单唯一码" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_changemx CURSOR FOR SELECT u_cusprice_changemx.printid, u_cusprice_changemx.mtrlid, u_mtrldef.mtrlcode, u_cusprice_changemx.price, u_cusprice_changemx.status, u_cusprice_changemx.woodcode, u_cusprice_changemx.pcode, u_cusprice_changemx.mxDscrp, u_cusprice_changemx.lastprice, u_cusprice_changemx.pricelistid FROM u_cusprice_changemx INNER JOIN u_mtrldef ON u_cusprice_changemx.mtrlid = u_mtrldef.mtrlid WHERE u_cusprice_changemx.billid = :arg_billid ; OPEN cur_changemx; FETCH cur_changemx INTO :changemx[i].printid, :changemx[i].mtrlid, :changemx[i].mtrlcode, :changemx[i].price, :changemx[i].status, :changemx[i].woodcode, :changemx[i].pcode, :changemx[i].mxDscrp, :changemx[i].lastprice, :changemx[i].pricelistid; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_changemx INTO :changemx[i].printid, :changemx[i].mtrlid, :changemx[i].mtrlcode, :changemx[i].price, :changemx[i].status, :changemx[i].woodcode, :changemx[i].pcode, :changemx[i].mxDscrp, :changemx[i].lastprice, :changemx[i].pricelistid; LOOP CLOSE cur_changemx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_cusprice_changemx Where u_cusprice_changemx.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,调价单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,调价单明细" GOTO ext END IF billid = arg_billid it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0,i If billid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If flag = 1 Then rslt = 0 arg_msg = '该单据已审核,审核前请先执行撤审!' Goto ext End If Update u_cusprice_change Set flag = 1, auditingrep = :publ_operator, Auditingdate = getdate() Where billid = :billid And flag = 0 ; If sqlca.SQLCode <> 0 Then arg_msg = '审核单据失败,原因,'+sqlca.SQLErrText rslt = 0 Goto ext ElseIf sqlca.SQLNRows = 0 Then arg_msg = '单据正在审核,请重新检查' rslt = 0 Goto ext End If Long ll_pricelistid Long ll_mtrlid For i = 1 To it_mxbt If billtype = 0 Then ll_pricelistid = pricelistid ll_mtrlid = changemx[i].mtrlid Else ll_pricelistid = changemx[i].pricelistid ll_mtrlid = mtrlid End If Update u_sale_price_mx Set hisprice = price, price = :changemx[i].price Where pricelistid = :ll_pricelistid And mtrlid = :ll_mtrlid And status = :changemx[i].status And woodcode = :changemx[i].woodcode And pcode = :changemx[i].pcode ; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_sale_price_mx (pricelistid, mtrlid, status, woodcode, pcode, price, dscrp) Values(:ll_pricelistid, :ll_mtrlid, :changemx[i].status, :changemx[i].woodcode, :changemx[i].pcode, :changemx[i].price, :changemx[i].mxdscrp) ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致物料价格表建立操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If Else rslt = 0 arg_msg = "因网络或其它原因导致物料价格表更新操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next ext: If rslt = 0 Then Rollback ; ElseIf rslt = 1 And arg_ifcommit Then Commit ; End If Return rslt end function public function integer del (long arg_billid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_cusprice_changemx Where u_cusprice_changemx.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_cusprice_change WHERE u_cusprice_change.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK ; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT ; END IF Return (rslt) end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0,i DateTime server_dt Long ls_newid IF IsNull(pricelistid) THEN pricelistid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(inrep) THEN inrep = '' IF IsNull(relcode) THEN relcode = '' IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确进仓内容" GOTO ext END IF IF billtype = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_sale_price_list Where pricelistid = :pricelistid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询价格表资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '价格表资料重复' rslt = 0 GOTO ext END IF END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN rslt = 0 arg_msg = "时间不合理" GOTO ext END IF IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_cusprice_change","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN billcode = getid(0,"CH",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 ELSE billcode = getid(0,"PH",Date(server_dt),if_getid_ture,sqlca) END IF IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单据编号" GOTO ext END IF INSERT INTO u_cusprice_change (billid, billcode, billdate, pricelistid, dscrp, opemp, opdate, inrep, relcode, mtrlid, billtype, workdate) VALUES ( :ls_newid, :billcode, :billdate, :pricelistid, :dscrp, :publ_operator, :server_dt, :inrep, :relcode, :mtrlid, :billtype, :workdate) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText GOTO ext END IF billid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_cusprice_change SET billdate = :billdate, pricelistid = :pricelistid, moddate = :server_dt, modemp = :publ_operator, dscrp = :dscrp, inrep = :inrep, relcode = :relcode, mtrlid = :mtrlid, workdate = :workdate WHERE billid = :billid AND flag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF //删除原有明细 DELETE FROM u_cusprice_changemx Where u_cusprice_changemx.billid = :billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_cusprice_changemx (billid, mtrlid, price, status, woodcode, pcode, lastprice, mxDscrp, printid, pricelistid) VALUES (:billid, :changemx[i].mtrlid, :changemx[i].price, :changemx[i].status, :changemx[i].woodcode, :changemx[i].pcode, :changemx[i].lastprice, :changemx[i].mxDscrp, :changemx[i].printid, :changemx[i].pricelistid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK ; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT ; END IF Return(rslt) end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN billid = 0 arg_msg = '错误的单据ID' GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid it_newbegin = FALSE it_updatebegin = TRUE p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function on uo_cusprice_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_cusprice_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on