$PBExportHeader$uo_inware_buy.sru forward global type uo_inware_buy from uo_inware end type end forward global type uo_inware_buy from uo_inware end type global uo_inware_buy uo_inware_buy type variables Int uo_option_buy_sptprice_sec,uo_option_check_buyin,uo_option_m_mstpay Int uo_option_buyth_use_price_update_wareamt end variables 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 secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, string arg_mtrlcuscode, string arg_location, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_ptqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_ptqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_destroy_buytask (ref string arg_msg) public function integer uof_create_buytask (ref string arg_msg) public function integer uof_chk_audit (integer arg_type, long arg_scid, long arg_inwareid, long arg_printid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_create_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg) public function integer uof_destroy_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg) public function integer uof_update_chkqty (long arg_scid, long arg_inwareid, long arg_printid, s_inwaremx s_mx, ref string arg_msg, boolean arg_ifcommit) public function integer uf_cmp_mxmx (ref string arg_msg) end prototypes public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long cnt = 0,i,j,mx_barcode_cnt,k String ls_about,ls_dscrp Long ll_billtype Long ll_balctype Long ll_sptid,ll_mtrlwareid_ref Decimal ld_saletask_notfpqty,ld_fpqty String ls_mtrlcuscode String ls_storagename Decimal ld_fprice_notax Int li_outtype,li_storagetype,li_ifvqty s_inwaremx_barcode_fp arg_s_mxbarcode_fp Long rst_outwareid // Long rst_inwareid // s_inwaremx s_mx s_outwaremx s_mx_out uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarebuy_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buy_sptprice_sec = -1000 THEN rslt = 0 arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_check_buyin = -1000 THEN rslt = 0 arg_msg = '选项:[130]采购先质检后进仓,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buyth_use_price_update_wareamt = -1000 THEN rslt = 0 arg_msg = '选项:[331]采购退货单用退货单价扣减库存金额,读取初始默认值失败,操作取消!' GOTO ext END IF uo_inware uo_in,uo_in_th uo_outware uo_out uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_in_th = Create uo_inware uo_in_th.commit_transaction = sqlca uo_in_th.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False Long arg_s_arr,ll_relbillid,ll_relprintid,ll_orderid_buytask s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction uo_ma.ib_ifinware_audit_do = True uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = commit_transaction uo_sptcheck uo_sptch uo_sptch = Create uo_sptcheck uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF inwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF 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 SELECT storagename,outtype,storagetype INTO :ls_storagename,:li_outtype,:li_storagetype 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 uo_option_inout_type = 2 And & uo_option_barcode_inwarebuy_paudit = 1 And & (li_outtype = 2 Or li_outtype = 3 ) THEN IF priceflag = 0 THEN rslt = 0 arg_msg = "单据未确认" GOTO ext END IF END IF IF li_outtype = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_inwaremx_mx_barcode WHERE u_inwaremx_mx_barcode.inwareid = :inwareid AND u_inwaremx_mx_barcode.scid = :scid AND u_inwaremx_mx_barcode.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,进仓单条码明细数量,"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '仓库设了包件出仓,但单据有条码明细,操作取消,请检查仓库的出仓模式是否设置正确' rslt = 0 GOTO ext END IF END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF IF billtype = 1 And li_outtype > 0 THEN IF thflag = 0 THEN IF uo_out.newbegin(scid,23,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = inwareid uo_out.outdate = indate uo_out.outrep = inrep uo_out.part = inwarecode uo_out.dscrp = dscrp uo_out.cusname = '收货单明细自动出仓' uo_out.storageid = storageid ELSE IF uo_in.newbegin(scid,25,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = inwareid uo_in.indate = indate uo_in.inrep = inrep uo_in.part = inwarecode uo_in.dscrp = dscrp uo_in.sptname = '退货单退货明细自动进仓' uo_in.storageid = storageid END IF //检查条码数量是否匹配 IF li_outtype = 2 Or li_outtype = 3 THEN IF uof_check_barcodeqty(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF UPDATE u_inware SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE u_inware.inwareid = :inwareid AND flag = 0 AND secflag = 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 IF billtype = 1 And thflag = 1 And li_outtype > 0 THEN FOR i = 1 To it_mxbt s_mx.printid = inwaremx[i].printid s_mx.mtrlid = inwaremx[i].mtrlid s_mx.mtrlcode = inwaremx[i].mtrlcode s_mx.plancode = inwaremx[i].plancode s_mx.status = inwaremx[i].status s_mx.uqty = (0 - inwaremx[i].qty) s_mx.enprice = inwaremx[i].fprice s_mx.rebate = 1 s_mx.mxdscrp = inwaremx[i].mxdscrp s_mx.jgprice = 0 s_mx.relid = 0 s_mx.ifrel = 0 s_mx.woodcode = inwaremx[i].woodcode s_mx.pcode = inwaremx[i].pcode s_mx.sptid = inwaremx[i].sptid s_mx.unit = inwaremx[i].unit s_mx.rate = 1 s_mx.qty = (0 - inwaremx[i].qty) s_mx.relprintid = 0 s_mx.checkqty = 0 s_mx.result = '' s_mx.waredscrp = '' s_mx.relbillid = 0 s_mx.relbillprintid = 0 s_mx.mtrlcuscode = inwaremx[i].mtrlcuscode s_mx.Location = inwaremx[i].Location s_mx.deliqty = Abs(inwaremx[i].qty) s_mx.tax = 0 IF inwaremx[i].ifpackpro = 0 THEN s_mx.ifvqty = 1 s_mx.ifnotinout = 1 ELSE s_mx.ifvqty = 0 s_mx.ifnotinout = 0 END IF IF uo_in.acceptmx(s_mx, arg_msg) = 0 THEN arg_msg = '退货单退货明细自动进仓单,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF // IF uo_in.acceptmx(inwaremx[i].printid,& // inwaremx[i].mtrlid,& // inwaremx[i].mtrlcode,& // inwaremx[i].plancode,& // inwaremx[i].status,& // (0 - inwaremx[i].qty),& // inwaremx[i].fprice,& // 1,& // inwaremx[i].mxdscrp,& // arg_msg,& // 0,0,0,inwaremx[i].woodcode,& // inwaremx[i].pcode,inwaremx[i].sptid,& // inwaremx[i].unit,1,& // (0 - inwaremx[i].qty),0,0,'','',0,0,& // inwaremx[i].mtrlcuscode,inwaremx[i].Location,& // Abs(inwaremx[i].qty),& // 0) = 0 THEN // arg_msg = '退货单退货明细自动进仓单,行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.getinfo(scid,uo_in.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 FOR i = 1 To it_mxbt IF f_power_ind(2203,sys_msg_pow) And Not sys_power_issuper THEN IF inwaremx[i].cost = 0 THEN rslt = 0 arg_msg = '采购收货单或采购退货单,行:'+String(i)+',物料编码:'+inwaremx[i].mtrlcode+',没有单价,请检查' GOTO ext END IF END IF //查询相关订单属于材料订单还是成品订单 If ( billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN SELECT u_buytask.billtype INTO :ll_billtype FROM u_buytask WHERE u_buytask.taskid = :inwaremx[i].relid And u_buytask.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '采购收货单或采购退货单,查询订单类型失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF ELSE ll_billtype = 0 END IF inwaremx[i].mxbilltype = ll_billtype //用作判断收货单明细对应的订单明细是属于那种类型的订单; uof_create_buytask 有用 //yyx20120206 IF billtype = 1 THEN IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN ll_sptid = 0 ls_mtrlcuscode = '' ELSE ll_sptid = inwaremx[i].sptid ls_mtrlcuscode = inwaremx[i].mtrlcuscode END IF //yyx20120206_end Decimal ld_cost //更新退货成本价 IF thflag = 1 THEN IF uo_option_buyth_use_price_update_wareamt = 1 THEN UPDATE u_inwaremx SET cost = :inwaremx[i].price WHERE scid = :scid AND inwareid = :inwareid And printid = :inwaremx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '收货明细行:'+String(i)+','+ '更新退货成本价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ld_cost = inwaremx[i].price ELSE IF p_update_th_cost(inwaremx[i].printid,& inwaremx[i].mtrlcode,& inwaremx[i].mtrlid,& inwaremx[i].status,& inwaremx[i].woodcode,& inwaremx[i].pcode,& inwaremx[i].plancode,& inwaremx[i].dxflag,& ll_sptid,& ls_mtrlcuscode,& inwaremx[i].Location,& ld_cost,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '收货明细行:'+String(i)+','+arg_msg GOTO ext END IF END IF ELSE ld_cost = inwaremx[i].cost END IF IF sys_option_inout_procedure = 0 THEN IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].qty,inwaremx[i].uqty,ld_cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,& inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN arg_msg = '更新收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,& inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,inwaremx[i].qty,& inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,& inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF If ( billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN IF thflag = 0 Or (thflag = 1 And inwaremx[i].Thptype = 1) THEN //正常收货, 或者 退货,更新订单 IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,& inwaremx[i].uqty,arg_msg,False) <> 1 THEN arg_msg = '更新收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF rslt = 1 And Trim(arg_msg) <> '' THEN f_setsysoplog('采购收货单','采购收货单审核,id:'+String(inwareid)+',单号:'+inwarecode+','+arg_msg,arg_msg,False) END IF // 在 addmxcmpl 中处理 // IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN // arg_msg = '更新收货明细行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF ELSEIF inwaremx[i].Thptype = 0 THEN //不需处理 // Nothing to Done ELSEIF inwaremx[i].Thptype = 2 THEN //新建订单 //单独函数处理 uof_create_buytask END IF END IF IF uo_option_buy_sptprice_sec = 0 THEN ld_fprice_notax = inwaremx[i].fprice / ( 1 + inwaremx[i].tax) IF uo_sptprice.uof_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,'',inwareid,inwaremx[i].enprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].fprice,ld_fprice_notax,indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,0,moneyid,indate,DateTime(9999-01-01),False,arg_msg) = 0 THEN arg_msg = '更新收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF //更新质检已进仓数 IF uo_option_check_buyin = 1 And billtype = 1 And inwaremx[i].relbillid > 0 THEN IF uo_sptch.uof_add_inqty(inwaremx[i].relbillid,inwaremx[i].relbillprintid,inwaremx[i].uqty,arg_msg,False) = 0 THEN arg_msg = '更新收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF //取库存信息yyx2012-09-25 ll_mtrlwareid_ref = 0 IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,& inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,& inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN arg_msg = '取库存id,收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,inwareid,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '更新明细库存id,收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //yyx20100814 //库存分配,仓库非包件或非条码出仓,用收货明细分配 IF billtype = 1 And li_storagetype = 1 And thflag = 0 And li_outtype = 0 THEN //取分配计划 arg_s_arr = 0 arg_s_ap = arg_s_ap_null IF inwaremx[i].iffp = 0 THEN //旧模式 IF billtype = 1 And ll_billtype = 1 THEN //成品采购订单模式 SELECT u_buyTaskMx.orderid, u_buyTaskMx.taskmxprintid INTO :ll_relbillid, :ll_relprintid FROM u_buyTaskMx WHERE u_buyTaskMx.scid = :scid AND u_buyTaskMx.taskid = :inwaremx[i].relid AND u_buyTaskMx.printid = :inwaremx[i].relprintid And u_buyTaskMx.orderid > 0 Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '收货明细行:'+String(i)+'查询成品采购订单相关销售订单资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_relbillid = 0 ll_relprintid = 0 END IF IF ll_relbillid > 0 THEN //成品申购单找到销售订单 arg_s_arr++ arg_s_ap.planid[arg_s_arr] = 0 arg_s_ap.assigntype[arg_s_arr] = 1 arg_s_ap.scid[arg_s_arr] = scid arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref arg_s_ap.relbillid[arg_s_arr] = ll_relbillid arg_s_ap.relprintid[arg_s_arr] = ll_relprintid arg_s_ap.fpgrade[arg_s_arr] = 2 arg_s_ap.notassignqty[arg_s_arr] = inwaremx[i].qty ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 1 And ll_billtype = 0 THEN //材料采购订单模式 SELECT u_buyTaskMx.orderid INTO :ll_orderid_buytask FROM u_buyTaskMx WHERE u_buyTaskMx.scid = :scid AND u_buyTaskMx.taskid = :inwaremx[i].relid AND u_buyTaskMx.printid = :inwaremx[i].relprintid And u_buyTaskMx.orderid > 0 Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '收货明细行:'+String(i)+'查询材料采购订单相关主生产计划资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_orderid_buytask = 0 END IF IF ll_orderid_buytask = 0 THEN ll_relbillid = 0 ll_relprintid = 0 ELSE SELECT u_order_ml.taskid, u_order_ml.taskmxid INTO :ll_relbillid, :ll_relprintid FROM u_order_ml WHERE u_order_ml.scid = :scid And u_order_ml.orderid = :ll_orderid_buytask Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '收货明细行:'+String(i)+'查询材料采购订单相关主生产计划销售订单资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_relbillid = 0 ll_relprintid = 0 END IF END IF IF ll_relbillid > 0 THEN //找到销售订单 arg_s_arr++ arg_s_ap.planid[arg_s_arr] = 0 arg_s_ap.assigntype[arg_s_arr] = 1 arg_s_ap.scid[arg_s_arr] = scid arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref arg_s_ap.relbillid[arg_s_arr] = ll_relbillid arg_s_ap.relprintid[arg_s_arr] = ll_relprintid arg_s_ap.fpgrade[arg_s_arr] = 2 arg_s_ap.notassignqty[arg_s_arr] = inwaremx[i].qty ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF ELSE //新库存分配模式 IF inwaremx[i].relid > 0 And inwaremx[i].relprintid > 0 THEN IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,2,inwaremx[i].relid,inwaremx[i].relprintid,& inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF END IF FOR j = 1 To UpperBound(arg_s_ap.planid) //检查是否超数量yyx20120424 ld_fpqty = 0 IF arg_s_ap.assigntype[j] = 1 THEN ld_saletask_notfpqty = 0 IF f_ref_saletask_notfpqty(scid,arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx[i].mtrlid,inwaremx[i].status,ld_saletask_notfpqty,arg_msg) = 0 THEN arg_msg = '收货明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF arg_s_ap.notassignqty[j] > ld_saletask_notfpqty THEN ld_fpqty = ld_saletask_notfpqty ELSE ld_fpqty = arg_s_ap.notassignqty[j] END IF ELSE ld_fpqty = arg_s_ap.notassignqty[j] END IF ////////////////////////////// // IF ld_fpqty > 0 THEN IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],& arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],& ld_fpqty,inwaremx[i].cost,ls_mtrlcuscode,inwaremx[i].mtrlwaredscrp,& inwarecode,inwaremx[i].printid,arg_s_ap.fpgrade[j],publ_operator,arg_msg,False) = 0 THEN arg_msg = '收货明细行:'+String(i)+',库存分配失败,'+arg_msg rslt = 0 GOTO ext END IF END IF IF arg_s_ap.planid[j] > 0 THEN IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],& inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '收货明细行:'+String(i)+',更新分配计划已分配数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF //yyx20100814_end If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++ //自动出仓 IF billtype = 1 And li_outtype > 0 THEN IF thflag = 0 THEN //取库存信息 ll_mtrlwareid_ref = 0 IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,& inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,& inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN arg_msg = '收货单收货明细自动出仓单,取库存id,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF s_mx_out.mtrlwareid = ll_mtrlwareid_ref s_mx_out.qty = inwaremx[i].qty s_mx_out.fprice = inwaremx[i].fprice s_mx_out.rebate = 1 s_mx_out.mxdscrp = inwaremx[i].mxdscrp s_mx_out.printid = inwaremx[i].printid s_mx_out.ifrel = 0 s_mx_out.relid = 0 s_mx_out.olmtrlid = 0 s_mx_out.packqty = 0 s_mx_out.outtype = '' s_mx_out.planqty = 0 s_mx_out.relprintid = 0 s_mx_out.unit = inwaremx[i].unit s_mx_out.uqty = inwaremx[i].qty s_mx_out.rate = 1 s_mx_out.pricetype = '' s_mx_out.formula = '' s_mx_out.saleoutid = 0 s_mx_out.saleoutprintid = 0 s_mx_out.mxdscrp2 = '' s_mx_out.net_weight = 0 s_mx_out.gross_weight = 0 s_mx_out.cubage = 0 s_mx_out.taxrate = 0 s_mx_out.priceformula = '' s_mx_out.qtyformula = '' IF inwaremx[i].ifpackpro = 0 THEN s_mx_out.ifvqty = 1 s_mx_out.ifnotinout = 1 ELSE s_mx_out.ifvqty = 0 s_mx_out.ifnotinout = 0 END IF IF uo_out.acceptmx(s_mx_out,arg_msg) = 0 THEN arg_msg = '收货单收货明细自动出仓单,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF // IF uo_out.acceptmx(ll_mtrlwareid_ref,& // inwaremx[i].qty,inwaremx[i].fprice,1,& // inwaremx[i].mxdscrp,inwaremx[i].printid,arg_msg,0,0,0,0,'',0,0,& // inwaremx[i].unit,inwaremx[i].qty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN // arg_msg = '收货单收货明细自动出仓单,行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF END IF END IF NEXT IF thflag = 1 THEN //退货处理 为新建订单的, 生成一张订单 IF uof_create_buytask(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF billtype = 1 And li_outtype > 0 THEN IF thflag = 0 THEN IF uo_out.Save(False,arg_msg) = 0 THEN arg_msg = '收货单明细自动出仓单,'+arg_msg rslt = 0 GOTO ext END IF //2.原事务审核出仓单 IF uo_out.getinfo(scid,uo_out.outwareid,arg_msg) = 0 THEN arg_msg = '收货单明细自动出仓单,'+arg_msg rslt = 0 GOTO ext END IF IF uo_out.auditing(False,arg_msg) = 0 THEN arg_msg = '收货单明细自动出仓单,'+arg_msg rslt = 0 GOTO ext END IF //进仓 IF uo_in.newbegin(scid,25,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = inwareid uo_in.indate = indate uo_in.inrep = inrep uo_in.part = inwarecode uo_in.dscrp = dscrp uo_in.sptname = '收货单包件自动进仓' uo_in.storageid = storageid li_ifvqty = 0 FOR i = 1 To it_mxbt_mx FOR k = 1 To it_mxbt IF inwaremx[k].printid = inwaremx_mx[i].printid THEN IF inwaremx[k].mtrlid = inwaremx_mx[i].mtrlid And & inwaremx[k].status = inwaremx_mx[i].status And & inwaremx[k].woodcode = inwaremx_mx[i].woodcode And & inwaremx[k].pcode = inwaremx_mx[i].pcode THEN li_ifvqty = 1 ELSE li_ifvqty = 0 END IF EXIT END IF NEXT s_mx.printid = inwaremx_mx[i].mxprintid s_mx.mtrlid = inwaremx_mx[i].mtrlid s_mx.mtrlcode = inwaremx_mx[i].mtrlcode s_mx.plancode = inwaremx_mx[i].plancode s_mx.status = inwaremx_mx[i].status s_mx.uqty = inwaremx_mx[i].qty s_mx.enprice = inwaremx_mx[i].fprice s_mx.rebate = 1 s_mx.mxdscrp = inwaremx_mx[i].mxdscrp s_mx.jgprice = 0 s_mx.relid = 0 s_mx.ifrel = 0 s_mx.woodcode = inwaremx_mx[i].woodcode s_mx.pcode = inwaremx_mx[i].pcode s_mx.sptid = inwaremx_mx[i].sptid s_mx.unit = inwaremx_mx[i].unit s_mx.rate = 1 s_mx.qty = inwaremx_mx[i].qty s_mx.relprintid = 0 s_mx.checkqty = 0 s_mx.result = '' s_mx.waredscrp = '' s_mx.relbillid = 0 s_mx.relbillprintid = 0 s_mx.mtrlcuscode = inwaremx_mx[i].mtrlcuscode s_mx.Location = inwaremx_mx[i].Location s_mx.deliqty = inwaremx_mx[i].qty s_mx.tax = 0 s_mx.ifvqty = li_ifvqty s_mx.ifnotinout = inwaremx_mx[i].ifnotinout IF uo_in.acceptmx(s_mx, arg_msg) = 0 THEN arg_msg = '收货单包件自动进仓单,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF // IF uo_in.acceptmx(inwaremx_mx[i].mxprintid,& // inwaremx_mx[i].mtrlid,& // inwaremx_mx[i].mtrlcode,& // inwaremx_mx[i].plancode,& // inwaremx_mx[i].status,& // inwaremx_mx[i].qty,& // inwaremx_mx[i].fprice,& // 1,& // inwaremx_mx[i].mxdscrp,& // arg_msg,& // 0,0,0,inwaremx_mx[i].woodcode,& // inwaremx_mx[i].pcode,inwaremx_mx[i].sptid,& // inwaremx_mx[i].unit,1,& // inwaremx_mx[i].qty,0,0,'','',0,0,& // inwaremx_mx[i].mtrlcuscode,inwaremx_mx[i].Location,& // inwaremx_mx[i].qty,& // 0) = 0 THEN // arg_msg = '收货单包件自动进仓单,行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF NEXT IF uo_in.Save(False,arg_msg) = 0 THEN arg_msg = '收货单包件自动进仓单,'+arg_msg rslt = 0 GOTO ext END IF IF uo_in.getinfo(scid,uo_in.inwareid,arg_msg) = 0 THEN arg_msg = '收货单包件自动进仓单,'+arg_msg rslt = 0 GOTO ext END IF IF uo_in.auditing(False,arg_msg) = 0 THEN arg_msg = '收货单包件自动进仓单,'+arg_msg rslt = 0 GOTO ext END IF ELSE //进仓 IF uo_in_th.newbegin(scid,25,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in_th.relid = inwareid uo_in_th.indate = indate uo_in_th.inrep = inrep uo_in_th.part = inwarecode uo_in_th.dscrp = dscrp uo_in_th.sptname = '退货单包件自动负数进仓' uo_in_th.storageid = storageid FOR i = 1 To it_mxbt_mx FOR k = 1 To it_mxbt IF inwaremx[k].printid = inwaremx_mx[i].printid THEN IF inwaremx[k].mtrlid = inwaremx_mx[i].mtrlid And & inwaremx[k].status = inwaremx_mx[i].status And & inwaremx[k].woodcode = inwaremx_mx[i].woodcode And & inwaremx[k].pcode = inwaremx_mx[i].pcode THEN li_ifvqty = 1 ELSE li_ifvqty = 0 END IF EXIT END IF NEXT s_mx.printid = inwaremx_mx[i].mxprintid s_mx.mtrlid = inwaremx_mx[i].mtrlid s_mx.mtrlcode = inwaremx_mx[i].mtrlcode s_mx.plancode = inwaremx_mx[i].plancode s_mx.status = inwaremx_mx[i].status s_mx.uqty = inwaremx_mx[i].qty s_mx.enprice = inwaremx_mx[i].fprice s_mx.rebate = 1 s_mx.mxdscrp = inwaremx_mx[i].mxdscrp s_mx.jgprice = 0 s_mx.relid = 0 s_mx.ifrel = 0 s_mx.woodcode = inwaremx_mx[i].woodcode s_mx.pcode = inwaremx_mx[i].pcode s_mx.sptid = inwaremx_mx[i].sptid s_mx.unit = inwaremx_mx[i].unit s_mx.rate = 1 s_mx.qty = inwaremx_mx[i].qty s_mx.relprintid = 0 s_mx.checkqty = 0 s_mx.result = '' s_mx.waredscrp = '' s_mx.relbillid = 0 s_mx.relbillprintid = 0 s_mx.mtrlcuscode = inwaremx_mx[i].mtrlcuscode s_mx.Location = inwaremx_mx[i].Location s_mx.deliqty = inwaremx_mx[i].qty s_mx.ifnotinout = inwaremx_mx[i].ifnotinout s_mx.tax = 0 s_mx.ifvqty = li_ifvqty IF uo_in_th.acceptmx(s_mx, arg_msg) = 0 THEN arg_msg = '退货单包件自动负数进仓单,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF // IF uo_in_th.acceptmx(inwaremx_mx[i].mxprintid,& // inwaremx_mx[i].mtrlid,& // inwaremx_mx[i].mtrlcode,& // inwaremx_mx[i].plancode,& // inwaremx_mx[i].status,& // inwaremx_mx[i].qty,& // inwaremx_mx[i].fprice,& // 1,& // inwaremx_mx[i].mxdscrp,& // arg_msg,& // 0,0,0,inwaremx_mx[i].woodcode,& // inwaremx_mx[i].pcode,inwaremx_mx[i].sptid,& // inwaremx_mx[i].unit,1,& // inwaremx_mx[i].qty,0,0,'','',0,0,& // inwaremx_mx[i].mtrlcuscode,inwaremx_mx[i].Location,& // inwaremx_mx[i].qty,& // 0) = 0 THEN // arg_msg = '退货单包件自动负数进仓单,行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF NEXT IF uo_in_th.Save(False,arg_msg) = 0 THEN arg_msg = '退货单包件自动负数进仓单,'+ arg_msg rslt = 0 GOTO ext END IF IF uo_in_th.getinfo(scid,uo_in_th.inwareid,arg_msg) = 0 THEN arg_msg = '退货单包件自动负数进仓单,'+ arg_msg rslt = 0 GOTO ext END IF IF uo_in_th.auditing(False,arg_msg) = 0 THEN arg_msg = '退货单包件自动负数进仓单,'+ arg_msg rslt = 0 GOTO ext END IF END IF END IF IF billtype = 27 THEN FOR i = 1 To it_mxbt_mx IF uof_update_ptqty(scid,& inwaremx_mx[i].ptinwareid,& inwaremx_mx[i].ptprintid,& inwaremx_mx[i].qty,arg_msg,False) = 0 THEN arg_msg = '单据配套明细,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF //更新条码 IF billtype = 1 And ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN IF uof_p_barcode(1,arg_msg,arg_s_mxbarcode_fp) = 0 THEN rslt = 0 GOTO ext END IF END IF //yyx20120215 //库存分配,仓库包件或条码出仓,用包件明细分配 Long ll_inwaremx_relid,ll_inwaremx_relprintid Long ll_orderid Decimal ld_mx_cost String ls_mx_mtrlwaredscrp IF billtype = 1 And li_storagetype = 1 And thflag = 0 And li_outtype > 0 THEN FOR i = 1 To it_mxbt_mx ll_inwaremx_relid = 0 SELECT relid,relprintid,cost,waredscrp INTO :ll_inwaremx_relid,:ll_inwaremx_relprintid,:ld_mx_cost,:ls_mx_mtrlwaredscrp FROM u_inwaremx WHERE scid = :scid AND inwareid = :inwareid And printid = :inwaremx_mx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询对应采购订单明细失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ll_inwaremx_relid > 0 THEN SELECT u_buytask.billtype INTO :ll_billtype FROM u_buytask WHERE u_buytask.taskid = :ll_inwaremx_relid And u_buytask.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询对应采购订单的订单类型失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF ELSE ll_billtype = 0 END IF //取库存信息 ll_mtrlwareid_ref = 0 IF inwaremx_mx[i].ifpack <> 2 And inwaremx_mx[i].ifpackpro <> 2 And inwaremx_mx[i].ifpackpro <> 4 THEN ll_sptid = 0 ls_mtrlcuscode = '' ELSE ll_sptid = inwaremx_mx[i].sptid ls_mtrlcuscode = inwaremx_mx[i].mtrlcuscode END IF IF uof_ref_mtrlwareid(scid,storageid,inwaremx_mx[i].mtrlid,& inwaremx_mx[i].status,inwaremx_mx[i].woodcode,inwaremx_mx[i].pcode,inwaremx_mx[i].plancode,& inwaremx_mx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询库存id失败,'+arg_msg rslt = 0 GOTO ext END IF //yyx2012-9-29返回计算可装数库存id数组 // If ( inwaremx_mx[i].ifpack = 1 Or inwaremx_mx[i].ifpack = 2 Or inwaremx_mx[i].ifpackpro = 3 Or inwaremx_mx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN // IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx_mx[i].mtrlid,inwaremx_mx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF // //取分配计划 arg_s_arr = 0 arg_s_ap = arg_s_ap_null IF inwaremx_mx[i].iffp = 0 THEN //旧模式 IF billtype = 1 And ll_billtype = 1 THEN SELECT u_buyTaskMx.orderid, u_buyTaskMx.taskmxprintid INTO :ll_relbillid, :ll_relprintid FROM u_buyTaskMx WHERE u_buyTaskMx.scid = :scid AND u_buyTaskMx.taskid = :ll_inwaremx_relid AND u_buyTaskMx.printid = :ll_inwaremx_relprintid And u_buyTaskMx.orderid > 0 Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询成品订单相关销售订单资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_relbillid = 0 ll_relprintid = 0 END IF IF ll_relbillid > 0 THEN //成品申购单找到销售订单 arg_s_arr++ arg_s_ap.planid[arg_s_arr] = 0 arg_s_ap.assigntype[arg_s_arr] = 1 arg_s_ap.scid[arg_s_arr] = scid arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref arg_s_ap.relbillid[arg_s_arr] = ll_relbillid arg_s_ap.relprintid[arg_s_arr] = ll_relprintid arg_s_ap.fpgrade[arg_s_arr] = 2 arg_s_ap.notassignqty[arg_s_arr] = inwaremx_mx[i].qty ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 1 And ll_inwaremx_relid > 0 And ll_billtype = 0 And inwaremx_mx[i].ifpack > 0 THEN //yyx2013-8-31 //材料采购订单采购包件 SELECT u_buyTaskMx.orderid INTO :ll_orderid FROM u_buyTaskMx WHERE u_buyTaskMx.scid = :scid AND u_buyTaskMx.taskid = :ll_inwaremx_relid AND u_buyTaskMx.printid = :ll_inwaremx_relprintid And u_buyTaskMx.orderid > 0 Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询材料订单相关主生产计划资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_orderid = 0 END IF IF ll_orderid > 0 THEN SELECT u_order_ml.taskid, u_order_ml.taskmxid INTO :ll_relbillid, :ll_relprintid FROM u_order_ml WHERE u_order_ml.scid = :scid And u_order_ml.orderid = :ll_orderid Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询材料采购订单对应主生产计划相关销售订单资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_relbillid = 0 ll_relprintid = 0 END IF ELSE ll_relbillid = 0 ll_relprintid = 0 END IF IF ll_relbillid > 0 THEN //找到销售订单 arg_s_arr++ arg_s_ap.planid[arg_s_arr] = 0 arg_s_ap.assigntype[arg_s_arr] = 1 arg_s_ap.scid[arg_s_arr] = scid arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref arg_s_ap.relbillid[arg_s_arr] = ll_relbillid arg_s_ap.relprintid[arg_s_arr] = ll_relprintid arg_s_ap.fpgrade[arg_s_arr] = 2 arg_s_ap.notassignqty[arg_s_arr] = inwaremx_mx[i].qty ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF END IF ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF ELSE //新库存分配模式 IF ll_inwaremx_relid > 0 And ll_inwaremx_relprintid > 0 THEN IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,2,ll_inwaremx_relid,ll_inwaremx_relprintid,& inwaremx_mx[i].mtrlid,inwaremx_mx[i].status,inwaremx_mx[i].woodcode,inwaremx_mx[i].pcode,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF END IF FOR j = 1 To UpperBound(arg_s_ap.planid) //检查是否超数量yyx20120424 ld_fpqty = 0 IF arg_s_ap.assigntype[j] = 1 THEN ld_saletask_notfpqty = 0 IF f_ref_saletask_notfpqty(scid,arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx_mx[i].mtrlid,inwaremx_mx[i].status,ld_saletask_notfpqty,arg_msg) = 0 THEN arg_msg = '包件明细行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF arg_s_ap.notassignqty[j] > ld_saletask_notfpqty THEN ld_fpqty = ld_saletask_notfpqty ELSE ld_fpqty = arg_s_ap.notassignqty[j] END IF ELSE ld_fpqty = arg_s_ap.notassignqty[j] END IF ////////////////////////////// // IF ld_fpqty > 0 THEN IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],& arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],& ld_fpqty,ld_mx_cost,ls_mx_mtrlwaredscrp,ls_mtrlcuscode,& inwarecode,inwaremx_mx[i].printid,arg_s_ap.fpgrade[j],publ_operator,arg_msg,False) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',库存分配失败,'+arg_msg rslt = 0 GOTO ext END IF END IF IF arg_s_ap.planid[j] > 0 THEN IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],& inwarecode,inwaremx_mx[i].printid,arg_msg,False) = 0 THEN arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',更新分配计划已分配数失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT NEXT END IF //yyx20120215_end 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_sptch Destroy uo_sptprice Destroy uo_ma Destroy uo_in Destroy uo_in_th Destroy uo_out Destroy uo_pro RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0,i,j,mx_barcode_cnt Long ll_billtype Long ll_balctype Long ll_sptid String ls_mtrlcuscode String ls_storagename Int li_outtype,li_storagetype Long ll_inwareid_rel,ll_outwareid_rel String ls_inwarecode_rel,ls_outwarecode_rel Decimal ld_cost s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null s_inwaremx_assign arg_s_a,arg_s_a_null s_inwaremx_barcode_fp arg_s_mxbarcode_fp uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction uo_ma.ib_ifinware_audit_do = True uo_cmpl_packpro uo_cmpl_p uo_cmpl_p = Create uo_cmpl_packpro uo_cmpl_p.commit_transaction = commit_transaction DateTime null_dt SetNull(null_dt) String ls_mtrlname IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_buy_sptprice_sec = -1000 THEN rslt = 0 arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_check_buyin = -1000 THEN rslt = 0 arg_msg = '选项:[130]采购先质检后进仓,读取初始默认值失败,操作取消!' GOTO ext END IF uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = commit_transaction uo_sptcheck uo_sptch uo_sptch = Create uo_sptcheck uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price 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 SELECT storagename,outtype,storagetype INTO :ls_storagename,:li_outtype,:li_storagetype 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 inwareid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF balcflag = 1 THEN rslt = 0 arg_msg = "单据已经结存,不能撤审" 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 li_outtype = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_inwaremx_mx_barcode WHERE u_inwaremx_mx_barcode.inwareid = :inwareid AND u_inwaremx_mx_barcode.scid = :scid AND u_inwaremx_mx_barcode.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,进仓单条码明细数量,"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '仓库设了包件出仓,但单据有条码明细,操作取消,请检查仓库的出仓模式是否设置正确' rslt = 0 GOTO ext END IF END IF //撤审相关自动进出仓 IF billtype = 1 And li_outtype > 0 And thflag = 0 THEN //yyx_2013-5-17 //取消包件明细分配 IF li_storagetype = 1 THEN FOR i = 1 To it_mxbt_mx //取消分配 arg_s_a = arg_s_a_null IF uof_ref_assign_cancel(inwarecode,inwaremx_mx[i].printid,arg_s_a,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_a.assignid) IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],& arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT //取消分配计划 arg_s_ap = arg_s_ap_null IF uof_ref_assign_plan_cancel(inwarecode,inwaremx_mx[i].printid,arg_s_ap,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_ap.planid) IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],& inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT NEXT END IF //yyx_2013-5-17_end //取消包件明细分配 SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :inwareid And billtype = 25 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 = :inwareid And billtype = 25 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 //出仓 SELECT count(*) INTO :cnt FROM u_outware WHERE scid = :scid AND relid = :inwareid 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 outwareid,outwarecode INTO :ll_outwareid_rel,:ls_outwarecode_rel FROM u_outware WHERE scid = :scid AND relid = :inwareid 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_out.getinfo(scid,ll_outwareid_rel,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF IF uo_out.del(scid,ll_outwareid_rel,0,arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF UPDATE u_inware SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE u_inware.inwareid = :inwareid AND flag = 1 AND secflag = 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 FOR i = 1 To it_mxbt //yyx20100814 IF billtype = 1 THEN //yyx20100814 //库存分配 IF billtype = 1 And li_storagetype = 1 And li_outtype = 0 And thflag = 0 THEN //取消分配 arg_s_a = arg_s_a_null IF uof_ref_assign_cancel(inwarecode,inwaremx[i].printid,arg_s_a,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_a.assignid) IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],& arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT //取消分配计划 arg_s_ap = arg_s_ap_null IF uof_ref_assign_plan_cancel(inwarecode,inwaremx[i].printid,arg_s_ap,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_ap.planid) IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],& inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF //yyx20100814_end IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN ll_sptid = 0 ls_mtrlcuscode = '' ELSE ll_sptid = inwaremx[i].sptid ls_mtrlcuscode = inwaremx[i].mtrlcuscode END IF //yyx20100814_end IF sys_option_inout_procedure = 0 THEN ld_cost = inwaremx[i].cost IF thflag = 1 And uo_option_buyth_use_price_update_wareamt = 1 THEN ld_cost = inwaremx[i].price END IF IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,ld_cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,& inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,& inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,0 - inwaremx[i].qty,& 0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,& inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF IF thflag = 0 Or (thflag = 1 And inwaremx[i].Thptype = 1) THEN //更新合同完成数量 If (billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,& 0 - inwaremx[i].uqty,arg_msg,False) <> 1 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF // IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN // arg_msg = '更新行:'+String(i)+','+arg_msg // rslt = 0 // GOTO ext // END IF END IF ELSEIF inwaremx[i].Thptype = 0 THEN //不需处理 // Nothing to Done ELSEIF inwaremx[i].Thptype = 2 THEN //新建订单 //单独函数处理 uof_destroy_buytask END IF //更新质检已进仓数 IF uo_option_check_buyin = 1 And billtype = 1 And inwaremx[i].relbillid > 0 THEN IF uo_sptch.uof_add_inqty(inwaremx[i].relbillid,inwaremx[i].relbillprintid,0 - inwaremx[i].uqty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF uo_option_buy_sptprice_sec = 0 THEN IF thflag = 0 THEN IF uo_sptprice.uof_del_sptprice_auto(sptid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,'',inwaremx[i].unit,moneyid,False,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++ NEXT IF thflag = 1 THEN //退货处理 为新建订单的, 删除订单 IF uof_destroy_buytask(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF Long ll_inwareid_rel_arr[],ll_arr,ll_k String ls_inwarecode_rel_arr[] IF billtype = 1 And li_outtype > 0 And thflag = 1 THEN SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :inwareid And billtype = 25 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 DECLARE cur_in CURSOR FOR SELECT inwareid,inwarecode FROM u_inware WHERE scid = :scid AND relid = :inwareid And billtype = 25 Using commit_transaction; OPEN cur_in; FETCH cur_in Into :ll_inwareid_rel,:ls_inwarecode_rel; DO WHILE commit_transaction.SQLCode = 0 ll_arr++ ll_inwareid_rel_arr[ll_arr] = ll_inwareid_rel ls_inwarecode_rel_arr[ll_arr] = ls_inwarecode_rel FETCH cur_in Into :ll_inwareid_rel,:ls_inwarecode_rel; LOOP CLOSE cur_in; IF ll_arr = 0 THEN arg_msg = '读取相关退货进仓单失败,操作取消' rslt = 0 GOTO ext END IF FOR ll_k = 1 To ll_arr IF uo_in.getinfo(scid,ll_inwareid_rel_arr[ll_k],arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid_rel_arr[ll_k],arg_msg,False) = 0 THEN arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF END IF IF billtype = 27 THEN FOR i = 1 To it_mxbt_mx IF uof_update_ptqty(scid,& inwaremx_mx[i].ptinwareid,& inwaremx_mx[i].ptprintid,& 0 - inwaremx_mx[i].qty,arg_msg,False) = 0 THEN arg_msg = '单据配套明细,行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF IF billtype = 1 And ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN IF uof_p_barcode(0,arg_msg,arg_s_mxbarcode_fp) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_inware_barcode_tmp SET u_inware_barcode_tmp.inwareid = 0 WHERE u_inware_barcode_tmp.scid = :scid And u_inware_barcode_tmp.inwareid = :inwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "清除采购收货单相关临时条码匹配标记失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF 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_sptch Destroy uo_buytask Destroy uo_sptprice Destroy uo_ma Destroy uo_in Destroy uo_out Destroy uo_pro RETURN rslt end function public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i,j String ls_about,ls_dscrp Long ll_moneyid_native,ll_moneyid IF uo_option_buy_sptprice_sec = -1000 THEN rslt = 0 arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_m_mstpay = -1000 THEN rslt = 0 arg_msg = '选项:[241]系统使用多币种应付帐,读取初始默认值失败,操作取消!' GOTO ext END IF uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price Decimal ld_payamt = 0,ld_mstpayamt = 0,ld_taxamt = 0 Long ll_dft_itemid,ll_dft_itemid_tax Decimal ld_itemamt = 0 String ls_itemname decimal ld_fprice_notax s_bmstpaymx s_paymx_item IF inwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" 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 Int li_btype Long ll_accountsid SELECT btype,accountsid INTO :li_btype,:ll_accountsid FROM cw_banktype Where banktypeid = :relint_1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消" GOTO ext END IF UPDATE u_inware SET secauditingrep = :publ_operator, secauditingdate = getdate(), secflag = 1 WHERE u_inware.inwareid = :inwareid And flag = 1 And secflag = 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 IF uo_option_buy_sptprice_sec = 1 THEN IF thflag = 0 THEN FOR i = 1 To it_mxbt ld_fprice_notax = inwaremx[i].fprice / ( 1 + inwaremx[i].tax) IF uo_sptprice.uof_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].jgdscrp,inwareid,inwaremx[i].enprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].fprice,ld_fprice_notax,indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,0,moneyid,indate,datetime(9999-01-01),False,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF END IF FOR j = 1 To it_mxbt_item ld_itemamt = ld_itemamt + inware_itemmx[j].amt NEXT If (sum_amt <> 0 Or ld_itemamt <> 0) And dxflag = 0 THEN IF thflag = 1 THEN ls_about = inwarecode + "退货款,相关号:"+part SELECT itemid INTO :ll_dft_itemid FROM u_itemdef Where dfttype = 5 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询默认采购外协退货项目资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE ls_about = inwarecode + "应付款,相关号:"+part SELECT itemid INTO :ll_dft_itemid FROM u_itemdef Where dfttype = 2 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询默认采购外协付款项目资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF ls_dscrp = ls_about SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF IF uo_option_m_mstpay = 0 THEN ld_mstpayamt = sum_amt - otheramt ll_moneyid = ll_moneyid_native ld_taxamt = sum_taxamt ELSE ld_mstpayamt = sum_amt_en - otheramt ll_moneyid = moneyid ld_taxamt = sum_taxamt_en END IF IF li_btype = 1 THEN ld_payamt = ld_mstpayamt + ld_itemamt ELSE ld_payamt = 0 END IF s_bmstpay s_pay s_pay.scid = scid s_pay.sptid = sptid s_pay.paydate = indate s_pay.inrep = inrep s_pay.oriamt = ld_mstpayamt s_pay.mstpayamt = ld_mstpayamt s_pay.payamt = ld_payamt s_pay.payamt_cn = ld_payamt s_pay.dscrp = ls_about s_pay.billcode = inwarecode s_pay.relcode = part s_pay.banktypeid = relint_1 s_pay.viewdate = plandate s_pay.opemp = publ_operator s_pay.buildtype = 1 s_pay.inwareid = inwareid s_pay.accountsid = ll_accountsid s_pay.itemid = ll_dft_itemid s_pay.moneyid = ll_moneyid s_pay.moneyid_cn = ll_moneyid IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF ld_taxamt <> 0 THEN ls_about = inwarecode + "税金,相关号:"+part SELECT itemid INTO :ll_dft_itemid_tax FROM u_itemdef Where dfttype = 13 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询默认采购外协税金项目资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF s_bmstpaymx s_paymx_tax s_paymx_tax.scid = scid s_paymx_tax.payid = uo_pay.ref_payid s_paymx_tax.sptid = sptid s_paymx_tax.paydate = indate s_paymx_tax.inrep = inrep s_paymx_tax.mstpayamt = ld_taxamt s_paymx_tax.payamt = 0 s_paymx_tax.dscrp = ls_about s_paymx_tax.billcode = inwarecode s_paymx_tax.relcode = part s_paymx_tax.banktypeid = relint_1 s_paymx_tax.opemp = publ_operator s_paymx_tax.buildtype = 3 s_paymx_tax.inwareid = inwareid s_paymx_tax.itemid = ll_dft_itemid_tax s_paymx_tax.moneyid = ll_moneyid IF uo_pay.add_payrecmx (s_paymx_tax,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF FOR i = 1 To it_mxbt_item IF inware_itemmx[i].amt <> 0 THEN SELECT itemname INTO :ls_itemname FROM u_itemdef Where itemid = :inware_itemmx[i].itemid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询第'+String(i)+'行费用项目信息失败,'+ commit_transaction.SQLErrText GOTO ext END IF ls_about = inwarecode + '费用项目:'+ls_itemname +",相关号:"+part s_paymx_item.scid = scid s_paymx_item.payid = uo_pay.ref_payid s_paymx_item.sptid = sptid s_paymx_item.paydate = indate s_paymx_item.inrep = inrep s_paymx_item.mstpayamt = inware_itemmx[i].amt s_paymx_item.payamt = 0 s_paymx_item.dscrp = ls_about s_paymx_item.billcode = inwarecode s_paymx_item.relcode = part s_paymx_item.banktypeid = relint_1 s_paymx_item.opemp = publ_operator s_paymx_item.buildtype = 3 s_paymx_item.inwareid = inwareid s_paymx_item.itemid = ll_dft_itemid_tax s_paymx_item.moneyid = ll_moneyid IF uo_pay.add_payrecmx (s_paymx_item,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT UPDATE u_inware SET relint_2 = :uo_pay.ref_payid WHERE u_inware.inwareid = :inwareid AND scid = :scid And flag = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新采购单相关应付帐ID失败' rslt = 0 GOTO ext END IF END IF secflag = 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_pay Destroy uo_sptprice RETURN rslt end function public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,cnt = 0,i DateTime null_dt int li_StoreBalcType,li_AmtAuditFlag IF uo_option_buy_sptprice_sec = -1000 THEN rslt = 0 arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!' GOTO ext END IF uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price String ls_mtrlname SetNull(null_dt) IF inwareid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF //检查仓库是否分开结存 IF balcdateint <> 0 THEN SELECT StoreBalcType INTO :li_StoreBalcType FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN li_StoreBalcType = 0 END IF //如果分开结存,检查结存表是否已金额结存 IF li_StoreBalcType = 1 THEN SELECT top 1 AmtAuditFlag INTO :li_AmtAuditFlag FROM u_warebalc WHERE storageid = :storageid And balcdateint = :balcdateint; IF sqlca.SQLCode <> 0 THEN li_AmtAuditFlag = 0 END IF IF li_AmtAuditFlag = 1 THEN rslt = 0 arg_msg = '仓库结存日期段已执行过金额结存,不能财撤单据' GOTO ext END IF END IF END IF IF secflag = 0 THEN rslt = 0 arg_msg = "该单据财务未审,不能进行财务撤审" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消" GOTO ext END IF UPDATE u_inware SET secauditingrep = '', secauditingdate = :null_dt, secflag = 0,relint_2 = 0 WHERE u_inware.inwareid = :inwareid And secflag = 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 billtype = 1 And sum_amt <> 0 And dxflag = 0 THEN IF uo_pay.del_payrec(scid,1,relint_2,sptid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_option_buy_sptprice_sec = 1 THEN IF thflag = 0 THEN FOR i = 1 To it_mxbt IF uo_sptprice.uof_del_sptprice_auto(sptid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].jgdscrp,inwaremx[i].unit,moneyid,False,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF END IF secflag = 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_pay Destroy uo_sptprice RETURN rslt end function public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, string arg_mtrlcuscode, string arg_location, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_cost Long ll_storagescid SELECT scid INTO :ll_storagescid FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库分部失败'+ commit_transaction.SQLErrText GOTO ext END IF SELECT cost INTO :ld_cost FROM u_mtrlware WHERE storageid = :storageid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plancode = :arg_plancode AND dxflag = :arg_dxflag AND sptid = :arg_sptid AND mtrlcuscode = :arg_mtrlcuscode AND Location = :arg_location And scid = :ll_storagescid Using commit_transaction; IF commit_transaction.SQLCode = 100 THEN arg_msg = '查询'+arg_mtrlcode+'库存记录失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询'+arg_mtrlcode+'库存成本价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_inwaremx SET cost = :ld_cost WHERE scid = :scid AND inwareid = :inwareid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新'+arg_mtrlcode+'退货成本价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF arg_ref_cost = ld_cost ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_update_ptqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_ptqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_qty,ld_ptqty SELECT qty,ptqty INTO :ld_qty,:ld_ptqty FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询已配套数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF arg_ptqty > 0 THEN IF ld_qty > ld_ptqty + arg_ptqty THEN arg_msg = '超配套数' rslt = 0 GOTO ext END IF ELSE IF ld_ptqty < Abs(arg_ptqty) THEN arg_msg = '超返扣配套数' rslt = 0 GOTO ext END IF END IF UPDATE u_inwaremx SET ptqty = ptqty + :arg_ptqty WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新已配套数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_destroy_buytask (ref string arg_msg);Int rslt = 1 Long i, cnt Long ll_taskid, ll_taskid_arr[] String ls_taskcode, ls_taskcode_arr[] uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = commit_transaction cnt = 0 DECLARE cur_task CURSOR FOR SELECT TaskID, taskcode FROM u_buyTask WHERE relcode = :inwarecode AND sptid = :sptid AND ltrim(rtrim(dscrp)) = "由退货单号"+:inwarecode+"生成" ; OPEN cur_task ; FETCH cur_task Into :ll_taskid, :ls_taskcode; DO WHILE sqlca.SQLCode = 0 cnt++ ll_taskid_arr[cnt] = ll_taskid ls_taskcode_arr[cnt] = ls_taskcode FETCH cur_task Into :ll_taskid, :ls_taskcode; LOOP CLOSE cur_task; IF cnt = 0 THEN GOTO ext END IF FOR i = 1 To cnt IF uo_task.Cancel(scid,ll_taskid_arr[i],arg_msg,False) = 0 THEN arg_msg = "采购退货单撤审自动删除相关采购订单失败,采购订单:"+ls_taskcode_arr[i]+","+arg_msg rslt = 0 GOTO ext ELSE //日志 f_setsysoplog('采购订单','采购退货单撤审自动删除相关采购订单,id:'+String(ll_taskid_arr[i])+',单号:'+ls_taskcode_arr[i],arg_msg,False) END IF NEXT ext: Destroy uo_task RETURN rslt end function public function integer uof_create_buytask (ref string arg_msg);Int rslt = 1 Long i, j, mxcnt Long ll_blltype uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = commit_transaction FOR j = 0 To 1 ll_blltype = j //0:材料采购; 1:成品采购 mxcnt = 0 IF uo_task.newbegin(scid,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF uo_task.Requiredate = DateTime(Today()) //要求完成日期 uo_task.Assign_emp = inrep //订单负责人 uo_task.Kind = 0 uo_task.reason = "" uo_task.sptid = sptid uo_task.dscrp = "由退货单号"+inwarecode+"生成" //uof_destroy_buytask uo_task.relcode = inwarecode uo_task.banktypeid = relint_1 uo_task.train = "" uo_task.billtype = ll_blltype uo_task.moneyid = moneyid uo_task.mrate = mrate FOR i = 1 To it_mxbt IF inwaremx[i].Thptype = 2 And inwaremx[i].mxbilltype = ll_blltype THEN mxcnt++ IF uo_task.acceptmx(0,& 0,& '',& inwaremx[i].mtrlid,& 0 - inwaremx[i].uqty,& inwaremx[i].enprice,& inwaremx[i].rebate,& 0,& inwaremx[i].mxdscrp,& inwaremx[i].mtrlcode,& arg_msg,& mxcnt,& DateTime(Today()),& storageid,& inwaremx[i].status,& inwaremx[i].unit,& inwaremx[i].rate,& inwaremx[i].woodcode,& inwaremx[i].pcode,& 0,& 0,& 0,& 0,& inwaremx[i].tax,& inwaremx[i].plancode,'') = 0 THEN arg_msg = "采购退货单自动建立相关采购订单失败,行:"+String(i)+","+arg_msg rslt = 0 GOTO ext END IF END IF NEXT IF mxcnt > 0 THEN IF uo_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购退货单自动建立相关采购订单失败,"+arg_msg rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy uo_task RETURN rslt end function public function integer uof_chk_audit (integer arg_type, long arg_scid, long arg_inwareid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);//arg_type : 0 审核; 1 撤审 Long rslt = 1,i Int li_chkflag String ls_msg SELECT chkflag INTO :li_chkflag FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询进仓单明细质检信息失败,"+sqlca.SQLErrText GOTO ext END IF IF arg_type = 0 THEN ls_msg = "质检审核" IF li_chkflag = 1 THEN rslt = 0 arg_msg = "单据明细已经质检审核" GOTO ext END IF Dec lde_qty, lde_chkinqty, lde_chkinqty2 SELECT qty, chkinqty, chkinqty2 INTO :lde_qty, :lde_chkinqty, :lde_chkinqty2 FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF lde_qty <> lde_chkinqty + lde_chkinqty2 THEN //没有进仓, 成功返回 arg_msg = "合格收货数 + 不合格退货数 不等于 收货数,不能质检审核" rslt = 0 GOTO ext END IF UPDATE u_inwaremx SET chkflag = 1, chkdate = getdate(), chkemp = :publ_operator WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid And chkflag = 0 ; ELSE ls_msg = "质检撤审" IF li_chkflag = 0 THEN rslt = 0 arg_msg = "单据明细未质检审核" GOTO ext END IF UPDATE u_inwaremx SET chkflag = 0, chkdate = NULL, chkemp = '' WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid And chkflag = 1 ; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "单据明细"+ls_msg+"操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据明细"+ls_msg+"正在处理,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF arg_type = 0 THEN IF uof_create_move(arg_scid, arg_inwareid, arg_printid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uof_destroy_move(arg_scid, arg_inwareid, arg_printid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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 uof_create_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg);//1.合格调仓; 2.不合格调仓 Int rslt = 1 Long i, mxcnt Long ll_mxstorageid, ll_mxstorageid2 Long ll_mtrlwareid, ll_mtrlid Dec lde_qty, lde_price, lde_uqty, lde_rate, lde_qty2 String ls_unit, ls_newlocation String ls_inwarecode Long ll_storageid Long ll_outwareid uo_outware_move uo_ware uo_ware = Create uo_outware_move uo_ware.if_getid_ture = false SELECT mtrlwareid, storageid, chkinqty, storageid2, chkinqty2, price, location, mtrlid INTO :ll_mtrlwareid, :ll_mxstorageid, :lde_qty, :ll_mxstorageid2, :lde_qty2, :lde_price, :ls_newlocation, :ll_mtrlid FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF lde_qty = 0 And lde_qty2 = 0 THEN //没有进仓, 成功返回 GOTO ext END IF SELECT inwarecode , storageid INTO :ls_inwarecode, :ll_storageid FROM u_inware WHERE scid = :arg_scid And inwareid = :arg_inwareid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询采购收货单信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT unit INTO :ls_unit FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资料信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF //检查数据合法性 IF lde_qty <> 0 THEN IF ll_mxstorageid = 0 THEN arg_msg = "请选择质检合格调入仓库" rslt = 0 GOTO ext END IF IF uo_ware.newbegin(arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF i = 1 uo_ware.outdate = DateTime(Today()) // 发生时间 uo_ware.indate = DateTime(Today()) // 发生时间 uo_ware.outrep = publ_operator // 经手人 uo_ware.dscrp = "采购收货明细质检合格调仓" //备注 uo_ware.sstorageid = ll_storageid uo_ware.dstorageid = ll_mxstorageid uo_ware.relcode = ls_inwarecode+"." + String(arg_printid) uo_ware.ifauto = 1 mxcnt = 1 IF uo_ware.acceptmx(ll_mtrlwareid,& lde_qty,& lde_price,& arg_msg,& i,& "",& ls_unit,& lde_qty,& 1,& ls_newlocation,0,0,0,'') = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg rslt = 0 GOTO ext END IF IF mxcnt > 0 THEN IF uo_ware.Save(arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg rslt = 0 GOTO ext END IF ll_outwareid = uo_ware.outwareid IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.p_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,确认失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.ss_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出审失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.ds_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入审失败,"+arg_msg rslt = 0 GOTO ext END IF END IF END IF IF lde_qty2 <> 0 THEN IF ll_mxstorageid2 = 0 THEN arg_msg = "请选择质检不合格调入仓库" rslt = 0 GOTO ext END IF IF uo_ware.newbegin(arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF i = 1 uo_ware.outdate = DateTime(Today()) // 发生时间 uo_ware.indate = DateTime(Today()) // 发生时间 uo_ware.outrep = publ_operator // 经手人 uo_ware.dscrp = "采购收货明细质检不合格调仓" //备注 uo_ware.sstorageid = ll_storageid uo_ware.dstorageid = ll_mxstorageid2 uo_ware.relcode = ls_inwarecode+"." + String(arg_printid) uo_ware.ifauto = 1 mxcnt = 1 IF uo_ware.acceptmx(ll_mtrlwareid,& lde_qty2,& lde_price,& arg_msg,& i,& "",& ls_unit,& lde_qty2,& 1,& ls_newlocation,0,0,0,'') = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg rslt = 0 GOTO ext END IF IF mxcnt > 0 THEN IF uo_ware.Save(arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg rslt = 0 GOTO ext END IF ll_outwareid = uo_ware.outwareid IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.p_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,确认失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.ss_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出审失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.ds_auditing(publ_operator,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入审失败,"+arg_msg rslt = 0 GOTO ext END IF END IF END IF ext: Destroy uo_ware RETURN rslt end function public function integer uof_destroy_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg);Int rslt = 1 Long i, cnt Long ll_mxstorageid Long ll_mtrlwareid String ls_inwarecode, ls_outwarecode, ls_outwarecode_arr[] Long ll_storageid, ll_mxstorageid2 Long ll_outwareid, ll_outwareid_arr[] String ls_relcode uo_outware_move uo_ware uo_ware = Create uo_outware_move uo_ware.if_getid_ture = False SELECT inwarecode , storageid INTO :ls_inwarecode, :ll_storageid FROM u_inware WHERE scid = :arg_scid And inwareid = :arg_inwareid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询采购收货单信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT mtrlwareid, storageid, storageid2 INTO :ll_mtrlwareid, :ll_mxstorageid, :ll_mxstorageid2 FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ls_relcode = ls_inwarecode +"." + String(arg_printid) cnt = 0 DECLARE cur_move CURSOR FOR SELECT OutWareID, outwarecode FROM u_outware_move WHERE relcode = :ls_relcode And sstorageid = :ll_storageid; OPEN cur_move ; FETCH cur_move Into :ll_outwareid, :ls_outwarecode; DO WHILE sqlca.SQLCode = 0 cnt++ ll_outwareid_arr[cnt] = ll_outwareid ls_outwarecode_arr[cnt] = ls_outwarecode FETCH cur_move Into :ll_outwareid, :ls_outwarecode; LOOP CLOSE cur_move; IF cnt = 0 THEN GOTO ext END IF FOR i = 1 To cnt ll_outwareid = ll_outwareid_arr[i] ls_outwarecode = ls_outwarecode_arr[i] IF ll_outwareid > 0 THEN IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.c_ds_auditing(arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入撤审失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.c_ss_auditing(arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出撤审失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.c_p_auditing(arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,反确认失败,"+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.Cancel(ll_outwareid,arg_msg,False) = 0 THEN arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,删除失败,"+arg_msg rslt = 0 GOTO ext END IF //日志 f_setsysoplog('仓库调拨单','采购收货单明细质检撤审自动删除相关仓库调拨单,id:'+String(ll_outwareid)+',单号:'+ls_outwarecode,arg_msg,False) END IF NEXT //SELECT count(*) // INTO :cnt // FROM u_outware_move // WHERE relcode = :ls_relcode // AND sstorageid = :ll_storageid // And dstorageid = :ll_mxstorageid Using sqlca; //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 //ELSEIF cnt = 1 THEN // // SELECT OutWareID, outwarecode // INTO :ll_OutWareID, :ls_outwarecode // FROM u_outware_move // WHERE relcode = :ls_relcode // AND sstorageid = :ll_storageid // And dstorageid = :ll_mxstorageid Using sqlca; // IF sqlca.SQLCode <> 0 THEN // arg_msg = "查询采购收货单相关仓库调拨单失败,"+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg // rslt = 0 // GOTO ext // END IF // IF uo_ware.c_ds_auditing(arg_msg,False) = 0 THEN // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入撤审失败,"+arg_msg // rslt = 0 // GOTO ext // END IF // IF uo_ware.c_ss_auditing(arg_msg,False) = 0 THEN // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出撤审失败,"+arg_msg // rslt = 0 // GOTO ext // END IF // IF uo_ware.c_p_auditing(arg_msg,False) = 0 THEN // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,反确认失败,"+arg_msg // rslt = 0 // GOTO ext // END IF // IF uo_ware.Cancel(ll_outwareid,arg_msg,False) = 0 THEN // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,删除失败,"+arg_msg // rslt = 0 // GOTO ext // END IF // // //日志 // f_setsysoplog('仓库调拨单','采购收货单明细质检撤审自动删除相关仓库调拨单,id:'+String(ll_outwareid)+',单号:'+ls_outwarecode,arg_msg,False) // //END IF ext: Destroy uo_ware RETURN rslt end function public function integer uof_update_chkqty (long arg_scid, long arg_inwareid, long arg_printid, s_inwaremx s_mx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_qty,lde_chkqty, lde_badqty, lde_goodqty Int li_chkflag SELECT qty,chkqty,badqty, goodqty , chkflag INTO :ld_qty,:lde_chkqty, :lde_badqty, :lde_goodqty, :li_chkflag FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询采购收货单信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_chkflag = 1 THEN arg_msg = '采购收货单已经明细质检审核,不能更新质检数量相关数据' rslt = 0 GOTO ext END IF IF s_mx.chkqty > 0 THEN IF ld_qty < lde_chkqty + s_mx.chkqty THEN arg_msg = '采购收货单抽检数量大于进仓数量' rslt = 0 GOTO ext END IF ELSE IF lde_chkqty < Abs(s_mx.chkqty) THEN arg_msg = '采购收货单已抽检数量少于本次减少数量' rslt = 0 GOTO ext END IF END IF UPDATE u_inwaremx SET chkqty = chkqty + :s_mx.chkqty, badqty = badqty + :s_mx.badqty, goodqty = goodqty + :s_mx.goodqty, chkinqty = chkinqty + :s_mx.chkinqty, chkinqty2 = chkinqty2 + :s_mx.chkinqty2 WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新质检数失败,'+sqlca.SQLErrText rslt = 0 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 uf_cmp_mxmx (ref string arg_msg);// DONE: 计算明细 //IF Not dw_edit_mode THEN // arg_msg = '非编辑状态下不能生成包件明细' // RETURN 0 //END IF // Long ll_i,ll_j,ll_k, i Long ll_row Long ll_mtrlid,ll_sptid,ll_storageid String ls_mtrlcode,ls_unit String ls_plancode,ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode,ls_location,ls_waredscrp String ls_cuscode,ls_cusname,ls_mxdscrp Long ll_printid Decimal ld_qty,ld_fprice,ld_rebate,ld_planprice_p,ld_uprice,ld_rate Int li_outtype,li_ifpackpro String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] String ls_pf_mtrlcode[],ls_pf_mtrlname[],ls_pf_mtrlmode[],ls_pf_unit[] Decimal ld_Sonscale[],ld_planprice_c[] Long ll_SonMtrlid[] Long it_mxt = 1 String ls_status_find,ls_woodcode_find,ls_pcode_find Decimal ld_rqty,ld_enprice Int li_outtype_storage Long ll_ucrow Decimal ld_mrate ld_mrate = mrate ll_storageid = storageid IF f_rst_storage_outtype(ll_storageid,li_outtype_storage) = 0 THEN arg_msg = '查询仓库出仓策略失败,请检查' RETURN 0 END IF //dw_mxmx.Reset() IF li_outtype_storage = 0 THEN RETURN 1 FOR ll_i = 1 To UpperBound(inwaremx) IF inwaremx[ll_i].mtrlid = 0 THEN CONTINUE ll_mtrlid = inwaremx[ll_i].mtrlid ll_sptid = 0 //dw_child.Object.u_inwaremx_sptid_cusid[ll_i] ls_plancode = inwaremx[ll_i].plancode ls_status = inwaremx[ll_i].status ls_woodcode = inwaremx[ll_i].woodcode ls_pcode = inwaremx[ll_i].pcode ls_mtrlcuscode = inwaremx[ll_i].mtrlcuscode ls_location = inwaremx[ll_i].Location ld_qty = inwaremx[ll_i].qty ld_enprice = inwaremx[ll_i].enprice ld_uprice = ld_enprice * ld_mrate ld_rebate = inwaremx[ll_i].rebate ld_rate = 1 //dw_child.Object.u_inwaremx_rate[ll_i] IF ld_rate = 0 THEN ld_rate = 1 ld_fprice = Round(ld_uprice/ld_rate,5) ls_mxdscrp = inwaremx[ll_i].mxdscrp ls_waredscrp = '' //dw_child.Object.u_inwaremx_waredscrp[ll_i] ls_mtrlcode = inwaremx[ll_i].mtrlcode // ls_mtrlname = dw_child.Object.mtrlname_my[ll_i] // ls_mtrlmode = dw_child.Object.mtrlmode_my[ll_i] ls_unit = inwaremx[ll_i].unit ls_cuscode = '' //dw_child.Object.u_cust_cuscode[ll_i] ls_cusname = '' //dw_child.Object.u_cust_name[ll_i] ll_printid = ll_i SELECT outtype,ifpackpro INTO :li_outtype,:li_ifpackpro FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料出仓类型失败' RETURN 0 END IF IF li_outtype_storage <> 0 THEN // IF li_outtype = 0 OR li_ifpackpro = 0 THEN IF Not ((li_outtype = 1 Or li_outtype = 2) And li_ifpackpro = 1) THEN i = it_mxbt_mx + 1 IF acceptmx_mx(ll_printid,& ll_mtrlid,& ls_mtrlcode,& ls_plancode,& ls_status,& ld_qty,& ld_fprice,& ld_rebate,& ls_mxdscrp,& arg_msg,& ls_woodcode,& ls_pcode,& ll_sptid,i,'',& ls_mtrlcuscode,& ls_location,0,0,& 1) = 0 THEN RETURN 0 END IF ELSE ld_planprice_p = 0 it_mxt = 1 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, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_mtrldef.unit, u_mtrldef.planprice FROM u_PrdPF,u_mtrl_pf,u_mtrldef WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) 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 ) And ( u_mtrldef.ifpack > 0 ); 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], :ls_pf_mtrlcode[it_mxt],:ls_pf_mtrlname[it_mxt], :ls_pf_mtrlmode[it_mxt],:ls_pf_unit[it_mxt],:ld_planprice_c[it_mxt]; DO WHILE sqlca.SQLCode = 0 ld_planprice_p += ld_planprice_c[it_mxt] 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], :ls_pf_mtrlcode[it_mxt],:ls_pf_mtrlname[it_mxt], :ls_pf_mtrlmode[it_mxt],:ls_pf_unit[it_mxt],:ld_planprice_c[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; FOR ll_j = 1 To it_mxt IF li_ifover[ll_j] = 1 THEN CHOOSE CASE li_dipztype[ll_j] 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_j] ls_woodcode_find = ls_pf_woodcode[ll_j] ls_pcode_find = ls_pf_pcode[ll_j] END IF ls_status_find = Trim(ls_status_find) ls_woodcode_find = Trim(ls_woodcode_find) ls_pcode_find = Trim(ls_pcode_find) ld_rqty = ld_Sonscale[ll_j] * ld_qty IF it_mxt = 1 THEN ld_fprice = ld_fprice ELSE IF ld_planprice_p = 0 THEN ld_fprice = Round(ld_fprice/it_mxt,2) ELSE ld_fprice = Round(ld_fprice * ld_planprice_c[ll_j]/ld_planprice_p,2) END IF END IF i = it_mxbt_mx + 1 IF acceptmx_mx(ll_printid,& ll_SonMtrlid[ll_j],& ls_pf_mtrlcode[ll_j],& ls_plancode,& ls_status_find,& ld_rqty,& ld_fprice,& ld_rebate,& ls_mxdscrp,& arg_msg,& ls_woodcode_find,& ls_pcode_find,& ll_sptid,i,'',& ls_mtrlcuscode,& ls_location,0,0,& 0) = 0 THEN RETURN 0 END IF NEXT END IF END IF NEXT RETURN 1 end function on uo_inware_buy.create call super::create end on on uo_inware_buy.destroy call super::destroy end on event constructor;call super::constructor;String str_optionvalue,arg_msg f_get_sys_option_value('168',str_optionvalue,arg_msg) uo_option_buy_sptprice_sec = Long(str_optionvalue) f_get_sys_option_value('130',str_optionvalue,arg_msg) uo_option_check_buyin = Long(str_optionvalue) f_get_sys_option_value('241',str_optionvalue,arg_msg) uo_option_m_mstpay = Long(str_optionvalue) f_get_sys_option_value('331',str_optionvalue,arg_msg) uo_option_buyth_use_price_update_wareamt = Long(str_optionvalue) end event