$PBExportHeader$uo_checkpda.sru forward global type uo_checkpda from uo_transactionobject end type type s_p_barcode_pda from structure within uo_checkpda end type end forward type s_p_barcode_pda from structure string barcode long wrkgrpid long kind long flag string opemp datetime opdate long workgroupid end type global type uo_checkpda from uo_transactionobject end type global uo_checkpda uo_checkpda forward prototypes public function integer uof_outware_sale_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt) public function integer uof_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg) public function integer uof_ordermtrl_workgroup_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg) public function integer uof_reallocqty_ifpack_bak (long arg_fpgrade, ref string arg_msg) public function integer uof_reallocqty_ifpack (long arg_fpgrade, long arg_datenum, ref string arg_msg) public function integer uof_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg) public subroutine uf_audit_getbar (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg) public subroutine uf_audit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg) public subroutine uf_secaudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg) public subroutine uf_thraudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg) public subroutine uof_recmpl_mtrlware_ifpackpro_capacity (ref string arg_msg) public function integer uof_inware_cp_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt) public function integer uof_outware_scll_secaudit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt) public function integer uof_ordermtrl_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_ordermtrl_workgroup_barcode_pt_auto (long arg_days, ref string arg_msg) private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg) public function integer uof_reallocqty (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg) public function integer uof_inware_cp_uof_auto_scll_p (ref string arg_msg) public function integer uof_reconnect (ref string arg_msg) public subroutine uof_send_buytask_jd (ref string arg_msg) public function integer uof_order_wkp_barcode_pda_bak (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt) public function integer uof_order_wkp_barcode_pda (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt) private function integer pf_get_barcodes_notflag (ref s_p_barcode_pda arg_bars[], ref string arg_msg) public function integer uf_cmpl_cost_balcdateint (ref string arg_msg) public function integer uof_cmpl_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg) public function integer uof_cmpl_mtrlcost_planprice (long arr_mtrlid[], string arr_pfcode[], string arr_status[], string arr_woodcode[], string arr_pcode[], long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string ls_msg) private function integer pf_outware_to_inwarebuy (string ls_sn, datetime dt_server, ref string arg_msg) public function integer uof_outware_to_inwarebuy (ref string ls_msg) end prototypes public function integer uof_outware_sale_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt); uo_outware_sale uo_ware uo_ware = Create uo_outware_sale uo_ware.commit_transaction = commit_transaction datastore ds_outware ds_outware = Create datastore ds_outware.DataObject = 'ds_outware_sale_noaudit_pda' ds_outware.SetTransObject(commit_transaction) ds_outware.Retrieve() Long ll_i String ls_outwarecode Long ll_scid,ll_outwareid String ls_msg Long ll_fail,ll_suc FOR ll_i = 1 To ds_outware.RowCount() ll_scid = ds_outware.Object.scid[ll_i] ll_outwareid = ds_outware.Object.outwareid[ll_i] ls_outwarecode = ds_outware.Object.outwarecode[ll_i] IF uo_ware.getinfo(ll_scid,ll_outwareid,ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_outwarecode + ' 审核失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF IF uo_ware.auditing(True,ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_outwarecode + ' 审核失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF ll_suc++ NEXT arg_cnt = ll_suc arg_failcnt = ll_fail Destroy uo_ware Destroy ds_outware RETURN 1 end function public function integer uof_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg);Int rslt = 1 uo_mtrlware_assign uo_assign uo_assign = Create uo_mtrlware_assign uo_assign.commit_transaction = commit_transaction Long ll_cnt SELECT COUNT(0) Into :ll_cnt 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 IF ll_cnt = 0 THEN rslt = 0 arg_msg = '物料不存在,mtrlid=' + String(arg_mtrlid) GOTO ext END IF IF uo_assign.uof_adjust_order_by_mtrlid(arg_mtrlid, arg_fpgrade, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_assign IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_ordermtrl_workgroup_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg);Int rslt = 1 uo_ordermtrl_workgroup uo_omw uo_omw = Create uo_ordermtrl_workgroup uo_omw.commit_transaction = commit_transaction IF uo_omw.uf_begindate_changed(arg_scid, arg_orderid, arg_wrkgrpid, Ref arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF GOTO ext ext: Destroy uo_omw IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_reallocqty_ifpack_bak (long arg_fpgrade, ref string arg_msg);Int rslt = 1 uo_mtrlware_assign uo_mtrlware_fp uo_mtrlware_fp = Create uo_mtrlware_assign uo_mtrlware_fp.commit_transaction = commit_transaction Long c_assignid[], ll_c_assignid Decimal c_fpqty[], ld_c_fpqty Long ll_c_cnt = 0 // 取消分配 DECLARE cur1 CURSOR FOR SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS fpqty FROM u_mtrlware_assign INNER JOIN u_mtrldef ON u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid WHERE (u_mtrlware_assign.fpgrade <= :arg_fpgrade) AND (u_mtrldef.ifpack = 1) AND (u_mtrlware_assign.assigntype = 1) AND (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND (NOT EXISTS (SELECT TOP 1 1 AS Expr1 FROM u_outware INNER JOIN u_outwaremx ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE (u_outware.billtype = 1) AND (u_outwaremx.relid = u_mtrlware_assign.Relbillid) AND (u_outwaremx.relprintid = u_mtrlware_assign.relprintid) And (u_outware.flag = 0))) Using commit_transaction; OPEN cur1; FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty; DO WHILE commit_transaction.SQLCode = 0 ll_c_cnt ++ c_assignid[ll_c_cnt] = ll_c_assignid c_fpqty[ll_c_cnt] = ld_c_fpqty FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty; LOOP CLOSE cur1; Long ll_i FOR ll_i = 1 To ll_c_cnt IF uo_mtrlware_fp.uof_assign_del(c_assignid[ll_i],& c_fpqty[ll_i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT COMMIT Using commit_transaction; Long ll_scid, arr_scid[] Long ll_TaskID, arr_TaskID[] Long ll_printid, arr_printid[] Decimal ld_notfpqty, arr_notfpqty[] Long ll_MtrlID, arr_MtrlID[] String ls_status, arr_status[] String ls_woodcode, arr_woodcode[] String ls_pcode, arr_pcode[] Long ll_cnt = 0 // 重新分配订单明细 DECLARE cur2 CURSOR FOR SELECT u_SaleTaskMx.scid, u_SaleTaskMx.TaskID, u_SaleTaskMx.printid, u_SaleTaskMx.SaleQty - u_SaleTaskMx.stopqty - u_SaleTaskMx.fpqty AS notfpqty, u_SaleTaskMx.MtrlID, u_SaleTaskMx.status, u_SaleTaskMx.woodcode, u_SaleTaskMx.pcode FROM u_SaleTaskMx INNER JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND u_SaleTaskMx.TaskID = u_SaleTask.TaskID WHERE (u_SaleTaskMx.SaleQty - u_SaleTaskMx.stopqty - u_SaleTaskMx.fpqty > 0) AND (u_mtrldef.ifpack = 1) AND (u_SaleTask.Status = 1) Order By u_SaleTaskMx.requiredate Using commit_transaction; OPEN cur2; FETCH cur2 INTO :ll_scid, :ll_TaskID, :ll_printid, :ld_notfpqty, :ll_MtrlID, :ls_status, :ls_woodcode, :ls_pcode; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ arr_scid[ll_cnt] = ll_scid arr_TaskID[ll_cnt] = ll_TaskID arr_printid[ll_cnt] = ll_printid arr_notfpqty[ll_cnt] = ld_notfpqty arr_MtrlID[ll_cnt] = ll_MtrlID arr_status[ll_cnt] = ls_status arr_woodcode[ll_cnt] = ls_woodcode arr_pcode[ll_cnt] = ls_pcode FETCH cur2 INTO :ll_scid, :ll_TaskID, :ll_printid, :ld_notfpqty, :ll_MtrlID, :ls_status, :ls_woodcode, :ls_pcode; LOOP CLOSE cur2; Long ware_l_scid, ware__scid[] Long ware_l_mtrlwareid, ware__mtrlwareid[] Decimal ware_d_notfpqty, ware__notfpqty[] Long ware_cnt = 0 Long ll_j Decimal ld_curqty String arg_log = '' Long ml_cnt = 0 FOR ll_i = 1 To ll_cnt // 主计划未用料审的跳过 ml_cnt = 0 SELECT COUNT(0) INTO :ml_cnt FROM u_order_ml WHERE taskscid = :arr_scid[ll_i] AND taskid = :arr_TaskID[ll_i] AND taskmxid = :arr_printid[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单明细是否有主计划失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ml_cnt <= 0 THEN // 未有主计划跳过 CONTINUE END IF ml_cnt = 0 SELECT count(0) INTO :ml_cnt FROM u_order_ml WHERE taskscid = :arr_scid[ll_i] AND taskid = :arr_TaskID[ll_i] AND taskmxid = :arr_printid[ll_i] AND (scllflag = 0 OR scllsecflag = 0) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单明细未用料审主计划失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ml_cnt > 0 THEN // 主计划未用料审 CONTINUE END IF // 查询可分配库存 ware_cnt = 0 DECLARE cur3 CURSOR FOR SELECT u_mtrlware.scid, u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS notfpqty FROM u_mtrlware INNER JOIN u_storage ON u_mtrlware.storageid = u_storage.storageid WHERE (u_storage.inuse = 1) AND (u_storage.storagetype = 1) AND (u_mtrlware.scid = :arr_scid[ll_i]) AND (u_mtrlware.mtrlid = :arr_mtrlid[ll_i]) AND (u_mtrlware.status = :arr_status[ll_i]) And (u_mtrlware.woodcode = :arr_woodcode[ll_i]) And (u_mtrlware.pcode = :arr_pcode[ll_i]) Using commit_transaction; OPEN cur3; FETCH cur3 INTO :ware_l_scid, :ware_l_mtrlwareid, :ware_d_notfpqty; DO WHILE commit_transaction.SQLCode = 0 ware_cnt ++ ware__scid[ware_cnt] = ware_l_scid ware__mtrlwareid[ware_cnt] = ware_l_mtrlwareid ware__notfpqty[ware_cnt] = ware_d_notfpqty FETCH cur3 INTO :ware_l_scid, :ware_l_mtrlwareid, :ware_d_notfpqty; LOOP CLOSE cur3; ld_notfpqty = arr_notfpqty[ll_i] FOR ll_j = 1 To ware_cnt IF ld_notfpqty <= 0 THEN EXIT IF ld_notfpqty > ware__notfpqty[ll_j] THEN ld_curqty = ware__notfpqty[ll_j] ELSE ld_curqty = ld_notfpqty END IF IF ld_curqty > 0 THEN IF uo_mtrlware_fp.uof_assign_add(ware__scid[ll_j],ware__mtrlwareid[ll_j],1,arr_TaskID[ll_i],arr_printid[ll_i],& ld_curqty,0,'','','',0,2,publ_operator,arg_msg,False) = 0 THEN arg_log += '分配失败,' + arg_msg + '~r~n' GOTO _next END IF ld_notfpqty -= ld_curqty END IF _next: NEXT NEXT ext: Destroy uo_mtrlware_fp IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_reallocqty_ifpack (long arg_fpgrade, long arg_datenum, ref string arg_msg);Int rslt = 1 Long ll_i uo_mtrlware_assign uo_mtrlware_fp uo_mtrlware_fp = Create uo_mtrlware_assign uo_mtrlware_fp.commit_transaction = commit_transaction datastore ds_refp_pack1 ds_refp_pack1 = Create datastore ds_refp_pack1.DataObject = 'ds_pack1_refp_task' ds_refp_pack1.SetTransObject(commit_transaction) datastore ds_refp_pack_mx ds_refp_pack_mx = Create datastore ds_refp_pack_mx.DataObject = 'ds_pack1_refp_mx' ds_refp_pack_mx.SetTransObject(commit_transaction) Long c_assignid[], ll_c_assignid Decimal c_fpqty[], ld_c_fpqty Long ll_c_cnt = 0 // 取消分配 DECLARE cur1 CURSOR FOR SELECT u_mtrlware_assign.assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.outqty as fpqty FROM u_mtrlware_assign INNER join u_mtrldef on u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid WHERE ( u_mtrlware_assign.fpgrade <= :arg_fpgrade ) AND ( u_mtrldef.ifpack = 1 ) AND ( u_mtrlware_assign.assigntype = 1 ) AND ( u_mtrlware_assign.assignqty > u_mtrlware_assign.outqty ) AND (NOT EXISTS (SELECT top 1 1 as expr1 FROM u_outware INNER join u_outwaremx on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE ( u_outware.billtype = 1 ) AND ( u_outwaremx.scid = u_mtrlware_assign.scid ) AND ( u_outwaremx.relid = u_mtrlware_assign.relbillid ) AND ( u_outwaremx.relprintid = u_mtrlware_assign.relprintid ) And ( u_outware.flag = 0))) Using commit_transaction; OPEN cur1; FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty; DO WHILE commit_transaction.SQLCode = 0 ll_c_cnt ++ c_assignid[ll_c_cnt] = ll_c_assignid c_fpqty[ll_c_cnt] = ld_c_fpqty FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty; LOOP CLOSE cur1; FOR ll_i = 1 To ll_c_cnt IF uo_mtrlware_fp.uof_assign_del(c_assignid[ll_i],& c_fpqty[ll_i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT COMMIT Using commit_transaction; arg_msg = arg_msg + '取消分配成功:' + String(ll_c_cnt) //订单明细用 Long ll_scid Long ll_taskid Long ll_printid Decimal ld_notfpqty Long ll_mtrlid String ls_status String ls_woodcode String ls_pcode Long ll_cnt //库存用 Long ware_l_scid, ware_scid[] Long ware_l_mtrlwareid, ware_mtrlwareid[] Decimal ware_d_notfpqty, ware_notfpqty[] Long ware_cnt = 0 Long ll_j Decimal ld_curqty String arg_log = '' Long ml_cnt = 0 Boolean if_enough Long k // 重新分配订单明细 ll_cnt = ds_refp_pack1.Retrieve(arg_datenum) IF ll_cnt = -1 THEN rslt = 0 arg_msg += ';获取重新分配订单明细失败,' + commit_transaction.SQLErrText GOTO ext END IF ll_cnt = ds_refp_pack1.RowCount() arg_msg = arg_msg + ';正在执行分配' + String(ll_cnt) FOR ll_i = 1 To ll_cnt ll_scid = ds_refp_pack1.Object.u_saletaskmx_scid[ll_i] ll_taskid = ds_refp_pack1.Object.u_saletaskmx_taskid[ll_i] ds_refp_pack_mx.Retrieve(ll_scid,ll_taskid) IF ds_refp_pack_mx.RowCount() = 0 THEN //不齐货 // arg_log += '分配失败,没有明细' // f_task_writelog(ll_scid,ll_taskid,arg_log) CONTINUE ELSE if_enough = True FOR k = 1 To ds_refp_pack_mx.RowCount() IF ds_refp_pack_mx.Object.notfpqty[k] > ds_refp_pack_mx.Object.warenotfpqty[k] THEN if_enough = False EXIT END IF NEXT IF Not if_enough THEN CONTINUE ELSE FOR k = 1 To ds_refp_pack_mx.RowCount() ll_printid = ds_refp_pack_mx.Object.u_saletaskmx_printid[k] ll_mtrlid = ds_refp_pack_mx.Object.u_saletaskmx_mtrlid[k] ls_status = ds_refp_pack_mx.Object.u_saletaskmx_status[k] ls_woodcode = ds_refp_pack_mx.Object.u_saletaskmx_woodcode[k] ls_pcode = ds_refp_pack_mx.Object.u_saletaskmx_pcode[k] ld_notfpqty = ds_refp_pack_mx.Object.notfpqty[k] arg_msg = arg_msg + ',' + String(ll_taskid) // 主计划未用料审的跳过 ml_cnt = 0 SELECT count(0) INTO :ml_cnt FROM u_order_ml WHERE u_order_ml.taskscid = :ll_scid AND u_order_ml.taskid = :ll_taskid AND u_order_ml.taskmxid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg += '查询订单明细是否有主计划失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ml_cnt <= 0 THEN // 未有主计划跳过 // If ll_taskid = 8835 Then // arg_msg = arg_msg + '未有主计划跳过' // End If CONTINUE END IF ml_cnt = 0 SELECT count(0) INTO :ml_cnt FROM u_order_ml WHERE u_order_ml.taskscid = :ll_scid AND u_order_ml.taskid = :ll_taskid AND u_order_ml.taskmxid = :ll_printid AND (u_order_ml.scllflag = 0 OR u_order_ml.scllsecflag = 0) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg += '查询订单明细未用料审主计划失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ml_cnt > 0 THEN // 主计划未用料审 // If ll_taskid = 8835 Then // arg_msg = arg_msg + '主计划未用料审' // End If CONTINUE END IF // If ll_taskid = 8835 Then // arg_msg = arg_msg + '正在分配' // End If //查询可分配库存 ware_cnt = 0 DECLARE cur3 CURSOR FOR SELECT u_mtrlware.scid, u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty as notfpqty FROM u_mtrlware INNER join u_storage on u_mtrlware.storageid = u_storage.storageid WHERE (u_storage.inuse = 1) AND (u_storage.storagetype = 1) AND (u_mtrlware.scid = :ll_scid) AND (u_mtrlware.mtrlid = :ll_mtrlid) AND (u_mtrlware.status = :ls_status) AND (u_mtrlware.woodcode = :ls_woodcode) AND (u_mtrlware.pcode = :ls_pcode) And (u_mtrlware.noallocqty - u_mtrlware.allocqty > 0 ) Using commit_transaction; OPEN cur3; FETCH cur3 INTO :ware_l_scid, :ware_l_mtrlwareid, :ware_d_notfpqty; DO WHILE commit_transaction.SQLCode = 0 ware_cnt ++ ware_scid[ware_cnt] = ware_l_scid ware_mtrlwareid[ware_cnt] = ware_l_mtrlwareid ware_notfpqty[ware_cnt] = ware_d_notfpqty FETCH cur3 INTO :ware_l_scid, :ware_l_mtrlwareid, :ware_d_notfpqty; LOOP CLOSE cur3; FOR ll_j = 1 To ware_cnt IF ld_notfpqty <= 0 THEN EXIT IF ld_notfpqty > ware_notfpqty[ll_j] THEN ld_curqty = ware_notfpqty[ll_j] ld_notfpqty = ld_notfpqty - ld_curqty ELSE ld_curqty = ld_notfpqty ld_notfpqty = 0 END IF IF ld_curqty > 0 THEN // If ll_taskid = 8835 Then // arg_msg = arg_msg + '分配数量' + String(ld_curqty) // End If IF uo_mtrlware_fp.uof_assign_add(ll_scid,& ware_mtrlwareid[ll_j],& 1,& ll_taskid,& ll_printid,& ld_curqty,& 0,'','','',0,2,publ_operator,arg_log,False) = 0 THEN arg_msg += ';分配失败,' + arg_log + '~r~n' GOTO _next END IF END IF _next: NEXT NEXT END IF END IF NEXT ext: Destroy uo_mtrlware_fp Destroy ds_refp_pack1 Destroy ds_refp_pack_mx IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg);return f_delallocqty(arg_assignday, arg_outday, ref arg_msg) end function public subroutine uf_audit_getbar (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);//==================================================================== // 事件: uo_db_ys.uf_audit_getbar() //-------------------------------------------------------------------- // 描述: 自动审核未审的条码生成单 //-------------------------------------------------------------------- // 参数: // ref long arg_sec // ref long arg_fail // ref string arg_msg //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: lwl 日期: 2012年06月04日 //-------------------------------------------------------------------- // LONGJOE //-------------------------------------------------------------------- // 修改历史: // //==================================================================== arg_sec = 0 arg_fail = 0 arg_msg = '' String ls_msg = '' uo_getbar uo_get uo_get = Create uo_getbar Long ll_billids[], ll_billid String ls_billcodes[], ls_billcode Long ll_i, ll_cnt = 0 Long ll_ifpdaonly IF arg_ifpdaonly THEN ll_ifpdaonly = 1 ELSE ll_ifpdaonly = 0 END IF DECLARE cur1 CURSOR FOR SELECT getbarid, getbarcode From u_getbar Where flag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成'); OPEN cur1; FETCH cur1 Into :ll_billid, :ls_billcode; DO WHILE sqlca.SQLCode = 0 ll_cnt ++ ll_billids[ll_cnt] = ll_billid ls_billcodes[ll_cnt] = ls_billcode FETCH cur1 Into :ll_billid, :ls_billcode; LOOP CLOSE cur1; FOR ll_i = 1 To ll_cnt ls_msg = '' IF uo_get.auditing(ll_billids[ll_i],publ_operator,Ref ls_msg,True) = 1 THEN arg_sec++ ELSE ROLLBACK; arg_fail++ ls_msg = '[' + ls_billcodes[ll_i] + ']审核失败:' + ls_msg IF arg_msg <> '' THEN ls_msg = ls_msg + '~r~n' END IF arg_msg = ls_msg + arg_msg END IF NEXT Destroy uo_get end subroutine public subroutine uf_audit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg uo_finish_wg = Create uo_finish arg_sec = 0 arg_fail = 0 arg_msg = '' String ls_msg = '' Long ll_billid, ll_billids[] String ls_billcode, ls_billcodes[] Long ll_i, ll_cnt = 0 Long ll_ifpdaonly IF arg_ifpdaonly THEN ll_ifpdaonly = 1 ELSE ll_ifpdaonly = 0 END IF DECLARE cur1 CURSOR FOR SELECT finishid, finishcode From u_finish Where flag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成'); OPEN cur1; FETCH cur1 Into :ll_billid, :ls_billcode; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_billids[ll_cnt] = ll_billid ls_billcodes[ll_cnt] = ls_billcode FETCH cur1 Into :ll_billid, :ls_billcode; LOOP CLOSE cur1; FOR ll_i = 1 To ll_cnt IF uo_finish_wg.audit(ll_billids[ll_i], Ref ls_msg, True) = 1 THEN arg_sec++ ELSE ROLLBACK; arg_fail++ ls_msg = '[' + ls_billcodes[ll_i] + ']确认失败:' + ls_msg IF arg_msg <> '' THEN ls_msg = ls_msg + '~r~n' END IF arg_msg = ls_msg + arg_msg END IF NEXT Destroy uo_finish_wg end subroutine public subroutine uf_secaudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg uo_finish_wg = Create uo_finish arg_sec = 0 arg_fail = 0 arg_msg = '' String ls_msg = '' Long ll_billid, ll_billids[] String ls_billcode, ls_billcodes[] Long ll_i, ll_cnt = 0 Long ll_ifpdaonly IF arg_ifpdaonly THEN ll_ifpdaonly = 1 ELSE ll_ifpdaonly = 0 END IF DECLARE cur1 CURSOR FOR SELECT finishid, finishcode From u_finish Where flag = 1 AND secflag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成'); OPEN cur1; FETCH cur1 Into :ll_billid, :ls_billcode; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_billids[ll_cnt] = ll_billid ls_billcodes[ll_cnt] = ls_billcode FETCH cur1 Into :ll_billid, :ls_billcode; LOOP CLOSE cur1; FOR ll_i = 1 To ll_cnt IF uo_finish_wg.secauditing(ll_billids[ll_i], Ref ls_msg, True) = 1 THEN arg_sec++ ELSE ROLLBACK; arg_fail++ ls_msg = '[' + ls_billcodes[ll_i] + ']仓审失败:' + ls_msg IF arg_msg <> '' THEN ls_msg = ls_msg + '~r~n' END IF arg_msg = ls_msg + arg_msg END IF NEXT Destroy uo_finish_wg end subroutine public subroutine uf_thraudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg uo_finish_wg = Create uo_finish arg_sec = 0 arg_fail = 0 arg_msg = '' String ls_msg = '' Long ll_billid, ll_billids[] String ls_billcode, ls_billcodes[] Long ll_i, ll_cnt = 0 Long ll_ifpdaonly IF arg_ifpdaonly THEN ll_ifpdaonly = 1 ELSE ll_ifpdaonly = 0 END IF DECLARE cur1 CURSOR FOR SELECT finishid, finishcode From u_finish Where flag = 1 AND secflag = 1 AND thrflag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成'); OPEN cur1; FETCH cur1 Into :ll_billid, :ls_billcode; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_billids[ll_cnt] = ll_billid ls_billcodes[ll_cnt] = ls_billcode FETCH cur1 Into :ll_billid, :ls_billcode; LOOP CLOSE cur1; FOR ll_i = 1 To ll_cnt IF uo_finish_wg.thrauditing(ll_billids[ll_i], Ref ls_msg, True,0) = 1 THEN arg_sec++ ELSE ROLLBACK; arg_fail++ ls_msg = '[' + ls_billcodes[ll_i] + ']计审失败:' + ls_msg IF arg_msg <> '' THEN ls_msg = ls_msg + '~r~n' END IF arg_msg = ls_msg + arg_msg END IF NEXT Destroy uo_finish_wg end subroutine public subroutine uof_recmpl_mtrlware_ifpackpro_capacity (ref string arg_msg);datastore dw_pageretr Long ll_mtrlid,ll_storageid,ll_mtrlwareid String ls_status Decimal ld_ref_qty Long ll_i,ll_j,ll_scid Int li_statusflag,li_ifpackpro Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_fail = 0,ll_suc = 0 String ls_mtrlcode dw_pageretr = Create datastore dw_pageretr.DataObject = 'ds_recmpl_mtrlware_capacity' dw_pageretr.SetTransObject(sqlca) dw_pageretr.Retrieve() dw_pageretr.AcceptText() FOR ll_i = 1 To dw_pageretr.RowCount() ll_mtrlid = dw_pageretr.Object.u_mtrlware_mtrlid[ll_i] ll_mtrlwareid = dw_pageretr.Object.u_mtrlware_mtrlwareid[ll_i] ls_status = dw_pageretr.Object.u_mtrlware_status[ll_i] ls_mtrlcode = dw_pageretr.Object.u_mtrldef_mtrlcode[ll_i] ll_scid = dw_pageretr.Object.u_mtrlware_scid[ll_i] SELECT capacity,statusflag,ifpackpro INTO :ld_capacity,:li_statusflag,:li_ifpackpro FROM u_mtrldef Where mtrlid = :ll_mtrlid ; IF sqlca.SQLCode <> 0 THEN arg_msg = arg_msg + '物料编码:'+ls_mtrlcode+' 查询资料失败,'+sqlca.SQLErrText + '~r~n' ll_fail++ CONTINUE END IF IF li_statusflag = 2 THEN ld_capacity = 0 f_checkpz(ls_status,s_pz[]) FOR ll_j = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_j].cfgname SELECT capacity INTO :ld_capacity_zj FROM u_mtrl_configure WHERE mtrlid = :ll_mtrlid And Name = :ls_status_zj; IF sqlca.SQLCode <> 0 THEN ld_capacity_zj = 0 END IF ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_j].qty) NEXT END IF IF li_ifpackpro = 0 THEN UPDATE u_mtrlware SET u_mtrlware.capacity = u_mtrlware.noallocqty * :ld_capacity WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid And u_mtrlware.scid = :ll_scid; ELSEIF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN UPDATE u_mtrlware SET u_mtrlware.capacity = u_mtrlware.canuseqty * :ld_capacity WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid And u_mtrlware.scid = :ll_scid; ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN IF Pos(ls_status,'+') > 0 Or Pos(ls_status,'*') > 0 THEN UPDATE u_mtrlware SET u_mtrlware.capacity = u_mtrlware.canuseqty * :ld_capacity WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid And u_mtrlware.scid = :ll_scid; ELSE UPDATE u_mtrlware SET u_mtrlware.capacity = u_mtrlware.noallocqty * :ld_capacity WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid And u_mtrlware.scid = :ll_scid; END IF END IF IF sqlca.SQLCode <> 0 THEN ROLLBACK; arg_msg = arg_msg + '编码:'+ls_mtrlcode+' 失败,~n' ll_fail++ CONTINUE END IF ll_suc++ COMMIT; NEXT IF ll_fail > 0 THEN arg_msg = '重算包件产品折算套数~n'+arg_msg ELSE arg_msg = '重算包件产品折算套数成功:'+string(ll_suc) END IF end subroutine public function integer uof_inware_cp_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);Int rslt = 1 uo_inware_cp uo_ware uo_ware = Create uo_inware_cp datastore ds_inware ds_inware = Create datastore Long ll_cnt SELECT count(0) INTO :ll_cnt FROM u_inware Where (billtype = 3) And (flag = 0) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询共需要处理数据失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_msg = '共有' + String(ll_cnt) + '条语句需要处理' uo_ware.commit_transaction = commit_transaction ds_inware.DataObject = 'ds_inware_cp_noaudit_pda' ds_inware.SetTransObject(commit_transaction) IF ds_inware.Retrieve() < 0 THEN rslt = 0 arg_msg = arg_msg + '查询未审生产进仓单失败' GOTO ext END IF Long ll_i String ls_inwarecode Long ll_scid,ll_inwareid String ls_msg Long ll_fail,ll_suc FOR ll_i = 1 To ds_inware.RowCount() ll_scid = ds_inware.Object.scid[ll_i] ll_inwareid = ds_inware.Object.inwareid[ll_i] ls_inwarecode = ds_inware.Object.inwarecode[ll_i] IF uo_ware.getinfo(ll_scid,ll_inwareid,ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_inwarecode + ' 审核失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF IF uo_ware.auditing(True,ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_inwarecode + ' 审核失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF ll_suc++ NEXT arg_cnt = ll_suc arg_failcnt = ll_fail ext: Destroy uo_ware Destroy ds_inware RETURN rslt end function public function integer uof_outware_scll_secaudit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);Int rslt = 1 uo_outware_scll uo_ware uo_ware = Create uo_outware_scll Long ll_cnt SELECT count(0) INTO :ll_cnt FROM u_outware Where (billtype = 3) And (flag = 1) And (secflag = 0) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询共需要处理数据失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_msg = '共有' + String(ll_cnt) + '条语句需要处理' uo_ware.commit_transaction = commit_transaction Long ll_scid, ll_outwareid Long arr_scid[], arr_outwareid[] String ls_outwarecode String arr_outwarecode[] ll_cnt = 0 DECLARE cur1 CURSOR FOR SELECT scid, outwareid, outwarecode FROM u_outware Where (billtype = 3) And (flag = 1) And (secflag = 0) Using commit_transaction; OPEN cur1; FETCH cur1 Into :ll_scid, :ll_outwareid, :ls_outwarecode; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ arr_scid[ll_cnt] = ll_scid arr_outwareid[ll_cnt] = ll_outwareid arr_outwarecode[ll_cnt] = ls_outwarecode FETCH cur1 Into :ll_scid, :ll_outwareid, :ls_outwarecode; LOOP CLOSE cur1; Long ll_i String ls_msg Long ll_fail,ll_suc FOR ll_i = 1 To ll_cnt ll_scid = arr_scid[ll_i] ll_outwareid = arr_outwareid[ll_i] ls_outwarecode = arr_outwarecode[ll_i] IF uo_ware.getinfo(ll_scid,ll_outwareid,ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_outwarecode + ' 查询失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF IF uo_ware.uof_auto_secaudit(ls_msg) = 0 THEN ROLLBACK; arg_msg = arg_msg + ls_outwarecode + ' 二审失败,'+ls_msg + '~r~n' ll_fail++ CONTINUE END IF ll_suc++ NEXT arg_cnt = ll_suc arg_failcnt = ll_fail ext: Destroy uo_ware RETURN rslt end function public function integer uof_ordermtrl_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_cnt = 0 DateTime ld_sdate, arr_sdate[] Long ll_jdtype SELECT jdtype INTO :ll_jdtype FROM u_sc_workgroup Where wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_jdtype <> 6 THEN GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET finishqty = 0, finishflag = 0, finishdate = NULL WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '1.更新工组进度失败,' + sqlca.SQLErrText GOTO ext END IF UPDATE u_ordermtrl_workgroup_barcode SET ptflag = 0, ptdate = NULL WHERE scid = :arg_scid AND orderid = :arg_orderid And swkpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '2.更新配套标记失败,' + sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '3.删除工组日进度失败,' + sqlca.SQLErrText GOTO ext END IF IF uof_workgroup_barcode_pt(arg_scid, arg_orderid, arg_wrkgrpid, arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF GOTO ext ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function public function integer uof_ordermtrl_workgroup_barcode_pt_auto (long arg_days, ref string arg_msg);Int rslt = 1 Long ll_scid, arr_scid[] Long ll_orderid, arr_orderid[] Long ll_wrkgrpid, arr_wrkgrpid[] Long ll_cnt = 0 DateTime dt_server SELECT top 1 getdate() INTO :dt_server From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询服务器时间失败,' + sqlca.SQLErrText GOTO ext END IF dt_server = DateTime(Date(dt_server), Time(0)) dt_server = DateTime(RelativeDate(Date(dt_server), - arg_days), Time(0)) DECLARE cur1 CURSOR FOR SELECT DISTINCT u_ordermtrl_workgroup_barcode.scid, u_ordermtrl_workgroup_barcode.orderid, u_ordermtrl_workgroup_barcode.swkpid FROM u_ordermtrl_workgroup_barcode INNER JOIN u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup_tree ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup_tree.scid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup_tree.orderid AND u_ordermtrl_workgroup_barcode.printid = u_OrderMtrl_workgroup_tree.printid INNER JOIN u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid AND u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid Where (u_ordermtrl_workgroup_barcode.sflag = 1) And (u_ordermtrl_workgroup_barcode.sdate >= :dt_server) And (u_OrderMtrl_workgroup_tree.iflast = 0); OPEN cur1; FETCH cur1 Into :ll_scid, :ll_orderid, :ll_wrkgrpid; DO WHILE sqlca.SQLCode = 0 ll_cnt++ arr_scid[ll_cnt] = ll_scid arr_orderid[ll_cnt] = ll_orderid arr_wrkgrpid[ll_cnt] = ll_wrkgrpid FETCH cur1 Into :ll_scid, :ll_orderid, :ll_wrkgrpid; LOOP CLOSE cur1; Long i String ls_msg arg_msg = '' FOR i = 1 To ll_cnt IF uof_ordermtrl_workgroup_barcode_pt(arr_scid[i], arr_orderid[i], arr_wrkgrpid[i], ls_msg, True) <> 1 THEN arg_msg = arg_msg + ls_msg + '~r~n' END IF NEXT IF arg_msg <> '' THEN rslt = 0 END IF ext: RETURN rslt end function private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty,ld_trueqty DateTime null_dt SetNull(null_dt) DateTime dt_fdate IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_Order_ml WHERE OrderID = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划编号失败' rslt = 0 GOTO ext END IF SELECT u_mtrldef.mtrlcode , u_order_ml.orderqty, u_order_ml.acmpqty INTO :ls_mtrlcode, :ld_orderqty, :ld_acmpqty FROM u_mtrldef,u_order_ml WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.scid = :arg_scid And u_Order_ml.OrderID = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编号失败' rslt = 0 GOTO ext END IF //arg_wrkgrpid:源工组; Decimal not_finishqty SELECT isnull(sum(orderqty - finishqty - stopqty),0) INTO :not_finishqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_wrkgrpid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_qty > not_finishqty THEN // arg_msg = '物料:'+ls_mtrlcode+'当前数量'+String(arg_qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核' // rslt = 0 // GOTO ext arg_qty = not_finishqty END IF Long ll_owrkgrpid, arr_owrkgrpid[] String ls_wkpname, arr_wkpname[] Long ll_workgroupid, arr_workgroupid[] Decimal ld_ufqty, arr_ufqty[] Long ll_cnt = 0 DECLARE cur1 CURSOR FOR SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_wrkgrpid AND workgroupid = :arg_workgroupid UNION SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_wrkgrpid And workgroupid <> :arg_workgroupid; OPEN cur1; FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty; DO WHILE sqlca.SQLCode = 0 ll_cnt++ arr_owrkgrpid[ll_cnt] = ll_owrkgrpid arr_wkpname[ll_cnt] = ls_wkpname arr_workgroupid[ll_cnt] = ll_workgroupid arr_ufqty[ll_cnt] = ld_ufqty FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty; LOOP CLOSE cur1; Long i Decimal ld_addqty ld_addqty = arg_qty FOR i = 1 To ll_cnt ll_owrkgrpid = arr_owrkgrpid[i] ls_wkpname = arr_wkpname[i] ll_workgroupid = arr_workgroupid[i] ld_ufqty = arr_ufqty[i] IF ld_addqty <= 0 THEN EXIT END IF IF ld_addqty >= ld_ufqty THEN UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :ld_ufqty, finishflag = 1, finishdate = :arg_finishdate WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_wrkgrpid AND owrkgrpid = :ll_owrkgrpid AND wkpname = :ls_wkpname And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_addqty = ld_addqty - ld_ufqty ELSE UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :ld_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_wrkgrpid AND owrkgrpid = :ll_owrkgrpid AND wkpname = :ls_wkpname And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_addqty = 0 END IF NEXT Decimal ld_sumorderqty SELECT isnull(sum(orderqty),0) INTO :ld_sumorderqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkGrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText GOTO ext END IF Decimal ld_sumfqty SELECT isnull(sum(fqty),0) INTO :ld_sumfqty FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkGrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText GOTO ext END IF ld_addqty = arg_qty IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN ld_addqty = ld_sumorderqty - ld_sumfqty END IF dt_fdate = DateTime(Date(arg_finishdate), Time(0)) UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty + :ld_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_wrkgrpid And fdate = :dt_fdate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_OrderMtrl_workgroup_date (scid,orderid,wrkgrpid,fdate,fqty) VALUES (:arg_scid,:arg_orderid,:arg_wrkgrpid,:dt_fdate,:ld_addqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_cnt = 0 DateTime ld_sdate, arr_sdate[] Long ll_jdtype SELECT jdtype INTO :ll_jdtype FROM u_sc_workgroup Where wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_jdtype <> 6 THEN GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '锁住工组进度失败,' + sqlca.SQLErrText GOTO ext END IF DECLARE cur1 CURSOR FOR SELECT DISTINCT CAST(CONVERT(varchar(10), sdate, 120) AS datetime) AS sdate FROM u_ordermtrl_workgroup_barcode WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (swkpid = :arg_wrkgrpid) AND (sflag = 1) AND (ptflag = 0) Order By sdate; OPEN cur1; FETCH cur1 Into :ld_sdate; DO WHILE sqlca.SQLCode = 0 ll_cnt++ arr_sdate[ll_cnt] = ld_sdate FETCH cur1 Into :ld_sdate; LOOP CLOSE cur1; Long i,j,k Decimal ld_qty1, ld_qty2, ld_addqty Long ll_printid, arr_printid[] Long ll_gycnt Long ll_pid, arr_pid[] Decimal ld_qty, arr_qty[] Long ll_ptflag, arr_ptflag[] Long ll_bcnt FOR i = 1 To ll_cnt ld_sdate = DateTime(RelativeDate(Date(arr_sdate[i]), 1)) ld_qty1 = 0 ld_qty2 = 0 SELECT ISNULL(MIN(sqty),0) INTO :ld_qty1 FROM (SELECT SUM(CASE WHEN (ptflag = 1) AND (ptdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid FROM u_ordermtrl_workgroup_barcode WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (swkpid = :arg_wrkgrpid) Group By printid) AS vvv; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询已配套数失败,' + sqlca.SQLErrText GOTO ext END IF SELECT ISNULL(MIN(sqty),0) INTO :ld_qty2 FROM (SELECT SUM(CASE WHEN (sflag = 1) AND (sdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid FROM u_ordermtrl_workgroup_barcode WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (swkpid = :arg_wrkgrpid) Group By printid) AS vvv; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询已配套数失败,' + sqlca.SQLErrText GOTO ext END IF IF ld_qty2 - ld_qty1 > 0 THEN ll_gycnt = 0 DECLARE cur2 CURSOR FOR SELECT printid FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid And swkpid = :arg_wrkgrpid; OPEN cur2; FETCH cur2 Into :ll_printid; DO WHILE sqlca.SQLCode = 0 ll_gycnt++ arr_printid[ll_gycnt] = ll_printid FETCH cur2 Into :ll_printid; LOOP CLOSE cur2; FOR j = 1 To ll_gycnt ld_addqty = ld_qty2 ll_bcnt = 0 DECLARE cur3 CURSOR FOR SELECT pid, qty, ptflag FROM u_ordermtrl_workgroup_barcode WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arr_printid[j] AND sflag = 1 AND sdate < :ld_sdate Order By ptflag Desc, sdate; OPEN cur3; FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag; DO WHILE sqlca.SQLCode = 0 ll_bcnt++ arr_pid[ll_bcnt] = ll_pid arr_qty[ll_bcnt] = ld_qty arr_ptflag[ll_bcnt] = ll_ptflag FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag; LOOP CLOSE cur3; FOR k = 1 To ll_bcnt IF ld_addqty <= 0 THEN EXIT END IF ld_addqty -= arr_qty[k] IF arr_ptflag[k] = 0 THEN UPDATE u_ordermtrl_workgroup_barcode SET ptflag = 1, ptdate = :arr_sdate[i] WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arr_printid[j] And pid = :arr_pid[k]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新配套标记失败,' + sqlca.SQLErrText GOTO ext END IF END IF NEXT NEXT ld_addqty = ld_qty2 - ld_qty1 IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_wrkgrpid, 0, arr_sdate[i], ld_addqty, arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF END IF NEXT GOTO ext ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function public function integer uof_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);return f_update_saleoutcodestr(arg_scid, arg_taskid, arg_printid, true, arg_msg) end function public function integer uof_reallocqty (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg);TRY RETURN f_reallocqty_yyx(arg_reallocall, arg_ignorout, arg_fpgrade, Ref arg_msg) Catch (throwable ex) arg_msg = ex.Text RETURN 0 END TRY end function public function integer uof_inware_cp_uof_auto_scll_p (ref string arg_msg);Int rslt = 1 uo_inware_cp uo_ware uo_ware = Create uo_inware_cp uo_ware.commit_transaction = commit_transaction IF uo_ware.uof_auto_scll_p(Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_ware RETURN rslt end function public function integer uof_reconnect (ref string arg_msg);Int rslt = 1 DISCONNECT Using id_sqlca; CONNECT Using id_sqlca; IF id_sqlca.SQLCode < 0 THEN rslt = 0 arg_msg = 'ID连接数据库失败,' + id_sqlca.SQLErrText GOTO ext END IF DISCONNECT; CONNECT; IF sqlca.SQLCode < 0 THEN rslt = 0 arg_msg = '连接数据库失败,' + sqlca.SQLErrText GOTO ext END IF ext: RETURN rslt end function public subroutine uof_send_buytask_jd (ref string arg_msg);uo_saletask_jdbll uo_bll uo_bll = create uo_saletask_jdbll uo_bll.uf_send_buytask_jd(arg_msg) destroy uo_bll end subroutine public function integer uof_order_wkp_barcode_pda_bak (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);//==================================================================== // 事件: .f_order_wkp_barcode_pda() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value boolean arg_replace 优先完成时间较早的计划 // reference string arg_msg // reference long arg_cnt // reference long arg_failcnt //-------------------------------------------------------------------- // 返回: integer //-------------------------------------------------------------------- // 作者: lwl 日期: 2012年02月24日 //-------------------------------------------------------------------- // LONGJOE //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Int rslt = 1 Long ll_i,ll_j,ll_k,ll_l,ll_m Long ll_wrkgrpid String ls_barcode Long ll_swkpid,ll_owkpid Int li_sflag,li_oflag Long ll_scid,ll_orderid,ll_printid Long ll_printid_tree Int li_kind Long ll_pid DateTime ldt_opdate String ls_opemp Decimal ld_packqty Long ll_row DateTime server_dt,ldt_fdate Decimal ld_addqty String ls_wkpname String ls_relname,ls_partname String ls_p_barcode Decimal ld_min_orderqty,ld_sum_fqty Decimal ld_maxqty, ld_finishqty String ls_bar_relname, ls_bar_partname Long ll_f_mtrlid String ls_f_status ,ls_f_woodcode,ls_f_pcode Long ll_f_swkpid, ll_f_owkpid String ls_f_relname,ls_f_partname Long ll_f_scid,ll_f_orderid DateTime ld_f_requiredate Long cnt Long ll_ifrel, ll_storageid, ll_cusid String ls_plancode, ls_mtrlcuscode, ls_location Long ll_f_printid,ll_f_pid Long ll_r_scid,ll_r_orderid,ll_r_printid,ll_r_pid String ls_r_barcode Long ll_scid_tmp Long ll_orderid_tmp Long ll_suc,ll_fail Long ll_sqty,ll_oqty Long ll_getbarid Long ll_r_getbarid Long ll_workgroupid Long ll_scid_ds,ll_orderid_ds,ll_swkpid_ds,ll_workgroupid_ds Decimal ld_minsqty_ds Long ll_workgroupid_up,ll_owrkGrpid_up String ls_wkpname_up Decimal ld_update_qty,ld_orderqty_ds,ld_stopqty_ds,ld_finishqty_ds Long ll_row_wkp String ls_orderstr_arr[] Long ll_rowcnt Long ll_mxbt Long ls_p Long ll_mxbt_wrk Long ll_scid_arr[],ll_orderid_arr[],ll_wrkgrpid_arr[],ll_scid_wkp[],ll_orderid_wkp[] Decimal ld_minsqty Long ll_workgroupid_p Int li_barcode_check Decimal ld_qty String arg_barcode[] Long arg_wrkgrpid[] DateTime arg_opdate[] Long arg_mxbt = 0 Decimal ld_ld_minsqty Long ls_printid String ls_msg ll_mxbt = 0 ll_mxbt_wrk = 0 ll_suc = 0 ll_fail = 0 Int ll_oldfail = 0 uo_sc_task_finish sc_task sc_task = Create uo_sc_task_finish datastore ds_pda ds_pda = Create datastore ds_pda.DataObject = 'ds_order_wkp_barcode_pda' ds_pda.SetTransObject(sqlca) datastore ds_update_wrk ds_update_wrk = Create datastore ds_update_wrk.DataObject = 'ds_barcode_update_ordermtrl_workgroup_id' ds_update_wrk.SetTransObject(sqlca) datastore ds_order_wkp ds_order_wkp = Create datastore ds_order_wkp.DataObject = 'ds_barcode_order_wkp_workgroupid' ds_order_wkp.SetTransObject(sqlca) datastore ds_relname ds_relname = Create datastore ds_relname.DataObject = 'ds_cmp_date_barcode_relname' ds_relname.SetTransObject(sqlca) datastore ds_mx ds_mx = Create datastore ds_mx.DataObject = 'ds_cmp_date_barcode_mx' ds_mx.SetTransObject(sqlca) ll_row = ds_pda.Retrieve() IF ll_row = -1 THEN IF f_re_conect(arg_msg) = 0 THEN rslt = 0 arg_msg = '重库数据库失败,' + arg_msg GOTO ext END IF ll_row = ds_pda.Retrieve() IF ll_row = -1 THEN arg_msg = '查询未处理条码失败,' + sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT Top 1 getdate() Into :server_dt From u_user; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN arg_msg = '查询日期失败,'+sqlca.SQLErrText ROLLBACK; rslt = 0 GOTO ext END IF ldt_fdate = DateTime(Date(server_dt),Time(0)) FOR ll_i = 1 To ll_row // 临时处理 重连数据库 IF ll_fail - ll_oldfail >= 5 THEN DISCONNECT; CONNECT; END IF ls_barcode = ds_pda.Object.barcode[ll_i] ll_wrkgrpid = ds_pda.Object.wrkgrpid[ll_i] li_kind = ds_pda.Object.Kind[ll_i] ldt_opdate = ds_pda.Object.opdate[ll_i] ls_opemp = ds_pda.Object.opemp[ll_i] ll_workgroupid = ds_pda.Object.workgroupid[ll_i] UPDATE u_order_wkp_barcode_pda SET flag = 1 WHERE barcode = :ls_barcode AND wrkgrpid = :ll_wrkgrpid AND Kind = :li_kind And flag <> 1; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新条码状态失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF sqlca.SQLNRows = 0 THEN CONTINUE END IF SELECT barcode_check INTO :li_barcode_check FROM u_sc_workgroup Where wrkgrpid = :ll_wrkgrpid; IF sqlca.SQLCode <> 0 THEN li_barcode_check = 0 ll_r_orderid = 0 IF li_kind = 0 THEN // 完工模式 //按顺序查找同工的最早条码 SELECT u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_ordermtrl_workgroup_barcode.swkpid, u_ordermtrl_workgroup_barcode.owkpid, u_ordermtrl_workgroup_barcode.relname, u_ordermtrl_workgroup_barcode.partname, u_ordermtrl_workgroup_barcode.scid, u_ordermtrl_workgroup_barcode.orderid, u_OrderMtrl_workgroup.requiredate, u_ordermtrl_workgroup_barcode.printid, u_ordermtrl_workgroup_barcode.pid INTO :ll_f_mtrlid, :ls_f_status, :ls_f_woodcode, :ls_f_pcode, :ll_f_swkpid, :ll_f_owkpid, :ls_f_relname, :ls_f_partname, :ll_f_scid, :ll_f_orderid, :ld_f_requiredate, :ll_f_printid, :ll_f_pid FROM u_ordermtrl_workgroup_barcode INNER JOIN u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid WHERE u_ordermtrl_workgroup_barcode.barcode = :ls_barcode And u_ordermtrl_workgroup_barcode.swkpid = :ll_wrkgrpid; IF sqlca.SQLCode <> 0 THEN // ROLLBACK; // arg_msg = '查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE GOTO _update_data END IF cnt = 0 SELECT count(0) INTO :cnt FROM u_ordermtrl_workgroup_barcode INNER JOIN u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND u_Order_ml.status_mode = :ls_f_status AND u_Order_ml.woodcode = :ls_f_woodcode AND u_Order_ml.pcode = :ls_f_pcode AND u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND u_ordermtrl_workgroup_barcode.sflag = 0 AND u_Order_ml.status = 1 ; IF sqlca.SQLCode <> 0 THEN ROLLBACK; // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE ll_r_scid = 0 ll_r_orderid = 0 ll_r_printid = 0 ll_r_pid = 0 GOTO _update_data END IF IF cnt > 0 And arg_replace THEN SELECT top 1 u_ordermtrl_workgroup_barcode.scid, u_ordermtrl_workgroup_barcode.orderid, u_ordermtrl_workgroup_barcode.printid, u_ordermtrl_workgroup_barcode.pid, u_ordermtrl_workgroup_barcode.barcode INTO :ll_r_scid, :ll_r_orderid, :ll_r_printid, :ll_r_pid, :ls_r_barcode FROM u_ordermtrl_workgroup_barcode INNER JOIN u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND u_Order_ml.status_mode = :ls_f_status AND u_Order_ml.woodcode = :ls_f_woodcode AND u_Order_ml.pcode = :ls_f_pcode AND u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND u_ordermtrl_workgroup_barcode.sflag = 0 AND u_Order_ml.status = 1 Order By u_OrderMtrl_workgroup.requiredate; IF sqlca.SQLCode <> 0 THEN ROLLBACK; // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败2,'+sqlca.SQLErrText // ll_fail++ // CONTINUE ll_r_scid = 0 ll_r_orderid = 0 ll_r_printid = 0 ll_r_pid = 0 GOTO _update_data END IF ll_scid_tmp = ll_r_scid - 100000000 ll_orderid_tmp = ll_r_orderid - 100000000 UPDATE u_ordermtrl_workgroup_barcode SET scid = :ll_scid_tmp, orderid = :ll_orderid_tmp WHERE scid = :ll_r_scid AND orderid = :ll_r_orderid AND barcode = :ls_r_barcode And pid = :ll_r_pid; IF sqlca.SQLCode <> 0 THEN ROLLBACK; // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText // ll_fail++ // CONTINUE ll_r_scid = 0 ll_r_orderid = 0 ll_r_printid = 0 ll_r_pid = 0 GOTO _update_data END IF // UPDATE u_ordermtrl_workgroup_barcode // SET barcode = :ls_barcode // WHERE scid = :ll_r_scid // AND orderid = :ll_r_orderid // AND barcode = :ls_r_barcode; // IF sqlca.SQLCode <> 0 THEN // ROLLBACK; // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText // ll_fail++ // CONTINUE // END IF UPDATE u_ordermtrl_workgroup_barcode SET scid = :ll_r_scid, orderid = :ll_r_orderid, pid = :ll_r_pid WHERE scid = :ll_f_scid AND orderid = :ll_f_orderid AND barcode = :ls_barcode And pid = :ll_f_pid; IF sqlca.SQLCode <> 0 THEN ROLLBACK; // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_1,'+sqlca.SQLErrText // ll_fail++ // CONTINUE ll_r_scid = 0 ll_r_orderid = 0 ll_r_printid = 0 ll_r_pid = 0 GOTO _update_data END IF UPDATE u_ordermtrl_workgroup_barcode SET scid = :ll_f_scid, orderid = :ll_f_orderid, pid = :ll_f_pid WHERE scid = :ll_scid_tmp And orderid = :ll_orderid_tmp; IF sqlca.SQLCode <> 0 THEN ROLLBACK; // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_2,'+sqlca.SQLErrText // ll_fail++ // CONTINUE ll_r_scid = 0 ll_r_orderid = 0 ll_r_printid = 0 ll_r_pid = 0 GOTO _update_data END IF END IF _update_data: SELECT COUNT(0) INTO :cnt FROM u_ordermtrl_workgroup_barcode WHERE barcode = :ls_barcode AND swkpid = :ll_wrkgrpid And sflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg += '1.0查询条码 '+ls_barcode+' 未完成数失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF cnt <= 0 THEN GOTO _okandnext END IF SELECT top 1 scid, orderid, printid, swkpid, owkpid, sflag, oflag, pid, relname, partname, workgroupid, qty INTO :ll_scid, :ll_orderid, :ll_printid, :ll_swkpid, :ll_owkpid, :li_sflag, :li_oflag, :ll_pid, :ls_bar_relname, :ls_bar_partname, :ll_workgroupid_p, :ld_qty FROM u_ordermtrl_workgroup_barcode WHERE barcode = :ls_barcode AND swkpid = :ll_wrkgrpid AND sflag = 0 Order By printid Desc; IF sqlca.SQLCode <> 0 THEN arg_msg += '1.0查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText GOTO _failandnext END IF //不严格限制工作中心或条码本身没有指定工作中心,则程序为条码匹配工作中心 IF li_barcode_check = 0 Or ll_workgroupid_p = 0 THEN //20111013 应急处理 UPDATE u_OrderMtrl_workgroup_barcode SET u_ordermtrl_workgroup_barcode.workgroupid = u_OrderMtrl_workgroup.workgroupid FROM u_ordermtrl_workgroup_barcode INNER JOIN u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid AND u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid WHERE u_ordermtrl_workgroup_barcode.scid = :ll_scid AND u_ordermtrl_workgroup_barcode.orderid = :ll_orderid And u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid; // SELECT count(*) INTO :cnt FROM u_OrderMtrl_workgroup WHERE scid = :ll_scid AND orderid = :ll_orderid AND wrkgrpid = :ll_swkpid And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN cnt = 0 END IF IF cnt = 0 THEN SELECT COUNT(0) INTO :cnt FROM u_OrderMtrl_workgroup WHERE scid = :ll_scid AND orderid = :ll_orderid And wrkgrpid = :ll_swkpid; IF sqlca.SQLCode <> 0 THEN arg_msg += '2.查询条码 '+ls_barcode+' 相关生产计划工组数量失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF cnt = 0 THEN GOTO _okandnext END IF SELECT top 1 workgroupid INTO :ll_workgroupid FROM u_OrderMtrl_workgroup WHERE scid = :ll_scid AND orderid = :ll_orderid And wrkgrpid = :ll_swkpid; IF sqlca.SQLCode <> 0 THEN arg_msg += '2.查询条码 '+ls_barcode+' 相关生产计划工组进度信息失败,'+sqlca.SQLErrText GOTO _failandnext END IF END IF ELSE IF ll_workgroupid_p <> ll_workgroupid THEN arg_msg += '条码 '+ls_barcode+' 所属工作中心与当前选择的工作中心不符,'+sqlca.SQLErrText GOTO _failandnext END IF END IF UPDATE u_ordermtrl_workgroup_barcode SET sflag = 1, sdate = :ldt_opdate, semp = :ls_opemp, workgroupid = :ll_workgroupid WHERE scid = :ll_scid AND orderid = :ll_orderid AND printid = :ll_printid And pid = :ll_pid; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新条码完成状态失败,'+sqlca.SQLErrText GOTO _failandnext END IF // SELECT sum(sflag*qty),sum(oflag*qty) // INTO :ll_sqty,:ll_oqty // FROM u_ordermtrl_workgroup_barcode // WHERE scid = :ll_scid // AND orderid = :ll_orderid // And printid = :ll_printid; // IF sqlca.SQLCode <> 0 THEN // ROLLBACK; // arg_msg = '查询工组完成进度失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE // END IF SELECT printid INTO :ll_printid_tree FROM u_OrderMtrl_workgroup_tree WHERE scid = :ll_scid AND orderid = :ll_orderid AND relname = :ls_bar_relname AND partname = :ls_bar_partname AND workgroupid = :ll_workgroupid And orderqty > sqty ; IF sqlca.SQLCode <> 0 THEN SELECT top 1 printid INTO :ll_printid_tree FROM u_OrderMtrl_workgroup_tree WHERE scid = :ll_scid AND orderid = :ll_orderid AND relname = :ls_bar_relname AND partname = :ls_bar_partname And orderqty > sqty ; IF sqlca.SQLCode <> 0 THEN ll_printid_tree = ll_printid END IF END IF UPDATE u_OrderMtrl_workgroup_tree SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_qty END, u_ordermtrl_workgroup_tree.sdate = :ldt_opdate WHERE scid = :ll_scid AND orderid = :ll_orderid And printid = :ll_printid_tree; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组条码进度已完成数失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF ll_r_orderid > 0 THEN UPDATE u_OrderMtrl_workgroup_tree SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END, u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END FROM u_OrderMtrl_workgroup_tree INNER JOIN (SELECT SUM(sflag*qty) AS sqty, SUM(oflag*qty) AS oqty, scid, orderid, printid FROM u_ordermtrl_workgroup_barcode WHERE scid = :ll_f_scid AND orderid = :ll_f_orderid GROUP BY scid, orderid, printid) a ON u_OrderMtrl_workgroup_tree.scid = a.scid AND u_OrderMtrl_workgroup_tree.orderid = a.orderid AND u_OrderMtrl_workgroup_tree.printid = a.printid WHERE u_OrderMtrl_workgroup_tree.scid = :ll_f_scid And u_OrderMtrl_workgroup_tree.orderid = :ll_f_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组条码进度已完成数失败(原计划),'+sqlca.SQLErrText GOTO _failandnext END IF UPDATE u_OrderMtrl_workgroup_tree SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END, u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END FROM u_OrderMtrl_workgroup_tree INNER JOIN (SELECT SUM(sflag*qty) AS sqty, SUM(oflag*qty) AS oqty, scid, orderid, printid FROM u_ordermtrl_workgroup_barcode WHERE scid = :ll_f_scid AND orderid = :ll_f_orderid GROUP BY scid, orderid, printid) a ON u_OrderMtrl_workgroup_tree.scid = a.scid AND u_OrderMtrl_workgroup_tree.orderid = a.orderid AND u_OrderMtrl_workgroup_tree.printid = a.printid WHERE u_OrderMtrl_workgroup_tree.scid = :ll_r_scid And u_OrderMtrl_workgroup_tree.orderid = :ll_r_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组条码进度已完成数失败(新替换计划),'+sqlca.SQLErrText GOTO _failandnext END IF END IF arg_mxbt++ arg_barcode[arg_mxbt] = ls_barcode arg_wrkgrpid[arg_mxbt] = ll_wrkgrpid arg_opdate[arg_mxbt] = ldt_opdate ELSEIF li_kind = 1 THEN // 接收模式 SELECT scid, orderid, printid, swkpid, owkpid, sflag, oflag, pid, relname, partname, qty INTO :ll_scid, :ll_orderid, :ll_printid, :ll_swkpid, :ll_owkpid, :li_sflag, :li_oflag, :ll_pid, :ls_bar_relname, :ls_bar_partname, :ld_qty FROM u_ordermtrl_workgroup_barcode WHERE barcode = :ls_barcode And owkpid = :ll_wrkgrpid; IF sqlca.SQLCode <> 0 THEN arg_msg += '3.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText GOTO _failandnext END IF UPDATE u_ordermtrl_workgroup_barcode SET oflag = 1, odate = :ldt_opdate, oemp = :ls_opemp WHERE scid = :ll_scid AND orderid = :ll_orderid AND printid = :ll_printid And pid = :ll_pid; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新条码接收状态失败,'+sqlca.SQLErrText GOTO _failandnext END IF SELECT top 1 printid INTO :ll_printid_tree FROM u_OrderMtrl_workgroup_tree WHERE scid = :ll_scid AND orderid = :ll_orderid AND relname = :ls_bar_relname AND partname = :ls_bar_partname And sqty > oqty ; IF sqlca.SQLCode <> 0 THEN ll_printid_tree = ll_printid END IF UPDATE u_OrderMtrl_workgroup_tree SET u_ordermtrl_workgroup_tree.oqty = case when u_ordermtrl_workgroup_tree.oqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.oqty + :ld_qty END , u_ordermtrl_workgroup_tree.odate = :ldt_opdate WHERE scid = :ll_scid AND orderid = :ll_orderid AND printid = :ll_printid_tree And u_OrderMtrl_workgroup_tree.oqty < u_OrderMtrl_workgroup_tree.orderqty; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组条码进度已接收数失败,'+sqlca.SQLErrText GOTO _failandnext END IF ELSE // Marker: 最后工组完工 SELECT u_mtrlware_mx.getbarid, u_getbar.orderid, u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_OrderMtrl_workgroup.wrkGrpid, u_OrderMtrl_workgroup.wkpname, u_OrderMtrl_workgroup.requiredate, u_getbar.scid, u_mtrlware_mx.packqty * u_mtrlware_mx.qty AS packqty, u_getbar.ifrel, u_getbar.storageid, u_getbar.cusid, u_getbar.plancode, u_getbar.mtrlcuscode, u_getbar.location INTO :ll_getbarid, :ll_orderid, :ll_f_mtrlid, :ls_f_status, :ls_f_woodcode, :ls_f_pcode, :ll_wrkgrpid, :ls_wkpname, :ld_f_requiredate, :ll_scid, :ld_packqty, :ll_ifrel, :ll_storageid, :ll_cusid, :ls_plancode, :ls_mtrlcuscode, :ls_location FROM u_mtrlware_mx INNER JOIN u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND u_OrderMtrl_workgroup.iflast = 1 Where (u_mtrlware_mx.barcode = :ls_barcode); IF sqlca.SQLCode <> 0 THEN arg_msg += '4.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF arg_replace THEN SELECT COUNT(0) INTO :cnt FROM u_mtrlware_mx INNER JOIN u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND u_OrderMtrl_workgroup.iflast = 1 WHERE (u_mtrlware_mx.getbarid <> :ll_getbarid) AND (u_Order_ml.status_mode = :ls_f_status) AND (u_OrderMtrl_workgroup.wkpname = :ls_wkpname) AND (u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid) AND (u_Order_ml.pcode = :ls_f_pcode) AND (u_Order_ml.woodcode = :ls_f_woodcode) AND (u_Order_ml.mtrlid = :ll_f_mtrlid) AND (NOT EXISTS (SELECT 1 FROM u_order_wkp_barcode_pda WHERE (barcode = u_mtrlware_mx.barcode) AND (kind = 2))) AND (u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate) AND (u_getbar.orderid <> :ll_orderid) AND (u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :ld_packqty) AND (u_getbar.ifrel = :ll_ifrel) AND (u_getbar.storageid = :ll_storageid) AND (u_getbar.cusid = :ll_cusid) AND (u_getbar.plancode = :ls_plancode) AND (u_getbar.mtrlcuscode = :ls_mtrlcuscode) AND (u_getbar.Location = :ls_location) And (u_mtrlware_mx.inflag = 0); IF sqlca.SQLCode <> 0 THEN arg_msg += '查询可替换最后工组失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF cnt > 0 THEN SELECT TOP 1 u_mtrlware_mx.getbarid, u_mtrlware_mx.barcode, u_getbar.scid, u_getbar.orderid INTO :ll_r_getbarid, :ls_r_barcode, :ll_r_scid, :ll_r_orderid FROM u_mtrlware_mx INNER JOIN u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND u_OrderMtrl_workgroup.iflast = 1 WHERE (u_mtrlware_mx.getbarid <> :ll_getbarid) AND (u_Order_ml.status_mode = :ls_f_status) AND (u_OrderMtrl_workgroup.wkpname = :ls_wkpname) AND (u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid) AND (u_Order_ml.pcode = :ls_f_pcode) AND (u_Order_ml.woodcode = :ls_f_woodcode) AND (u_Order_ml.mtrlid = :ll_f_mtrlid) AND (NOT EXISTS (SELECT 1 FROM u_order_wkp_barcode_pda WHERE (barcode = u_mtrlware_mx.barcode) AND (kind = 2))) AND (u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate) AND (u_getbar.orderid <> :ll_orderid) AND (u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :ld_packqty) AND (u_getbar.ifrel = :ll_ifrel) AND (u_getbar.storageid = :ll_storageid) AND (u_getbar.cusid = :ll_cusid) AND (u_getbar.plancode = :ls_plancode) AND (u_getbar.mtrlcuscode = :ls_mtrlcuscode) AND (u_getbar.Location = :ls_location) And (u_mtrlware_mx.inflag = 0); IF sqlca.SQLCode <> 0 THEN arg_msg += '查询可替换信息失败,'+sqlca.SQLErrText GOTO _failandnext END IF UPDATE u_mtrlware_mx SET getbarid = :ll_r_getbarid, scid = :ll_r_scid, orderid = :ll_r_orderid Where barcode = :ls_barcode; IF sqlca.SQLCode <> 0 THEN arg_msg += '更改当前条码的条码生成单失败,'+sqlca.SQLErrText GOTO _failandnext END IF UPDATE u_mtrlware_mx SET getbarid = :ll_getbarid, scid = :ll_scid, orderid = :ll_orderid Where barcode = :ls_r_barcode; IF sqlca.SQLCode <> 0 THEN arg_msg += '更改被替换条码的条码生成单失败,'+sqlca.SQLErrText GOTO _failandnext END IF ll_scid = ll_r_scid ll_orderid = ll_r_orderid END IF END IF // SELECT TOP 1 u_ordermtrl_workgroup_barcode.barcode // INTO :ls_p_barcode // FROM u_ordermtrl_workgroup_barcode INNER JOIN // u_ordermtrl_workgroup_barcode AS u_ordermtrl_workgroup_barcode_p ON // u_ordermtrl_workgroup_barcode.scid = u_ordermtrl_workgroup_barcode_p.scid AND // u_ordermtrl_workgroup_barcode.orderid = u_ordermtrl_workgroup_barcode_p.orderid AND // u_ordermtrl_workgroup_barcode.swkpid = u_ordermtrl_workgroup_barcode_p.owkpid AND // u_ordermtrl_workgroup_barcode.barcode = u_ordermtrl_workgroup_barcode_p.barcode // WHERE (u_ordermtrl_workgroup_barcode_p.oflag = 1) // AND (u_ordermtrl_workgroup_barcode_p.ptflag = 1) // AND (u_ordermtrl_workgroup_barcode.swkpid = :ll_wrkgrpid) // AND (u_ordermtrl_workgroup_barcode.scid = :ll_scid) // AND (u_ordermtrl_workgroup_barcode.orderid = :ll_orderid) // And (u_ordermtrl_workgroup_barcode.ptflag = 0); // IF sqlca.SQLCode <> 0 THEN // arg_msg += '查询最后工组未配对部件条码失败,'+sqlca.SQLErrText // GOTO _failandnext // END IF // // UPDATE u_ordermtrl_workgroup_barcode SET sflag = 1, ptflag = 1 // WHERE barcode = :ls_p_barcode // AND swkpid = :ll_wrkgrpid // AND orderid = :ll_orderid // AND scid = :ll_scid // And ptflag = 0; // IF sqlca.SQLCode <> 0 THEN // arg_msg += '更新最后工组未配对部件条码失败,'+sqlca.SQLErrText // GOTO _failandnext // END IF // // IF sqlca.SQLNRows <> 1 THEN // arg_msg += '更新最后工组未配对部件条码失败,条码已被更新' // GOTO _failandnext // END IF SELECT isnull(MIN(finishqty),0) INTO :ld_maxqty FROM u_OrderMtrl_workgroup WHERE (scid = :ll_scid) AND (orderid = :ll_orderid) And (owrkGrpid = :ll_wrkgrpid); IF sqlca.SQLCode <> 0 THEN arg_msg += '查询最后工组可完成数失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF ld_maxqty > 0 THEN SELECT finishqty INTO :ld_finishqty FROM u_OrderMtrl_workgroup WHERE scid = :ll_scid AND orderid = :ll_orderid AND wrkgrpid = :ll_wrkgrpid And iflast = 1; IF sqlca.SQLCode <> 0 THEN arg_msg += '查询最后工组已完成数失败,'+sqlca.SQLErrText GOTO _failandnext END IF IF ld_finishqty + ld_packqty > ld_maxqty THEN arg_msg += '上工组未配套,上工组配套数:' + String(ld_maxqty,'#,##0.#####') + ',已完成数:' + String(ld_finishqty,'#,##0.#####') + ',本次完成数:' + String(ld_packqty,'#,##0.#####') GOTO _failandnext END IF END IF UPDATE u_OrderMtrl_workgroup_tree SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_packqty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_packqty END , u_ordermtrl_workgroup_tree.sdate = :ldt_opdate WHERE scid = :ll_scid AND orderid = :ll_orderid AND iflast = 1 And u_OrderMtrl_workgroup_tree.sqty < u_OrderMtrl_workgroup_tree.orderqty; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新最后工组已完成数失败,'+sqlca.SQLErrText GOTO _failandnext END IF arg_mxbt++ arg_barcode[arg_mxbt] = ls_barcode arg_wrkgrpid[arg_mxbt] = ll_wrkgrpid arg_opdate[arg_mxbt] = ldt_opdate END IF _okandnext: IF li_kind <> 2 THEN // SELECT sum(s_qty.minsqty) // INTO :ld_addqty // FROM u_OrderMtrl_workgroup INNER JOIN // (SELECT scid, orderid, swkpid, MIN(sqty) AS minsqty // FROM (SELECT scid, orderid, swkpid, SUM(sflag) AS sqty, relname, // partname // FROM u_ordermtrl_workgroup_barcode // WHERE sflag = 1 // AND CONVERT(varchar(10), sdate, 120) = CONVERT(varchar(10), :ldt_fdate, 120) // GROUP BY scid, orderid, swkpid, relname, partname) a // GROUP BY scid, orderid, swkpid) s_qty ON // u_OrderMtrl_workgroup.scid = s_qty.scid AND // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid) // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid) // AND (u_OrderMtrl_workgroup.wrkgrpid = :ll_wrkgrpid) // And (u_OrderMtrl_workgroup.iflast = 0); // IF sqlca.SQLCode <> 0 THEN // ld_addqty = 0 // END IF // // IF ld_addqty > 0 THEN // UPDATE u_OrderMtrl_workgroup_date // SET fqty = :ld_addqty // WHERE scid = :ll_scid // AND orderid = :ll_orderid // AND wrkgrpid = :ll_wrkgrpid // And fdate = :ldt_fdate; // IF sqlca.SQLCode = 0 THEN // IF sqlca.SQLNRows = 0 THEN // INSERT INTO u_OrderMtrl_workgroup_date // (scid,orderid,wrkgrpid,fdate,fqty) // VALUES // (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_addqty); // IF sqlca.SQLCode <> 0 THEN // ROLLBACK; // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE // END IF // END IF // ELSE // ROLLBACK; // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE // END IF // END IF IF li_kind = 0 THEN FOR ls_p = 1 To ll_mxbt IF ll_orderid = ll_orderid_arr[ls_p] And ll_scid = ll_scid_arr[ls_p] THEN GOTO _find_wrk END IF NEXT ll_mxbt++ ls_orderstr_arr[ll_mxbt] = String(ll_orderid)+'_'+String(ll_scid) ll_orderid_arr[ll_mxbt] = ll_orderid ll_scid_arr[ll_mxbt] = ll_scid _find_wrk: FOR ls_p = 1 To ll_mxbt_wrk IF ll_orderid = ll_orderid_wkp[ls_p] And ll_scid = ll_scid_wkp[ls_p] And ll_wrkgrpid = ll_wrkgrpid_arr[ls_p] THEN GOTO _find_end END IF NEXT ll_mxbt_wrk++ ll_orderid_wkp[ll_mxbt_wrk] = ll_orderid ll_scid_wkp[ll_mxbt_wrk] = ll_scid ll_wrkgrpid_arr[ll_mxbt_wrk] = ll_wrkgrpid _find_end: END IF // // UPDATE u_OrderMtrl_workgroup // SET u_OrderMtrl_workgroup.finishqty = s_qty.minsqty // FROM u_OrderMtrl_workgroup INNER JOIN // (SELECT scid, orderid, swkpid, workgroupid,MIN(sqty) AS minsqty // FROM (SELECT scid, orderid, swkpid,workgroupid, SUM(sflag) AS sqty, relname, // partname // FROM u_ordermtrl_workgroup_barcode // GROUP BY scid, orderid, swkpid, relname, partname,workgroupid) a // GROUP BY scid, orderid, swkpid,workgroupid) s_qty ON // u_OrderMtrl_workgroup.scid = s_qty.scid AND // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid and // u_OrderMtrl_workgroup.workgroupid = s_qty.workgroupid // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid) // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid) // And (u_OrderMtrl_workgroup.iflast = 0); // IF sqlca.SQLCode <> 0 THEN // ROLLBACK; // arg_msg = '更新工组进度失败,'+sqlca.SQLErrText // ll_fail++ // CONTINUE // END IF ELSE IF ld_packqty > 0 THEN UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty + :ld_packqty WHERE scid = :ll_scid AND orderid = :ll_orderid AND wrkgrpid = :ll_wrkgrpid And fdate = :ldt_fdate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_OrderMtrl_workgroup_date (scid,orderid,wrkgrpid,fdate,fqty) VALUES (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_packqty); IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组当天进度失败,'+sqlca.SQLErrText GOTO _failandnext END IF END IF ELSE arg_msg += '更新工组当天进度失败,'+sqlca.SQLErrText GOTO _failandnext END IF END IF UPDATE u_OrderMtrl_workgroup SET u_OrderMtrl_workgroup.finishqty = case when u_OrderMtrl_workgroup.finishqty + :ld_packqty > u_OrderMtrl_workgroup.orderqty then u_OrderMtrl_workgroup.orderqty else u_OrderMtrl_workgroup.finishqty + :ld_packqty END FROM u_OrderMtrl_workgroup INNER JOIN u_sc_workgroup ON u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid WHERE (u_OrderMtrl_workgroup.scid = :ll_scid) AND (u_OrderMtrl_workgroup.orderid = :ll_orderid) AND (u_OrderMtrl_workgroup.iflast = 1) AND (u_sc_workgroup.jdtype = 6) And (u_OrderMtrl_workgroup.finishqty < u_OrderMtrl_workgroup.orderqty); IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组进度失败,'+sqlca.SQLErrText GOTO _failandnext END IF END IF UPDATE u_OrderMtrl_workgroup SET finishflag = 1,finishdate = :server_dt WHERE orderid = :ll_orderid AND scid = :ll_scid And orderqty <= finishqty + stopqty; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新工组完成状态失败,'+sqlca.SQLErrText GOTO _failandnext END IF COMMIT; ll_suc++ CONTINUE _failandnext: ROLLBACK; ll_fail++ UPDATE u_order_wkp_barcode_pda SET flag = 2 WHERE barcode = :ls_barcode AND wrkgrpid = :ll_wrkgrpid And Kind = :li_kind; IF sqlca.SQLCode <> 0 THEN arg_msg += '更新条码错误状态失败,'+sqlca.SQLErrText ROLLBACK; ELSE COMMIT; END IF CONTINUE NEXT FOR ll_k = 1 To ll_mxbt_wrk IF uof_workgroup_barcode_pt(ll_scid_wkp[ll_k], ll_orderid_wkp[ll_k], ll_wrkgrpid_arr[ll_k], ls_msg, True) <> 1 THEN arg_msg += '工组自动配套失败,' + ls_msg END IF NEXT IF arg_finishbarcode THEN IF sc_task.uf_finishbarcode(arg_wrkgrpid, arg_barcode, arg_opdate, ls_msg) <> 1 THEN rslt = 0 arg_msg += '生成工序完工单失败,' + ls_msg GOTO ext END IF END IF ext: Destroy sc_task Destroy ds_order_wkp Destroy ds_update_wrk Destroy ds_relname Destroy ds_mx Destroy ds_pda arg_cnt = ll_suc arg_failcnt = ll_fail RETURN rslt end function public function integer uof_order_wkp_barcode_pda (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);//==================================================================== // 事件: .f_order_wkp_barcode_pda() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value boolean arg_replace 优先完成时间较早的计划 // reference string arg_msg // reference long arg_cnt // reference long arg_failcnt //-------------------------------------------------------------------- // 返回: integer //-------------------------------------------------------------------- // 作者: lwl 日期: 2012年02月24日 //-------------------------------------------------------------------- // LONGJOE //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Int rslt = 1 s_p_barcode_pda arr_bars[] String arg_barcode[] Long arg_wrkgrpid[] DateTime arg_opdate[] Long j = 0 uo_partbarcode uo_bar uo_bar = Create uo_partbarcode uo_sc_task_finish sc_task sc_task = Create uo_sc_task_finish IF pf_get_barcodes_notflag(Ref arr_bars, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF arg_cnt = 0 arg_failcnt = 0 Long i String ls_msg FOR i = 1 To UpperBound(arr_bars) UPDATE u_order_wkp_barcode_pda SET flag = 1 WHERE barcode = :arr_bars[i].barcode AND wrkgrpid = :arr_bars[i].wrkgrpid AND kind = :arr_bars[i].kind And flag = :arr_bars[i].flag; IF sqlca.SQLCode <> 0 THEN ls_msg = '更新PDA部件条码标记失败,' + sqlca.SQLErrText GOTO _failt END IF IF sqlca.SQLNRows <= 0 THEN ls_msg = '条码被其它任务占用,本任务终止' GOTO _failt END IF IF arr_bars[i].Kind = 0 THEN IF uo_bar.uf_finish_barcode(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opemp, arr_bars[i].opdate, arr_bars[i].workgroupid, arg_replace, Ref ls_msg, False) <> 1 THEN GOTO _failt END IF ELSEIF arr_bars[i].Kind = 1 THEN IF uo_bar.uf_o_barcode(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opemp, arr_bars[i].opdate, Ref ls_msg, False) <> 1 THEN GOTO _failt END IF ELSEIF arr_bars[i].Kind = 2 THEN IF uo_bar.uf_finish_barcode_last(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opdate, arg_replace, Ref ls_msg, False) <> 1 THEN GOTO _failt END IF END IF arg_cnt++ COMMIT; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '事务提交失败,' + sqlca.SQLErrText GOTO ext END IF IF arg_finishbarcode And (arr_bars[i].Kind = 0 Or arr_bars[i].Kind = 2) THEN j++ arg_barcode[j] = arr_bars[i].barcode arg_wrkgrpid[j] = arr_bars[i].wrkgrpid arg_opdate[j] = arr_bars[i].opdate END IF CONTINUE _failt: arg_failcnt ++ ROLLBACK; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '事务回滚失败,' + sqlca.SQLErrText GOTO ext END IF arg_msg += ls_msg UPDATE u_order_wkp_barcode_pda SET errmsg = :ls_msg, flag = 2 WHERE barcode = :arr_bars[i].barcode AND wrkgrpid = :arr_bars[i].wrkgrpid And Kind = :arr_bars[i].Kind And flag = :arr_bars[i].flag; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新PDA部件条码错误信息失败,' + sqlca.SQLErrText GOTO ext END IF COMMIT; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '事务提交失败,' + sqlca.SQLErrText GOTO ext END IF NEXT ext: IF arg_finishbarcode AND UpperBound(arg_barcode) > 0 THEN IF sc_task.uf_finishbarcode(arg_wrkgrpid, arg_barcode, arg_opdate, ls_msg) <> 1 THEN rslt = 0 arg_msg = '生成工序完工单失败,' + ls_msg END IF END IF Destroy uo_bar Destroy sc_task RETURN rslt end function private function integer pf_get_barcodes_notflag (ref s_p_barcode_pda arg_bars[], ref string arg_msg);// 获取所有未处理的条码 Int rslt = 1 s_p_barcode_pda arr_bars[] Long i = 0 String barcode,opemp Long wrkgrpid,Kind,flag,workgroupid DateTime opdate DECLARE cur1 CURSOR FOR SELECT barcode,wrkgrpid,kind,flag,opemp,opdate,workgroupid FROM u_order_wkp_barcode_pda Where flag <> 1; OPEN cur1; FETCH cur1 Into :barcode,:wrkgrpid,:Kind,:flag,:opemp,:opdate,:workgroupid; DO WHILE sqlca.SQLCode = 0 i++ arr_bars[i].barcode = barcode arr_bars[i].wrkgrpid = wrkgrpid arr_bars[i].Kind = Kind arr_bars[i].flag = flag arr_bars[i].opemp = opemp arr_bars[i].opdate = opdate arr_bars[i].workgroupid = workgroupid FETCH cur1 Into :barcode,:wrkgrpid,:Kind,:flag,:opemp,:opdate,:workgroupid; LOOP CLOSE cur1; arg_bars = arr_bars RETURN rslt end function public function integer uf_cmpl_cost_balcdateint (ref string arg_msg);//If MessageBox('确认','本功能将按各仓库最近一次结存数据为目标重算,为确保重算成本的准确,请尽量把各仓库同时结存'+'~r~n'+'确定要继续执行本功能?',question!,yesno!) = 2 Then Return datastore ds_warebalc ds_warebalc = Create datastore ds_warebalc.DataObject = 'ds_cmpl_cost_balcdateint_warebalc' ds_warebalc.SetTransObject(sqlca) datastore ds_mtrlcost ds_mtrlcost = Create datastore ds_mtrlcost.DataObject = 'ds_rp_mtrlprice' ds_mtrlcost.SetTransObject(sqlca) datastore ds_inwaremx ds_inwaremx = Create datastore ds_inwaremx.DataObject = 'ds_inwaremx_cmpl_balcdateint' ds_inwaremx.SetTransObject(sqlca) Int li_status_step = 0 //当前步骤 s_mtrlprice_mx arg_s_mx[],arg_s_empty[] Long ll_i,ll_j Long ll_storageid,ll_balcdateint,ll_mtrlid,ll_sptid,ll_scid,ll_mtrlwareid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location Decimal ld_inqty,ld_inamt,ld_cost,ld_bgqty,ld_bgamt Decimal ld_inqty_sum,ld_inamt_sum String ls_storagename,ls_mtrlcode,ls_mtrlname //String arg_msg Int rslt Int li_statusflag,li_woodcodeflag,li_pcodeflag String ls_status_config,ls_woodcode_config,ls_pcode_config String ls_pfcode Decimal ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_otherprice,ld_eqprice,ld_outcost_self Long sumdate Int li_dec String ls_msg Long ll_fail Long ll_row String ls_findstr //开始 //ins_ifstart = 1 //p_1.PictureName = 'waiting.jpg' //st_per_1.Visible = False //hpb_1.Visible = False //st_msg_1.Visible = False //p_2.PictureName = 'waiting.jpg' //st_per_2.Visible = False //hpb_2.Visible = False //st_msg_2.Visible = False //p_3.PictureName = 'waiting.jpg' //st_per_3.Visible = False //st_msg_3.Visible = False //p_4.PictureName = 'waiting.jpg' //st_per_4.Visible = False //hpb_4.Visible = False //st_msg_4.Visible = False // //p_5.PictureName = 'waiting.jpg' //st_per_5.Visible = False //st_msg_5.Visible = False li_dec = 2 uo_cmplcost uo_cmpl uo_cmpl = Create uo_cmplcost rslt = 1 //1.计算采购物料成本价 li_status_step = 1 ds_warebalc.Retrieve(2) ds_inwaremx.Retrieve(2) //p_1.PictureName = 'doing.jpg' //hpb_1.MinPosition = 0 //hpb_1.MaxPosition = ds_warebalc.RowCount() //hpb_1.Position = 0 // //hpb_1.Visible = True //st_per_1.Visible = True For ll_i = 1 To ds_warebalc.RowCount() ll_storageid = ds_warebalc.Object.storageid[ll_i] ll_balcdateint = ds_warebalc.Object.balcdateint[ll_i] ll_mtrlid = ds_warebalc.Object.mtrlid[ll_i] ll_sptid = ds_warebalc.Object.sptid[ll_i] ls_status = ds_warebalc.Object.status[ll_i] ls_woodcode = ds_warebalc.Object.woodcode[ll_i] ls_pcode = ds_warebalc.Object.pcode[ll_i] ls_plancode = ds_warebalc.Object.plancode[ll_i] ls_mtrlcuscode = ds_warebalc.Object.mtrlcuscode[ll_i] ls_location = ds_warebalc.Object.Location[ll_i] ld_bgqty = ds_warebalc.Object.bgqty[ll_i] ld_bgamt = ds_warebalc.Object.bgamt[ll_i] ll_scid = ds_warebalc.Object.scid[ll_i] ls_storagename = ds_warebalc.Object.storagename[ll_i] ls_mtrlcode = ds_warebalc.Object.mtrlcode[ll_i] ls_mtrlname = ds_warebalc.Object.mtrlname[ll_i] ll_mtrlwareid = ds_warebalc.Object.mtrlwareid[ll_i] ls_findstr = 'balcdateint = '+String(ll_balcdateint) + ' and storageid = '+String(ll_storageid) ls_findstr = ls_findstr + ' and mtrlid = '+String(ll_mtrlid) + ' and status = "'+ls_status+'" ' ls_findstr = ls_findstr + ' and woodcode = "'+ ls_woodcode + '" and pcode = "'+ls_pcode+'" ' ls_findstr = ls_findstr + ' and plancode = "'+ ls_plancode + '" and mtrlcuscode = "'+ls_mtrlcuscode+'" ' ls_findstr = ls_findstr + ' and location = "'+ ls_location + '" and scid = '+String(ll_scid) ll_row = ds_inwaremx.Find(ls_findstr,1,ds_inwaremx.RowCount()) If ll_row > 0 Then ld_inamt = ds_inwaremx.Object.inamt[ll_row] ld_inqty = ds_inwaremx.Object.inqty[ll_row] ds_inwaremx.DeleteRow(ll_row) Else ld_inamt = 0 ld_inqty = 0 End If // SELECT sum(u_inwaremx.cost * u_inwaremx.qty), // sum(u_inwaremx.qty) // INTO :ld_inamt, // :ld_inqty // FROM u_inware INNER JOIN // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND // u_inware.inwareid = u_inwaremx.inwareid // WHERE (u_inware.balcdateint = :ll_balcdateint) // AND (u_inware.thflag = 0) // AND (u_inware.storageid = :ll_storageid) // AND (u_inwaremx.mtrlid = :ll_mtrlid) // AND (u_inwaremx.status = :ls_status) // AND (u_inwaremx.woodcode = :ls_woodcode) // AND (u_inwaremx.pcode = :ls_pcode) // AND (u_inwaremx.plancode = :ls_plancode) // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode) // AND (u_inwaremx.Location = :ls_location) // And (u_inware.scid = :ll_scid); // IF sqlca.SQLCode <> 0 THEN // ld_inamt = 0 // ld_inqty = 0 // END IF If IsNull(ld_inamt) Then ld_inamt = 0 If IsNull(ld_inqty) Then ld_inqty = 0 If ld_bgamt < 0 Then If ld_inqty > 0 Then ld_bgamt = ld_bgqty * (ld_inamt / ld_inqty) Else Select top 1 cost Into :ld_cost From u_mtrlware Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode <> 0 Then ld_cost = 0 End If ld_bgamt = ld_bgqty * ld_cost End If End If If ld_bgqty + ld_inqty <> 0 Then ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty) End If If ld_bgqty + ld_inqty <> 0 Then ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty) End If If (ld_bgqty + ld_inqty = 0) Or ld_cost < 0 Then Select top 1 cost Into :ld_cost From u_mtrlware Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode <> 0 Then ld_cost = 0 End If End If If IsNull(ld_cost) Then ld_cost = 0 Update u_inwaremx Set u_inwaremx.cost = :ld_cost From u_inware Inner JOIN u_inwaremx ON u_inware.scid = u_inwaremx.scid And u_inware.inwareid = u_inwaremx.inwareid Where (u_inware.balcdateint = :ll_balcdateint) And (u_inware.thflag = 1) And (u_inware.storageid = :ll_storageid) And (u_inwaremx.mtrlid = :ll_mtrlid) And (u_inwaremx.status = :ls_status) And (u_inwaremx.woodcode = :ls_woodcode) And (u_inwaremx.pcode = :ls_pcode) And (u_inwaremx.plancode = :ls_plancode) And (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode) And (u_inwaremx.Location = :ls_location) And (u_inware.scid = :ll_scid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新退货单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If //更新当前仓库结存表的期间进仓 Select isnull(sum(u_inwaremx.qty),0), isnull(sum(round(u_inwaremx.cost * u_inwaremx.qty,2)),0) Into :ld_inqty_sum, :ld_inamt_sum From u_inware Inner JOIN u_inwaremx ON u_inware.scid = u_inwaremx.scid And u_inware.inwareid = u_inwaremx.inwareid Where (u_inware.balcdateint = :ll_balcdateint) And (u_inware.storageid = :ll_storageid) And (u_inwaremx.mtrlid = :ll_mtrlid) And (u_inwaremx.status = :ls_status) And (u_inwaremx.woodcode = :ls_woodcode) And (u_inwaremx.pcode = :ls_pcode) And (u_inwaremx.plancode = :ls_plancode) And (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode) And (u_inwaremx.Location = :ls_location) And (u_inware.scid = :ll_scid); If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '查询期间进仓失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If // ld_inamt_sum = Round(ld_inqty * ld_cost,2) // ld_inqty_sum = ld_inqty If IsNull(ld_inqty_sum) Then ld_inqty_sum = 0 If IsNull(ld_inamt_sum) Then ld_inamt_sum = 0 Update u_warebalc Set u_warebalc.incqty = :ld_inqty_sum, u_warebalc.incamt = :ld_inamt_sum, u_warebalc.bgamt = :ld_bgamt Where u_warebalc.scid = :ll_scid And u_warebalc.balcdateint = :ll_balcdateint And u_warebalc.mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表期间进数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If If ld_bgqty + ld_inqty_sum <> 0 Then ld_cost = (ld_bgamt + ld_inamt_sum) / (ld_bgqty + ld_inqty_sum) If ld_cost > 0 Then Update u_mtrlware Set cost = :ld_cost, wareamt = :ld_cost * noallocqty Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新库存成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If End If End If //更新当前仓库所有出仓明细的成本价 Update u_outwaremx Set u_outwaremx.cost = :ld_cost, u_outwaremx.costamt = :ld_cost * qty From u_outwaremx Inner JOIN u_outware ON u_outwaremx.scid = u_outware.scid And u_outwaremx.outwareid = u_outware.outwareid Where u_outwaremx.scid = :ll_scid And u_outwaremx.mtrlwareid = :ll_mtrlwareid And u_outware.balcdateint = :ll_balcdateint; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新出仓单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If Update u_warebalc Set u_warebalc.desamt = v_outwaremx.desamt From u_warebalc Inner JOIN (Select u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint, SUM(u_outwaremx.costamt) AS desamt From u_outware Inner JOIN u_outwaremx ON u_outware.scid = u_outwaremx.scid And u_outware.outwareid = u_outwaremx.outwareid Where u_outwaremx.scid = :ll_scid And u_outwaremx.mtrlwareid = :ll_mtrlwareid And u_outware.balcdateint = :ll_balcdateint Group By u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint) v_outwaremx ON u_warebalc.scid = v_outwaremx.scid And u_warebalc.balcdateint = v_outwaremx.balcdateint And u_warebalc.mtrlwareid = v_outwaremx.mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表期间出金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If //重算一次结余数量,结余金额,并得出新的成本价 Update u_warebalc Set balcqty = bgqty + incqty - desqty, balcamt = bgamt + incamt - desamt Where u_warebalc.scid = :ll_scid And u_warebalc.balcdateint = :ll_balcdateint And u_warebalc.mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表结余数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If Commit; // hpb_1.Position = ll_i // st_per_1.Text = String(ll_i/ds_warebalc.RowCount(),'0.0%') Next //hpb_1.Visible = False //st_per_1.Visible = False //p_1.PictureName = 'done.jpg' //2.统计产品最新成本 li_status_step = 2 //p_2.PictureName = 'doing.jpg' Insert Into u_mtrlprice_sum (mtrlid, status, woodcode, pcode, pfcode, sumdate) Select u_mtrl_configure.Mtrlid, u_mtrl_configure.name, '' AS woodcode, '' AS pcode, u_mtrl_configure.name , 0 From u_mtrl_configure Inner JOIN u_mtrldef ON u_mtrl_configure.Mtrlid = u_mtrldef.mtrlid Where (u_mtrldef.statusflag = 2) And (Not Exists (Select * From u_mtrlprice_sum Where mtrlid = u_mtrl_configure.mtrlid And status = u_mtrl_configure.name And woodcode = '' And pcode = '')); If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '插入新增的组合配置到统计列表失败,'+sqlca.SQLErrText Goto ext End If Insert Into u_mtrlprice_sum (mtrlid, status, woodcode, pcode, pfcode, sumdate) Select u_mtrldef.mtrlid, CASE statusflag WHEN 4 THEN status_config ELSE '' End AS status, CASE woodcodeflag WHEN 4 THEN woodcode_config ELSE '' End AS woodcode, CASE pcodeflag WHEN 4 THEN pcode_config ELSE '' End AS pcode, u_mtrl_pf.pfcode, 0 From u_mtrldef Inner JOIN u_mtrl_pf ON u_mtrldef.mtrlid = u_mtrl_pf.Mtrlid Where (u_mtrldef.statusflag <> 2) And (u_mtrl_pf.Ifdft = 1) And (Not Exists (Select * From u_mtrlprice_sum Where mtrlid = u_mtrldef.mtrlid And status = CASE statusflag WHEN 4 THEN status_config ELSE '' End And woodcode = CASE woodcodeflag WHEN 4 THEN woodcode_config ELSE '' End And pcode = Case pcodeflag WHEN 4 Then pcode_config Else '' End)); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '插入新增的产品及物料到统计列表失败,'+sqlca.SQLErrText Goto ext End If Insert Into u_mtrlprice_sum (mtrlid, status, woodcode, pcode, pfcode, sumdate) Select DISTINCT u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, CASE u_mtrldef.statusflag WHEN 2 THEN u_Order_ml.status_mode ELSE u_order_ml.pfcode End AS pfcode, 0 From u_Order_ml Inner JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid Where (Not Exists (Select * From u_mtrlprice_sum Where mtrlid = u_order_ml.mtrlid And status = u_Order_ml.status_mode And woodcode = u_Order_ml.woodcode And pcode = u_Order_ml.pcode)) And (u_Order_ml.status <> 0) And (u_mtrldef.statusflag = 4 Or u_mtrldef.woodcodeflag = 4 Or u_mtrldef.pcodeflag = 4); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '插入生产中涉及到的新部件选配产品到统计列表失败,'+sqlca.SQLErrText Goto ext End If Commit; ds_mtrlcost.Retrieve(0,'',1) sumdate = Year(Date(Today())) * 10000 + Month(Date(Today())) * 100 + Day(Date(Today())) /// // //hpb_2.MinPosition = 0 //hpb_2.MaxPosition = ds_mtrlcost.RowCount() //hpb_2.Position = 0 // //hpb_2.Visible = True //st_per_2.Visible = True // For ll_i = 1 To ds_mtrlcost.RowCount() // hpb_2.Position = ll_i // st_per_2.Text = String(ll_i/ds_mtrlcost.RowCount(),'0.0%') ll_mtrlid = ds_mtrlcost.Object.mtrlid[ll_i] ls_mtrlcode = ds_mtrlcost.Object.mtrlcode[ll_i] ls_pfcode = ds_mtrlcost.Object.u_mtrlprice_sum_pfcode[ll_i] ll_scid = ds_mtrlcost.Object.u_mtrldef_scid[ll_i] ls_status = ds_mtrlcost.Object.status[ll_i] ls_woodcode = ds_mtrlcost.Object.woodcode[ll_i] ls_pcode = ds_mtrlcost.Object.pcode[ll_i] li_statusflag = ds_mtrlcost.Object.statusflag[ll_i] li_woodcodeflag = ds_mtrlcost.Object.woodcodeflag[ll_i] li_pcodeflag = ds_mtrlcost.Object.pcodeflag[ll_i] ls_status_config = ds_mtrlcost.Object.status_config[ll_i] ls_woodcode_config = ds_mtrlcost.Object.woodcode_config[ll_i] ls_pcode_config = ds_mtrlcost.Object.pcode_config[ll_i] If ls_pfcode = '' Then Continue ld_price = 0 ld_wfjgprice = 0 ld_outcost_self = 0 ld_outcost = 0 ld_wageprice = 0 ld_otherprice = 0 ld_eqprice = 0 arg_msg = '' uo_cmpl.deep = 0 uo_cmpl.ifcmpl_1 = True uo_cmpl.ins_cnt = 0 arg_s_mx = arg_s_empty If (li_statusflag = 4 And ls_status <> ls_status_config Or & li_woodcodeflag = 4 And ls_woodcode <> ls_woodcode_config Or & li_pcodeflag = 4 And ls_pcode <> ls_pcode_config) Then If uo_cmpl.uof_get_cost_dz(1,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,arg_msg,arg_s_mx) = 0 Then arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue ld_price = 0 ld_wfjgprice = 0 ld_outcost = 0 ld_wageprice = 0 ld_eqprice = 0 End If Else If uo_cmpl.uof_get_cost(1,ll_scid,ll_mtrlid,ls_mtrlcode,ls_pfcode,1,1,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,0,arg_msg,arg_s_mx,1) = 0 Then arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue ld_price = 0 ld_wfjgprice = 0 ld_outcost = 0 ld_wageprice = 0 ld_eqprice = 0 End If End If ld_price = Round(ld_price,li_dec) ld_wfjgprice = Round(ld_wfjgprice,li_dec) ld_outcost = Round(ld_outcost,li_dec) ld_wageprice = Round(ld_wageprice,li_dec) ld_eqprice = Round(ld_eqprice,li_dec) Select top 1 otherprice Into :ld_otherprice From u_mtrlprice_sum Where mtrlid = :ll_mtrlid And pfcode = :ls_pfcode And sumdate < :sumdate And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode Order By sumdate Desc; If sqlca.SQLCode <> 0 Then arg_msg = '物料:'+ls_mtrlcode+'取上次附加成本失败,'+arg_msg ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue End If If IsNull(ld_otherprice) Then ld_otherprice = 0 Update u_mtrlprice_sum Set price = :ld_price, cost = :ld_price + :ld_wfjgprice + :ld_wageprice + :ld_outcost + :ld_otherprice + :ld_eqprice, wfjgprice = :ld_wfjgprice, jgprice = :ld_wageprice, outcost = :ld_outcost, otherprice = :ld_otherprice, eqprice = :ld_eqprice, dscrp = :arg_msg, sumdate = :sumdate Where mtrlid = :ll_mtrlid And pfcode = :ls_pfcode And (sumdate = :sumdate Or sumdate = 0 ) And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_mtrlprice_sum (sumdate, pfcode, mtrlid, price, cost, wfjgprice, jgprice, eqprice, outcost, otherprice, dscrp, status, woodcode, pcode) Values(:sumdate, :ls_pfcode, :ll_mtrlid, :ld_price, :ld_price + :ld_wfjgprice + :ld_wageprice + :ld_outcost + :ld_eqprice, :ld_wfjgprice, :ld_wageprice, :ld_eqprice, :ld_outcost, :ld_otherprice, :arg_msg, :ls_status, :ls_woodcode, :ls_pcode); If sqlca.SQLCode <> 0 Then arg_msg = '新增物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue End If End If Else arg_msg = '更新物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue End If Delete From u_mtrlprice_mx Where mtrlid = :ll_mtrlid And pfcode = :ls_pfcode And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode; If sqlca.SQLCode <> 0 Then Rollback; arg_msg = '删除物料:'+ls_mtrlcode+'原成本组成明细失败,'+sqlca.SQLErrText ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Continue End If For ll_j = 1 To UpperBound(arg_s_mx) Update u_mtrlprice_mx Set price = price + :arg_s_mx[ll_j].price, wfjgprice = wfjgprice + :arg_s_mx[ll_j].wfjgprice, jgprice = jgprice + :arg_s_mx[ll_j].jgprice, outcost = outcost + :arg_s_mx[ll_j].outcost, eqprice = eqprice + :arg_s_mx[ll_j].eqprice, qty = qty + :arg_s_mx[ll_j].qty Where mtrlid = :ll_mtrlid And pfcode = :ls_pfcode And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode And sonmtrlid = :arg_s_mx[ll_j].sonmtrlid; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_mtrlprice_mx (mtrlid, pfcode, status, woodcode, pcode, sonmtrlid, price, wfjgprice, jgprice, outcost, eqprice, qty) Values (:ll_mtrlid, :ls_pfcode, :ls_status, :ls_woodcode, :ls_pcode, :arg_s_mx[ll_j].sonmtrlid, :arg_s_mx[ll_j].price, :arg_s_mx[ll_j].wfjgprice, :arg_s_mx[ll_j].jgprice, :arg_s_mx[ll_j].outcost, :arg_s_mx[ll_j].eqprice, :arg_s_mx[ll_j].qty); If sqlca.SQLCode <> 0 Then Rollback; arg_msg = '物料:'+ls_mtrlcode+'插入成本组成明细失败,'+sqlca.SQLErrText ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Goto _next End If End If Else Rollback; arg_msg = '更新物料:'+ls_mtrlcode+'成本组成明细失败,'+sqlca.SQLErrText ls_msg = ls_msg + arg_msg + '~n' ll_fail++ Goto _next End If Next Commit; _next: Next //hpb_2.Visible = False //st_per_2.Visible = False //p_2.PictureName = 'done.jpg' //3.更新成品进仓单成本价 li_status_step = 3 //p_3.PictureName = 'doing.jpg' //st_per_3.Visible = True Update u_inwaremx Set u_inwaremx.cost = isnull(v_cost.cost,0), u_inwaremx.fprice = isnull(v_cost.cost,0), u_inwaremx.uprice = isnull(v_cost.cost,0), u_inwaremx.enprice = isnull(v_cost.cost,0), u_inwaremx.enprice_tax = isnull(v_cost.cost,0), u_inwaremx.enprice_notax = isnull(v_cost.cost,0), u_inwaremx.price = isnull(v_cost.cost,0) From u_inwaremx Inner JOIN u_inware ON u_inwaremx.scid = u_inware.scid And u_inwaremx.inwareid = u_inware.inwareid Inner JOIN (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint From u_warebalc Where (balcdateint > 0) Group By Storageid) v_balcint ON u_inware.storageid = v_balcint.Storageid And u_inware.balcdateint = v_balcint.balcdateint Inner JOIN (Select u_mtrlprice_sum.mtrlid, u_mtrlprice_sum.status, u_mtrlprice_sum.woodcode, u_mtrlprice_sum.pcode, MAX(u_mtrlprice_sum.cost) AS cost From u_mtrlprice_sum Inner JOIN (Select MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode,pcode From u_mtrlprice_sum Group By mtrlid, pfcode, status, woodcode, pcode) v_mtrlid_sumdate ON u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode COLLATE Chinese_PRC_CI_AS And u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode COLLATE Chinese_PRC_CI_AS And u_mtrlprice_sum.status = v_mtrlid_sumdate.status COLLATE Chinese_PRC_CI_AS And u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid And u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode And u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate Group By u_mtrlprice_sum.mtrlid, u_mtrlprice_sum.status, u_mtrlprice_sum.woodcode, u_mtrlprice_sum.pcode) v_cost ON u_inwaremx.mtrlid = v_cost.mtrlid And u_inwaremx.status = v_cost.status And u_inwaremx.woodcode = v_cost.woodcode And u_inwaremx.pcode = v_cost.pcode Where (u_inware.billtype <> 1); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产进仓单单价及成本价失败,'+sqlca.SQLErrText Goto ext End If Commit; //st_per_3.Visible = False //p_3.PictureName = 'done.jpg' //4.更新产品结存表成本价,库存成本价 li_status_step = 4 ds_warebalc.Retrieve(30) ds_inwaremx.Retrieve(30) //p_4.PictureName = 'doing.jpg' //hpb_4.MinPosition = 0 //hpb_4.MaxPosition = ds_warebalc.RowCount() //hpb_4.Position = 0 // //hpb_4.Visible = True //st_per_4.Visible = True For ll_i = 1 To ds_warebalc.RowCount() ll_storageid = ds_warebalc.Object.storageid[ll_i] ll_balcdateint = ds_warebalc.Object.balcdateint[ll_i] ll_mtrlid = ds_warebalc.Object.mtrlid[ll_i] ll_sptid = ds_warebalc.Object.sptid[ll_i] ls_status = ds_warebalc.Object.status[ll_i] ls_woodcode = ds_warebalc.Object.woodcode[ll_i] ls_pcode = ds_warebalc.Object.pcode[ll_i] ls_plancode = ds_warebalc.Object.plancode[ll_i] ls_mtrlcuscode = ds_warebalc.Object.mtrlcuscode[ll_i] ls_location = ds_warebalc.Object.Location[ll_i] ld_bgqty = ds_warebalc.Object.bgqty[ll_i] ld_bgamt = ds_warebalc.Object.bgamt[ll_i] ll_scid = ds_warebalc.Object.scid[ll_i] ls_storagename = ds_warebalc.Object.storagename[ll_i] ls_mtrlcode = ds_warebalc.Object.mtrlcode[ll_i] ls_mtrlname = ds_warebalc.Object.mtrlname[ll_i] ll_mtrlwareid = ds_warebalc.Object.mtrlwareid[ll_i] // SELECT sum(u_inwaremx.cost * u_inwaremx.qty), // sum(u_inwaremx.qty) // INTO :ld_inamt, // :ld_inqty // FROM u_inware INNER JOIN // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND // u_inware.inwareid = u_inwaremx.inwareid // WHERE (u_inware.balcdateint = :ll_balcdateint) // AND (u_inware.storageid = :ll_storageid) // AND (u_inwaremx.mtrlid = :ll_mtrlid) // AND (u_inwaremx.status = :ls_status) // AND (u_inwaremx.woodcode = :ls_woodcode) // AND (u_inwaremx.pcode = :ls_pcode) // AND (u_inwaremx.plancode = :ls_plancode) // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode) // AND (u_inwaremx.Location = :ls_location) // And (u_inware.scid = :ll_scid); // IF sqlca.SQLCode <> 0 THEN // ld_inamt = 0 // ld_inqty = 0 // END IF ls_findstr = 'balcdateint = '+String(ll_balcdateint) + ' and storageid = '+String(ll_storageid) ls_findstr = ls_findstr + ' and mtrlid = '+String(ll_mtrlid) + ' and status = "'+ls_status+'" ' ls_findstr = ls_findstr + ' and woodcode = "'+ ls_woodcode + '" and pcode = "'+ls_pcode+'" ' ls_findstr = ls_findstr + ' and plancode = "'+ ls_plancode + '" and mtrlcuscode = "'+ls_mtrlcuscode+'" ' ls_findstr = ls_findstr + ' and location = "'+ ls_location + '" and scid = '+String(ll_scid) ll_row = ds_inwaremx.Find(ls_findstr,1,ds_inwaremx.RowCount()) If ll_row > 0 Then ld_inamt = ds_inwaremx.Object.inamt[ll_row] ld_inqty = ds_inwaremx.Object.inqty[ll_row] ds_inwaremx.DeleteRow(ll_row) Else ld_inamt = 0 ld_inqty = 0 End If If IsNull(ld_inamt) Then ld_inamt = 0 If IsNull(ld_inqty) Then ld_inqty = 0 If ld_bgamt < 0 Then If ld_inqty > 0 Then ld_bgamt = ld_bgqty * (ld_inamt / ld_inqty) Else Select top 1 cost Into :ld_cost From u_mtrlware Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode <> 0 Then ld_cost = 0 End If ld_bgamt = ld_bgqty * ld_cost End If End If If ld_bgqty + ld_inqty <> 0 Then ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty) End If If (ld_bgqty + ld_inqty = 0) Or ld_cost < 0 Then Select top 1 cost Into :ld_cost From u_mtrlware Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode <> 0 Then ld_cost = 0 End If End If If IsNull(ld_cost) Then ld_cost = 0 //更新当前仓库结存表的期间进仓 // SELECT isnull(sum(u_inwaremx.qty),0), // isnull(sum(round(u_inwaremx.cost * u_inwaremx.qty,2)),0) // INTO :ld_inqty_sum, // :ld_inamt_sum // FROM u_inware INNER JOIN // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND // u_inware.inwareid = u_inwaremx.inwareid // WHERE (u_inware.balcdateint = :ll_balcdateint) // AND (u_inware.storageid = :ll_storageid) // AND (u_inwaremx.mtrlid = :ll_mtrlid) // AND (u_inwaremx.status = :ls_status) // AND (u_inwaremx.woodcode = :ls_woodcode) // AND (u_inwaremx.pcode = :ls_pcode) // AND (u_inwaremx.plancode = :ls_plancode) // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode) // AND (u_inwaremx.Location = :ls_location) // And (u_inware.scid = :ll_scid); // IF sqlca.SQLCode = -1 THEN // rslt = 0 // arg_msg = '查询期间进仓失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText // GOTO ext // END IF ld_inqty_sum = ld_inqty ld_inamt_sum = ld_inamt If IsNull(ld_inqty_sum) Then ld_inqty_sum = 0 If IsNull(ld_inamt_sum) Then ld_inamt_sum = 0 Update u_warebalc Set u_warebalc.incqty = :ld_inqty_sum, u_warebalc.incamt = :ld_inamt_sum, u_warebalc.bgamt = :ld_bgamt Where u_warebalc.scid = :ll_scid And u_warebalc.balcdateint = :ll_balcdateint And u_warebalc.mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表期间进数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If //更新当前仓库所有出仓明细的成本价 Update u_outwaremx Set u_outwaremx.cost = :ld_cost, u_outwaremx.costamt = :ld_cost * qty From u_outwaremx Inner JOIN u_outware ON u_outwaremx.scid = u_outware.scid And u_outwaremx.outwareid = u_outware.outwareid Where u_outwaremx.scid = :ll_scid And u_outwaremx.mtrlwareid = :ll_mtrlwareid And u_outware.balcdateint = :ll_balcdateint; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新出仓单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If Update u_warebalc Set u_warebalc.desamt = v_outwaremx.desamt From u_warebalc Inner JOIN (Select u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint, SUM(u_outwaremx.costamt) AS desamt From u_outware Inner JOIN u_outwaremx ON u_outware.scid = u_outwaremx.scid And u_outware.outwareid = u_outwaremx.outwareid Where u_outwaremx.scid = :ll_scid And u_outwaremx.mtrlwareid = :ll_mtrlwareid And u_outware.balcdateint = :ll_balcdateint Group By u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint) v_outwaremx ON u_warebalc.scid = v_outwaremx.scid And u_warebalc.balcdateint = v_outwaremx.balcdateint And u_warebalc.mtrlwareid = v_outwaremx.mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表期间出金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If //重算一次结余数量,结余金额,并得出新的成本价 Update u_warebalc Set balcqty = bgqty + incqty - desqty, balcamt = bgamt + incamt - desamt Where u_warebalc.scid = :ll_scid And u_warebalc.balcdateint = :ll_balcdateint And u_warebalc.mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新结存表结余数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If If ld_bgqty + ld_inqty_sum <> 0 Then ld_cost = (ld_bgamt + ld_inamt_sum) / (ld_bgqty + ld_inqty_sum) If ld_cost > 0 Then Update u_mtrlware Set cost = :ld_cost, wareamt = :ld_cost * noallocqty Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新库存成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText Goto ext End If End If End If Commit; // hpb_4.Position = ll_i // st_per_4.Text = String(ll_i/ds_warebalc.RowCount(),'0.0%') Next //hpb_4.Visible = False //st_per_4.Visible = False //p_4.PictureName = 'done.jpg' //5.按最近结存的结余金额更新本期期初 li_status_step = 5 //p_5.PictureName = 'doing.jpg' //st_per_5.Visible = True Update u_warebalc Set u_warebalc.bgqty = v_last.balcqty, u_warebalc.bgamt = v_last.balcamt From u_warebalc Inner JOIN (Select u_warebalc.scid, u_warebalc.balcdateint, u_warebalc.mtrlwareid, u_warebalc.balcqty, u_warebalc.balcamt From u_warebalc Inner JOIN (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint From u_warebalc Where (balcdateint > 0) Group By Storageid) v_balcint ON u_warebalc.Storageid = v_balcint.Storageid And u_warebalc.balcdateint = v_balcint.balcdateint) v_last ON u_warebalc.scid = v_last.scid And u_warebalc.mtrlwareid = v_last.mtrlwareid Inner JOIN u_mtrldef ON u_warebalc.mtrlid = u_mtrldef.mtrlid Inner JOIN u_storage ON u_warebalc.Storageid = u_storage.storageid Where (u_warebalc.balcdateint = 0) And ( u_warebalc.bgqty <> v_last.balcqty Or u_warebalc.bgamt <> v_last.balcamt); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按最近结存的结余金额更新本期期初失败,'+sqlca.SQLErrText Goto ext End If Update u_warebalc Set balcqty = bgqty + incqty - desqty, balcamt = bgamt + incamt - desamt Where (balcdateint = 0) And (balcqty <> bgqty + incqty - desqty Or balcamt <> bgamt + incamt - desamt); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按最近结存的结余金额更新本期结余失败,'+sqlca.SQLErrText Goto ext End If //更新指令单领用明细金额 Update u_OrderRqMtrl_scll Set u_OrderRqMtrl_scll.costamt = v_outware.cost * u_OrderRqMtrl_scll.DstrQty From u_OrderRqMtrl_scll Inner JOIN (Select u_outware.scid, u_outwaremx.relid AS orderid, u_outware.relid AS wrkgrpid, u_outwaremx.mtrlid, u_outwaremx.status, u_outwaremx.woodcode, u_outwaremx.pcode, SUM(u_outwaremx.costamt) / SUM(u_outwaremx.qty) AS cost From u_outwaremx Inner JOIN u_outware ON u_outwaremx.scid = u_outware.scid And u_outwaremx.outwareid = u_outware.outwareid Inner JOIN (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint From u_warebalc Where (balcdateint > 0) Group By Storageid) v_balcint ON u_outware.StorageID = v_balcint.Storageid And u_outware.balcdateint = v_balcint.balcdateint Where (u_outware.billtype = 3) And (u_outwaremx.relid > 0) And (u_outwaremx.qty > 0) And (u_outwaremx.cost > 0) Group By u_outware.scid, u_outwaremx.relid, u_outware.relid, u_outwaremx.mtrlid, u_outwaremx.status, u_outwaremx.woodcode, u_outwaremx.pcode Having (SUM(u_outwaremx.qty) > 0)) v_outware ON u_OrderRqMtrl_scll.scid = v_outware.scid And u_OrderRqMtrl_scll.OrderID = v_outware.orderid And u_OrderRqMtrl_scll.MtrlID = v_outware.mtrlid And u_OrderRqMtrl_scll.wrkGrpid = v_outware.wrkgrpid And u_OrderRqMtrl_scll.status = v_outware.status COLLATE Chinese_PRC_CI_AS And u_OrderRqMtrl_scll.woodcode = v_outware.woodcode COLLATE Chinese_PRC_CI_AS And u_OrderRqMtrl_scll.pcode = v_outware.pcode COLLATE Chinese_PRC_CI_AS Where v_outware.cost > 0 And u_OrderRqMtrl_scll.costamt <> v_outware.cost * u_OrderRqMtrl_scll.DstrQty ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新指令单领用明细金额失败,'+sqlca.SQLErrText Goto ext End If Commit; //st_per_5.Visible = False //p_5.PictureName = 'done.jpg' ext: Destroy ds_warebalc Destroy ds_mtrlcost Destroy ds_inwaremx Destroy uo_cmpl If rslt = 0 Then Rollback; // If li_status_step = 1 Then // p_1.PictureName = 'wrong.jpg' // st_per_1.Visible = False // hpb_1.Visible = False // st_msg_1.Text = arg_msg // ElseIf li_status_step = 2 Then // p_2.PictureName = 'wrong.jpg' // st_per_2.Visible = False // hpb_2.Visible = False // st_msg_2.Text = arg_msg // ElseIf li_status_step = 3 Then // p_3.PictureName = 'wrong.jpg' // st_per_3.Visible = False // st_msg_3.Text = arg_msg // ElseIf li_status_step = 4 Then // p_4.PictureName = 'wrong.jpg' // st_per_4.Visible = False // hpb_4.Visible = False // st_msg_4.Text = arg_msg // ElseIf li_status_step = 5 Then // p_5.PictureName = 'wrong.jpg' // st_per_5.Visible = False // st_msg_5.Text = arg_msg // End If f_setsysoplog('按月重算产品成本','按月重算产品成本失败,原因:'+arg_msg,ls_msg,True) Else f_setsysoplog('按月重算产品成本','按月重算产品成本成功',ls_msg,True) // MessageBox('系统提示','重算完成') End If //ins_ifstart = 0 return rslt end function public function integer uof_cmpl_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg);uo_warebalc_cmpl uo_cmpl uo_cmpl = Create uo_warebalc_cmpl Int rslt = 1 rslt = uo_cmpl.uof_cmpl_warebalc_amt(arg_storageid, arg_balcdateint, Ref arg_msg) Destroy uo_cmpl RETURN rslt end function public function integer uof_cmpl_mtrlcost_planprice (long arr_mtrlid[], string arr_pfcode[], string arr_status[], string arr_woodcode[], string arr_pcode[], long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string ls_msg);Int rslt = 1 Long ll_fail = 0 Long i ls_msg = '' String arg_msg uo_cmplcost uo_cmpl uo_cmpl = Create uo_cmplcost FOR i = 1 To UpperBound(arr_mtrlid) IF arr_pfcode[i] = '' THEN CONTINUE arg_msg = '' IF uo_cmpl.uof_cmpl_mtrlcost(arr_mtrlid[i], arr_pfcode[i], arr_status[i], arr_woodcode[i], arr_pcode[i], li_dec, if_auto_copy,& ifprice, ifwfjgprice, ifjgprice, ifoutcost, ifotherprice, ifeqprice, Ref arg_msg) <> 1 THEN ls_msg = ls_msg + arg_msg + '~r~n' ll_fail++ CONTINUE END IF NEXT Destroy uo_cmpl IF ll_fail > 0 THEN rslt = 0 ls_msg = "统计失败:~r~n" + ls_msg ELSE ls_msg = "统计成功" END IF RETURN rslt end function private function integer pf_outware_to_inwarebuy (string ls_sn, datetime dt_server, ref string arg_msg);Int rslt = 1 Long ll_scid String ls_sccode, ls_outwarecode, ls_banktypename, ls_moneyname Long ll_banktypeid, ll_moneyid String ls_cuscode, ls_sendsccode // 供应商 Long ll_sptid // 供应商 Long ll_storageid = 0 Long ll_printid, arr_printid[], arr_ll_empty[] Long j = 0, cnt = 0, i = 0 String ls_sptmtrlcode, ls_status, ls_woodcode, ls_pcode, ls_plancode, ls_unit, ls_mtrlcuscode String ls_fiebrelcode Long ll_mtrlid Long ll_ifrel, ll_relid, ll_relprintid String ls_mtrlcode Decimal ld_qty, ld_enprice, ld_rebate Decimal ld_amt String ls_itemname, ls_itemcode, ls_mxdscrp Long ll_itemid String ls_inwarecode Long ll_inwareid s_getbar arg_s_gb, s_empty Long ll_sptmtrlid, arr_sptmtrlid[] String arr_status[], arr_woodcode[], arr_pcode[] Dec ld_packqty, arr_packqty[], ld_num, arr_num[] String ls_barcode uo_inware_buy uo_ware uo_ware = Create uo_inware_buy uo_ware.commit_transaction = sqlca uo_getbar uo_get uo_get = Create uo_getbar SELECT LJFIEB_packet.ReceiveSCcode, LJFIEB_tempoutware.outwarecode, cuscomm_s.CusCode, LJFIEB_packet.SendSCcode, LJFIEB_tempoutware.banktypename, LJFIEB_tempoutware.moneyname INTO :ls_sccode, :ls_outwarecode, :ls_cuscode, :ls_sendsccode, :ls_banktypename, :ls_moneyname FROM LJFIEB_packet INNER JOIN LJFIEB_tempoutware ON LJFIEB_packet.SerialNum = LJFIEB_tempoutware.serialnum INNER JOIN LJFIEB_CusComm AS cuscomm_s ON LJFIEB_packet.SendCusCommID = cuscomm_s.CusCommID WHERE LJFIEB_packet.SerialNum = :ls_sn Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询接收分部编码失败,' + sys_email_sqlca.SQLErrText GOTO ext END IF SELECT scid INTO :ll_scid FROM u_scdef Where sccode = :ls_sccode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询接收分部失败,编码['+ls_sccode+'],' + sqlca.SQLErrText GOTO ext END IF SELECT sptid, banktypeid INTO :ll_sptid, :ll_banktypeid FROM u_spt WHERE commcode = :ls_cuscode And commsccode = :ls_sendsccode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询发送供应商['+ls_cuscode+']['+ls_sendsccode+']失败,' + sqlca.SQLErrText GOTO ext END IF //SELECT banktypeid // INTO :ll_banktypeid // FROM cw_banktype // Where inuse = 1 And banktype = 1 And banktypename = :ls_banktypename; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询结算方式['+ls_banktypename+']失败,' + sqlca.SQLErrText // GOTO ext //END IF SELECT moneyid INTO :ll_moneyid FROM cw_currency Where Name = :ls_moneyname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询币种['+ls_moneyname+']失败,' + sqlca.SQLErrText GOTO ext END IF IF uo_ware.newbegin(ll_scid,1,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.indate = dt_server // 发生时间 uo_ware.inrep = publ_operator // 经手人 uo_ware.part = ls_outwarecode uo_ware.dscrp = '' uo_ware.storageid = ll_storageid // DONE: dw_uc.Object.storageid[uc_row] uo_ware.sptid = ll_sptid uo_ware.otheramt = 0 uo_ware.relint_1 = ll_banktypeid uo_ware.relid = 0 uo_ware.thflag = 0 uo_ware.moneyid = ll_moneyid uo_ware.mrate = f_get_mrate(ll_moneyid) arr_printid = arr_ll_empty j = 0 DECLARE cur2 CURSOR FOR SELECT printid FROM LJFIEB_tempoutwaremx WHERE (serialnum = :ls_sn) ORDER BY printid Using sys_email_sqlca; OPEN cur2; FETCH cur2 Into :ll_printid; DO WHILE sys_email_sqlca.SQLCode = 0 j++ arr_printid[j] = ll_printid FETCH cur2 Into :ll_printid; LOOP CLOSE cur2; FOR j = 1 To UpperBound(arr_printid) ll_printid = arr_printid[j] SELECT sptmtrlcode, status, woodcode, pcode, plancode, unit, qty, enprice, rebate, fiebrelcode, mtrlcuscode INTO :ls_sptmtrlcode, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ls_unit, :ld_qty, :ld_enprice, :ld_rebate, :ls_fiebrelcode, :ls_mtrlcuscode FROM LJFIEB_tempoutwaremx WHERE (serialnum = :ls_sn) AND (printid = :ll_printid) Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询对方发货单明细失败,' + sys_email_sqlca.SQLErrText GOTO ext END IF SELECT u_sptmtrlname.mtrlid, u_mtrldef.mtrlcode INTO :ll_mtrlid, :ls_mtrlcode FROM u_sptmtrlname INNER JOIN u_mtrldef ON u_sptmtrlname.mtrlid = u_mtrldef.mtrlid WHERE u_sptmtrlname.sptid = :ll_sptid And u_sptmtrlname.sptmtrlcode = :ls_sptmtrlcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询供应商物料['+ls_sptmtrlcode+']本地对应物料失败,' + sqlca.SQLErrText GOTO ext END IF ll_ifrel = 0 ll_relid = 0 ll_relprintid = 0 IF ls_fiebrelcode <> '' And ll_mtrlid > 0 THEN SELECT top 1 u_buyTaskMx.TaskID, u_buyTaskMx.printid INTO :ll_relid,:ll_relprintid FROM u_buyTask INNER JOIN u_buyTaskMx ON u_buyTask.scid = u_buyTaskMx.scid AND u_buyTask.TaskID = u_buyTaskMx.TaskID WHERE u_buyTask.taskcode = :ls_fiebrelcode AND u_buyTaskMx.mtrlid = :ll_mtrlid AND u_buyTaskMx.status = :ls_status AND u_buyTaskMx.woodcode = :ls_woodcode And u_buyTaskMx.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ll_ifrel = 0 ll_relid = 0 ll_relprintid = 0 ELSE ll_ifrel = 1 END IF END IF IF ll_storageid = 0 THEN // 取第一个物料的默认存放仓库 SELECT top 1 storageid INTO :ll_storageid FROM u_mtrl_storage WHERE mtrlid = :ll_mtrlid Order By dft Desc; IF sqlca.SQLCode <> 0 THEN ll_storageid = 0 ELSE uo_ware.storageid = ll_storageid END IF END IF IF uo_ware.acceptmx(j,& ll_mtrlid,& ls_mtrlcode,& ls_plancode,& ls_status,& ld_qty,& ld_enprice,& ld_rebate,& '',& arg_msg,0,& ll_relid,& ll_ifrel,& ls_woodcode,& ls_pcode,& 0,& ls_unit,& 1,& ld_qty,& ll_relprintid,& ld_qty,& '','',& 0,& 0,& ls_mtrlcuscode,& '',& ld_qty,& 0) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_ware.uf_cmp_mxmx(arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF arr_printid = arr_ll_empty j = 0 DECLARE cur3 CURSOR FOR SELECT printid FROM LJFIEB_tempoutware_itemmx WHERE (serialnum = :ls_sn) ORDER BY printid Using sys_email_sqlca; FETCH cur3 Into :ll_printid; DO WHILE sys_email_sqlca.SQLCode = 0 j++ arr_printid[j] = ll_printid FETCH cur3 Into :ll_printid; LOOP CLOSE cur3; FOR j = 1 To UpperBound(arr_printid) ll_printid = arr_printid[j] SELECT amt, itemname, mxdscrp INTO :ld_amt, :ls_itemname, :ls_mxdscrp FROM LJFIEB_tempoutware_itemmx WHERE (serialnum = :ls_sn) AND (printid = :ll_printid) Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询对方销售发货单费用明细失败,' + sys_email_sqlca.SQLErrText GOTO ext END IF SELECT itemid, itemcode INTO :ll_itemid, :ls_itemcode FROM u_itemdef Where itemname = :ls_itemname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询费用明细项目['+ls_itemname+']对应本地收支项目失败,' + sqlca.SQLErrText GOTO ext END IF IF uo_ware.acceptmx_item(j,& ll_itemid,& ld_amt,& ls_mxdscrp,& arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_inwarecode = uo_ware.inwarecode ll_inwareid = uo_ware.inwareid UPDATE LJFIEB_tempoutware SET relreissuecode = :ls_inwarecode, flag = 1, ConfirmTime = getdate(), ConfirmUser = :publ_operator Where SerialNum = :ls_sn Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关单号失败,'+sys_email_sqlca.SQLErrText GOTO ext END IF //更新本地通信记录 UPDATE LJFIEB_packet SET status = 6, Complete = 1, ConfirmTime = getdate(), ConfirmUser = :publ_operator Where SerialNum = :ls_sn Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新本地通信记录失败,'+sys_email_sqlca.SQLErrText GOTO ext END IF // DONE: 如果有条码,则生成条码生成单 SELECT count(0) INTO :cnt FROM LJFIEB_tempoutwaremx_mx_barcode WHERE serialnum = :ls_sn Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询接收条码数量失败,' + sys_email_sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN i = 0 arg_s_gb = s_empty DECLARE cur4 CURSOR FOR SELECT qty, mtrlid, status, woodcode, pcode, COUNT(0) FROM LJFIEB_tempoutwaremx_mx_barcode WHERE serialnum = :ls_sn GROUP BY qty, mtrlid, status, woodcode, pcode Using sys_email_sqlca; OPEN cur4; FETCH cur4 Into :ld_packqty, :ll_sptmtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_num; DO WHILE sys_email_sqlca.SQLCode = 0 i++ arr_packqty[i] = ld_packqty arr_sptmtrlid[i] = ll_sptmtrlid arr_status[i] = ls_status arr_woodcode[i] = ls_woodcode arr_pcode[i] = ls_pcode arr_num[i] = ld_num FETCH cur4 Into :ld_packqty, :ll_sptmtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_num; LOOP CLOSE cur4; FOR i = 1 To UpperBound(arr_sptmtrlid) ld_packqty = arr_packqty[i] ll_sptmtrlid = arr_sptmtrlid[i] ls_status = arr_status[i] ls_woodcode = arr_woodcode[i] ls_pcode = arr_pcode[i] ld_num = arr_num[i] SELECT top 1 sptmtrlcode INTO :ls_sptmtrlcode FROM LJFIEB_tempoutwaremx WHERE serialnum = :ls_sn AND mtrlid = :ll_sptmtrlid Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN SELECT top 1 sptmtrlcode INTO :ls_sptmtrlcode FROM LJFIEB_tempoutwaremx_mx WHERE serialnum = :ls_sn AND mtrlid = :ll_sptmtrlid Using sys_email_sqlca; IF sys_email_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询条码对应的供应商物料编码失败' GOTO ext END IF END IF SELECT u_sptmtrlname.mtrlid, u_mtrldef.mtrlcode INTO :ll_mtrlid, :ls_mtrlcode FROM u_sptmtrlname INNER JOIN u_mtrldef ON u_sptmtrlname.mtrlid = u_mtrldef.mtrlid WHERE u_sptmtrlname.sptid = :ll_sptid And u_sptmtrlname.sptmtrlcode = :ls_sptmtrlcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '2.查询供应商物料['+ls_sptmtrlcode+']本地对应物料失败,' + sqlca.SQLErrText GOTO ext END IF arg_s_gb.scid = ll_scid arg_s_gb.getbarid = 0 arg_s_gb.getbardate = DateTime(Today(), Now()) arg_s_gb.ifrel = 3 arg_s_gb.orderid = 0 arg_s_gb.storageid = ll_storageid arg_s_gb.mtrlid = ll_mtrlid arg_s_gb.cusid = 0 arg_s_gb.plancode = '' arg_s_gb.status = ls_status arg_s_gb.woodcode = ls_woodcode arg_s_gb.pcode = ls_pcode arg_s_gb.mtrlcuscode = '' arg_s_gb.Location = '' arg_s_gb.packqty = ld_packqty arg_s_gb.qty = ld_packqty * ld_num arg_s_gb.dscrp = '' arg_s_gb.dscrp2 = '' arg_s_gb.reason = '' arg_s_gb.buytaskprintid = 0 arg_s_gb.uqty = 0 arg_s_gb.packuqty = 0 arg_s_gb.rate = 0 j = 0 DECLARE cur5 CURSOR FOR SELECT barcode FROM LJFIEB_tempoutwaremx_mx_barcode WHERE serialnum = :ls_sn AND qty = :ld_packqty AND mtrlid = :ll_sptmtrlid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode Using sys_email_sqlca; OPEN cur5; FETCH cur5 Into :ls_barcode; DO WHILE sys_email_sqlca.SQLCode = 0 j++ arg_s_gb.arg_s_mx[j].barcode = ls_barcode arg_s_gb.arg_s_mx[j].packqty = ld_packqty arg_s_gb.arg_s_mx[j].packuqty = 0 arg_s_gb.arg_s_mx[j].rate = 0 arg_s_gb.arg_s_mx[j].qty = 0 arg_s_gb.arg_s_mx[j].mxdscrp = '' arg_s_gb.arg_s_mx[j].mxdscrp2 = '' arg_s_gb.arg_s_mx[j].mxdscrp3 = '' arg_s_gb.arg_s_mx[j].mxdscrp4 = '' INSERT INTO U_inwaremx_mx_barcode (billtype ,scid ,inwareid ,barcode ,qty) VALUES (1 ,:ll_scid ,:ll_inwareid ,:ls_barcode ,:ld_packqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入采购收货单条码明细失败,' + sqlca.SQLErrText GOTO ext END IF FETCH cur5 Into :ls_barcode; LOOP CLOSE cur5; IF uo_get.Save(arg_s_gb,publ_operator,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_get.auditing(uo_get.uo_getbarid, publ_operator,arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF // 生成采购收货单并审核 IF uo_ware.getinfo(ll_scid,ll_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.auditing(True,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_ware Destroy uo_get IF rslt = 1 THEN COMMIT; COMMIT Using sys_email_sqlca; ELSE ROLLBACK; ROLLBACK Using sys_email_sqlca; IF IsNull(arg_msg) THEN arg_msg = 'pf_outware_to_inwarebuy错误信息为null' END IF END IF RETURN rslt end function public function integer uof_outware_to_inwarebuy (ref string ls_msg);// DONE: 将未接收的发货单转成采购收货单 Int rslt = 1 String arr_sn[], ls_sn Long i = 0 DateTime dt_server ls_msg = '' IF IsNull(sys_email_sqlca) THEN rslt = 0 ls_msg = '请设置邮件数据库' GOTO ext END IF IF sys_email_sqlca.DBHandle() <= 0 THEN rslt = 0 ls_msg = '邮件数据库连接失败,请检查' GOTO ext END IF DECLARE cur1 CURSOR FOR SELECT LJFIEB_packet.SerialNum FROM LJFIEB_packet INNER JOIN LJFIEB_CusComm AS cuscomm_s ON LJFIEB_packet.SendCusCommID = cuscomm_s.CusCommID INNER JOIN LJFIEB_CusComm AS CusComm_r ON LJFIEB_packet.ReceiveCusCommID = CusComm_r.CusCommID INNER JOIN LJFIEB_tempoutware ON LJFIEB_packet.SerialNum = LJFIEB_tempoutware.serialnum WHERE (CusComm_r.CusType = 0) AND (LJFIEB_packet.BillType = 4) AND (LJFIEB_packet.Complete = 0) Using sys_email_sqlca; OPEN cur1; FETCH cur1 Into :ls_sn; DO WHILE sys_email_sqlca.SQLCode = 0 i++ arr_sn[i] = ls_sn FETCH cur1 Into :ls_sn; LOOP CLOSE cur1; SELECT top 1 getdate() INTO :dt_server From u_user; IF sqlca.SQLCode <> 0 THEN ls_msg = '查询服务器时间失败,' + sqlca.SQLErrText GOTO ext END IF String arg_msg = '' Long sec = 0, fail = 0 FOR i = 1 To UpperBound(arr_sn) ls_sn = arr_sn[i] arg_msg = '' TRY IF pf_outware_to_inwarebuy(ls_sn, dt_server, Ref arg_msg) <> 1 THEN ls_msg = ls_msg + arg_msg + '~r~n' fail ++ ELSE sec ++ END IF Catch (RuntimeError ex) ls_msg = ls_msg + ex.Text + '~r~n' fail ++ END TRY NEXT ls_msg = '成功:'+String(sec)+'失败:'+String(fail)+',' + ls_msg ext: IF IsNull(ls_msg) THEN ls_msg = 'uof_outware_to_inwarebuy未知错误导至错误信息为null' END IF RETURN rslt end function on uo_checkpda.create call super::create end on on uo_checkpda.destroy call super::destroy end on