$PBExportHeader$uo_saletask_altermtrl.sru forward global type uo_saletask_altermtrl from nonvisualobject end type end forward global type uo_saletask_altermtrl from nonvisualobject end type global uo_saletask_altermtrl uo_saletask_altermtrl type variables long uo_billid string uo_billcode end variables forward prototypes public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer auditing (long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer save (s_saletask_altermtrl arg_s_altermtrl, boolean arg_ifcommit, ref string arg_msg) public function integer getinfo (long arg_billid, ref s_saletask_altermtrl_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg) end prototypes public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt=0 DateTime null_dt SetNull(null_dt) goto ext ext: IF rslt = 0 THEN ROLLBACK USING Sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING Sqlca; END IF RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 Long li_flag Long cnt If arg_billid <= 0 Then rslt = 0 arg_msg = '错误单据唯一码' Goto ext End If If p_getflag(arg_billid,li_flag,arg_msg) = 0 Then rslt = 0 Goto ext End If If li_flag = 1 Then rslt = 0 arg_msg = '单据已经审核,不可以再修改' Goto ext End If ext: Return rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long li_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_saletask_altermtrl SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_saletask_altermtrl.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 del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据不是在待审状态,不可以删除' GOTO ext END IF DELETE FROM u_saletask_altermtrl WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_saletask_altermtrl_mx WHERE 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 auditing (long arg_billid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt=0 Long li_flag Long ll_i String ls_mtrlcode Long li_max_printid Long ll_Mtrlorigin Decimal orderqty,needbuyqty,needwfjgqty uo_saletask uo_sale uo_sale = create uo_saletask uo_sale.commit_transaction = sqlca IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据不是在待审状态,不可以删除' GOTO ext END IF s_saletask_altermtrl_mx s_ref_mx[] Long ll_arr_cnt If getinfo(arg_billid,s_ref_mx,ll_arr_cnt,arg_msg) = 0 Then rslt = 0 Goto ext End If Long li_ifsc Decimal ld_noassignqty Decimal ld_enprice_notax,ld_rate,ld_tax,ld_saleqty,ld_rebate,ld_mrate Decimal ld_fprice,ld_acprice,ld_ware_enprice,ld_ware_fprice,ld_ware_price Decimal ld_bsamt,ld_bsamt_tax,ld_enamt,ld_enamt_tax Decimal ld_stopqty String ls_stopreason String ls_unit Decimal ld_cpqty For ll_i = 1 To ll_arr_cnt orderqty =0;needbuyqty=0;needwfjgqty=0 SELECT mtrlcode,unit,Mtrlorigin into :ls_mtrlcode,:ls_unit,:ll_Mtrlorigin FROM u_mtrldef WHERE mtrlid = :s_ref_mx[ll_i].new_mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,查询物料资料失败 '+sqlca.SQLErrText Goto ext End If IF s_ref_mx[ll_i].editflag = 0 THEN //变更 Select ifsc,u_saletaskmx.saleqty - u_saletaskmx.assignqty ,rate,tax,mrate,rebate,saleqty into :li_ifsc,:ld_noassignqty,:ld_rate,:ld_tax,:ld_mrate,:ld_rebate,:ld_saleqty from u_saletaskmx INNER JOIN u_saletask on u_saletask.scid = u_saletaskmx.scid and u_saletask.taskid = u_saletaskmx.taskid Where u_saletaskmx.scid = :s_ref_mx[ll_i].scid And u_saletaskmx.taskid = :s_ref_mx[ll_i].reltaskid And u_saletaskmx.printid = :s_ref_mx[ll_i].relprintid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,查询销售订单明细资料失败 '+sqlca.SQLErrText Goto ext End If // IF li_ifsc = 1 THEN // rslt = 0 // arg_msg = '第'+String(ll_i)+'行,已排产 不能审核 '+sqlca.SQLErrText // Goto ext // END IF select sum(qty) into :ld_cpqty from u_inwaremx inner join u_inware on u_inware.scid = u_inwaremx.scid and u_inware.inwareid = u_inwaremx.inwareid inner join u_saletaskmx ON u_SaleTaskMx.scid = u_inwaremx.scid AND u_SaleTaskMx.taskid = u_inwaremx.relid AND u_SaleTaskMx.printid = u_inwaremx.relprintid where (u_inware.billtype = 3) and u_inware.flag = 0 And u_saletaskmx.scid = :s_ref_mx[ll_i].scid And u_saletaskmx.taskid = :s_ref_mx[ll_i].reltaskid And u_saletaskmx.printid = :s_ref_mx[ll_i].relprintid; IF SQLCA.SQLCODE <> 0 THEN ld_cpqty = 0 END IF IF ISNULL(ld_cpqty) THEN ld_cpqty = 0 ld_noassignqty = ld_noassignqty - ld_cpqty IF ld_noassignqty <= 0 THEN rslt = 0 arg_msg = '第'+String(ll_i)+'行,未进仓数为0 不能审核 '+sqlca.SQLErrText Goto ext END IF //先新增明细 SELECT max(u_saletaskmx.printid) into :li_max_printid FROM u_saletaskmx Where u_saletaskmx.scid = :s_ref_mx[ll_i].scid And u_saletaskmx.taskid = :s_ref_mx[ll_i].reltaskid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,查询销售订单明细行最大值失败 '+sqlca.SQLErrText Goto ext End If li_max_printid++ INSERT INTO u_SaleTaskMx(scid, TaskID, MtrlID, SaleQty, PlPrice, fprice, rebate, Price, consignedQty, AssignQty, mxdscrp, sys_changetime, status, printid, pcode, woodcode, mtrlcuscode, mtrlchangecode, enprice, ctmint, outtype, dftsaleprice, bqty, pqty, addqty, consignedaddqty, unit, rate, usaleqty, ware_enprice, ware_fprice, ware_price, orderqty, needbuyqty, buytaskqty, ifsc, formula, scllflag, scllrep, sclldate, flag, auditingrep, auditingdate, printnum, audittime, auditemp, mxdscrp2, needwfjgqty, wfjgtaskqty, plancode, requiredate, tax, packqty, gbrate, gbotheramt, stopflag, stopemp, stopdate, stopreason, stopqty, enamt, enamt_tax, bsamt, bsamt_tax, net_weight, gross_weight, cubage, mxdscrp3, mxdscrp4, priceformula, checkflag, checkemp, checkdate, enprice_notax) SELECT scid, TaskID, MtrlID, SaleQty, PlPrice, fprice, rebate, Price, consignedQty, AssignQty, mxdscrp, sys_changetime, status, :li_max_printid, pcode, woodcode, mtrlcuscode, mtrlchangecode, enprice, ctmint, outtype, dftsaleprice, bqty, pqty, addqty, consignedaddqty, unit, rate, usaleqty, ware_enprice, ware_fprice, ware_price, orderqty, needbuyqty, buytaskqty, ifsc, formula, scllflag, scllrep, sclldate, flag, auditingrep, auditingdate, printnum, audittime, auditemp, mxdscrp2, needwfjgqty, wfjgtaskqty, plancode, requiredate, tax, packqty, gbrate, gbotheramt, stopflag, stopemp, stopdate, stopreason, stopqty, enamt, enamt_tax, bsamt, bsamt_tax, net_weight, gross_weight, cubage, mxdscrp3, mxdscrp4, priceformula, checkflag, checkemp, checkdate, enprice_notax FROM u_SaleTaskMx Where u_saletaskmx.scid = :s_ref_mx[ll_i].scid And u_saletaskmx.taskid = :s_ref_mx[ll_i].reltaskid And u_saletaskmx.printid = :s_ref_mx[ll_i].relprintid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,插入新增明细失败 '+sqlca.SQLErrText Goto ext End If //终止原油明细 ld_stopqty = ld_noassignqty ls_stopreason = "销售明细变更单审核终止原有明细" IF uo_sale.uof_stopqty(s_ref_mx[ll_i].scid,s_ref_mx[ll_i].reltaskid,s_ref_mx[ll_i].relprintid,ld_stopqty,ls_stopreason,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ld_enprice_notax = s_ref_mx[ll_i].new_enprice / (1 + ld_tax) ld_saleqty = Round(s_ref_mx[ll_i].new_usaleqty * ld_rate ,sys_option_unit_dec_sale) ld_fprice = s_ref_mx[ll_i].new_enprice * ld_mrate ld_acprice = s_ref_mx[ll_i].new_enprice * ld_mrate * ld_rebate ld_enamt = Round(s_ref_mx[ll_i].new_usaleqty * s_ref_mx[ll_i].new_enprice * ld_rebate, 2) ld_enamt_tax = Round((s_ref_mx[ll_i].new_usaleqty * s_ref_mx[ll_i].new_enprice * ld_rebate) * ld_tax / (1 + ld_tax), 2) //原币, 税金 ld_bsamt = Round(s_ref_mx[ll_i].new_usaleqty * ld_fprice * ld_rebate, 2) ld_bsamt_tax = Round((s_ref_mx[ll_i].new_usaleqty * ld_fprice * ld_rebate) * ld_tax / (1 + ld_tax), 2) ld_ware_enprice = Round((s_ref_mx[ll_i].new_enprice * s_ref_mx[ll_i].new_usaleqty)/ld_saleqty,10) ld_ware_fprice = Round((s_ref_mx[ll_i].new_enprice * s_ref_mx[ll_i].new_usaleqty)/ld_saleqty,10) * ld_mrate ld_ware_price = Round((s_ref_mx[ll_i].new_enprice * s_ref_mx[ll_i].new_usaleqty)/ld_saleqty,10) * ld_mrate * ld_rebate orderqty = ld_saleqty If sys_option_saletask_plan = 1 Then ElseIf sys_option_saletask_plan = 2 Then orderqty = 0 needbuyqty = ld_saleqty needwfjgqty = 0 ElseIf sys_option_saletask_plan = 3 Then orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = 0 ElseIf sys_option_saletask_plan = 5 Then orderqty = 0 needbuyqty = 0 needwfjgqty = ld_saleqty ElseIf sys_option_saletask_plan = 6 Then orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = ld_saleqty Else Choose Case ll_Mtrlorigin Case 0,4 orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = 0 Case 2 orderqty = 0 needbuyqty = ld_saleqty needwfjgqty = 0 Case Else End Choose End If Update u_saletaskmx Set mtrlid = :s_ref_mx[ll_i].new_mtrlid, status = :s_ref_mx[ll_i].new_status, woodcode = :s_ref_mx[ll_i].new_woodcode, pcode = :s_ref_mx[ll_i].new_pcode, enprice = :s_ref_mx[ll_i].new_enprice, requiredate = :s_ref_mx[ll_i].new_requiredate, uSaleQty = :s_ref_mx[ll_i].new_uSaleQty, addqty = :s_ref_mx[ll_i].new_addqty, formula = :s_ref_mx[ll_i].new_formula, priceformula = :s_ref_mx[ll_i].new_priceformula, mxdscrp = :s_ref_mx[ll_i].new_mxdscrp, mxdscrp2 = :s_ref_mx[ll_i].new_mxdscrp2, enprice_notax = :ld_enprice_notax, saleqty = :ld_saleqty, fprice = :ld_fprice, price = :ld_acprice, ware_enprice = :ld_ware_enprice, ware_fprice = :ld_ware_fprice, ware_price = :ld_ware_price, bsamt = :ld_bsamt, bsamt_tax = :ld_bsamt_tax, enamt = :ld_enamt, enamt_tax = :ld_enamt_tax, orderqty = :orderqty, needbuyqty = :needbuyqty, needwfjgqty = :needwfjgqty, assignqty = 0, stopqty = 0 Where scid = :s_ref_mx[ll_i].scid And taskid = :s_ref_mx[ll_i].reltaskid And printid = :li_max_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,更新订单明细信息失败 '+sqlca.SQLErrText Goto ext End If ELSE //新增 SELECT max(u_saletaskmx.printid) into :li_max_printid FROM u_saletaskmx Where u_saletaskmx.scid = :s_ref_mx[ll_i].scid And u_saletaskmx.taskid = :s_ref_mx[ll_i].reltaskid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,查询销售订单明细行最大值失败 '+sqlca.SQLErrText Goto ext End If li_max_printid++ ld_saleqty = s_ref_mx[ll_i].new_usaleqty orderqty = ld_saleqty If sys_option_saletask_plan = 1 Then ElseIf sys_option_saletask_plan = 2 Then orderqty = 0 needbuyqty = ld_saleqty needwfjgqty = 0 ElseIf sys_option_saletask_plan = 3 Then orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = 0 ElseIf sys_option_saletask_plan = 5 Then orderqty = 0 needbuyqty = 0 needwfjgqty = ld_saleqty ElseIf sys_option_saletask_plan = 6 Then orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = ld_saleqty Else Choose Case ll_Mtrlorigin Case 0,4 orderqty = ld_saleqty needbuyqty = 0 needwfjgqty = 0 Case 2 orderqty = 0 needbuyqty = ld_saleqty needwfjgqty = 0 Case Else End Choose End If INSERT INTO u_SaleTaskMx (scid,taskid,printid,MtrlID, status, woodcode, pcode, enprice, requiredate, usaleqty, addqty, formula, priceformula, mxdscrp, mxdscrp2, enprice_notax, SaleQty, fprice, Price, ware_enprice, ware_fprice, ware_price, bsamt, bsamt_tax, enamt, enamt_tax,rebate,unit,orderqty,needbuyqty,needwfjgqty) VALUES (:s_ref_mx[ll_i].scid,:s_ref_mx[ll_i].reltaskid,:li_max_printid,:s_ref_mx[ll_i].new_mtrlid, :s_ref_mx[ll_i].new_status, :s_ref_mx[ll_i].new_woodcode, :s_ref_mx[ll_i].new_pcode, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_requiredate, :s_ref_mx[ll_i].new_uSaleQty, :s_ref_mx[ll_i].new_addqty, :s_ref_mx[ll_i].new_formula, :s_ref_mx[ll_i].new_priceformula, :s_ref_mx[ll_i].new_mxdscrp, :s_ref_mx[ll_i].new_mxdscrp2, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_uSaleQty, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_enprice, :s_ref_mx[ll_i].new_enprice, round(:s_ref_mx[ll_i].new_enprice * :s_ref_mx[ll_i].new_usaleqty,2), round(:s_ref_mx[ll_i].new_enprice * :s_ref_mx[ll_i].new_usaleqty,2), round(:s_ref_mx[ll_i].new_enprice * :s_ref_mx[ll_i].new_usaleqty,2), round(:s_ref_mx[ll_i].new_enprice * :s_ref_mx[ll_i].new_usaleqty,2), 1,:ls_unit,:orderqty,:needbuyqty,:needwfjgqty ); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,插入新增明细失败 '+sqlca.SQLErrText Goto ext End If END IF Next //更新审核标记 Update u_saletask_altermtrl Set auditemp = :publ_operator, auditdate = getdate(), flag = 1 Where billid = :arg_billid And flag = 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText Goto ext End If ext: IF rslt = 0 THEN ROLLBACK USING Sqlca; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING Sqlca; END IF RETURN rslt end function public function integer save (s_saletask_altermtrl arg_s_altermtrl, boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i String ls_sccode,ls_billcode If IsNull(arg_s_altermtrl.scid) Then arg_s_altermtrl.scid = 0 If IsNull(arg_s_altermtrl.billid) Then arg_s_altermtrl.billid = 0 If IsNull(arg_s_altermtrl.relcode) Then arg_s_altermtrl.relcode = '' If IsNull(arg_s_altermtrl.rep) Then arg_s_altermtrl.rep = '' If IsNull(arg_s_altermtrl.dscrp) Then arg_s_altermtrl.dscrp = '' If arg_s_altermtrl.rep = '' Then arg_msg = '请输入经手人' rslt = 0 Goto ext End If If arg_s_altermtrl.scid < 0 Then arg_msg = '请选择分部' rslt = 0 Goto ext 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 it_mxbt = UpperBound(arg_s_altermtrl.arg_s_mx) If it_mxbt <= 0 Then rslt = 0 arg_msg = "没有正确明细内容" Goto ext End If //新增类型,检查 工组 对应 车间 For i = 1 To it_mxbt If arg_s_altermtrl.arg_s_mx[i].reltaskid = 0 Then rslt = 0 arg_msg = "行"+String(i)+ ",请选择订单明细" Goto ext End If If arg_s_altermtrl.arg_s_mx[i].old_mtrlid = arg_s_altermtrl.arg_s_mx[i].new_mtrlid And & arg_s_altermtrl.arg_s_mx[i].old_status = arg_s_altermtrl.arg_s_mx[i].new_status And & arg_s_altermtrl.arg_s_mx[i].old_woodcode = arg_s_altermtrl.arg_s_mx[i].new_woodcode And & arg_s_altermtrl.arg_s_mx[i].old_pcode = arg_s_altermtrl.arg_s_mx[i].new_pcode And & arg_s_altermtrl.arg_s_mx[i].old_enprice = arg_s_altermtrl.arg_s_mx[i].new_enprice And & arg_s_altermtrl.arg_s_mx[i].old_requiredate = arg_s_altermtrl.arg_s_mx[i].new_requiredate And & arg_s_altermtrl.arg_s_mx[i].old_uSaleQty = arg_s_altermtrl.arg_s_mx[i].new_uSaleQty And & arg_s_altermtrl.arg_s_mx[i].old_addqty = arg_s_altermtrl.arg_s_mx[i].new_addqty And & arg_s_altermtrl.arg_s_mx[i].old_formula = arg_s_altermtrl.arg_s_mx[i].new_formula And & arg_s_altermtrl.arg_s_mx[i].old_priceformula = arg_s_altermtrl.arg_s_mx[i].new_priceformula And & arg_s_altermtrl.arg_s_mx[i].old_mxdscrp = arg_s_altermtrl.arg_s_mx[i].new_mxdscrp And & arg_s_altermtrl.arg_s_mx[i].old_mxdscrp2 = arg_s_altermtrl.arg_s_mx[i].new_mxdscrp2 Then rslt = 0 arg_msg = '行'+String(i)+',没有任何修改,请检查' Goto ext End If Next If arg_s_altermtrl.billid = 0 Then ll_billid = f_sys_scidentity(0,"u_saletask_altermtrl","billid",arg_msg,True,id_sqlca) If ll_billid <= 0 Then rslt = 0 Goto ext End If If f_get_sccode(0,sqlca,ls_sccode,arg_msg) = 0 Then rslt = 0 Goto ext End If ls_billcode = getid(0,ls_sccode + 'TA',Date(server_dt),False,sqlca) If ls_billcode = "err" Then rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText Goto ext End If Insert Into u_saletask_altermtrl (scid, billid, billcode, billdate, relcode, rep, dscrp, opdate, opemp) Values (:arg_s_altermtrl.scid, :ll_billid, :ls_billcode, :arg_s_altermtrl.billdate, :arg_s_altermtrl.relcode, :arg_s_altermtrl.rep, :arg_s_altermtrl.dscrp, getdate(), :publ_operator); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText Goto ext End If uo_billid = ll_billid uo_billcode = ls_billcode Else Update u_saletask_altermtrl Set billdate = :arg_s_altermtrl.billdate, rep = :arg_s_altermtrl.rep, dscrp = :arg_s_altermtrl.dscrp, relcode = :arg_s_altermtrl.relcode, moddate = getdate(), modemp = :publ_operator Where billid = :arg_s_altermtrl.billid And flag = 0 ; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Delete From u_saletask_altermtrl_mx Where billid = :arg_s_altermtrl.billid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If uo_billid = arg_s_altermtrl.billid End If For i = 1 To it_mxbt Insert Into u_saletask_altermtrl_mx (scid, billid, printid, taskcode, reltaskid, relprintid, old_mtrlid, new_mtrlid, old_requiredate, new_requiredate, old_status, new_status, old_woodcode, new_woodcode, old_pcode, new_pcode, old_uSaleQty, new_uSaleQty, old_addqty, new_addqty, old_enprice, new_enprice, old_formula, new_formula, old_priceformula, new_priceformula, old_mxdscrp, new_mxdscrp, old_mxdscrp2, new_mxdscrp2, editflag) Values (:arg_s_altermtrl.scid, :uo_billid, :arg_s_altermtrl.arg_s_mx[i].printid, :arg_s_altermtrl.arg_s_mx[i].taskcode, :arg_s_altermtrl.arg_s_mx[i].reltaskid, :arg_s_altermtrl.arg_s_mx[i].relprintid, :arg_s_altermtrl.arg_s_mx[i].old_mtrlid, :arg_s_altermtrl.arg_s_mx[i].new_mtrlid, :arg_s_altermtrl.arg_s_mx[i].old_requiredate, :arg_s_altermtrl.arg_s_mx[i].new_requiredate, :arg_s_altermtrl.arg_s_mx[i].old_status, :arg_s_altermtrl.arg_s_mx[i].new_status, :arg_s_altermtrl.arg_s_mx[i].old_woodcode, :arg_s_altermtrl.arg_s_mx[i].new_woodcode, :arg_s_altermtrl.arg_s_mx[i].old_pcode, :arg_s_altermtrl.arg_s_mx[i].new_pcode, :arg_s_altermtrl.arg_s_mx[i].old_uSaleQty, :arg_s_altermtrl.arg_s_mx[i].new_uSaleQty, :arg_s_altermtrl.arg_s_mx[i].old_addqty, :arg_s_altermtrl.arg_s_mx[i].new_addqty, :arg_s_altermtrl.arg_s_mx[i].old_enprice, :arg_s_altermtrl.arg_s_mx[i].new_enprice, :arg_s_altermtrl.arg_s_mx[i].old_formula, :arg_s_altermtrl.arg_s_mx[i].new_formula, :arg_s_altermtrl.arg_s_mx[i].old_priceformula, :arg_s_altermtrl.arg_s_mx[i].new_priceformula, :arg_s_altermtrl.arg_s_mx[i].old_mxdscrp, :arg_s_altermtrl.arg_s_mx[i].new_mxdscrp, :arg_s_altermtrl.arg_s_mx[i].old_mxdscrp2, :arg_s_altermtrl.arg_s_mx[i].new_mxdscrp2, :arg_s_altermtrl.arg_s_mx[i].editflag); If sqlca.SQLCode <> 0 Then uo_billid = arg_s_altermtrl.billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next ext: If rslt = 0 Then Rollback; ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return rslt end function public function integer getinfo (long arg_billid, ref s_saletask_altermtrl_mx arg_ref_mx[], ref long arg_arr_cnt, 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 //用游标读取明细 Declare cur_mx Cursor For SELECT scid ,billid ,printid ,taskcode ,reltaskid ,relprintid ,old_mtrlid ,new_mtrlid ,old_requiredate ,new_requiredate ,old_status ,new_status ,old_woodcode ,new_woodcode ,old_pcode ,new_pcode ,old_uSaleQty ,new_uSaleQty ,old_addqty ,new_addqty ,old_enprice ,new_enprice ,old_formula ,new_formula ,old_priceformula ,new_priceformula ,old_mxdscrp ,new_mxdscrp ,old_mxdscrp2 ,new_mxdscrp2 ,editflag FROM u_saletask_altermtrl_mx Where u_saletask_altermtrl_mx.billid = :arg_billid Order By u_saletask_altermtrl_mx.printid; Open cur_mx; Fetch cur_mx Into :arg_ref_mx[i].scid ,:arg_ref_mx[i].billid ,:arg_ref_mx[i].printid ,:arg_ref_mx[i].taskcode ,:arg_ref_mx[i].reltaskid ,:arg_ref_mx[i].relprintid ,:arg_ref_mx[i].old_mtrlid ,:arg_ref_mx[i].new_mtrlid ,:arg_ref_mx[i].old_requiredate ,:arg_ref_mx[i].new_requiredate ,:arg_ref_mx[i].old_status ,:arg_ref_mx[i].new_status ,:arg_ref_mx[i].old_woodcode ,:arg_ref_mx[i].new_woodcode ,:arg_ref_mx[i].old_pcode ,:arg_ref_mx[i].new_pcode ,:arg_ref_mx[i].old_uSaleQty ,:arg_ref_mx[i].new_uSaleQty ,:arg_ref_mx[i].old_addqty ,:arg_ref_mx[i].new_addqty ,:arg_ref_mx[i].old_enprice ,:arg_ref_mx[i].new_enprice ,:arg_ref_mx[i].old_formula ,:arg_ref_mx[i].new_formula ,:arg_ref_mx[i].old_priceformula ,:arg_ref_mx[i].new_priceformula ,:arg_ref_mx[i].old_mxdscrp ,:arg_ref_mx[i].new_mxdscrp ,:arg_ref_mx[i].old_mxdscrp2 ,:arg_ref_mx[i].new_mxdscrp2 ,:arg_ref_mx[i].editflag; Do While sqlca.SQLCode = 0 i++ Fetch cur_mx Into :arg_ref_mx[i].scid ,:arg_ref_mx[i].billid ,:arg_ref_mx[i].printid ,:arg_ref_mx[i].taskcode ,:arg_ref_mx[i].reltaskid ,:arg_ref_mx[i].relprintid ,:arg_ref_mx[i].old_mtrlid ,:arg_ref_mx[i].new_mtrlid ,:arg_ref_mx[i].old_requiredate ,:arg_ref_mx[i].new_requiredate ,:arg_ref_mx[i].old_status ,:arg_ref_mx[i].new_status ,:arg_ref_mx[i].old_woodcode ,:arg_ref_mx[i].new_woodcode ,:arg_ref_mx[i].old_pcode ,:arg_ref_mx[i].new_pcode ,:arg_ref_mx[i].old_uSaleQty ,:arg_ref_mx[i].new_uSaleQty ,:arg_ref_mx[i].old_addqty ,:arg_ref_mx[i].new_addqty ,:arg_ref_mx[i].old_enprice ,:arg_ref_mx[i].new_enprice ,:arg_ref_mx[i].old_formula ,:arg_ref_mx[i].new_formula ,:arg_ref_mx[i].old_priceformula ,:arg_ref_mx[i].new_priceformula ,:arg_ref_mx[i].old_mxdscrp ,:arg_ref_mx[i].new_mxdscrp ,:arg_ref_mx[i].old_mxdscrp2 ,:arg_ref_mx[i].new_mxdscrp2 ,:arg_ref_mx[i].editflag; Loop Close cur_mx; //检验明细是否读入完整 Select count(*) Into :no_mxcheck From u_saletask_altermtrl_mx Where 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 arg_arr_cnt = i - 1 ext: Return rslt end function public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_saletask_altermtrl WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function on uo_saletask_altermtrl.create call super::create TriggerEvent( this, "constructor" ) end on on uo_saletask_altermtrl.destroy TriggerEvent( this, "destructor" ) call super::destroy end on