$PBExportHeader$uo_outware_sale_th.sru forward global type uo_outware_sale_th from uo_outware_sale end type end forward global type uo_outware_sale_th from uo_outware_sale end type global uo_outware_sale_th uo_outware_sale_th forward prototypes public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg) public function integer c_auditing_th (boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer auditing (boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,cnt = 0,i Long chc Long rst_outwareid // Long rst_inwareid // Long ll_i,ll_j,ll_k Int li_ifpack,li_ifunit,li_ifpackpro Int li_ifpackcnt,li_ifpackprocnt Decimal ld_rate,ld_uqty,ld_rate_buy Decimal ld_fprice,ld_uprice String ls_uunit,ls_unit_buy,ls_unit Long ll_storageid_arr[] IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction IF uo_option_confirmaudit_sale = -1000 THEN rslt = 0 arg_msg = '选项:[025]销售单先确认后审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_outware_saleout = -1000 THEN rslt = 0 arg_msg = '选项:[147]使用销售出仓单,读取初始默认值失败,操作取消!' GOTO ext END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据' GOTO ext END IF END IF // IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF IF uo_option_confirmaudit_sale = 1 THEN IF priceflag = 0 THEN rslt = 0 arg_msg = "销售单要确认后才能审核" GOTO ext END IF END IF UPDATE u_outware SET Auditingrep = :publ_operator, Auditingdate = getdate(), flag = 1 WHERE u_outware.outwareid = :outwareid AND flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF uo_inware uo_in uo_outware uo_out uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False FOR i = 1 To it_mxbt Decimal ld_ref_costamt IF p_update_cost(outwaremx[i].mtrlwareid,outwaremx[i].mtrlcode,& outwaremx[i].qty,outwaremx[i].printid,ld_ref_costamt,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_inout_procedure = 0 THEN IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, outwaremx[i].qty,outwaremx[i].uqty, ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].mtrlcuscode,& outwaremx[i].Location,outwaremx[i].ifvqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_outware_update_mtrlware(scid,outwareid,outwaremx[i].printid,outwaremx[i].mtrlwareid,& outwaremx[i].mtrlid,outwaremx[i].mtrlcode,storageid,outwaremx[i].plancode,outwaremx[i].status,& outwaremx[i].qty,outwaremx[i].uqty,ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,outwaremx[i].mtrlcuscode,outwaremx[i].Location,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_option_inout_type <> 0 And uo_option_outware_saleout = 0 THEN cnt = 1 FOR ll_i = 1 To it_mxbt_mx IF ll_i = 1 THEN ll_storageid_arr[cnt] = outwaremx_mx[ll_i].storageid GOTO _next END IF FOR ll_j = 1 To cnt IF ll_storageid_arr[ll_j] = outwaremx_mx[ll_i].storageid THEN GOTO _next END IF NEXT cnt++ ll_storageid_arr[cnt] = outwaremx_mx[ll_i].storageid _next: NEXT FOR ll_i = 1 To cnt IF uo_out.newbegin(scid,21,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = outwareid uo_out.outdate = outdate uo_out.outrep = outrep uo_out.part = outwarecode uo_out.dscrp = dscrp uo_out.cusname = '包件明细自动出仓' uo_out.storageid = ll_storageid_arr[ll_i] chc = 0 FOR i = 1 To it_mxbt_mx IF outwaremx_mx[i].storageid <> ll_storageid_arr[ll_i] THEN CONTINUE SELECT ifpack,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpack,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx_mx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx_mx[i].qty ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx_mx[i].qty /ld_rate_buy END IF IF uo_out.acceptmx(outwaremx_mx[i].mtrlwareid,& outwaremx_mx[i].qty,ld_fprice,1,& outwaremx_mx[i].mxdscrp,chc,arg_msg,0,0,outwaremx_mx[i].printid,0,'',0,outwaremx_mx[i].mxprintid,& ls_uunit,ld_uqty,ld_rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_out.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_outwareid = uo_out.outwareid //2.原事务审核出仓单 IF uo_out.getinfo(scid,rst_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_in.newbegin(scid,23,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = outwareid uo_in.indate = outdate uo_in.inrep = outrep uo_in.part = outwarecode uo_in.dscrp = dscrp uo_in.sptname = '包件自动进仓' uo_in.storageid = storageid chc = 0 FOR i = 1 To it_mxbt SELECT ifpackpro,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpackpro,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF // IF li_ifpackpro = 1 THEN chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx[i].qty ld_uprice = ld_fprice ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx[i].qty /ld_rate_buy ld_uprice = ld_fprice * ld_rate END IF IF uo_in.acceptmx(chc,& outwaremx[i].mtrlid,& outwaremx[i].mtrlcode,& outwaremx[i].plancode,& outwaremx[i].status,& ld_uqty,& ld_uprice,& 1,& outwaremx[i].mxdscrp,& arg_msg,& 0,0,0,outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].sptid,ls_uunit,ld_rate,& outwaremx[i].qty,0,0,'','',0,0,& outwaremx[i].mtrlcuscode,outwaremx[i].Location,& ld_uqty,& 0) = 0 THEN rslt = 0 GOTO ext END IF // END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_inwareid = uo_in.inwareid //4.原事务审核进仓单 IF uo_in.getinfo(scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // END IF END IF Long ll_printid_arr[],ll_mtrlwareid_arr[],ll_mtrlid_arr[] String ls_status_arr[],ls_woodcode_arr[],ls_pcode_arr[] Decimal ld_qty_arr[] Long ll_cnt = 1 Long ll_printid Decimal ld_maxqty Long ll_mtrlid Int li_outtype String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] Decimal ld_Sonscale[] Long ll_SonMtrlid[] Long it_mxt = 1 String ls_status_find,ls_woodcode_find,ls_pcode_find String ls_status,ls_woodcode,ls_pcode Decimal ld_pfqty IF uo_option_outware_saleout = 1 THEN DECLARE cur_mx CURSOR FOR SELECT u_outwaremx.printid, u_outwaremx.mtrlwareid, u_outwaremx.mtrlid, u_outwaremx.status, u_outwaremx.woodcode, u_outwaremx.pcode, u_outwaremx.qty FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE u_outware.relid = :outwareid AND u_outware.scid = :scid AND u_outware.billtype = 21 Using commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :ll_printid_arr[ll_cnt],:ll_mtrlwareid_arr[ll_cnt],:ll_mtrlid_arr[ll_cnt], :ls_status_arr[ll_cnt],:ls_woodcode_arr[ll_cnt],:ls_pcode_arr[ll_cnt],:ld_qty_arr[ll_cnt]; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ FETCH cur_mx INTO :ll_printid_arr[ll_cnt],:ll_mtrlwareid_arr[ll_cnt],:ll_mtrlid_arr[ll_cnt], :ls_status_arr[ll_cnt],:ls_woodcode_arr[ll_cnt],:ls_pcode_arr[ll_cnt],:ld_qty_arr[ll_cnt]; LOOP CLOSE cur_mx; ll_cnt = ll_cnt - 1 FOR ll_i = 1 To it_mxbt ld_maxqty = 0 it_mxt = 1 ll_printid = outwaremx[ll_i].printid ll_mtrlid = outwaremx[ll_i].mtrlid ls_status = outwaremx[ll_i].status ls_woodcode = outwaremx[ll_i].woodcode ls_pcode = outwaremx[ll_i].pcode SELECT outtype,ifpackpro INTO :li_outtype,:li_ifpackpro FROM u_mtrldef Where mtrlid = :ll_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询产品出仓类型失败' rslt = 0 GOTO ext END IF IF li_outtype = 0 THEN FOR ll_j = 1 To ll_cnt IF ll_mtrlwareid_arr[ll_j] = 0 THEN CONTINUE IF ll_printid_arr[ll_j] = ll_printid THEN ld_maxqty = ld_qty_arr[ll_j] EXIT END IF NEXT UPDATE u_outwaremx SET qty = :ld_maxqty WHERE outwareid = :outwareid AND scid = :scid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新实发数失败' GOTO ext END IF ELSE DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype, u_prdpf.Sonscale FROM u_PrdPF,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :ll_mtrlid ) AND ( u_mtrl_pf.ifdi = 1 AND :li_ifpackpro = 0 Or u_mtrl_pf.ifdft = 1 And :li_ifpackpro = 1 ); OPEN cur_pf; FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; FOR ll_k = 1 To it_mxt IF li_ifover[ll_k] = 1 THEN CHOOSE CASE li_dipztype[ll_k] CASE 0 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = '' CASE 1 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = '' CASE 2 ls_status_find = '' ls_woodcode_find = '' ls_pcode_find = ls_pcode CASE 3 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = '' CASE 4 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode CASE 5 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = ls_pcode CASE 6 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode END CHOOSE ELSE ls_status_find = ls_pf_status[ll_k] ls_woodcode_find = ls_pf_woodcode[ll_k] ls_pcode_find = ls_pf_pcode[ll_k] END IF ls_status_find = Trim(ls_status_find) ls_woodcode_find = Trim(ls_woodcode_find) ls_pcode_find = Trim(ls_pcode_find) ld_pfqty = 0 FOR ll_j = 1 To ll_cnt IF ll_mtrlwareid_arr[ll_j] = 0 THEN CONTINUE IF ll_printid_arr[ll_j] = ll_printid And & ll_mtrlid_arr[ll_j] = ll_SonMtrlid[ll_k] And & ls_status_arr[ll_j] = ls_status_find And & ls_woodcode_arr[ll_j] = ls_woodcode_find And & ls_pcode_arr[ll_j] = ls_pcode_find THEN ld_pfqty = ld_pfqty + ld_qty_arr[ll_j] / ld_Sonscale[ll_k] END IF NEXT IF thflag = 0 THEN IF ld_pfqty > ld_maxqty THEN ld_maxqty = ld_pfqty ELSE IF ld_pfqty < ld_maxqty THEN ld_maxqty = ld_pfqty END IF NEXT UPDATE u_outwaremx SET qty = :ld_maxqty WHERE outwareid = :outwareid AND scid = :scid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新实发数失败' GOTO ext END IF END IF outwaremx[ll_i].qty = ld_maxqty NEXT IF uo_in.newbegin(scid,23,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = outwareid uo_in.indate = outdate uo_in.inrep = outrep uo_in.part = outwarecode uo_in.dscrp = dscrp uo_in.sptname = '包件自动进仓' uo_in.storageid = storageid chc = 0 FOR i = 1 To it_mxbt SELECT ifpackpro,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpackpro,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx[i].qty ld_uprice = ld_fprice ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx[i].qty /ld_rate_buy ld_uprice = ld_fprice * ld_rate END IF IF ld_uqty <> 0 Or outwaremx[i].qty <> 0 THEN IF uo_in.acceptmx(chc,& outwaremx[i].mtrlid,& outwaremx[i].mtrlcode,& outwaremx[i].plancode,& outwaremx[i].status,& ld_uqty,& ld_uprice,& 1,& outwaremx[i].mxdscrp,& arg_msg,& 0,0,0,outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].sptid,ls_uunit,ld_rate,& outwaremx[i].qty,0,0,'','',0,0,& outwaremx[i].mtrlcuscode,outwaremx[i].Location,& ld_uqty,& 0) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_inwareid = uo_in.inwareid //4.原事务审核进仓单 IF uo_in.getinfo(scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uof_p_barcode(1,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_task Destroy uo_in Destroy uo_out Destroy uo_pro RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Long ls_newid DateTime null_dt Long ll_inwareid_rel,ll_outwareid_rel String ls_inwarecode_rel,ls_outwarecode_rel String ls_outwarecode_arr[] Long ll_outwareid[] Long ll_itmx = 1,ll_i IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_outware_saleout = -1000 THEN rslt = 0 arg_msg = '选项:[147]使用销售出仓单,读取初始默认值失败,操作取消!' GOTO ext END IF SetNull(null_dt) uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction uo_inware uo_in uo_outware uo_out uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据' GOTO ext END IF END IF // IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已经过财务审核" GOTO ext END IF IF balcflag = 1 THEN rslt = 0 arg_msg = "单据已经日结,不能撤审" GOTO ext END IF String ls_owecode Int li_oweflag Long ll_owebillid cnt = 0 SELECT count(*) INTO :cnt FROM u_owegood WHERE scid = :scid And relid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致查询是否存在相关欠货单操作失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 1 THEN rslt = 0 arg_msg = '不合理的欠货单数量(存在多张相关欠货单),请检查' GOTO ext ELSEIF cnt = 1 THEN SELECT billid,billcode ,flag INTO :ll_owebillid,:ls_owecode,:li_oweflag FROM u_owegood WHERE scid = :scid And relid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致查询\相关欠货单信息操作失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF li_oweflag <> 0 THEN rslt = 0 arg_msg = '相关欠货单:'+ls_owecode+' 已在进行或完成,不能撤审销售发货单,请检查' GOTO ext END IF DELETE FROM u_owegoodmx Where billid = :ll_owebillid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关欠货单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_owegood WHERE billid = :ll_owebillid And flag = 0; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关欠货单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF UPDATE u_outware SET Auditingrep = '', Auditingdate = :null_dt, flag = 0 WHERE u_outware.outwareid = :outwareid AND flag = 1 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_inout_type <> 0 And uo_option_outware_saleout = 0 THEN SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT inwareid,inwarecode INTO :ll_inwareid_rel,:ls_inwarecode_rel FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_in.getinfo(scid,ll_inwareid_rel,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid_rel,arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF END IF DECLARE cur_mx CURSOR FOR SELECT outwareid,outwarecode FROM u_outware WHERE billtype = 21 AND relid = :outwareid And scid = :scid Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ll_outwareid[ll_itmx],:ls_outwarecode_arr[ll_itmx]; DO WHILE commit_transaction.SQLCode = 0 ll_itmx++ FETCH cur_mx Into :ll_outwareid[ll_itmx],:ls_outwarecode_arr[ll_itmx]; LOOP ll_itmx = ll_itmx - 1 CLOSE cur_mx; FOR ll_i = 1 To ll_itmx IF uo_out.getinfo(scid,ll_outwareid[ll_i],arg_msg) = 0 THEN rslt = 0 arg_msg = '查询相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 arg_msg = '撤审相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.del(scid,ll_outwareid[ll_i],0,arg_msg,False) = 0 THEN arg_msg = '相关出仓单:'+ls_outwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF IF uo_option_outware_saleout = 1 THEN SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT inwareid,inwarecode INTO :ll_inwareid_rel,:ls_inwarecode_rel FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_in.getinfo(scid,ll_inwareid_rel,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid_rel,arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF END IF DECLARE cur_mx_rel CURSOR FOR SELECT outwareid FROM u_outware WHERE billtype = 21 AND relid = :outwareid And scid = :scid Using commit_transaction; OPEN cur_mx_rel; FETCH cur_mx_rel Into :ll_outwareid[ll_itmx]; DO WHILE commit_transaction.SQLCode = 0 ll_itmx++ FETCH cur_mx_rel Into :ll_outwareid[ll_itmx]; LOOP ll_itmx = ll_itmx - 1 CLOSE cur_mx_rel; FOR ll_i = 1 To ll_itmx IF uo_out.getinfo(scid,ll_outwareid[ll_i],arg_msg) = 0 THEN rslt = 0 arg_msg = '查询相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 arg_msg = '撤审相关出仓单失败,' + arg_msg GOTO ext END IF NEXT END IF FOR i = 1 To it_mxbt IF sys_option_inout_procedure = 0 THEN IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, 0 - outwaremx[i].qty,0 - outwaremx[i].uqty,0 - outwaremx[i].costamt,& outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode, outwaremx[i].mtrlcuscode,& outwaremx[i].Location,outwaremx[i].ifvqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_outware_update_mtrlware(scid,outwareid,outwaremx[i].printid,outwaremx[i].mtrlwareid,& outwaremx[i].mtrlid,outwaremx[i].mtrlcode,storageid,outwaremx[i].plancode,outwaremx[i].status,& 0 - outwaremx[i].qty,0 - outwaremx[i].uqty,outwaremx[i].costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,outwaremx[i].mtrlcuscode,outwaremx[i].Location,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid, 0 - outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uof_p_barcode(0,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_task Destroy uo_in Destroy uo_out Destroy uo_pro RETURN rslt end function public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,cnt = 0,i Long chc Long rst_outwareid // Long rst_inwareid // Long ll_i,ll_j,ll_k Int li_ifpack,li_ifunit,li_ifpackpro Int li_ifpackcnt,li_ifpackprocnt Decimal ld_rate,ld_uqty,ld_rate_buy Decimal ld_fprice,ld_uprice String ls_uunit,ls_unit_buy,ls_unit Long ll_storageid_arr[] Long ll_outwareid_out IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction IF uo_option_confirmaudit_sale = -1000 THEN rslt = 0 arg_msg = '选项:[025]销售单先确认后审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_outware_saleout = -1000 THEN rslt = 0 arg_msg = '选项:[147]使用销售出仓单,读取初始默认值失败,操作取消!' GOTO ext END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction uo_owegood uo_owe uo_owe = Create uo_owegood IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据' GOTO ext END IF END IF // IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF IF uo_option_confirmaudit_sale = 1 THEN IF priceflag = 0 THEN rslt = 0 arg_msg = "销售单要确认后才能审核" GOTO ext END IF END IF UPDATE u_outware SET Auditingrep = :publ_operator, Auditingdate = getdate(), flag = 1 WHERE u_outware.outwareid = :outwareid AND flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF uo_inware uo_in uo_outware uo_out uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF relid = 1 THEN IF uo_out.newbegin(scid,22,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = outwareid uo_out.outdate = outdate uo_out.outrep = publ_operator uo_out.part = outwarecode uo_out.dscrp = '' uo_out.cusname = '欠货终止出仓单' uo_out.storageid = storageid FOR i = 1 To it_mxbt IF uo_out.acceptmx(outwaremx[i].mtrlwareid,& 0 - outwaremx[i].qty,& outwaremx[i].cost,& 1,'',i,arg_msg,0,0,0,0,'',0,0,outwaremx[i].unit,0 - outwaremx[i].uqty,outwaremx[i].rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_out.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ll_outwareid_out = uo_out.outwareid //2.原事务审核出仓单 IF uo_out.getinfo(scid,ll_outwareid_out,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF FOR i = 1 To it_mxbt Decimal ld_ref_costamt IF relid = 0 THEN If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF relid = 1 THEN If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_owe.addstopqty(outwaremx[i].relid,outwaremx[i].relprintid,0 - outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_owe.tryfinish(outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF p_update_cost(outwaremx[i].mtrlwareid,outwaremx[i].mtrlcode,& outwaremx[i].qty,outwaremx[i].printid,ld_ref_costamt,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_inout_procedure = 0 THEN IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, outwaremx[i].qty,outwaremx[i].uqty, ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].mtrlcuscode,& outwaremx[i].Location,outwaremx[i].ifvqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_outware_update_mtrlware(scid,outwareid,outwaremx[i].printid,outwaremx[i].mtrlwareid,& outwaremx[i].mtrlid,outwaremx[i].mtrlcode,storageid,outwaremx[i].plancode,outwaremx[i].status,& outwaremx[i].qty,outwaremx[i].uqty,ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,outwaremx[i].mtrlcuscode,outwaremx[i].Location,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF NEXT IF uo_option_inout_type <> 0 And uo_option_outware_saleout = 0 THEN cnt = 1 FOR ll_i = 1 To it_mxbt_mx IF ll_i = 1 THEN ll_storageid_arr[cnt] = outwaremx_mx[ll_i].storageid GOTO _next END IF FOR ll_j = 1 To cnt IF ll_storageid_arr[ll_j] = outwaremx_mx[ll_i].storageid THEN GOTO _next END IF NEXT cnt++ ll_storageid_arr[cnt] = outwaremx_mx[ll_i].storageid _next: NEXT FOR ll_i = 1 To cnt IF uo_out.newbegin(scid,21,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = outwareid uo_out.outdate = outdate uo_out.outrep = outrep uo_out.part = outwarecode uo_out.dscrp = dscrp uo_out.cusname = '包件明细自动出仓' uo_out.storageid = ll_storageid_arr[ll_i] chc = 0 FOR i = 1 To it_mxbt_mx IF outwaremx_mx[i].storageid <> ll_storageid_arr[ll_i] THEN CONTINUE SELECT ifpack,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpack,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx_mx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx_mx[i].qty ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx_mx[i].qty /ld_rate_buy END IF IF uo_out.acceptmx(outwaremx_mx[i].mtrlwareid,& outwaremx_mx[i].qty,ld_fprice,1,& outwaremx_mx[i].mxdscrp,chc,arg_msg,0,0,outwaremx_mx[i].printid,0,'',0,outwaremx_mx[i].mxprintid,& ls_uunit,ld_uqty,ld_rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_out.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_outwareid = uo_out.outwareid //2.原事务审核出仓单 IF uo_out.getinfo(scid,rst_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_in.newbegin(scid,23,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = outwareid uo_in.indate = outdate uo_in.inrep = outrep uo_in.part = outwarecode uo_in.dscrp = dscrp uo_in.sptname = '包件自动进仓' uo_in.storageid = storageid chc = 0 FOR i = 1 To it_mxbt SELECT ifpackpro,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpackpro,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF li_ifpackpro = 1 THEN chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx[i].qty ld_uprice = ld_fprice ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx[i].qty /ld_rate_buy ld_uprice = ld_fprice * ld_rate END IF IF uo_in.acceptmx(chc,& outwaremx[i].mtrlid,& outwaremx[i].mtrlcode,& outwaremx[i].plancode,& outwaremx[i].status,& ld_uqty,& ld_uprice,& 1,& outwaremx[i].mxdscrp,& arg_msg,& 0,0,0,outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].sptid,ls_uunit,ld_rate,& outwaremx[i].qty,0,0,'','',0,0,& outwaremx[i].mtrlcuscode,outwaremx[i].Location,& ld_uqty,& 0) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_inwareid = uo_in.inwareid //4.原事务审核进仓单 IF uo_in.getinfo(scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // END IF END IF Long ll_printid_arr[],ll_mtrlwareid_arr[],ll_mtrlid_arr[] String ls_status_arr[],ls_woodcode_arr[],ls_pcode_arr[] Decimal ld_qty_arr[] Long ll_cnt = 1 Long ll_printid Decimal ld_maxqty Long ll_mtrlid Int li_outtype String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] Decimal ld_Sonscale[] Long ll_SonMtrlid[] Long it_mxt = 1 String ls_status_find,ls_woodcode_find,ls_pcode_find String ls_status,ls_woodcode,ls_pcode Decimal ld_pfqty IF uo_option_outware_saleout = 1 THEN DECLARE cur_mx CURSOR FOR SELECT u_outwaremx.printid, u_outwaremx.mtrlwareid, u_outwaremx.mtrlid, u_outwaremx.status, u_outwaremx.woodcode, u_outwaremx.pcode, u_outwaremx.qty FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE u_outware.relid = :outwareid AND u_outware.scid = :scid AND u_outware.billtype = 21 Using commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :ll_printid_arr[ll_cnt],:ll_mtrlwareid_arr[ll_cnt],:ll_mtrlid_arr[ll_cnt], :ls_status_arr[ll_cnt],:ls_woodcode_arr[ll_cnt],:ls_pcode_arr[ll_cnt],:ld_qty_arr[ll_cnt]; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ FETCH cur_mx INTO :ll_printid_arr[ll_cnt],:ll_mtrlwareid_arr[ll_cnt],:ll_mtrlid_arr[ll_cnt], :ls_status_arr[ll_cnt],:ls_woodcode_arr[ll_cnt],:ls_pcode_arr[ll_cnt],:ld_qty_arr[ll_cnt]; LOOP CLOSE cur_mx; ll_cnt = ll_cnt - 1 FOR ll_i = 1 To it_mxbt ld_maxqty = 0 it_mxt = 1 ll_printid = outwaremx[ll_i].printid ll_mtrlid = outwaremx[ll_i].mtrlid ls_status = outwaremx[ll_i].status ls_woodcode = outwaremx[ll_i].woodcode ls_pcode = outwaremx[ll_i].pcode SELECT outtype,ifpackpro INTO :li_outtype,:li_ifpackpro FROM u_mtrldef Where mtrlid = :ll_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询产品出仓类型失败' rslt = 0 GOTO ext END IF IF li_outtype = 0 THEN FOR ll_j = 1 To ll_cnt IF ll_mtrlwareid_arr[ll_j] = 0 THEN CONTINUE IF ll_printid_arr[ll_j] = ll_printid THEN ld_maxqty = ld_qty_arr[ll_j] EXIT END IF NEXT UPDATE u_outwaremx SET qty = :ld_maxqty WHERE outwareid = :outwareid AND scid = :scid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新实发数失败' GOTO ext END IF ELSE DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype, u_prdpf.Sonscale FROM u_PrdPF,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :ll_mtrlid ) AND ( u_mtrl_pf.ifdi = 1 AND :li_ifpackpro = 0 Or u_mtrl_pf.ifdft = 1 And :li_ifpackpro = 1 ); OPEN cur_pf; FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; FOR ll_k = 1 To it_mxt IF li_ifover[ll_k] = 1 THEN CHOOSE CASE li_dipztype[ll_k] CASE 0 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = '' CASE 1 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = '' CASE 2 ls_status_find = '' ls_woodcode_find = '' ls_pcode_find = ls_pcode CASE 3 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = '' CASE 4 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode CASE 5 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = ls_pcode CASE 6 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode END CHOOSE ELSE ls_status_find = ls_pf_status[ll_k] ls_woodcode_find = ls_pf_woodcode[ll_k] ls_pcode_find = ls_pf_pcode[ll_k] END IF ls_status_find = Trim(ls_status_find) ls_woodcode_find = Trim(ls_woodcode_find) ls_pcode_find = Trim(ls_pcode_find) ld_pfqty = 0 FOR ll_j = 1 To ll_cnt IF ll_mtrlwareid_arr[ll_j] = 0 THEN CONTINUE IF ll_printid_arr[ll_j] = ll_printid And & ll_mtrlid_arr[ll_j] = ll_SonMtrlid[ll_k] And & ls_status_arr[ll_j] = ls_status_find And & ls_woodcode_arr[ll_j] = ls_woodcode_find And & ls_pcode_arr[ll_j] = ls_pcode_find THEN ld_pfqty = ld_pfqty + ld_qty_arr[ll_j] / ld_Sonscale[ll_k] END IF NEXT IF thflag = 0 THEN IF ld_pfqty > ld_maxqty THEN ld_maxqty = ld_pfqty ELSE IF ld_pfqty < ld_maxqty THEN ld_maxqty = ld_pfqty END IF NEXT UPDATE u_outwaremx SET qty = :ld_maxqty WHERE outwareid = :outwareid AND scid = :scid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新实发数失败' GOTO ext END IF END IF outwaremx[ll_i].qty = ld_maxqty NEXT IF uo_in.newbegin(scid,23,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = outwareid uo_in.indate = outdate uo_in.inrep = outrep uo_in.part = outwarecode uo_in.dscrp = dscrp uo_in.sptname = '包件自动进仓' uo_in.storageid = storageid chc = 0 FOR i = 1 To it_mxbt SELECT ifpackpro,ifunit,unit,rate_buy,unit_buy,planprice INTO :li_ifpackpro,:li_ifunit,:ls_unit,:ld_rate_buy,:ls_unit_buy,:ld_fprice FROM u_mtrldef Where mtrlid = :outwaremx[i].mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询应发明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF chc++ IF li_ifunit = 0 THEN ls_uunit = ls_unit ld_rate = 1 ld_uqty = outwaremx[i].qty ld_uprice = ld_fprice ELSE IF ld_rate_buy = 0 THEN arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查' rslt = 0 GOTO ext END IF ls_uunit = ls_unit_buy ld_rate = ld_rate_buy ld_uqty = outwaremx[i].qty /ld_rate_buy ld_uprice = ld_fprice * ld_rate END IF IF ld_uqty <> 0 Or outwaremx[i].qty <> 0 THEN IF uo_in.acceptmx(chc,& outwaremx[i].mtrlid,& outwaremx[i].mtrlcode,& outwaremx[i].plancode,& outwaremx[i].status,& ld_uqty,& ld_uprice,& 1,& outwaremx[i].mxdscrp,& arg_msg,& 0,0,0,outwaremx[i].woodcode,outwaremx[i].pcode,outwaremx[i].sptid,ls_uunit,ld_rate,& outwaremx[i].qty,0,0,'','',0,0,& outwaremx[i].mtrlcuscode,outwaremx[i].Location,& ld_uqty,& 0) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_inwareid = uo_in.inwareid //4.原事务审核进仓单 IF uo_in.getinfo(scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uof_p_barcode(1,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_pro Destroy uo_task Destroy uo_in Destroy uo_out Destroy uo_owe RETURN rslt end function public function integer c_auditing_th (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Long ls_newid DateTime null_dt Long ll_inwareid_rel,ll_outwareid_rel String ls_inwarecode_rel,ls_outwarecode_rel String ls_outwarecode_arr[] Long ll_outwareid[] Long ll_itmx = 1,ll_i Long ll_outwareid_out IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_outware_saleout = -1000 THEN rslt = 0 arg_msg = '选项:[147]使用销售出仓单,读取初始默认值失败,操作取消!' GOTO ext END IF SetNull(null_dt) uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction uo_inware uo_in uo_outware uo_out uo_owegood uo_owe uo_owe = Create uo_owegood uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据' GOTO ext END IF END IF // IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已经过财务审核" GOTO ext END IF IF balcflag = 1 THEN rslt = 0 arg_msg = "单据已经日结,不能撤审" GOTO ext END IF String ls_owecode Int li_oweflag Long ll_owebillid cnt = 0 SELECT count(*) INTO :cnt FROM u_owegood WHERE scid = :scid And relid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致查询是否存在相关欠货单操作失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 1 THEN rslt = 0 arg_msg = '不合理的欠货单数量(存在多张相关欠货单),请检查' GOTO ext ELSEIF cnt = 1 THEN SELECT billid,billcode ,flag INTO :ll_owebillid,:ls_owecode,:li_oweflag FROM u_owegood WHERE scid = :scid And relid = :outwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致查询\相关欠货单信息操作失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF li_oweflag <> 0 THEN rslt = 0 arg_msg = '相关欠货单:'+ls_owecode+' 已在进行或完成,不能撤审销售发货单,请检查' GOTO ext END IF DELETE FROM u_owegoodmx Where billid = :ll_owebillid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关欠货单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_owegood WHERE billid = :ll_owebillid And flag = 0; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关欠货单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF UPDATE u_outware SET Auditingrep = '', Auditingdate = :null_dt, flag = 0 WHERE u_outware.outwareid = :outwareid AND flag = 1 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_inout_type <> 0 And uo_option_outware_saleout = 0 THEN SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT inwareid,inwarecode INTO :ll_inwareid_rel,:ls_inwarecode_rel FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_in.getinfo(scid,ll_inwareid_rel,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid_rel,arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF END IF DECLARE cur_mx CURSOR FOR SELECT outwareid,outwarecode FROM u_outware WHERE billtype = 21 AND relid = :outwareid And scid = :scid Using commit_transaction; OPEN cur_mx; FETCH cur_mx Into :ll_outwareid[ll_itmx],:ls_outwarecode_arr[ll_itmx]; DO WHILE commit_transaction.SQLCode = 0 ll_itmx++ FETCH cur_mx Into :ll_outwareid[ll_itmx],:ls_outwarecode_arr[ll_itmx]; LOOP ll_itmx = ll_itmx - 1 CLOSE cur_mx; FOR ll_i = 1 To ll_itmx IF uo_out.getinfo(scid,ll_outwareid[ll_i],arg_msg) = 0 THEN rslt = 0 arg_msg = '查询相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 arg_msg = '撤审相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.del(scid,ll_outwareid[ll_i],0,arg_msg,False) = 0 THEN arg_msg = '相关出仓单:'+ls_outwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF IF uo_option_outware_saleout = 1 THEN SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT inwareid,inwarecode INTO :ll_inwareid_rel,:ls_inwarecode_rel FROM u_inware WHERE scid = :scid AND relid = :outwareid And billtype = 23; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF uo_in.getinfo(scid,ll_inwareid_rel,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid_rel,arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF END IF DECLARE cur_mx_rel CURSOR FOR SELECT outwareid FROM u_outware WHERE billtype = 21 AND relid = :outwareid And scid = :scid Using commit_transaction; OPEN cur_mx_rel; FETCH cur_mx_rel Into :ll_outwareid[ll_itmx]; DO WHILE commit_transaction.SQLCode = 0 ll_itmx++ FETCH cur_mx_rel Into :ll_outwareid[ll_itmx]; LOOP ll_itmx = ll_itmx - 1 CLOSE cur_mx_rel; FOR ll_i = 1 To ll_itmx IF uo_out.getinfo(scid,ll_outwareid[ll_i],arg_msg) = 0 THEN rslt = 0 arg_msg = '查询相关出仓单失败,' + arg_msg GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 arg_msg = '撤审相关出仓单失败,' + arg_msg GOTO ext END IF NEXT END IF FOR i = 1 To it_mxbt IF sys_option_inout_procedure = 0 THEN IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, 0 - outwaremx[i].qty,0 - outwaremx[i].uqty,0 - outwaremx[i].costamt,& outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode, outwaremx[i].mtrlcuscode,& outwaremx[i].Location,outwaremx[i].ifvqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_outware_update_mtrlware(scid,outwareid,outwaremx[i].printid,outwaremx[i].mtrlwareid,& outwaremx[i].mtrlid,outwaremx[i].mtrlcode,storageid,outwaremx[i].plancode,outwaremx[i].status,& 0 - outwaremx[i].qty,0 - outwaremx[i].uqty,outwaremx[i].costamt,& outwaremx[i].planprice, outwaremx[i].sptid,outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,outwaremx[i].mtrlcuscode,outwaremx[i].Location,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF relid = 0 THEN If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,0 - outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF relid = 1 THEN If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_owe.addstopqty(outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF END IF If (billtype = 1 Or billtype = 5) And outwaremx[i].relid > 0 THEN IF uo_owe.tryfinish(outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT IF relid = 1 THEN SELECT count(*) INTO :cnt FROM u_outware WHERE scid = :scid AND relid = :outwareid And billtype = 22; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关出仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 1 THEN SELECT outwareid INTO :ll_outwareid_out FROM u_outware WHERE scid = :scid AND relid = :outwareid And billtype = 22; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关出仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_out.getinfo(scid,ll_outwareid_out,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.del(scid,ll_outwareid_out,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF uof_p_barcode(0,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_task Destroy uo_in Destroy uo_out Destroy uo_owe Destroy uo_pro RETURN rslt end function on uo_outware_sale_th.create call super::create end on on uo_outware_sale_th.destroy call super::destroy end on