$PBExportHeader$uo_inware_cp.sru forward global type uo_inware_cp from uo_inware end type end forward global type uo_inware_cp from uo_inware end type global uo_inware_cp uo_inware_cp type variables Int uo_option_order_ml_cpfp_noreltask Int uo_option_wkpmtrlware Int uo_option_cpinware_update_planprice Int uo_option_inware_cp_autoreturnfp_audit Int uo_mtrlware_trans_fp_return_secaudit 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 uof_auto_scll (ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_scll_caudit (ref string arg_msg, boolean arg_ifcommit) public function integer uof_get_porder (ref long arg_orderid[], ref decimal arg_acmpqty[], ref string arg_msg) public function integer uof_auto_di_in (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_di_out (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_di_caudit (ref string arg_msg, boolean arg_ifcommit) public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_planmx_fqty (long arg_scid, long arg_orderid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_return_fp (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_shareqty, long arg_mtrlwareid, ref string arg_msg, boolean arg_ifcommit) public function integer fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg) public function integer c_fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_auto_scll_p (ref string arg_msg) public function integer uof_add_relcode (long arg_scid, long arg_inwareid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_pack_fpqty (long arg_scid, long arg_orderid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long i,j,k,l,mx_barcode_cnt,m,ll_find Long ll_sptid,ll_mtrlwareid_ref String ls_mtrlcuscode,ls_msg String ls_storagename Int li_outtype,li_storagetype Int li_ordertype Int li_ordertype_case,li_ordertype_p Long ll_orderid_retrieve,ll_orderid_p,ll_mtrlid_p Int li_mtrlid_p_ifpackpro String ls_status_p Long ll,ll_taskid,ll_printid,ll_if_saletaskmx_pf_change s_mtrlcfg_expr s_pz[] Decimal ld_sonscale_retrieve Long arg_s_arr,ll_relbillid,ll_relprintid Decimal ld_qty_tmp Decimal ld_minrate Long cnt,cnt_ck Decimal ld_orderqty,ld_acmpqty Decimal ld_uprate,ld_upqty s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst s_inwaremx_barcode_fp arg_s_mxbarcode_fp Long ll_array IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarecp_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_cpfp_noreltask = -1000 THEN rslt = 0 arg_msg = '选项:[224]生产进仓库存分配时不考虑计划相关订单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_cp_inware_scll_rate = -1000 THEN rslt = 0 arg_msg = '选项:[249]指令单生产进仓单审核时限制最大进仓数不能大于领料配套数量,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_cpinware_update_planprice = -1000 THEN rslt = 0 arg_msg = '选项:[256]生产进仓单审核更新计划成本价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_mtrlware_trans_fp_return_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[346]库存分配还货单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_inware_cp_autoreturnfp_audit = -1000 THEN rslt = 0 arg_msg = '选项:[354]生产进仓单自动生成库存分配还货单审核选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_canpack_ifzanyong = -1000 THEN rslt = 0 arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!' GOTO ext END IF 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 uo_order_ml uo_order uo_order = Create uo_order_ml datastore ds_order_replace ds_order_replace = Create datastore IF uo_option_order_ml_cpfp_noreltask = 0 THEN ds_order_replace.DataObject = 'ds_inwaremx_cp_order_mx_assign' ELSE ds_order_replace.DataObject = 'ds_inwaremx_cp_order_mx_assign2' END IF ds_order_replace.SetTransObject(commit_transaction) datastore ds_order_replace_pack ds_order_replace_pack = Create datastore datastore ds_order_fp ds_order_fp = Create datastore ds_order_fp.DataObject = 'ds_inwaremx_fp_assign' ds_order_fp.SetTransObject(commit_transaction) datastore ds_order_mx_find_taskmx ds_order_mx_find_taskmx = Create datastore ds_order_mx_find_taskmx.DataObject = 'ds_order_mx_find_salemx' ds_order_mx_find_taskmx.SetTransObject(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 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 uo_option_inout_type = 2 And & uo_option_barcode_inwarecp_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 uo_option_barcode_inwarecp_paudit = 2 THEN IF priceflag = 0 THEN rslt = 0 arg_msg = "单据未确认" GOTO ext END IF END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext 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 IF billtype = 3 THEN IF uo_option_cp_inware_scll_rate = 1 THEN FOR i = 1 To it_mxbt IF inwaremx[i].relid > 0 THEN IF uof_check_scll_rate(scid,inwareid,inwaremx[i].printid,inwaremx[i].relid,inwaremx[i].mtrlid,inwaremx[i].qty,1,arg_msg) = 0 THEN cnt_ck++ ls_msg += '行:'+String(i)+',指令单号:'+inwaremx[i].relcode + ','+arg_msg+'~r~n' END IF END IF NEXT IF cnt_ck > 0 THEN arg_msg = ls_msg 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 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 uof_auto_scll(arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF Long ll_orderid_arr[] Decimal ld_acmpqty_arr[] IF uof_get_porder(ll_orderid_arr,ld_acmpqty_arr,arg_msg) = 0 THEN rslt = 0 GOTO ext 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].price = 0 THEN rslt = 0 arg_msg = '行:'+String(i)+',没有单价,请检查' GOTO ext END IF END IF //yyx20120206 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 IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].price,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 IF uo_option_cpinware_update_planprice = 1 THEN IF f_update_planprice(inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,2,inwaremx[i].fprice,arg_msg,False,commit_transaction) = 0 THEN rslt = 0 arg_msg = '更新行:'+String(i)+','+arg_msg GOTO ext END IF END IF IF inwaremx[i].relid > 0 THEN IF uo_order.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //==================================================================== // 检查计划是否可完成 //==================================================================== IF uo_order.tryfinishorder(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //更新排程批(进仓计划) dyy20120809 IF uof_update_planmx_fqty(scid,inwaremx[i].relid,inwaremx[i].qty,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 = '行:'+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 = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //增加包件分配包件产品占用记录 dyy 20150306 if inwaremx[i].ifpack = 1 and inwaremx[i].relid > 0 and uo_option_canpack_ifzanyong = 1 then //通用包件 并且 是按指令单的才执行 if uof_add_pack_fpqty(scid,inwaremx[i].relid,ll_mtrlwareid_ref,inwaremx[i].mtrlid,inwaremx[i].qty,arg_msg,false) = 0 then rslt = 0 goto ext end if end if //yyx20100814 //库存分配 IF li_storagetype = 1 THEN //取分配计划 arg_s_arr = 0 arg_s_ap = arg_s_ap_null //查询相关计划是否属于销售订单计划 IF inwaremx[i].iffp = 0 THEN //旧模式 IF billtype = 3 And inwaremx[i].relid > 0 THEN SELECT ordertype,porderid INTO :li_ordertype,:ll_orderid_p FROM u_order_ml WHERE orderid = :inwaremx[i].relid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(i)+',查询计划类型失败,'+'~n'+commit_transaction.SQLErrText GOTO ext END IF IF ll_orderid_p > 0 THEN SELECT u_order_ml.mtrlid,u_order_ml.status_mode,u_mtrldef.ifpackpro,u_order_ml.ordertype INTO :ll_mtrlid_p,:ls_status_p,:li_mtrlid_p_ifpackpro,:li_ordertype_p FROM u_order_ml,u_mtrldef WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.orderid = :ll_orderid_p And u_order_ml.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(i)+'查询分离指令单上级计划物料id,组合配置,包件产品类型失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF END IF CHOOSE CASE li_ordertype CASE 0 li_ordertype_case = 0 ll_orderid_retrieve = 0 CASE 1 li_ordertype_case = 1 ll_orderid_retrieve = inwaremx[i].relid CASE 2 li_ordertype_case = 0 ll_orderid_retrieve = 0 CASE 3 li_ordertype_case = 0 ll_orderid_retrieve = 0 CASE 4 IF li_ordertype_p = 1 THEN IF inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 THEN //散排散进包件产品或整排散进包件产品 li_ordertype_case = 2 ll_orderid_retrieve = ll_orderid_p ld_sonscale_retrieve = 0 f_checkpz(ls_status_p,s_pz[]) FOR ll = 1 To UpperBound(s_pz) IF Trim(s_pz[ll].cfgname) = Trim(inwaremx[i].status) THEN ld_sonscale_retrieve = Dec(s_pz[ll].qty) END IF NEXT IF ld_sonscale_retrieve = 0 THEN rslt = 0 arg_msg = '行:'+String(i)+'查询子件包件组成数失败,请检查相关主生产计划组合配置' GOTO ext END IF ELSEIF inwaremx[i].ifpack = 0 THEN //非包件产品 IF inwaremx[i].u_mtrldef_ordertype = 1 THEN //分离排产 IF ll_orderid_p = 0 THEN //非法 li_ordertype_case = 0 ll_orderid_retrieve = 0 ELSE IF ll_mtrlid_p = inwaremx[i].mtrlid THEN li_ordertype_case = 1 ll_orderid_retrieve = ll_orderid_p ELSE // li_ordertype = 0 ll_orderid_retrieve = 0 END IF END IF ELSE li_ordertype_case = 0 ll_orderid_retrieve = 0 END IF ELSEIF inwaremx[i].ifpack = 1 THEN //通用包件 IF ll_mtrlid_p = inwaremx[i].mtrlid THEN li_ordertype_case = 1 ll_orderid_retrieve = ll_orderid_p ELSE IF li_mtrlid_p_ifpackpro = 2 THEN li_ordertype_case = 5 ll_orderid_retrieve = ll_orderid_p ELSE li_ordertype_case = 4 ll_orderid_retrieve = inwaremx[i].relid END IF END IF ELSEIF inwaremx[i].ifpack = 2 THEN IF ll_mtrlid_p = inwaremx[i].mtrlid THEN li_ordertype_case = 1 ll_orderid_retrieve = ll_orderid_p ELSE IF li_mtrlid_p_ifpackpro = 2 THEN li_ordertype_case = 5 ll_orderid_retrieve = ll_orderid_p ELSE li_ordertype_case = 4 ll_orderid_retrieve = inwaremx[i].relid END IF // li_ordertype_case = 3 // ll_orderid_retrieve = ll_orderid_p END IF END IF ELSE li_ordertype_case = 0 ll_orderid_retrieve = 0 END IF END CHOOSE ELSE li_ordertype_case = 0 ll_orderid_retrieve = 0 END IF //li_ordertype_case //1-用上级主生产计划订单明细查询 //2-组合配置包件产品子件包件进仓 //3-个性包件产品的个性包件(取消这种yyx20120820) //4-通用包件产品通用包件进仓 //5-个性包件产品包件(通用或个性)进仓 CHOOSE CASE li_ordertype_case CASE 1 //非包件产品,指令单合并的按订单排产主生产计划 IF uo_option_order_ml_cpfp_noreltask = 0 THEN ds_order_replace.Retrieve(scid,ll_orderid_retrieve) ELSE ds_order_replace.Retrieve(scid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode) END IF ds_order_replace.AcceptText() //找到相关订单就分配,没有则入公共库存 //成品 IF ds_order_replace.RowCount() > 0 THEN ld_qty_tmp = inwaremx[i].qty FOR k = 1 To ds_order_replace.RowCount() 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.fpgrade[arg_s_arr] = 2 IF uo_option_order_ml_cpfp_noreltask = 0 THEN arg_s_ap.relbillid[arg_s_arr] = ds_order_replace.Object.u_order_ml_mx_taskid[k] arg_s_ap.relprintid[arg_s_arr] = ds_order_replace.Object.u_order_ml_mx_taskmxid[k] ELSE arg_s_ap.relbillid[arg_s_arr] = ds_order_replace.Object.u_saletask_taskid[k] arg_s_ap.relprintid[arg_s_arr] = ds_order_replace.Object.u_saletaskmx_printid[k] END IF IF ld_qty_tmp <= ds_order_replace.Object.notassignqty[k] THEN arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp arg_s_ap.shareqty[arg_s_arr] = 0 EXIT ELSE arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace.Object.notassignqty[k] ld_qty_tmp = ld_qty_tmp - ds_order_replace.Object.notassignqty[k] //yyx20120906 //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace.Object.sumqty[k] - ds_order_replace.Object.notassignqty[k] IF k = ds_order_replace.RowCount() THEN arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp ELSE arg_s_ap.shareqty[arg_s_arr] = 0 END IF // END IF NEXT END IF CASE 2,3,4 IF li_ordertype_case = 2 THEN ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_3_and_4' ds_order_replace_pack.SetTransObject(commit_transaction) ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid,inwaremx[i].status,ld_sonscale_retrieve) ELSEIF li_ordertype_case = 3 THEN ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_2' ds_order_replace_pack.SetTransObject(commit_transaction) ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid) ELSEIF li_ordertype_case = 4 THEN ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack' ds_order_replace_pack.SetTransObject(commit_transaction) ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid) END IF ds_order_replace_pack.AcceptText() IF ds_order_replace_pack.RowCount() > 0 THEN ld_qty_tmp = inwaremx[i].qty FOR k = 1 To ds_order_replace_pack.RowCount() 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] = ds_order_replace_pack.Object.u_order_ml_mx_taskid[k] arg_s_ap.relprintid[arg_s_arr] = ds_order_replace_pack.Object.u_order_ml_mx_taskmxid[k] arg_s_ap.fpgrade[arg_s_arr] = 2 IF ld_qty_tmp <= ds_order_replace_pack.Object.notassignqty[k] THEN arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp arg_s_ap.shareqty[arg_s_arr] = 0 EXIT ELSE arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace_pack.Object.notassignqty[k] ld_qty_tmp = ld_qty_tmp - ds_order_replace_pack.Object.notassignqty[k] //yyx20120906 //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace_pack.Object.sumqty[k] - ds_order_replace_pack.Object.notassignqty[k] IF k = ds_order_replace_pack.RowCount() THEN arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp ELSE arg_s_ap.shareqty[arg_s_arr] = 0 END IF // END IF NEXT END IF CASE 5 ds_order_mx_find_taskmx.Retrieve(scid,ll_orderid_retrieve) IF ds_order_mx_find_taskmx.RowCount() > 0 THEN ld_qty_tmp = inwaremx[i].qty FOR l = 1 To ds_order_mx_find_taskmx.RowCount() IF ld_qty_tmp <= 0 THEN EXIT ll_taskid = ds_order_mx_find_taskmx.Object.u_order_ml_mx_taskid[l] ll_printid = ds_order_mx_find_taskmx.Object.u_order_ml_mx_taskmxid[l] SELECT count(*) INTO :ll_if_saletaskmx_pf_change FROM u_saletaskmx_pf WHERE u_saletaskmx_pf.scid = :scid AND u_saletaskmx_pf.taskid = :ll_taskid And u_saletaskmx_pf.printid = :ll_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(i)+'查询相关订单是否有换包件失败,'+commit_transaction.SQLErrText GOTO ext END IF IF ll_if_saletaskmx_pf_change > 0 THEN ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_5_1' ds_order_replace_pack.SetTransObject(commit_transaction) ds_order_replace_pack.Retrieve(scid,ll_taskid,ll_printid,inwaremx[i].mtrlid) ELSE ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_5_2' ds_order_replace_pack.SetTransObject(commit_transaction) ds_order_replace_pack.Retrieve(scid,ll_taskid,ll_printid,inwaremx[i].mtrlid) END IF ds_order_replace_pack.AcceptText() IF ds_order_replace_pack.RowCount() > 0 THEN FOR k = 1 To ds_order_replace_pack.RowCount() 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] = ds_order_replace_pack.Object.u_saletaskmx_taskid[k] arg_s_ap.relprintid[arg_s_arr] = ds_order_replace_pack.Object.u_saletaskmx_printid[k] arg_s_ap.fpgrade[arg_s_arr] = 2 IF ld_qty_tmp <= ds_order_replace_pack.Object.notassignqty[k] THEN arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp ld_qty_tmp = 0 arg_s_ap.shareqty[arg_s_arr] = 0 EXIT ELSE arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace_pack.Object.notassignqty[k] ld_qty_tmp = ld_qty_tmp - ds_order_replace_pack.Object.notassignqty[k] //yyx20120906 //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace_pack.Object.sumqty[k] - ds_order_replace_pack.Object.notassignqty[k] IF k = ds_order_replace_pack.RowCount() THEN arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp ELSE arg_s_ap.shareqty[arg_s_arr] = 0 END IF // END IF NEXT END IF NEXT END IF CASE 0 //指令查分配计划 ds_order_fp.Retrieve(scid,inwaremx[i].relid,0,1) ds_order_fp.AcceptText() IF ds_order_fp.RowCount() > 0 THEN ld_qty_tmp = inwaremx[i].qty FOR k = 1 To ds_order_fp.RowCount() arg_s_arr++ arg_s_ap.planid[arg_s_arr] = 0 arg_s_ap.assigntype[arg_s_arr] = 0 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] = ds_order_fp.Object.relbillid[k] arg_s_ap.relprintid[arg_s_arr] = 0 arg_s_ap.fpgrade[arg_s_arr] = 2 IF ld_qty_tmp <= ds_order_fp.Object.notassignqty[k] THEN arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp arg_s_ap.shareqty[arg_s_arr] = 0 EXIT ELSE arg_s_ap.notassignqty[arg_s_arr] = ds_order_fp.Object.notassignqty[k] ld_qty_tmp = ld_qty_tmp - ds_order_fp.Object.notassignqty[k] arg_s_ap.shareqty[arg_s_arr] = 0 END IF NEXT END IF CASE 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 CHOOSE ELSE //新库存分配模式 IF inwaremx[i].relid > 0 THEN IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,1,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) IF arg_s_ap.notassignqty[j] > 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],& arg_s_ap.notassignqty[j],inwaremx[i].cost,inwaremx[i].mtrlwaredscrp,ls_mtrlcuscode,& 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 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 //yyx2013-5-24 ll_find = 0 FOR m = 1 To ll_array IF arg_s_mxbarcode_fp.mtrlwareid[m] = arg_s_ap.mtrlwareid[j] And & arg_s_mxbarcode_fp.relbillid[m] = arg_s_ap.relbillid[j] And & arg_s_mxbarcode_fp.relprintid[m] = arg_s_ap.relprintid[j] THEN ll_find = m EXIT END IF NEXT IF ll_find = 0 THEN ll_array++ arg_s_mxbarcode_fp.mtrlwareid[ll_array] = arg_s_ap.mtrlwareid[j] arg_s_mxbarcode_fp.relbillid[ll_array] = arg_s_ap.relbillid[j] arg_s_mxbarcode_fp.relprintid[ll_array] = arg_s_ap.relprintid[j] arg_s_mxbarcode_fp.assignqty[ll_array] = arg_s_ap.notassignqty[j] arg_s_mxbarcode_fp.fpqty[ll_array] = 0 ELSE arg_s_mxbarcode_fp.assignqty[ll_find] += arg_s_ap.notassignqty[j] END IF //yyx2013-5-24_end END IF //有公共库存,还货 IF arg_s_ap.shareqty[j] > 0 And arg_s_ap.relbillid[j] > 0 And arg_s_ap.relprintid[j] > 0 THEN IF uof_auto_return_fp(arg_s_ap.scid[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,arg_s_ap.shareqty[j],arg_s_ap.mtrlwareid[j],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++ //yyx2012-9-29返回计算可装数库存id数组 If ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // NEXT //生成自动组装出仓单 IF uof_auto_di_out(ll_orderid_arr,ld_acmpqty_arr,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //生成自动组装进仓单 IF uof_auto_di_in(ll_orderid_arr,ld_acmpqty_arr,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新条码 If ( 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 //yyx2012-9-29返回计算可装数库存id数组计算可装数 IF UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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_order Destroy ds_order_replace Destroy ds_order_replace_pack Destroy ds_order_fp Destroy ds_order_mx_find_taskmx Destroy uo_cmpl_p 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_sptid String ls_mtrlcuscode String ls_storagename Int li_outtype,li_storagetype DateTime null_dt IF uo_option_canpack_ifzanyong = -1000 THEN rslt = 0 arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!' GOTO ext END IF 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 s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction uo_ma.li_if_assign_del_check_outware = 1 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 uo_order_ml uo_order uo_order = Create uo_order_ml SetNull(null_dt) 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 flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF balcflag = 1 THEN rslt = 0 arg_msg = "单据已经结存,不能撤审" GOTO ext END IF UPDATE u_inware SET auditingrep = '', auditingdate = :null_dt, flag = 0, fkemp = '', fkdate = :null_dt, fkflag = 0 WHERE u_inware.inwareid = :inwareid 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 uof_auto_scll_caudit(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //撤审删除相关自动组装进出仓单 IF uof_auto_di_caudit(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF FOR i = 1 To it_mxbt //yyx20100814 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 //yyx20100814 //库存分配 IF li_storagetype = 1 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 //增加包件分配包件产品占用记录 dyy 20150306 if inwaremx[i].ifpack = 1 and inwaremx[i].relid > 0 and uo_option_canpack_ifzanyong = 1 then //通用包件 并且 是按指令单的才执行 if uof_add_pack_fpqty(scid,inwaremx[i].relid,inwaremx[i].mtrlwareid,inwaremx[i].mtrlid,0 - inwaremx[i].qty,arg_msg,false) = 0 then rslt = 0 goto ext end if 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,inwaremx[i].price,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 IF inwaremx[i].relid > 0 THEN IF uo_order.addmxcmpl(scid,inwaremx[i].relid,0 - inwaremx[i].qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //==================================================================== // 检查计划是否可完成 //==================================================================== IF uo_order.tryfinishorder(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //更新排程批(进仓计划) dyy20120809 IF uof_update_planmx_fqty(scid,inwaremx[i].relid,0 -inwaremx[i].qty,arg_msg,False) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++ //yyx2012-9-29返回计算可装数库存id数组 If ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // NEXT If ( 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 END IF //yyx2012-9-29返回计算可装数库存id数组计算可装数 IF UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 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_order Destroy uo_ma Destroy uo_cmpl_p RETURN rslt end function public function integer uof_auto_scll (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF uo_option_wkpmtrlware = -1000 THEN rslt = 0 arg_msg = '选项:[057]核算车间库存,读取初始默认值失败,操作取消!' GOTO ext END IF uo_cp_auto_scll uo_mrp_scll uo_mrp_scll = Create uo_cp_auto_scll uo_order_ml uo_order_scll uo_order_scll = Create uo_order_ml uo_outware uo_out,uo_out_ws uo_out = Create uo_outware uo_out.commit_transaction = commit_transaction uo_out.if_getid_ture = False uo_out_ws = Create uo_outware uo_out_ws.commit_transaction = commit_transaction uo_out_ws.if_getid_ture = False //自动扣车间库存 IF uo_option_wkpmtrlware = 0 THEN rslt = 1 GOTO ext END IF s_cp_scll s_cs[],arg_s_cs[],tmp_s_cs[] Long i Long arg_itmxt,j,k,ll_itmxt Boolean if_f //1.取应车间库存物料 FOR i = 1 To it_mxbt Long ll_wrkGrpid_p Int li_ifwkpmtrlware // IF inwaremx[i].relid = 0 THEN CONTINUE IF inwaremx[i].relid = 0 THEN SELECT dftwrkgrpid INTO :ll_wrkGrpid_p FROM u_mtrldef Where mtrlid = :inwaremx[i].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询行:'+String(i)+'物料生产车间资料失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE SELECT wrkGrpid INTO :ll_wrkGrpid_p FROM u_order_ml WHERE orderid = :inwaremx[i].relid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询行:'+String(i)+'生产指令单生产车间资料失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF if ll_wrkGrpid_p = 0 THEN CONTINUE SELECT ifwkpmtrlware INTO :li_ifwkpmtrlware FROM u_sc_wkp Where wrkGrpid = :ll_wrkGrpid_p Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询行:'+String(i)+'指令单生产车间是否使用车间核算标记失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_ifwkpmtrlware = 0 THEN CONTINUE arg_itmxt = 0 arg_s_cs = tmp_s_cs IF uo_mrp_scll.uof_cp_scll(scid,inwaremx[i].relid,inwaremx[i].mtrlid,& inwaremx[i].qty,arg_s_cs,arg_itmxt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR k = 1 To arg_itmxt IF inwaremx[i].relid > 0 THEN IF uo_order_scll.f_add_dstrqty_ws(scid,inwaremx[i].relid,& arg_s_cs[k].wrkGrpid,arg_s_cs[k].mtrlid,arg_s_cs[k].mtrlcode,& arg_s_cs[k].status,arg_s_cs[k].woodcode,arg_s_cs[k].pcode,& arg_s_cs[k].noallocqty,arg_s_cs[k].allocqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF // if_f = FALSE // // FOR j = 1 TO UpperBound(s_cs) // IF s_cs[j].mtrlid = arg_s_cs[k].mtrlid & // AND s_cs[j].wrkGrpid = arg_s_cs[k].wrkGrpid & // AND s_cs[j].scid = arg_s_cs[k].scid & // AND s_cs[j].orderid = arg_s_cs[k].orderid THEN // s_cs[j].qty = s_cs[j].qty + arg_s_cs[k].qty // s_cs[j].noallocqty = s_cs[j].noallocqty + arg_s_cs[k].noallocqty // s_cs[j].allocqty = s_cs[j].allocqty + arg_s_cs[k].allocqty // if_f = TRUE // EXIT // END IF // NEXT // // IF NOT if_f THEN SELECT u_sc_wkp.wrkGrpid INTO :ll_wrkGrpid_p FROM u_sc_workgroup,u_sc_wkp WHERE u_sc_workgroup.wrkGrpid = :arg_s_cs[k].wrkGrpid AND u_sc_wkp.wrkGrpid = u_sc_workgroup.storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组所属车间所属仓库失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF ll_itmxt++ s_cs[ll_itmxt].scid = arg_s_cs[k].scid s_cs[ll_itmxt].orderid = arg_s_cs[k].orderid s_cs[ll_itmxt].mtrlid = arg_s_cs[k].mtrlid s_cs[ll_itmxt].wrkGrpid = arg_s_cs[k].wrkGrpid s_cs[ll_itmxt].qty = arg_s_cs[k].qty s_cs[ll_itmxt].wrkgrpid_p = ll_wrkGrpid_p s_cs[ll_itmxt].noallocqty = arg_s_cs[k].noallocqty s_cs[ll_itmxt].allocqty = arg_s_cs[k].allocqty s_cs[ll_itmxt].mtrlcode = arg_s_cs[k].mtrlcode // END IF NEXT NEXT //2.查重复车间ID Boolean lb_f = False Long ch,ll_scid,ll_storageid Long lay_wrkgrpid[],ll_wrkgrpid Int li_ifnoall,li_ifall Long chc,ll_mtrlwareid,rst_outwareid Decimal ld_price String ls_unit FOR k = 1 To UpperBound(s_cs) FOR j = 1 To UpperBound(lay_wrkgrpid) IF lay_wrkgrpid[j] = s_cs[k].wrkgrpid_p THEN lb_f = True NEXT IF lb_f = False THEN ch++ lay_wrkgrpid[ch] = s_cs[k].wrkgrpid_p END IF lb_f = False NEXT //3.生成出仓单 FOR k = 1 To UpperBound(lay_wrkgrpid) ll_wrkgrpid = lay_wrkgrpid[k] SELECT u_storage.scid, u_sc_wkp.storageid INTO :ll_scid,:ll_storageid FROM u_storage,u_sc_wkp WHERE u_sc_wkp.wrkgrpid = :ll_wrkgrpid AND u_sc_wkp.storageid = u_storage.storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询车间对应仓库属性失败' rslt = 0 GOTO ext END IF IF ll_storageid = 0 THEN arg_msg = '自动领料物料领用车间对应仓库未指定,请检查' rslt = 0 GOTO ext END IF li_ifnoall = 0 li_ifall = 0 FOR j = 1 To UpperBound(s_cs) if s_cs[j].qty = 0 then continue IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid THEN CONTINUE IF s_cs[j].noallocqty > 0 THEN li_ifnoall = 1 END IF IF s_cs[j].allocqty > 0 THEN li_ifall = 1 END IF IF li_ifnoall = 1 And li_ifall = 1 THEN EXIT NEXT IF li_ifnoall = 1 THEN IF uo_out.newbegin(ll_scid,16,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 = ll_storageid uo_out.relint_1 = ll_wrkgrpid chc = 0 FOR j = 1 To UpperBound(s_cs) IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid Or s_cs[j].noallocqty < 0 or s_cs[j].qty = 0 THEN CONTINUE chc++ SELECT top 1 u_mtrlware.mtrlwareid, u_mtrlware.cost , u_mtrldef.unit INTO :ll_mtrlwareid, :ld_price, :ls_unit FROM u_mtrlware,u_mtrldef WHERE u_mtrlware.storageid = :ll_storageid AND u_mtrlware.mtrlid = :s_cs[j].mtrlid AND u_mtrlware.status = :s_cs[j].status AND u_mtrlware.woodcode = :s_cs[j].woodcode AND u_mtrlware.pcode = :s_cs[j].pcode AND u_mtrlware.mtrlid = u_mtrldef.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ll_mtrlwareid = 0 ld_price = 0 SELECT unit INTO :ls_unit FROM u_mtrldef Where mtrlid = :s_cs[j].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '车间反扣用料>>查询物料'+s_cs[j].mtrlcode+'库存单位失败,'+commit_transaction.SQLErrText GOTO ext END IF IF f_insert_0_mtrlware(ll_mtrlwareid,s_cs[j].mtrlid,s_cs[j].mtrlcode,ll_storageid,0,s_cs[j].status,s_cs[j].woodcode,s_cs[j].pcode,'','','',0,arg_msg) = 0 THEN arg_msg = '车间反扣用料>>增加车间仓0库存失败,'+arg_msg rslt = 0 GOTO ext END IF END IF IF uo_out.acceptmx(ll_mtrlwareid,s_cs[j].noallocqty,& ld_price,1,'',chc,arg_msg,& 1,s_cs[j].orderid,0,0,'',0,s_cs[j].wrkGrpid,ls_unit,s_cs[j].noallocqty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN arg_msg = '车间反扣用料>>物料'+s_cs[j].mtrlcode+','+arg_msg 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(ll_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 END IF IF li_ifall = 1 THEN IF uo_out_ws.newbegin(ll_scid,19,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out_ws.relid = inwareid uo_out_ws.outdate = indate uo_out_ws.outrep = inrep uo_out_ws.part = inwarecode uo_out_ws.dscrp = dscrp uo_out_ws.cusname = '生产进仓车间自动出仓(已分配)' uo_out_ws.storageid = ll_storageid uo_out_ws.relint_1 = ll_wrkgrpid chc = 0 FOR j = 1 To UpperBound(s_cs) IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid Or s_cs[j].allocqty < 0 or s_cs[j].qty = 0 THEN CONTINUE chc++ SELECT top 1 u_mtrlware.mtrlwareid, u_mtrlware.cost , u_mtrldef.unit INTO :ll_mtrlwareid, :ld_price, :ls_unit FROM u_mtrlware,u_mtrldef WHERE u_mtrlware.storageid = :ll_storageid AND u_mtrlware.mtrlid = :s_cs[j].mtrlid AND u_mtrlware.status = :s_cs[j].status AND u_mtrlware.woodcode = :s_cs[j].woodcode AND u_mtrlware.pcode = :s_cs[j].pcode AND u_mtrlware.mtrlid = u_mtrldef.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ll_mtrlwareid = 0 ld_price = 0 SELECT unit INTO :ls_unit FROM u_mtrldef Where mtrlid = :s_cs[j].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '车间反扣用料>>查询物料'+s_cs[j].mtrlcode+'库存单位失败,'+commit_transaction.SQLErrText GOTO ext END IF IF f_insert_0_mtrlware(ll_mtrlwareid,s_cs[j].mtrlid,s_cs[j].mtrlcode,ll_storageid,0,s_cs[j].status,s_cs[j].woodcode,s_cs[j].pcode,'','','',0,arg_msg) = 0 THEN arg_msg = '车间反扣用料>>增加车间仓0库存失败,'+arg_msg rslt = 0 GOTO ext END IF END IF // // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '车间反扣用料>>查询物料库存资料失败(已分配),查检是否已开领料单并进行二审' // rslt = 0 // GOTO ext // END IF IF uo_out_ws.acceptmx(ll_mtrlwareid,s_cs[j].allocqty,& ld_price,1,'',chc,arg_msg,& 1,s_cs[j].orderid,0,0,'',0,s_cs[j].wrkGrpid,ls_unit,s_cs[j].allocqty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN arg_msg = '车间反扣用料>>物料'+s_cs[j].mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF NEXT IF uo_out_ws.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_outwareid = uo_out_ws.outwareid //2.原事务审核出仓单 IF uo_out_ws.getinfo(ll_scid,rst_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out_ws.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_mrp_scll Destroy uo_order_scll Destroy uo_out Destroy uo_out_ws RETURN rslt end function public function integer uof_auto_scll_caudit (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF uo_option_wkpmtrlware = -1000 THEN rslt = 0 arg_msg = '选项:[057]核算车间库存,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_wkpmtrlware = 0 THEN rslt = 1 GOTO ext END IF uo_order_ml uo_order_scll uo_order_scll = Create uo_order_ml uo_outware uo_out uo_out = Create uo_outware uo_out.commit_transaction = commit_transaction uo_out.if_getid_ture = False Long rst_scid[],rst_outwareid[],out_i = 1 //出仓id String rst_outwarecode[] Long k,l Long ll_orderid_arr Long ll_wrkgrpid,ll_orderid,ll_mtrlid Long ll_wrkgrpid_array[],ll_orderid_array[],ll_mtrlid_array[] String ls_mtrlcode,ls_status,ls_woodcode,ls_pcode String ls_mtrlcode_array[],ls_status_array[],ls_woodcode_array[],ls_pcode_array[] Decimal ld_qty,ld_noallocqty,ld_allocqty decimal ld_noallocqty_array[],ld_allocqty_array[] Long ll_billtype DECLARE cur_out_1 CURSOR FOR SELECT outwareid,scid,outwarecode FROM u_outware WHERE part = :inwarecode And (billtype = 16 Or billtype = 19) Using commit_transaction; OPEN cur_out_1; FETCH cur_out_1 Into :rst_outwareid[out_i],:rst_scid[out_i],:rst_outwarecode[out_i]; DO WHILE sqlca.SQLCode = 0 out_i++ FETCH cur_out_1 Into :rst_outwareid[out_i],:rst_scid[out_i],:rst_outwarecode[out_i]; LOOP out_i = out_i - 1 CLOSE cur_out_1; IF out_i > 0 THEN ll_orderid_arr = 0 FOR k = 1 To out_i DECLARE cur_mx CURSOR FOR SELECT u_outwaremx.relprintid, u_outware.billtype, u_outwaremx.relid, u_outwaremx.mtrlid, u_mtrldef.mtrlcode, 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 INNER JOIN u_mtrldef ON u_outwaremx.mtrlid = u_mtrldef.mtrlid WHERE u_outware.scid = :rst_scid[k] AND u_outware.outwareid = :rst_outwareid[k] Using commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :ll_wrkgrpid,:ll_billtype,:ll_orderid, :ll_mtrlid,:ls_mtrlcode,:ls_status,:ls_woodcode,:ls_pcode,:ld_qty; DO WHILE commit_transaction.SQLCode = 0 IF ll_billtype = 16 THEN ld_noallocqty = ld_qty ld_allocqty = 0 ELSE ld_allocqty = ld_qty ld_noallocqty = 0 END IF IF ll_orderid > 0 THEN ll_orderid_arr++ ll_orderid_array[ll_orderid_arr] = ll_orderid ld_noallocqty_array[ll_orderid_arr] = ld_noallocqty ld_allocqty_array[ll_orderid_arr] = ld_allocqty ll_wrkgrpid_array[ll_orderid_arr] = ll_wrkgrpid ll_mtrlid_array[ll_orderid_arr] = ll_mtrlid ls_mtrlcode_array[ll_orderid_arr] = ls_mtrlcode ls_status_array[ll_orderid_arr] = ls_status ls_woodcode_array[ll_orderid_arr] = ls_woodcode ls_pcode_array[ll_orderid_arr] = ls_pcode END IF FETCH cur_mx INTO :ll_wrkgrpid,:ll_billtype,:ll_orderid, :ll_mtrlid,:ls_mtrlcode,:ls_status,:ls_woodcode,:ls_pcode,:ld_qty; LOOP CLOSE cur_mx; FOR l = 1 To ll_orderid_arr IF uo_order_scll.f_add_dstrqty_ws(rst_scid[k],ll_orderid_array[l],& ll_wrkgrpid_array[l],ll_mtrlid_array[l],ls_mtrlcode_array[l],& ls_status_array[l],ls_woodcode_array[l],ls_pcode_array[l],& 0 - ld_noallocqty_array[l],0 - ld_allocqty_array[l],arg_msg,False) = 0 THEN arg_msg = '车间反扣用料>>'+rst_outwarecode[k]+','+arg_msg rslt = 0 GOTO ext END IF NEXT //撤审出仓单,再删除 IF uo_out.getinfo(rst_scid[k],rst_outwareid[k],arg_msg) = 0 THEN arg_msg = '车间反扣用料>>撤审相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg rslt = 0 GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN arg_msg = '车间反扣用料>>撤审相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg rslt = 0 GOTO ext END IF IF uo_out.del(rst_scid[k],rst_outwareid[k],0,arg_msg,False) = 0 THEN arg_msg = '车间反扣用料>>删除相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_out Destroy uo_order_scll RETURN rslt end function public function integer uof_get_porder (ref long arg_orderid[], ref decimal arg_acmpqty[], ref string arg_msg);Int rslt = 1 Long ll_i,ll_j Long ll_porderid Long cnt = 0 Long ll_orderid_ref[] Decimal ld_acmpqty Decimal ld_acmpqty_ref[] Long li_ifpackpro,li_autoinstall Int li_ifpack FOR ll_i = 1 TO it_mxbt IF inwaremx[ll_i].relid = 0 THEN CONTINUE SELECT u_order_ml.porderid,u_mtrldef.ifpack INTO :ll_porderid,:li_ifpack FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :inwaremx[ll_i].relid AND u_order_ml.scid = :scid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行'+String(ll_i)+',查询相关主生产计划失败'+commit_transaction.SQLErrText GOTO ext END IF IF ll_porderid = 0 THEN CONTINUE IF li_ifpack = 0 THEN CONTINUE SELECT u_mtrldef.ifpackpro,u_mtrldef.autoinstall INTO :li_ifpackpro,:li_autoinstall FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :ll_porderid AND u_order_ml.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行'+String(ll_i)+',查询相关主计划产品是否全包件产品及自动组装失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_ifpackpro = 0 OR li_autoinstall = 0 THEN CONTINUE //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成 FOR ll_j = 1 TO cnt IF ll_porderid = ll_orderid_ref[ll_j] THEN GOTO next_ END IF NEXT SELECT acmpqty INTO :ld_acmpqty FROM u_order_ml WHERE orderid = :ll_porderid AND scid = :scid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行'+String(ll_i)+',查询相关主生产计划已完成数失败'+commit_transaction.SQLErrText GOTO ext END IF cnt++ ll_orderid_ref[cnt] = ll_porderid ld_acmpqty_ref[cnt] = ld_acmpqty next_: NEXT ext: arg_orderid = ll_orderid_ref arg_acmpqty = ld_acmpqty_ref RETURN rslt end function public function integer uof_auto_di_in (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i Long ll_inwareid_in IF UpperBound(arg_orderid) <= 0 THEN rslt = 1 GOTO ext END IF Long ll_mtrlid String ls_mtrlcode,ls_plancode,ls_status,ls_woodcode,ls_pcode Long ll_cusid Decimal ld_planprice,ld_acmpqty Long cnt = 0 string ls_unit //生成相关进仓单 uo_inware uo_in uo_in = CREATE uo_inware uo_in.commit_transaction = commit_transaction uo_in.if_getid_ture = FALSE IF uo_in.newbegin(scid,19,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = inwareid uo_in.indate = indate uo_in.inrep = opemp uo_in.part = inwarecode uo_in.dscrp = dscrp uo_in.storageid = storageid uo_in.sptname = '自动组装进仓单' FOR ll_i = 1 TO UpperBound(arg_orderid) SELECT u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_Order_ml.taskrelcode, u_Order_ml.cusid, u_mtrldef.mtrlcode, u_mtrldef.planprice, u_Order_ml.acmpqty, u_mtrldef.unit INTO :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ll_cusid, :ls_mtrlcode, :ld_planprice, :ld_acmpqty, :ls_unit FROM u_Order_ml INNER JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid WHERE u_Order_ml.orderid = :arg_orderid[ll_i] AND u_Order_ml.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询主生产计划相关信息失败'+commit_transaction.SQLErrText GOTO ext END IF IF ld_acmpqty - arg_acmpqty[ll_i] = 0 THEN CONTINUE cnt++ IF uo_in.acceptmx(ll_i,& ll_mtrlid,& ls_mtrlcode,& ls_plancode,& ls_status,& ld_acmpqty - arg_acmpqty[ll_i],& ld_planprice,& 1,& '',& ARG_MSG,& 0,0,0,ls_woodcode,& ls_pcode,& ll_cusid,& ls_unit,& 1,ld_acmpqty - arg_acmpqty[ll_i],& 0,0,'','',0,0,'','',& ld_acmpqty - arg_acmpqty[ll_i],& 0) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF cnt > 0 THEN IF uo_in.Save(FALSE,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF ll_inwareid_in = uo_in.inwareid IF uo_in.getinfo(scid,ll_inwareid_in,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 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_in RETURN rslt end function public function integer uof_auto_di_out (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,ll_j Long ll_outwareid_out IF UpperBound(arg_orderid) <= 0 THEN rslt = 1 GOTO ext END IF Long ll_mtrlid String ls_mtrlcode,ls_plancode,ls_status,ls_woodcode,ls_pcode Long ll_cusid Decimal ld_planprice,ld_acmpqty Long cnt = 0 Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro String ls_msg Long ll_SonMtrlid[],ll_storageid,ll_storageid_f String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] String ls_status_find,ls_woodcode_find,ls_pcode_find Decimal ld_Sonscale[] Decimal ld_mxqty Long it_mxt = 1 Long ll_row Long ll_mtrlwareid Decimal ld_rqty Decimal ld_noallocqty,ld_cost Long i //生成出仓单 uo_outware uo_out uo_out = CREATE uo_outware uo_out.commit_transaction = commit_transaction uo_out.if_getid_ture = FALSE IF uo_out.newbegin(scid,18,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = inwareid uo_out.outdate = indate uo_out.outrep = opemp uo_out.part = inwarecode uo_out.dscrp = dscrp uo_out.cusname = '自动组装出仓单' uo_out.storageid = storageid FOR ll_i = 1 TO UpperBound(arg_orderid) SELECT u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_Order_ml.taskrelcode, u_Order_ml.cusid, u_mtrldef.mtrlcode, u_Order_ml.acmpqty INTO :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ll_cusid, :ls_mtrlcode, :ld_acmpqty FROM u_Order_ml INNER JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid WHERE u_Order_ml.orderid = :arg_orderid[ll_i] AND u_Order_ml.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询主生产计划相关信息失败'+commit_transaction.SQLErrText GOTO ext END IF IF ld_acmpqty - arg_acmpqty[ll_i] = 0 THEN CONTINUE cnt++ IF f_cmp_di_qty(ll_mtrlid,storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,'',ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ls_msg,ARG_MSG) = 0 THEN ARG_MSG = '计算可装数失败,'+ARG_MSG rslt = 0 GOTO ext END IF IF ld_ref_qty < ld_acmpqty - arg_acmpqty[ll_i] THEN rslt = 0 ARG_MSG = '物料:'+ls_mtrlcode+',可装数:'+String(ld_ref_qty,'#,##0.##########')+',少于此次进仓数:'+String(ld_acmpqty - arg_acmpqty[ll_i],'#,##0.##########') GOTO ext END IF DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype 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.ifdft = 1 ); OPEN cur_pf; FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[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]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[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]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; IF it_mxt = 0 THEN rslt = 0 ARG_MSG = '产品:'+ls_mtrlcode+',没有建立默认结构,不能计算' END IF 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_acmpqty - arg_acmpqty[ll_i]) DECLARE m_cur CURSOR FOR SELECT mtrlwareid, noallocqty, cost FROM u_mtrlware WHERE mtrlid = :ll_SonMtrlid[ll_j] AND storageid = :storageid AND ( status = :ls_status_find ) AND ( woodcode = :ls_woodcode_find ) AND ( pcode = :ls_pcode_find ) ORDER BY noallocqty DESC USING commit_transaction; OPEN m_cur; FETCH m_cur INTO :ll_mtrlwareid, :ld_noallocqty , :ld_cost; DO WHILE commit_transaction.SQLCode = 0 AND ld_rqty > 0 i++ IF ld_noallocqty >= ld_rqty THEN ld_mxqty = ld_rqty ld_rqty = 0 ELSE ld_mxqty = ld_noallocqty ld_rqty = ld_rqty - ld_noallocqty END IF IF uo_out.acceptmx(ll_mtrlwareid,& ld_mxqty,& ld_cost,& 1,'',i,ARG_MSG,0,0,0,0,'',0,0,'',0,0,'','',0,0,'',0,0,0,0,'','') = 0 THEN rslt = 0 GOTO ext END IF FETCH m_cur INTO :ll_mtrlwareid, :ld_noallocqty, :ld_cost; LOOP CLOSE m_cur; NEXT NEXT IF cnt > 0 THEN IF uo_out.Save(FALSE,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF ll_outwareid_out = uo_out.outwareid 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 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_out RETURN rslt end function public function integer uof_auto_di_caudit (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt Long ll_inwareid ,ll_outwareid cnt = 0 uo_inware uo_in uo_in = CREATE uo_inware uo_in.commit_transaction = commit_transaction uo_in.if_getid_ture = FALSE uo_outware uo_out uo_out = CREATE uo_outware uo_out.commit_transaction = commit_transaction uo_out.if_getid_ture = FALSE //撤审删除进仓 SELECT count(*) INTO :cnt FROM u_inware WHERE billtype = 19 AND relid = :inwareid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有相关自动组装进仓单失败'+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT inwareid INTO :ll_inwareid FROM u_inware WHERE billtype = 19 AND relid = :inwareid AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是相关自动组装进仓单失败'+commit_transaction.SQLErrText GOTO ext END IF IF uo_in.getinfo(scid,ll_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.c_auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.del(scid,ll_inwareid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF //撤审删除出仓 cnt = 0 SELECT count(*) INTO :cnt FROM u_outware WHERE billtype = 18 AND relid = :inwareid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有相关自动组装出仓单失败'+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT outwareid INTO :ll_outwareid FROM u_outware WHERE billtype = 18 AND relid = :inwareid AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是相关自动组装出仓单失败'+commit_transaction.SQLErrText GOTO ext END IF IF uo_out.getinfo(scid,ll_outwareid,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,0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_in DESTROY uo_out RETURN rslt end function public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long ll_i IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF priceflag = 1 THEN rslt = 0 arg_msg = "单据已经确认,不能再确认" GOTO ext END IF IF uo_option_cp_inware_scll_rate = 1 THEN FOR ll_i = 1 To it_mxbt IF uof_check_scll_rate(arg_scid,arg_billid,inwaremx[ll_i].printid,inwaremx[ll_i].relid,inwaremx[ll_i].mtrlid,inwaremx[ll_i].qty,1,arg_msg) = 0 THEN rslt = 0 arg_msg = '行:'+String(ll_i)+','+arg_msg GOTO ext END IF NEXT END IF UPDATE u_inware SET priceflag = 1, pricedate = getdate(), pricerep = :publ_operator WHERE inwareid = :arg_billid AND scid = :arg_scid And priceflag = 0 ; 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 priceflag = 1 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_planmx_fqty (long arg_scid, long arg_orderid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i Decimal ld_nofqty,ld_update_qty,ld_qty_in,ld_fqty String ls_aps_plancode ld_qty_in = arg_qty datastore ds_planmx ds_planmx = Create datastore ds_planmx.DataObject = 'dw_order_zl_planmx_index' ds_planmx.SetTransObject(commit_transaction) ds_planmx.Retrieve(arg_scid,arg_orderid) IF arg_qty > 0 THEN ds_planmx.SetSort('begindate A') ELSE ds_planmx.SetSort('begindate D') END IF ds_planmx.Sort() FOR ll_i = 1 To ds_planmx.RowCount() ls_aps_plancode = ds_planmx.Object.aps_plancode[ll_i] IF ld_qty_in = 0 THEN EXIT IF arg_qty > 0 THEN ld_nofqty = ds_planmx.Object.orderqty[ll_i] - ds_planmx.Object.fqty[ll_i] IF ld_nofqty > ld_qty_in THEN ld_update_qty = ld_qty_in ld_qty_in = 0 ELSE ld_update_qty = ld_nofqty ld_qty_in = ld_qty_in - ld_nofqty END IF ELSE ld_fqty = ds_planmx.Object.fqty[ll_i] IF ld_fqty + ld_qty_in > 0 THEN ld_update_qty = ld_qty_in ld_qty_in = 0 ELSE ld_update_qty = 0 - ld_fqty ld_qty_in = ld_qty_in + ld_fqty END IF END IF UPDATE u_order_zl_planmx SET fqty = fqty + :ld_update_qty WHERE scid = :arg_scid AND orderid = :arg_orderid And aps_plancode = :ls_aps_plancode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新进仓计划完成数失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy ds_planmx RETURN rslt end function public function integer uof_auto_return_fp (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_shareqty, long arg_mtrlwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,j DateTime server_dt Decimal ld_tmp_qty,ld_qty_return Long ll_array,ll_array2,ll_if_mx_if_change,ll_cnt,ll_mtrlid_task Long ll_taskid_return,ll_printid_return Int li_ifpackpro,li_status_task Decimal ld_assignqty,ld_sonscale,ld_sonscale_fm,ld_saleqty,ld_ok_returnqty String ls_status_task Boolean if_cf = False s_mtrlcfg_expr s_pz[] s_mtrlware_trans_fp s_fp_save uo_mtrlware_trans_fp uo_return uo_return = Create uo_mtrlware_trans_fp datastore ds_lendmx ds_lendmx = Create datastore ds_lendmx.DataObject = 'ds_auto_return_pf' ds_lendmx.SetTransObject(sqlca) SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ds_lendmx.Retrieve(arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode) IF ds_lendmx.RowCount() > 0 THEN //yyx20130122 SELECT ifpackpro INTO :li_ifpackpro FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单明细包件产品属性失败, "+commit_transaction.SQLErrText GOTO ext END IF //yyx20130122_end ld_tmp_qty = arg_shareqty FOR ll_i = 1 To ds_lendmx.RowCount() ld_assignqty = 0 ld_saleqty = 0 IF ld_tmp_qty <= 0 THEN EXIT s_fp_save.scid = arg_scid s_fp_save.billid = 0 s_fp_save.billdate = server_dt s_fp_save.inrep = publ_operator s_fp_save.part = inwarecode s_fp_save.dscrp = '生产进仓单:'+inwarecode+'仓审自动生成' s_fp_save.storageid = ds_lendmx.Object.storageid[ll_i] s_fp_save.taskid = arg_taskid s_fp_save.printid = arg_printid s_fp_save.billtype = 2 s_fp_save.fpgrade = ds_lendmx.Object.fpgrade[ll_i] ll_array = 0 ll_array2 = 0 IF ld_tmp_qty > 0 THEN ll_taskid_return = ds_lendmx.Object.taskid[ll_i] ll_printid_return = ds_lendmx.Object.taskprintid[ll_i] SELECT status INTO :li_status_task FROM u_saletask WHERE u_saletask.scid = :arg_scid AND u_saletask.taskid = :ll_taskid_return Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单状态失败, "+commit_transaction.SQLErrText GOTO ext END IF IF li_status_task = 1 THEN //yyx20120122 SELECT u_saletaskmx.saleqty - u_saletaskmx.stopqty, u_saletaskmx.status, u_saletaskmx.mtrlid INTO :ld_saleqty,:ls_status_task,:ll_mtrlid_task FROM u_saletaskmx WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :ll_taskid_return AND u_saletaskmx.printid = :ll_printid_return Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单明细订货数量失败, "+commit_transaction.SQLErrText GOTO ext END IF IF li_ifpackpro = 0 THEN ld_sonscale = 1 ld_sonscale_fm = 1 ELSEIF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN IF li_ifpackpro = 2 THEN SELECT count(*) INTO :ll_cnt FROM u_SaleTaskMx_pf WHERE u_SaleTaskMx_pf.scid = :arg_scid AND u_SaleTaskMx_pf.taskid = :ll_taskid_return AND u_SaleTaskMx_pf.printid = :ll_printid_return Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ll_if_mx_if_change = 0 END IF IF ll_cnt > 0 THEN ll_if_mx_if_change = 1 ELSE ll_if_mx_if_change = 0 END IF ELSE ll_if_mx_if_change = 0 END IF IF ll_if_mx_if_change = 1 THEN SELECT u_SaleTaskMx_pf.sonscale, u_SaleTaskMx_pf.sonscale_fm INTO :ld_sonscale,:ld_sonscale_fm FROM u_SaleTaskMx_pf WHERE u_SaleTaskMx_pf.scid = :arg_scid AND u_SaleTaskMx_pf.taskid = :ll_taskid_return AND u_SaleTaskMx_pf.printid = :ll_printid_return AND u_SaleTaskMx_pf.sonmtrlid = :arg_mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单明细个性清单组成数失败, "+commit_transaction.SQLErrText GOTO ext END IF ELSE SELECT u_prdpf.sonscale,1 INTO :ld_sonscale,:ld_sonscale_fm FROM u_prdpf INNER join u_mtrl_pf on ( u_prdpf.mtrlid = u_mtrl_pf.mtrlid AND u_mtrl_pf.ifdft = 1 ) WHERE u_prdpf.sonmtrlid = :arg_mtrlid AND u_prdpf.mtrlid = :ll_mtrlid_task Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单明细默认清单组成数失败, "+commit_transaction.SQLErrText GOTO ext END IF END IF ELSEIF li_ifpackpro = 4 THEN f_checkpz(ls_status_task,s_pz[]) FOR j = 1 To UpperBound(s_pz[]) IF s_pz[j].cfgname = arg_status THEN ld_sonscale = Dec(s_pz[j].qty) ld_sonscale_fm = 1 if_cf = True END IF NEXT IF Not if_cf THEN rslt = 0 arg_msg = "查询还货订单明细组合配置子件组成数失败,请检查组合配置信息 " GOTO ext END IF END IF IF li_ifpackpro = 4 THEN SELECT isnull(SUM(u_mtrlware_assign.assignqty),0) INTO :ld_assignqty FROM u_mtrlware_assign,u_mtrlware WHERE u_mtrlware_assign.scid = u_mtrlware.scid AND u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.assigntype = 1 AND u_mtrlware_assign.scid = :arg_scid AND u_mtrlware_assign.Relbillid = :ll_taskid_return AND u_mtrlware_assign.Relprintid = :ll_printid_return AND u_mtrlware_assign.mtrlid = :arg_mtrlid AND u_mtrlware.status = :arg_status Using commit_transaction ; ELSE SELECT isnull(SUM(u_mtrlware_assign.assignqty),0) INTO :ld_assignqty FROM u_mtrlware_assign WHERE u_mtrlware_assign.assigntype = 1 AND u_mtrlware_assign.scid = :arg_scid AND u_mtrlware_assign.Relbillid = :ll_taskid_return AND u_mtrlware_assign.Relprintid = :ll_printid_return AND u_mtrlware_assign.mtrlid = :arg_mtrlid Using commit_transaction ; END IF IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询还货订单明细已分配数量失败, "+commit_transaction.SQLErrText GOTO ext END IF IF ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty > 0 THEN IF ds_lendmx.Object.noreturnqty[ll_i] > ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty THEN ld_ok_returnqty = ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty ELSE ld_ok_returnqty = ds_lendmx.Object.noreturnqty[ll_i] END IF IF ld_tmp_qty > ld_ok_returnqty THEN ld_qty_return = ld_ok_returnqty ld_tmp_qty = ld_tmp_qty - ld_ok_returnqty ELSE ld_qty_return = ld_tmp_qty ld_tmp_qty = 0 END IF // // IF ld_tmp_qty > ds_lendmx.Object.noreturnqty[ll_i] THEN // ld_qty_return = ds_lendmx.Object.noreturnqty[ll_i] // ld_tmp_qty = ld_tmp_qty - ds_lendmx.Object.noreturnqty[ll_i] // ELSE // ld_qty_return = ld_tmp_qty // ld_tmp_qty = 0 // END IF //调入 ll_array++ s_fp_save.arg_s_mx[ll_array].printid = ll_array s_fp_save.arg_s_mx[ll_array].transtype = 1 s_fp_save.arg_s_mx[ll_array].qty = ld_qty_return s_fp_save.arg_s_mx[ll_array].mxdscrp = '' s_fp_save.arg_s_mx[ll_array].taskid = ds_lendmx.Object.taskid[ll_i] s_fp_save.arg_s_mx[ll_array].taskprintid = ds_lendmx.Object.taskprintid[ll_i] s_fp_save.arg_s_mx[ll_array].mxprintid = ds_lendmx.Object.mxprintid[ll_i] s_fp_save.arg_s_mx[ll_array].mtrlwareid = arg_mtrlwareid //ds_lendmx.Object.mtrlwareid[ll_j] s_fp_save.arg_s_mx[ll_array].relid = ds_lendmx.Object.relid[ll_i] s_fp_save.arg_s_mx[ll_array].Relprintid = ds_lendmx.Object.Relprintid[ll_i] //yyx20120906 //调出 ll_array2++ s_fp_save.arg_s_mx2[ll_array2].printid = ds_lendmx.Object.mxprintid[ll_i] s_fp_save.arg_s_mx2[ll_array2].mtrlid = arg_mtrlid s_fp_save.arg_s_mx2[ll_array2].status = arg_status s_fp_save.arg_s_mx2[ll_array2].woodcode = arg_woodcode s_fp_save.arg_s_mx2[ll_array2].pcode = arg_pcode s_fp_save.arg_s_mx2[ll_array2].transqty = ld_qty_return s_fp_save.arg_s_mx2[ll_array2].sonscale = ds_lendmx.Object.sonscale[ll_i] s_fp_save.arg_s_mx2[ll_array2].assignid = 0 s_fp_save.arg_s_mx2[ll_array2].mtrlwareid = arg_mtrlwareid s_fp_save.arg_s_mx2[ll_array2].taskid = arg_taskid s_fp_save.arg_s_mx2[ll_array2].taskprintid = arg_printid s_fp_save.arg_s_mx2[ll_array2].mxtype = 0 END IF END IF END IF IF ll_array > 0 And ll_array2 > 0 THEN IF uo_return.Save(s_fp_save,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '自动建立库存分配还货单失败,'+arg_msg GOTO ext END IF IF uo_option_inware_cp_autoreturnfp_audit = 0 Or uo_option_inware_cp_autoreturnfp_audit = 2 THEN IF uo_return.affirm(uo_return.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核自动建立库存分配还货单失败,'+arg_msg GOTO ext END IF END IF IF uo_option_inware_cp_autoreturnfp_audit = 0 Or uo_option_inware_cp_autoreturnfp_audit = 2 And uo_mtrlware_trans_fp_return_secaudit = 0 THEN IF uo_return.audit(uo_return.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核自动建立库存分配还货单失败,'+arg_msg GOTO ext END IF END IF END IF NEXT END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_return Destroy ds_lendmx RETURN rslt end function public function integer fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据未审核" GOTO ext END IF IF fkflag = 1 THEN rslt = 0 arg_msg = "单据已反扣" GOTO ext END IF UPDATE u_inware SET fkemp = :publ_operator, fkdate = getdate(), fkflag = 1 WHERE scid = :arg_scid AND u_inware.inwareid = :arg_inwareid AND flag = 1 And fkflag = 0 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 uof_auto_scll(arg_msg,False) = 0 THEN 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 c_fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据未审核" GOTO ext END IF IF fkflag = 0 THEN rslt = 0 arg_msg = "单据未反扣" GOTO ext END IF UPDATE u_inware SET fkemp = '', fkdate = null, fkflag = 0 WHERE scid = :arg_scid AND u_inware.inwareid = :arg_inwareid And fkflag = 1 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 uof_auto_scll_caudit(arg_msg,False) = 0 THEN 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_auto_scll_p (ref string arg_msg);Int rslt = 1 String ls_msg String ls_inwarecode Long ll_rowcnt, i Long ll_scid, ll_inwareid Long ll_suc, ll_fail datastore ds ds = Create datastore ds.DataObject = "ds_inware_cp_not_fk" ds.SetTransObject(commit_transaction) ll_rowcnt = ds.Retrieve() FOR i = 1 To ll_rowcnt ll_scid = ds.Object.u_inware_scid[i] ll_inwareid = ds.Object.inwareid[i] ls_inwarecode = ds.Object.inwarecode[i] IF fkauditing(ll_scid, ll_inwareid, True, ls_msg) = 0 THEN ls_msg = "生产进仓单:"+ls_inwarecode + ","+ls_msg arg_msg += ls_msg + "~r~n" ll_fail++ f_setsysoplog('生产进仓单','自动反扣失败,'+ls_msg,ls_msg,True) ELSE ll_suc++ END IF NEXT f_setsysoplog('生产进仓单','自动批反扣,成功:'+String(ll_suc)+", 失败:"+String(ll_fail),ls_msg,True) Destroy ds if ll_fail > 0 then rslt = 0 end if RETURN rslt end function public function integer uof_add_relcode (long arg_scid, long arg_inwareid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 arg_relcode = Trim(arg_relcode) If it_updatebegin Or it_newbegin Then rslt = 0 arg_msg = "编辑状态下不可用" Goto ext End If If p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 Then rslt = 0 Goto ext End If If flag = 0 Then rslt = 0 arg_msg = "非审核状态下不可用" Goto ext End If Update u_inware Set part = :arg_relcode Where scid = :arg_scid And inwareid = :arg_inwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致添加相关号操作失败"+"~n"+sqlca.SQLErrText Goto ext End If part = arg_relcode ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return (rslt) end function public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i If uo_option_cpinware_update_planprice = -1000 Then rslt = 0 arg_msg = '选项:[256]生产进仓单审核更新计划成本价,读取初始默认值失败,操作取消!' Goto ext End If If getinfo(arg_scid,arg_billid,arg_msg) = 0 Then rslt = 0 Goto ext End If If secflag = 1 Then rslt = 0 arg_msg = "单据已经财审,不能再财审" Goto ext End If For i = 1 To it_mxbt If uo_option_cpinware_update_planprice = 2 Then If f_update_planprice(inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,2,inwaremx[i].fprice,arg_msg,False,commit_transaction) = 0 Then rslt = 0 arg_msg = '更新计划价失败,行:'+String(i)+','+arg_msg Goto ext End If End If Next Update u_inware Set secflag = 1, secauditingdate = getdate(), secauditingrep = :publ_operator Where inwareid = :arg_billid And scid = :arg_scid And secflag = 0 ; 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 secflag = 1 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_add_pack_fpqty (long arg_scid, long arg_orderid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_cpmtrlid,ll_porderid Int li_ordertype,li_ifpackpro String ls_taskrelcode,ls_status,ls_woodcode,ls_pcode Long ll_storageid,ll_cusid,ll_cpmtrlwareid Int li_storagetype,li_balctype uo_cmpl_packpro uo_pack uo_pack = Create uo_cmpl_packpro uo_pack.commit_transaction = commit_transaction Select u_Order_ml_p.mtrlid, u_Order_ml.ordertype, u_mtrldef.ifpackpro, isnull(u_order_ml.porderid,0), u_order_ml_p.taskrelcode, u_order_ml_p.status_mode, u_order_ml_p.woodcode, u_order_ml_p.pcode, u_mtrldef.storagetype Into :ll_cpmtrlid, :li_ordertype, :li_ifpackpro, :ll_porderid, :ls_taskrelcode, :ls_status, :ls_woodcode, :ls_pcode, :li_storagetype FROM u_Order_ml u_order_ml_p INNER JOIN u_mtrldef ON u_order_ml_p.mtrlid = u_mtrldef.mtrlid RIGHT OUTER JOIN u_Order_ml ON u_order_ml_p.OrderID = u_Order_ml.porderid AND u_order_ml_p.scid = u_Order_ml.scid Where u_order_ml.scid = :arg_scid And u_Order_ml.OrderID = :arg_orderid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关指令单信息失败,'+commit_transaction.SQLErrText Goto ext End If If ll_porderid = 0 Then rslt = 1 Goto ext End If //如果进仓的不是指令单,不执行 If li_ordertype <> 4 Then rslt = 1 Goto ext End If //如果上级生产计划不是通用包件产品,不执行 If li_ifpackpro <> 1 Then rslt = 1 Goto ext End If //找生产计划产品对应的库存ID ll_storageid = storageid select balctype into :li_balctype from u_storage where storageid = :ll_storageid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询进仓单仓库信息失败,'+commit_transaction.SQLErrText Goto ext End If If li_balctype = 0 Then ll_cusid = 0 Else If li_storagetype = 1 Then ll_cusid = 0 End If Select top 1 mtrlwareid Into :ll_cpmtrlwareid From u_mtrlware Where mtrlid = :ll_cpmtrlid And status = :ls_status And storageid = :ll_storageid And woodcode = :ls_woodcode And plancode = '' And pcode = :ls_pcode And sptid = :ll_cusid And mtrlcuscode = ''; If commit_transaction.SQLCode = -1 Then arg_msg = '查询产品库存失败,'+sqlca.SQLErrText rslt = 0 Goto ext ElseIf commit_transaction.SQLCode = 100 Then ll_cpmtrlwareid = 0 ll_cpmtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ll_cpmtrlwareid <= 0 Then rslt = 0 Goto ext End If Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode) Values(:arg_scid,:ll_cpmtrlwareid,:ll_cpmtrlid,:ll_storageid,0,:ls_status,'',:ls_woodcode,:ls_pcode,:ll_cusid,'') Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '主生产计划产品加0库存失败或物料已经有库存,请检查,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If End If If uo_pack.uof_add_fpqty(arg_scid,arg_mtrlwareid,arg_mtrlid,ll_cpmtrlwareid,ll_cpmtrlid,arg_qty,arg_msg,False) = 0 Then 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 Destroy uo_pack Return rslt end function on uo_inware_cp.create call super::create end on on uo_inware_cp.destroy call super::destroy end on event constructor;call super::constructor;String str_optionvalue,arg_msg f_get_sys_option_value('224',str_optionvalue,arg_msg) uo_option_order_ml_cpfp_noreltask = Long(str_optionvalue) f_get_sys_option_value('057',str_optionvalue,arg_msg) uo_option_wkpmtrlware = Long(str_optionvalue) f_get_sys_option_value('256',str_optionvalue,arg_msg) uo_option_cpinware_update_planprice = long(str_optionvalue) f_get_sys_option_value('112',str_optionvalue,arg_msg) uo_option_ifovertask_cp = Long(str_optionvalue) f_get_sys_option_value('346',str_optionvalue,arg_msg) uo_mtrlware_trans_fp_return_secaudit = Long(str_optionvalue) f_get_sys_option_value('354',str_optionvalue,arg_msg) uo_option_inware_cp_autoreturnfp_audit = Long(str_optionvalue) end event