$PBExportHeader$uo_order_ml.sru forward global type uo_order_ml from nonvisualobject end type end forward global type uo_order_ml from nonvisualobject end type global uo_order_ml uo_order_ml type variables PUBLIC PROTECTEDWRITE Long scid PUBLIC PROTECTEDWRITE Long taskid PUBLIC PROTECTEDWRITE String taskcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String operator PUBLIC PROTECTEDWRITE DateTime accomplishdate PUBLIC PROTECTEDWRITE String permit_emp PUBLIC PROTECTEDWRITE String last_emp long MtrlID decimal SaleQty string mxdscrp string status string pcode string woodcode long outtype string unit datetime sclldate string scllrep long scllflag datetime auditingdate string auditingrep long flag string mtrlcode Transaction commit_transaction //数据commit事务 PRIVATE: s_saletaskmx saletaskmx[] //明细结构 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = TRUE //新建标志 Boolean it_updatebegin = FALSE//修改标志 Long it_mxbt_mx = 0 decimal mx_sumqty = 0 end variables forward prototypes public function integer salemxprimt (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer c_salemxprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_pz_change (long arg_type, string arg_updatestr, long arg_rqmtrlid, ref string arg_msg) public function integer c_salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer add_mxdscrp (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) private function integer p_getinfo (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg) public function integer uof_cmp (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_cmp_mx (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, integer arg_type, boolean arg_ifcommit) public function integer uof_delcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_buildcard1 (long arg_scid[], long arg_taskid[], long arg_printid[], long arg_qty[], string arg_operator, ref string arg_msg, boolean arg_ifcommit) public function integer uof_delcard1 (long arg_cardid[], string arg_cardcode[], long arg_row[], long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_auditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_cauditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_sc (s_saletaskmx arg_mx[], long arg_itmx, integer arg_scflag, ref string arg_msg) public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_cmp_workprice (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_workprice (s_order_ml_workprice_array arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_order_add_pro (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function int p_reset () public function integer uof_finish_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mod_rqmtrl (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg) public function integer uof_auto_build_buy_forrq (long arg_mxpkid[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_build_buy_forarr (long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_build_buy_notuse (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, integer arg_chk_zero, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_finish_procode_qty_dsr (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, long arg_type, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit) public subroutine uof_workprice_parm (decimal arg_orderqty, string arg_status, string arg_woodcode, string arg_pcode, string arg_ls_mtrlsectype, string arg_ls_zxmtrlmode, string arg_ls_mtrlmode, string arg_ls_cuscode, string arg_ls_cusname, string arg_parmstr, ref decimal arg_value_dec, decimal arg_price) end prototypes public function integer salemxprimt (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 Int ll_flag IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF SELECT flag INTO :ll_flag FROM u_saletaskmx WHERE scid = :Arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,销售订单明细内容!" GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 ARG_MSG = "销售订单明细已经审核,操作取消" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 ARG_MSG = "操作员姓名未登记或已取消!" GOTO ext END IF UPDATE u_SaleTaskmx SET auditingrep = :arg_emp ,auditingdate = getdate(), flag = 1 WHERE TaskID = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单明细审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer c_salemxprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 Int ll_flag DateTime nulldate SetNull(nulldate) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF SELECT flag INTO :ll_flag FROM u_saletaskmx WHERE scid = :Arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,销售订单明细内容!" GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 ARG_MSG = "销售订单明细还没有审核,操作取消" GOTO ext END IF Decimal ld_DstrQty SELECT sum(u_saleRqMtrl_scll.DstrQty) INTO :ld_DstrQty FROM u_saleRqMtrl_scll WHERE TaskID = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销查询领料明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ld_DstrQty > 0 THEN rslt = 0 ARG_MSG = "已开相关领料单,撤审操作取消"+"~n" GOTO ext END IF //检查计件 //个人产品工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid AND u_scwg_taskwork_2_mx.orderid = :arg_taskid AND u_scwg_taskwork_2_mx.relprintid = :arg_printid And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = "查询是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核" GOTO ext END IF //产品个人工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_sc_taskworkmx,u_sc_taskwork WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid AND u_sc_taskworkmx.scid = u_sc_taskwork.scid And u_sc_taskwork.orderid = :arg_taskid AND u_sc_taskwork.relid = :arg_printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = "查询是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核" GOTO ext END IF UPDATE u_SaleTaskmx SET auditingrep = '' ,auditingdate = :nulldate, flag = 0 WHERE TaskID = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid AND flag = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单明细撤销审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF // DONE: 删除运算结果 DELETE FROM u_orderRqMtrl WHERE taskid = :arg_taskid AND scid = :arg_scid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '删除物料需求表失败,' + commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_orderRqMtrl_tree WHERE taskid = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '删除物料需求结构表失败,' + commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_scid AND u_saleRqMtrl_scll.taskID = :arg_taskid AND u_saleRqMtrl_scll.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '删除领料明细表失败,' + commit_transaction.SQLErrText GOTO ext END IF //删除工价表 DELETE FROM U_OrderRqwp WHERE U_OrderRqwp.scid = :Arg_scid AND U_OrderRqwp.taskid = :arg_taskid AND u_orderrqwp.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细产品' + mtrlcode + '对应的工价明细失败'+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer uof_pz_change (long arg_type, string arg_updatestr, long arg_rqmtrlid, ref string arg_msg);Int rslt = 1 CHOOSE CASE arg_type CASE 1 UPDATE u_saleRqMtrl_scll SET status = :arg_updatestr Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 2 UPDATE u_saleRqMtrl_scll SET woodcode = :arg_updatestr Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 3 UPDATE u_saleRqMtrl_scll SET pcode = :arg_updatestr Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END CHOOSE ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer c_salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 Int ll_flag,ll_scllflag DateTime nulldate Decimal ld_assignqty,ld_consignedqty SetNull(nulldate) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF SELECT flag, scllflag, assignqty, consignedqty INTO :ll_flag, :ll_scllflag, :ld_assignqty, :ld_consignedqty FROM u_saletaskmx WHERE scid = :Arg_scid AND taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,销售订单明细内容!" GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 ARG_MSG = "销售订单明细还没有审核,不能撤销领料审核,操作取消" GOTO ext END IF IF ll_scllflag = 0 THEN rslt = 0 ARG_MSG = "销售订单明细还没有领料审核,操作取消" GOTO ext END IF IF ld_assignqty > 0 THEN rslt = 0 ARG_MSG = "销售订单明细已生产进仓,操作取消" GOTO ext END IF IF ld_consignedqty > 0 THEN rslt = 0 ARG_MSG = "销售订单明细已发货,操作取消" GOTO ext END IF //检查是否已进仓、领料 Decimal ld_dstrqty SELECT sum(dstrqty) INTO :ld_dstrqty FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_scid AND u_saleRqMtrl_scll.taskID = :arg_taskid AND u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询领料明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ld_dstrqty > 0 THEN rslt = 0 ARG_MSG = "销售订单明细已领料,操作取消" GOTO ext END IF //检查采购订单 SELECT count(*) INTO :cnt FROM u_buytask INNER join u_buytaskmx on u_buytask.scid = u_buytaskmx.scid AND u_buytask.taskid = u_buytaskmx.taskid WHERE u_buytask.scid = :arg_scid AND u_buytaskmx.relid = :arg_taskid AND u_buytaskmx.relprintid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询是否开采购订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "已开采购订单["+String(cnt)+"]" GOTO ext END IF //检查领料单 SELECT count(*) INTO :cnt FROM u_outware INNER join u_outwaremx on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outware.scid = :arg_scid AND u_outwaremx.relid = :arg_taskid AND u_outwaremx.relprintid = :arg_printid AND u_outware.billtype = 3 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询是否开领料出仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "已开领料出仓单["+String(cnt)+"]" GOTO ext END IF //检查外协订单 SELECT count(*) INTO :cnt FROM u_order_wfjgMx INNER JOIN u_order_wfjg ON u_order_wfjgMx.scid = u_order_wfjg.scid AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID WHERE u_order_wfjg.scid = :arg_scid AND u_order_wfjgMx.orderid = :arg_taskid AND u_order_wfjgMx.relprintid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询是否开外协订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "已开外协订单["+String(cnt)+"]" GOTO ext END IF //检查生产进仓单 SELECT count(*) INTO :cnt FROM u_inware INNER join u_inwaremx on u_inware.scid = u_inwaremx.scid AND u_inware.inwareid = u_inwaremx.inwareid WHERE u_inware.scid = :arg_scid AND u_inwaremx.relid = :arg_taskid AND u_inwaremx.relprintid = :arg_printid AND u_inware.billtype = 3 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询是否开生产进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "已开生产进仓单["+String(cnt)+"]" GOTO ext END IF //检查计件 //个人产品工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid AND u_scwg_taskwork_2_mx.orderid = :arg_taskid AND u_scwg_taskwork_2_mx.relprintid = :arg_printid And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = "查询是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核" GOTO ext END IF //产品个人工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_sc_taskworkmx,u_sc_taskwork WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid AND u_sc_taskworkmx.scid = u_sc_taskwork.scid And u_sc_taskwork.orderid = :arg_taskid AND u_sc_taskwork.relid = :arg_printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = "查询是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核" GOTO ext END IF UPDATE u_SaleTaskmx SET scllrep = '' ,sclldate = :nulldate, scllflag = 0 WHERE TaskID = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid AND flag = 1 AND scllflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单明细领料撤审操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer add_mxdscrp (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF UPDATE u_saletaskmx SET mxDSCRP = mxDSCRP+' '+:arg_newdescppart WHERE u_saletaskmx.taskid = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function private function integer p_getinfo (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);Int rslt = 1 SELECT u_SaleTaskMx.MtrlID, u_SaleTaskMx.mxdscrp, u_SaleTaskMx.status, u_SaleTaskMx.pcode, u_SaleTaskMx.woodcode, u_SaleTaskMx.outtype, u_SaleTaskMx.unit, u_SaleTaskMx.sclldate, u_SaleTaskMx.scllrep, u_SaleTaskMx.scllflag, u_SaleTaskMx.auditingdate, u_SaleTaskMx.auditingrep, u_SaleTaskMx.flag, u_mtrldef.mtrlcode INTO :MtrlID, :mxdscrp, :status, :pcode, :woodcode, :outtype, :unit, :sclldate, :scllrep, :scllflag, :auditingdate, :auditingrep, :flag, :mtrlcode FROM u_SaleTaskMx,u_mtrldef WHERE u_SaleTaskMx.scid = :Arg_scid AND u_SaleTaskMx.taskid = :arg_taskid AND u_SaleTaskMx.printid = :Arg_printid and u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询订单内容失败(错误订单唯一码)' GOTO ext END IF ext: RETURN rslt end function public function integer uof_cmp (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Decimal orderqty Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode Long ll_scllflag SELECT u_saletaskmx.orderqty, u_saletaskmx.mtrlid, u_saletaskmx.status, u_saletaskmx.woodcode, u_saletaskmx.pcode, u_saletaskmx.scllflag INTO :orderqty, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ll_scllflag FROM u_saletaskmx WHERE u_saletaskmx.scid = :Arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单明细信息失败' GOTO ext END IF IF ll_scllflag = 1 THEN arg_msg = '已用料审核,不能再计算' END IF Long ll_sum SELECT sum(u_saleRqMtrl_scll.dstrqty) INTO :ll_sum FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :Arg_scid AND u_saleRqMtrl_scll.taskid = :arg_taskid AND u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询需求明细已开单数量失败' GOTO ext END IF IF ll_sum > 0 THEN rslt = 0 arg_msg = '需求明细已开领料单,不能再用料运算' GOTO ext END IF DELETE FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :Arg_scid AND u_saleRqMtrl_scll.taskid = :arg_taskid AND u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细对应的需求明细失败' GOTO ext END IF IF uof_cmp_mx(Arg_scid,arg_taskid,arg_printid,ll_mtrlid,orderqty,ls_status,ls_woodcode,ls_pcode,1,FALSE) = 0 THEN rslt = 0 arg_msg = '生成订单明细对应的需求明细失败' GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer uof_cmp_mx (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, integer arg_type, boolean arg_ifcommit);Long it_mxbt1,i,mtrlorigin,ls_newid Long rslt = 1 s_outwaremx outwaremx[] String ls_msg SELECT mtrlorigin INTO :mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF SELECT count(*) INTO :i FROM u_PrdPF Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF i = 0 OR mtrlorigin = 2 THEN IF arg_type = 1 THEN rslt = 1 GOTO ext END IF ls_newid = f_sys_scidentity(arg_scid,"u_saleRqMtrl_scll","rqmtrlid",ls_msg,TRUE,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF ////插入运算结果表 UPDATE u_saleRqMtrl_scll SET trueRqqty = trueRqqty + :arg_qty WHERE scid = :arg_scid AND taskID = :arg_taskID AND MtrlID = :arg_mtrlid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode USING commit_transaction; IF commit_transaction.SQLCode = 0 THEN IF commit_transaction.SQLNRows = 0 THEN INSERT INTO u_saleRqMtrl_scll ( rqmtrlid, scid, taskID, MtrlID, printid, trueRqqty, status, woodcode, pcode ) VALUES ( :ls_newid, :arg_scid, :arg_taskID, :arg_mtrlid, :arg_printid, :arg_qty, :arg_status, :arg_woodcode, :arg_pcode ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF END IF ELSE rslt = 0 GOTO ext END IF END IF it_mxbt1 = 1 DECLARE cur_outwaremx CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_mtrldef.mtrlcode , u_mtrldef.mtrlname , u_mtrldef.mtrlmode, u_mtrldef.unit , u_mtrldef.mtrlsectype, u_mtrldef.zxmtrlmode, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, reqty = case when u_PrdPF.sonloss = 1 then 0 else :arg_qty * u_PrdPF.Sonscale /( 1 - u_PrdPF.sonloss) + u_PrdPF.sondecloss END FROM u_PrdPF , u_mtrldef WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction; OPEN cur_outwaremx; FETCH cur_outwaremx INTO :outwaremx[it_mxbt1].Mtrlid, :outwaremx[it_mxbt1].mtrlcode, :outwaremx[it_mxbt1].mtrlname, :outwaremx[it_mxbt1].mtrlmode, :outwaremx[it_mxbt1].unit, :outwaremx[it_mxbt1].mtrlsectype, :outwaremx[it_mxbt1].zxmtrlmode, :outwaremx[it_mxbt1].status, :outwaremx[it_mxbt1].woodcode, :outwaremx[it_mxbt1].pcode, :outwaremx[it_mxbt1].qty; DO WHILE commit_transaction.SQLCode = 0 it_mxbt1++ FETCH cur_outwaremx INTO :outwaremx[it_mxbt1].Mtrlid, :outwaremx[it_mxbt1].mtrlcode, :outwaremx[it_mxbt1].mtrlname, :outwaremx[it_mxbt1].mtrlmode, :outwaremx[it_mxbt1].mtrlsectype, :outwaremx[it_mxbt1].zxmtrlmode, :outwaremx[it_mxbt1].unit, :outwaremx[it_mxbt1].status, :outwaremx[it_mxbt1].woodcode, :outwaremx[it_mxbt1].pcode, :outwaremx[it_mxbt1].qty; LOOP CLOSE cur_outwaremx; it_mxbt1 = it_mxbt1 - 1 FOR i = 1 TO it_mxbt1 IF uof_cmp_mx(arg_scid,arg_taskID,arg_printid,outwaremx[i].mtrlid,outwaremx[i].qty,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,0,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_delcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i String ls_cardcode String ls_mtrlcode,ls_taskcode Long ls_printid,ll_taskid,ll_scid String ls_status,ls_woodcode,ls_pcode SELECT u_mtrldef.mtrlcode, u_saletaskmx.printid, u_saletask.taskcode, u_saletaskmx.status, u_saletaskmx.woodcode, u_saletaskmx.pcode, u_saletaskmx.taskid, u_saletaskmx.scid INTO :ls_mtrlcode, :ls_printid, :ls_taskcode, :ls_status, :ls_woodcode, :ls_pcode, :ll_taskid, :ll_scid FROM u_saletaskmx_card INNER JOIN u_SaleTaskMx ON u_saletaskmx_card.scid = u_SaleTaskMx.scid AND u_saletaskmx_card.taskid = u_SaleTaskMx.TaskID AND u_saletaskmx_card.mxprintid = u_SaleTaskMx.printid INNER JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN u_SaleTask ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND u_SaleTask.scid = u_SaleTaskMx.scid Where u_saletaskmx_card.cardid = :arg_cardid[1] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询订单明细操作失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF Long ll_count SELECT count(*) INTO :ll_count FROM u_saletaskmx_card WHERE u_saletaskmx_card.scid = :ll_scid AND u_saletaskmx_card.taskid = :ll_taskid AND u_saletaskmx_card.mxprintid = :ls_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询流程卡数量操作失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ll_count = UpperBound(arg_cardid) THEN UPDATE u_saletaskmx SET ifsc = 0 WHERE scid = :ll_scid AND taskid = :ll_taskid AND printid = :ls_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新订单明细排产标记操作失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF FOR i = 1 TO UpperBound(arg_cardid) DELETE FROM u_saletaskmx_card Where cardid = :arg_cardid[i] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '删除流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ls_cardcode = ls_cardcode + arg_cardcode[i] + ',' NEXT ls_cardcode = Left(ls_cardcode,Len(ls_cardcode) - 1) String ls_log ls_log = ls_log + '删除销售订单:' + ls_taskcode + '明细第' + String(ls_printid) + '行,编码:' + ls_mtrlcode + ',' IF ls_status <> '' THEN ls_log = ls_log + sys_option_change_status + ':' + ls_status + ',' END IF IF ls_woodcode <> '' THEN ls_log = ls_log + sys_option_change_woodcode + ':' + ls_woodcode + ',' END IF IF ls_woodcode <> '' THEN ls_log = ls_log + sys_option_change_pcode + ':' + ls_pcode + ',' END IF ls_log = ls_log + '卡号:'+ls_cardcode //日志 if f_setsysoplog('生产流程卡',ls_log,arg_msg,false) = 0 then rslt = 0 goto ext end if //-- ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_buildcard1 (long arg_scid[], long arg_taskid[], long arg_printid[], long arg_qty[], string arg_operator, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,ll_cardid,j String cardcode DateTime server_datetime Long ll_count = 0 SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF FOR j = 1 TO UpperBound(arg_scid) FOR i = 1 TO arg_qty[j] ll_cardid = f_sys_scidentity(0,"u_saletaskmx_card","cardid",arg_msg,TRUE, commit_transaction) //数据commit事务) IF ll_cardid <= 0 THEN rslt = 0 GOTO ext END IF cardcode = getid(0, 'LC',Date(server_datetime),FALSE,commit_transaction) IF cardcode = "err" THEN cardcode = '' rslt = 0 arg_msg = "无法获取流程卡编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_saletaskmx_card ( scid, taskid, mxprintid, cardid, cardcode, opdate, opemp ) VALUES ( :arg_scid[j], :arg_taskid[j], :arg_printid[j], :ll_cardid, :cardcode, :server_datetime, :arg_operator ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "流程卡" + cardcode +",插入数据库失败"+"~n"+commit_transaction.SQLErrText cardcode = '' GOTO ext END IF ll_count++ NEXT NEXT IF ll_count = 0 THEN rslt = 0 arg_msg = "没有可生成流程卡的数据" GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_delcard1 (long arg_cardid[], string arg_cardcode[], long arg_row[], long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,j String ls_cardcode[] Long ll_cardqty Long ll_count String ls_log String ls_mtrlcode,ls_taskcode Long ls_printid,ll_taskid,ll_scid String ls_status,ls_woodcode,ls_pcode s_saletask_mtrl s_mtrl s_saletaskmx_card s_card[] FOR i = 1 TO UpperBound(arg_taskid) ll_cardqty = 0 ll_count = 0 SELECT u_mtrldef.mtrlcode, u_saletaskmx.printid, u_saletask.taskcode, u_saletaskmx.status, u_saletaskmx.woodcode, u_saletaskmx.pcode, u_saletaskmx.ifsc INTO :s_mtrl.mtrlcode[i], :s_mtrl.printid[i], :s_mtrl.taskcode[i], :s_mtrl.status[i], :s_mtrl.woodcode[i], :s_mtrl.pcode[i], :s_mtrl.ifsc[i] FROM u_SaleTaskMx INNER JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN u_SaleTask ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND u_SaleTask.scid = u_SaleTaskMx.scid WHERE u_SaleTaskMx.scid = :arg_scid[i] AND u_SaleTaskMx.taskid = :arg_taskid[i] AND u_saletaskmx.printid = :arg_printid[i] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询订单明细操作失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF s_mtrl.ifsc[i] = 1 THEN arg_msg = '销售订单:' + s_mtrl.taskcode[i] + '明细第' + String(arg_printid[i]) + '行,编码[' + s_mtrl.mtrlcode[i] + ']已排产,不能删除流程卡!' rslt = 0 GOTO ext END IF // ls_cardcode[i] = '' FOR j = 1 TO UpperBound(arg_cardid) IF arg_row[j] = i THEN ls_cardcode[i] = ls_cardcode[i] + arg_cardcode[j] + ',' ll_cardqty = ll_cardqty + 1 END IF DELETE FROM u_saletaskmx_card Where cardid In (:arg_cardid[j]) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '删除流程卡操作失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT // ////写日志 // IF ls_cardcode[i] <> '' THEN // ls_cardcode[i] = Left(ls_cardcode[i],Len(ls_cardcode[i] ) - 1) // // ls_log = '' // // ls_log = ls_log + '删除销售订单:' + s_mtrl.taskcode[i] + '明细第' + String(arg_printid[i]) + '行,编码:' + s_mtrl.mtrlcode[i] + ',' // IF ls_status <> '' THEN // ls_log = ls_log + sys_option_change_status + ':' + s_mtrl.status[i] + ',' // END IF // IF ls_woodcode <> '' THEN // ls_log = ls_log + sys_option_change_woodcode + ':' + s_mtrl.woodcode[i] + ',' // END IF // IF ls_woodcode <> '' THEN // ls_log = ls_log + sys_option_change_pcode + ':' + s_mtrl.pcode[i] + ',' // END IF // ls_log = ls_log + '卡号:'+ls_cardcode[i] // // if len(ls_log) > 250 then ls_log = left(ls_log, 250) // //日志 // f_setsysoplog('生产流程卡',ls_log,arg_msg,FALSE) // END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_auditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,printnum DateTime server_dt SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF FOR i = 1 To UpperBound(arg_cardid) IF sys_option_saletask_sc_card3 = 1 THEN printnum = 0 SELECT printnum INTO :printnum FROM u_saletaskmx_card Where cardid = :arg_cardid[i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '确认流程卡' +arg_cardcode[i] + '失败,查询流程卡打印次数失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF printnum = 0 THEN arg_msg = ' 流程卡' +arg_cardcode[i] + '必须先打印后确认' rslt = 0 GOTO ext END IF END IF UPDATE u_saletaskmx_card SET flag = 1, audittime = :server_dt, auditemp = :publ_operator Where cardid = :arg_cardid[i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '确认流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_cauditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i DateTime null_dt SetNull(null_dt) FOR i = 1 TO UpperBound(arg_cardid) UPDATE u_saletaskmx_card SET flag = 0, audittime = :null_dt, auditemp = '' Where cardid = :arg_cardid[i] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '确认流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_sc (s_saletaskmx arg_mx[], long arg_itmx, integer arg_scflag, ref string arg_msg);Int rslt = 1 Long i Long ll_count,ll_count1 DateTime server_dt DateTime null_dt Long ll_storageid_arr[],ll_storageid Long ll_scid_arr[],ll_scid Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware String ll_storagename_arr[],ls_storagename Long ll_inwaretype_arr[],ll_inwaretype Long ll_j,count,ll_i Decimal ld_add_qty //Decimal ld_orderqty Long if_plancode_arr[],if_plancode String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode Long ll_mtrlwareid,ll_mtrlid Long ll_cusid String ls_plancode SetNull(null_dt) SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF FOR i = 1 TO arg_itmx IF arg_scflag = 1 THEN IF sys_option_saletask_sc_card = 1 THEN ll_count = 0 SELECT printnum INTO :ll_count FROM u_saletaskmx WHERE scid = :arg_mx[i].scid AND taskid = :arg_mx[i].taskid AND printid = :arg_mx[i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询打印次数失败!' GOTO ext END IF IF ll_count = 0 THEN rslt = 0 arg_msg = '订单生产跟踪表必须先打印后确认!操作取消' GOTO ext END IF END IF UPDATE u_saletaskmx SET u_saletaskmx.ifsc = 1, u_saletaskmx.audittime = :server_dt, u_saletaskmx.auditemp = :publ_operator WHERE scid = :arg_mx[i].scid AND taskid = :arg_mx[i].taskid AND printid = :arg_mx[i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单明细确认标记失败!' GOTO ext END IF if sys_option_saletask_sc_mx_addware = 1 then DECLARE pf_cur CURSOR FOR SELECT u_storage.storageid, u_storage.storagename, u_storage.scid, u_storage.balctype, u_storage.inwaretype, u_storage.if_plancode FROM u_storage WHERE ( u_storage.Mtrlprp = 0 ) AND ( u_storage.scid = :scid ) Using commit_transaction; OPEN pf_cur; FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode; DO WHILE commit_transaction.SQLCode = 0 count++ ll_storageid_arr[count] = ll_storageid ll_storagename_arr[count] = ls_storagename ll_scid_arr[count] = ll_scid ll_if_cus_mtrlware_arr[count] = ll_if_cus_mtrlware ll_inwaretype_arr[count] = ll_inwaretype if_plancode_arr[count] = if_plancode FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode; LOOP CLOSE pf_cur; ll_mtrlid = arg_mx[i].mtrlid ls_mtrlcode = arg_mx[i].mtrlcode ls_status = arg_mx[i].Status ls_pcode = arg_mx[i].pcode ls_woodcode = arg_mx[i].woodcode // ld_orderqty = arg_mx[i].orderqty ld_add_qty = 0 FOR ll_j = 1 To count ll_cusid = 0///不分客户 // IF ll_if_cus_mtrlware_arr[ll_j] = 1 THEN // ll_cusid = 0 /// // ELSE // ll_cusid = 0 // END IF IF if_plancode_arr[ll_j] = 0 THEN ls_plancode = '' ELSE ls_plancode = arg_mx[i].plancode END IF SELECT top 1 mtrlwareid INTO :ll_mtrlwareid FROM u_mtrlware WHERE mtrlid = :ll_mtrlid AND status = :ls_status AND storageid = :ll_storageid_arr[ll_j] AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND SCID = :ll_scid_arr[ll_j] AND ( sptid = :ll_cusid OR :ll_cusid = 0 ) AND plancode = :ls_plancode Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN // UPDATE u_mtrlware // SET noallocqty = noallocqty + :ld_add_qty // WHERE mtrlwareid = :ll_mtrlwareid // AND scid = :ll_scid_arr[ll_j] // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // ARG_MSG = '产品:' + ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'增加库存失败' // rslt = 0 // GOTO ext // END IF ELSEIF commit_transaction.SQLCode = -1 THEN ARG_MSG = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败' rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_mtrlwareid = 0 ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",ARG_MSG,False,commit_transaction) IF ll_mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrlware(scid, mtrlwareid, mtrlid, storageid, noallocqty, status, woodcode, pcode, sptid, plancode) VALUES(:ll_scid_arr[ll_j], :ll_mtrlwareid, :ll_mtrlid, :ll_storageid_arr[ll_j], :ld_add_qty, :ls_status, :ls_woodcode, :ls_pcode, :ll_cusid, :ls_plancode) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '产品:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'加0库存失败或物料已经有库存,请检查' rslt = 0 GOTO ext END IF END IF NEXT end if ELSE Long cnt SELECT count(*) INTO :cnt FROM u_inwaremx INNER JOIN u_inware ON u_inware.scid = u_inwaremx.scid AND u_inware.inwareid = u_inwaremx.inwareid INNER JOIN u_saletaskmx ON u_SaleTaskMx.scid = u_inwaremx.scid AND u_SaleTaskMx.taskid = u_inwaremx.relid AND u_SaleTaskMx.printid = u_inwaremx.relprintid WHERE u_inware.billtype = 3 AND u_SaleTaskMx.scid = :arg_mx[i].scid AND u_SaleTaskMx.taskid = :arg_mx[i].taskid AND u_SaleTaskMx.printid = :arg_mx[i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已开生产进仓失败!'+sqlca.sqlerrtext GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "该明细已经开了生产进仓单,不能反确认" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_outwaremx INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid INNER JOIN u_SaleTaskMX ON u_outwaremx.scid = u_SaleTaskMX.scid AND u_outwaremx.relid = u_SaleTaskMX.TaskID AND u_outwaremx.relprintid = u_SaleTaskMX.printid WHERE u_outware.billtype = 1 AND u_outware.thflag = 0 AND u_SaleTaskMx.scid = :arg_mx[i].scid AND u_SaleTaskMx.taskid = :arg_mx[i].taskid AND u_SaleTaskMx.printid = :arg_mx[i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已开发货单失败!'+sqlca.sqlerrtext GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "该明细已经开了发货单,不能反确认" GOTO ext END IF UPDATE u_saletaskmx SET ifsc = 0, u_saletaskmx.audittime = :null_dt, u_saletaskmx.auditemp = '' WHERE scid = :arg_mx[i].scid AND taskid = :arg_mx[i].taskid AND printid = :arg_mx[i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单明细确认标记失败!' GOTO ext END IF END IF // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新销售订单明细确认标记失败!' // GOTO ext // END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSE COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i,ls_newid DELETE FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :arg_rqmtrl.scid[1] AND u_saleRqMtrl_scll.taskID = :arg_rqmtrl.taskid[1] AND u_saleRqMtrl_scll.printid = :arg_rqmtrl.printid[1] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细的物料领料明细失败' GOTO ext END IF FOR i = 1 TO UpperBound(arg_rqmtrl.taskID) ls_newid = f_sys_scidentity(arg_rqmtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_saleRqMtrl_scll ( rqmtrlid, scid, taskID, MtrlID, printid, trueRqqty, costamt, status, woodcode, pcode, ifchanged ) VALUES ( :ls_newid, :arg_rqmtrl.scid[i], :arg_rqmtrl.taskID[i], :arg_rqmtrl.MtrlID[i], :arg_rqmtrl.printid[i], :arg_rqmtrl.cmplqty[i], 0, :arg_rqmtrl.status[i], :arg_rqmtrl.woodcode[i], :arg_rqmtrl.pcode[i], :arg_rqmtrl.ifchanged[i] ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入订单明细的物料领料明细失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_cmp_workprice (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, boolean arg_ifcommit, ref string arg_msg);Long it_mxbt1,mtrlorigin,ls_newid Long rslt = 1,I = 1,NO_MXCHECK = 0 s_outwaremx outwaremx[] String ls_msg Long ll_flag SELECT auditflag INTO :ll_flag FROM u_mtrldef Where mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '工价表没有审核' GOTO ext END IF s_workpricetable_array s_workprice DECLARE CUR_INWAERMX CURSOR FOR SELECT u_sc_workprice.proid, u_sc_workprice.proorder, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.wrkgrpid, u_sc_workprice.workprice, u_sc_workprice.workqty, u_sc_workprice.worklevel, u_sc_workprice.techlevel, u_sc_workprice.workhour, u_sc_workprice.dscrp, u_sc_workprice.Lastflag FROM u_sc_workprice Where u_sc_workprice.mtrlid = :arg_mtrlid USING commit_transaction; OPEN CUR_INWAERMX; FETCH CUR_INWAERMX INTO :s_workprice.proid[i], :s_workprice.proorder[i], :s_workprice.procode[i], :s_workprice.proname[i], :s_workprice.wrkgrpid[i], :s_workprice.workprice[i], :s_workprice.workqty[i], :s_workprice.worklevel[i], :s_workprice.techlevel[i], :s_workprice.workhour[i], :s_workprice.dscrp[i], :s_workprice.Lastflag[I] ; DO WHILE commit_transaction.SQLCode = 0 I++ FETCH CUR_INWAERMX INTO :s_workprice.proid[i], :s_workprice.proorder[i], :s_workprice.procode[i], :s_workprice.proname[i], :s_workprice.wrkgrpid[i], :s_workprice.workprice[i], :s_workprice.workqty[i], :s_workprice.worklevel[i], :s_workprice.techlevel[i], :s_workprice.workhour[i], :s_workprice.dscrp[i], :s_workprice.Lastflag[I] ; LOOP CLOSE CUR_INWAERMX; //检验明细是否读入完整 SELECT COUNT(*) INTO :NO_MXCHECK FROM u_sc_workprice Where u_sc_workprice.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,工价表明细" GOTO ext END IF IF I <> (NO_MXCHECK+1) THEN rslt = 0 arg_msg = "查询操作失败,工价表明细" GOTO ext END IF FOR I = 1 TO NO_MXCHECK INSERT INTO u_order_ml_workprice ( scid, taskid, printid, proid, proorder, procode, proname, wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, Lastflag ) VALUES ( :arg_scid, :arg_taskid, :arg_printid, :s_workprice.proid[i], :s_workprice.proorder[i], :s_workprice.procode[i], :s_workprice.proname[i], :s_workprice.wrkgrpid[i], :s_workprice.workprice[i], :s_workprice.workqty[i], :s_workprice.worklevel[i], :s_workprice.techlevel[i], :s_workprice.workhour[i], :s_workprice.dscrp[i], :s_workprice.Lastflag[I] ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入明细操作失败,销售订单明细运算工价明细" GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_add_workprice (s_order_ml_workprice_array arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i,ls_newid DELETE FROM u_order_ml_workprice WHERE u_order_ml_workprice.scid = :arg_rqmtrl.scid[1] AND u_order_ml_workprice.taskID = :arg_rqmtrl.taskid[1] AND u_order_ml_workprice.printid = :arg_rqmtrl.printid[1] USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除订单明细的工价设定失败' GOTO ext END IF FOR i = 1 TO UpperBound(arg_rqmtrl.taskID) INSERT INTO u_order_ml_workprice ( scid, taskid, printid, proid, proorder, procode, proname, wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, Lastflag, ifchanged ) VALUES ( :arg_rqmtrl.scid[i], :arg_rqmtrl.taskid[i], :arg_rqmtrl.printid[i], :arg_rqmtrl.proid[i], :arg_rqmtrl.proorder[i], :arg_rqmtrl.procode[i], :arg_rqmtrl.proname[i], :arg_rqmtrl.wrkgrpid[i], :arg_rqmtrl.workprice[i], :arg_rqmtrl.workqty[i], :arg_rqmtrl.worklevel[i], :arg_rqmtrl.techlevel[i], :arg_rqmtrl.workhour[i], :arg_rqmtrl.dscrp[i], :arg_rqmtrl.Lastflag[i], :arg_rqmtrl.ifchanged[i]) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入订单明细的工价设定失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_order_add_pro (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt If arg_taskid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_taskid,arg_printid,arg_msg) = 0 Then rslt = 0 Goto ext End If If flag <> 1 And flag <> 5 And flag <> 6 Then rslt = 0 arg_msg = '订单明细产品' + mtrlcode + ',只有在(在进行,完成)状态才可以生成工序,请核对' Goto ext End If If scllflag = 1 Then arg_msg = '订单明细产品' + mtrlcode + '已用料审核,不能再重新生成工序' End If cnt = 0 Select count(*) Into :cnt From u_orderrqwp Where scid = :arg_scid And taskid = :arg_taskid And printid = :arg_printid And finishqty > 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有完成数量失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有完成数量,不能生成计划工序明细' rslt = 0 Goto ext End If //检查计件单 cnt = 0 Select count(*) Into :cnt From u_scwg_taskwork_2_mx Where relscid = :arg_scid And orderid = :arg_taskid And relprintid = :arg_printid; If sqlca.SQLCode <> 0 Then arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有个人产品工序计件单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有个人产品工序计件单,不能生成计划工序明细' rslt = 0 Goto ext End If //检查产品个人工序计件单 cnt = 0 Select count(*) Into :cnt From u_sc_taskwork Where scid = :arg_scid And orderid = :arg_taskid And relid = :arg_printid; If sqlca.SQLCode <> 0 Then arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有产品个人工序计件单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有产品个人工序计件单,不能生成计划工序明细' rslt = 0 Goto ext End If //检查工价表 cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品' + mtrlcode + '工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If // 系统选项233,未使用工资时,审核不提示工价表未设置。 If sys_option_order_skip_workprice = 1 Then //检查建立 If cnt = 0 Then arg_msg = '系统选项[233]限制,产品' + mtrlcode + '工价表未建立,不能建立工序工价' rslt = 0 Goto ext End If ElseIf sys_option_order_skip_workprice = 2 Then //检查审核 If cnt = 0 Then arg_msg = '产品' + mtrlcode + '工价表未建立,请先建立工价表' rslt = 0 Goto ext End If Int li_auditflag_workprice Select auditflag Into :li_auditflag_workprice From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品' + mtrlcode + '工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If li_auditflag_workprice = 0 Then arg_msg = '系统选项[233]限制,产品' + mtrlcode + '工价表未审核,不能建立工序工价' rslt = 0 Goto ext End If Else //0 不检查 End If //IF cnt = 0 THEN // // // IF sys_option_order_skip_workprice = 1 THEN // rslt = 1 // GOTO ext // ELSE // arg_msg = '产品' + mtrlcode + '工价表未建立,请先建立工价表' // rslt = 0 // GOTO ext // END IF //END IF Delete From U_OrderRqwp Where U_OrderRqwp.scid = :Arg_scid And U_OrderRqwp.taskid = :arg_taskid And u_orderrqwp.printid = :arg_printid Using sqlca; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '删除订单明细产品' + mtrlcode + '对应的工价明细失败'+"~n"+sqlca.SQLErrText Goto ext End If /// // //messagebox("",arg_taskid) //messagebox("",arg_printid) /////status Insert Into u_orderrqwp(scid,taskid,mtrlid,procode,proname,proorder,proqty,wrkgrpid,lsxtype,workprice,status,ifjd,printid,pricestr,stepstr) (Select u_SaleTaskMx.scid,u_SaleTaskMx.taskid,u_SaleTaskMx.mtrlid,u_sc_workprice.procode, u_sc_workprice.proname,u_sc_workprice.proorder,u_sc_workprice.workqty * u_SaleTaskMx.orderqty, u_sc_workprice.wrkgrpid,u_sc_workprice.lsxtype,u_sc_workprice.workprice, case u_mtrldef.statusflag when 2 then u_SaleTaskMx.status else u_sc_workprice.status End as status, u_sc_workprice.ifjd,u_SaleTaskMx.printid,u_sc_workprice.pricestr,u_sc_workprice.stepstr From u_sc_workprice,u_SaleTaskMx,u_mtrldef Where u_sc_workprice.mtrlid = u_SaleTaskMx.mtrlid And u_mtrldef.mtrlid = u_SaleTaskMx.mtrlid And u_SaleTaskMx.taskid = :arg_taskid And u_SaleTaskMx.scid = :arg_scid And u_SaleTaskMx.printid = :arg_printid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '添加销售订单明细的工序失败,原因:'+sqlca.SQLErrText Goto ext End If //单价公式 //orderqty 排产数量 //status 配置 //woodcode 配置1 //pcode 配置2 //ls_mtrlsectype 自定义1 //ls_zxmtrlmode 自定义2 //物料规格arg_ls_mtrlmode //客户编码 arg_ls_cuscode //客户名称 arg_ls_cusname //arg_parmstr 公式 //arg_value_dec 返回的工价 Decimal arg_orderqty String arg_ls_mtrlmode,arg_ls_mtrlsectype,arg_ls_zxmtrlmode,arg_ls_cuscode,arg_ls_cusname Long ii = 0,arry_saletaskid[],arry_itemid[] Decimal de_temp = 0,arry_price[] String arry_pricestr[],arry_procode[] Select u_SaleTaskMx.orderqty,u_mtrldef.mtrlmode,u_mtrldef.mtrlsectype,u_mtrldef.zxmtrlmode,u_cust.cuscode,u_cust.name Into :arg_orderqty,:arg_ls_mtrlmode,:arg_ls_mtrlsectype,:arg_ls_zxmtrlmode,:arg_ls_cuscode,:arg_ls_cusname 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 Inner JOIN u_cust ON u_SaleTask.CusID = u_cust.cusid Where u_SaleTaskMx.taskid = :arg_taskid And u_SaleTaskMx.scid = :arg_scid And u_SaleTaskMx.printid = :arg_printid; //游标读费用项目 Declare gongjia Cursor For Select u_orderrqwp.pricestr, u_orderrqwp.procode, u_orderrqwp.workprice From u_orderrqwp Where u_orderrqwp.taskid = :arg_taskid And u_orderrqwp.scid = :arg_scid And u_orderrqwp.printid = :arg_printid; Open gongjia; ii++ Fetch gongjia Into :arry_pricestr[ii],:arry_procode[ii],:arry_price[ii]; Do While sqlca.SQLCode = 0 ii++ Fetch gongjia Into :arry_pricestr[ii],:arry_procode[ii],:arry_price[ii]; Loop Close gongjia; //按公式计算工价 For ii = 1 To UpperBound(arry_pricestr) If arry_pricestr[ii] <> '' Then de_temp = 0 uof_workprice_parm(arg_orderqty,status,woodcode,pcode,arg_ls_mtrlsectype,arg_ls_zxmtrlmode,arg_ls_mtrlmode,arg_ls_cuscode,arg_ls_cusname,arry_pricestr[ii],de_temp,arry_price[ii]) If de_temp <> 0 Then Update u_orderrqwp Set workprice = :de_temp Where u_orderrqwp.taskid = :arg_taskid And u_orderrqwp.scid = :arg_scid And u_orderrqwp.printid = :arg_printid And u_orderrqwp.procode = :arry_procode[ii]; End If End If Next ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return rslt end function public function int p_reset ();scid = 0 taskid = 0 taskcode = '' MtrlID = 0 SaleQty = 0 mxdscrp = '' status = '' pcode = '' woodcode = '' outtype = 0 unit = '' scllflag = 0 flag = 0 RETURN 1 end function public function integer uof_finish_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Int li_finishflag DateTime null_dt SetNull(null_dt) IF sys_option_add_orderrqwp_fqty = 1 THEN arg_msg = '系统选项[071]限制,工序确认完成数只能由计件单确认增减' rslt = 0 GOTO ext END IF SELECT finishflag INTO :li_finishflag FROM U_OrderRqwp WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid And Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_type = 0 THEN IF li_finishflag = 1 THEN arg_msg = '工序已确认完成,不能再确认' rslt = 0 GOTO ext END IF UPDATE U_OrderRqwp SET finishflag = 1, finishdate = getdate(), finishqty = proqty WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode And finishflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE IF li_finishflag = 0 THEN arg_msg = '工序还未确认,不能取消确认' rslt = 0 GOTO ext END IF UPDATE U_OrderRqwp SET finishflag = 0, finishdate = :null_dt, finishqty = 0 WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode And finishflag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF 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_mod_rqmtrl (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long i FOR i = 1 To UpperBound(arg_rqmtrl.taskID) UPDATE u_OrderRqMtrl SET sptid = :arg_rqmtrl.sptid[i] Where scid = :arg_rqmtrl.scid[i] and taskID = :arg_rqmtrl.taskID[i] and MtrlID = :arg_rqmtrl.MtrlID[i] and status = :arg_rqmtrl.status[i] and woodcode = :arg_rqmtrl.woodcode[i] and pcode = :arg_rqmtrl.pcode[i] and plantype = :arg_rqmtrl.plantype[i] and printid = :arg_rqmtrl.printid[i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新默认供应商失败' GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_auto_build_buy_forrq (long arg_mxpkid[], ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long sptid[] Long it_mx = 0 Long ll_bound, ll_i, ll_j, ll_sptid, ll_cnt Boolean has_spt arg_msg = '' string ls_msg = '' ll_bound = UpperBound(arg_mxpkid) uo_buytask obj_task obj_task = Create uo_buytask obj_task.commit_transaction = commit_transaction uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF ll_bound <= 0 THEN rslt = 1 arg_msg = '没有需求明细' GOTO ext END IF Long ll_scid, ll_lastscid FOR ll_i = 1 To ll_bound SELECT sptid INTO :ll_sptid FROM u_orderRqMtrl Where mxpkid = :arg_mxpkid[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料需求表失败,' + commit_transaction.SQLErrText GOTO ext END IF SELECT COUNT(0) INTO :ll_cnt FROM u_spt Where sptid = :ll_sptid 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 CONTINUE has_spt = False FOR ll_j = 1 To it_mx IF sptid[ll_j] = ll_sptid THEN has_spt = True EXIT END IF NEXT IF Not has_spt THEN it_mx++ sptid[it_mx] = ll_sptid END IF NEXT s_buytaskmx_arr s_buy Long it_buy FOR ll_i = 1 To it_mx it_buy = 0 FOR ll_j = 1 To ll_bound SELECT COUNT(0) INTO :ll_cnt FROM u_OrderRqMtrl INNER JOIN u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN uv_orderrqmtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_orderrqmtrl_buyqty.mxpkid WHERE (u_OrderRqMtrl.plantype = 2) AND (u_OrderRqMtrl.truerqqty - isnull(uv_orderrqmtrl_buyqty.buyQty, 0) > 0) AND (u_orderRqMtrl.mxpkid = :arg_mxpkid[ll_j]) AND (u_orderRqMtrl.sptid = :sptid[ll_i]) 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 CONTINUE it_buy ++ SELECT u_mtrldef.mtrlcode, u_mtrldef.unit, u_OrderRqMtrl.truerqqty - ISNULL(uv_orderrqmtrl_buyqty.buyQty, 0) AS Expr1, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode, u_OrderRqMtrl.mxpkid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale, u_mtrldef.unit_buy, u_mtrldef.unit_scll, u_mtrldef.unit_sale, u_OrderRqMtrl.scid, u_OrderRqMtrl.TaskID, u_OrderRqMtrl.printid, u_OrderRqMtrl.plancode INTO :s_buy.mtrlcode[it_buy], :s_buy.unit[it_buy], :s_buy.uqty[it_buy], :s_buy.MtrlID[it_buy], :s_buy.status[it_buy], :s_buy.woodcode[it_buy], :s_buy.pcode[it_buy], :s_buy.relid2[it_buy], :s_buy.mrp_unit[it_buy], :s_buy.rate_buy[it_buy], :s_buy.rate_scll[it_buy], :s_buy.rate_sale[it_buy], :s_buy.unit_buy[it_buy], :s_buy.unit_scll[it_buy], :s_buy.unit_sale[it_buy], :ll_scid, :s_buy.Orderid[it_buy], :s_buy.relprintid[it_buy], :s_buy.plancode[it_buy] FROM u_OrderRqMtrl INNER JOIN u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN uv_orderrqmtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_orderrqmtrl_buyqty.mxpkid WHERE (u_OrderRqMtrl.plantype = 2) AND (u_OrderRqMtrl.truerqqty - ISNULL(uv_orderrqmtrl_buyqty.buyQty, 0) > 0) AND (u_orderRqMtrl.mxpkid = :arg_mxpkid[ll_j]) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '物料需求不存在ID:' + String(arg_mxpkid[ll_j]) + ',' + commit_transaction.SQLErrText GOTO ext END IF SELECT requiredate,taskcode INTO :s_buy.requiredate[it_buy],:s_buy.relcode[it_buy] FROM u_saletask Where scid = :ll_scid And TaskID = :s_buy.Orderid[it_buy] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单需求日与相关号失败,' + commit_transaction.SQLErrText GOTO ext END IF IF it_buy > 1 And ll_scid <> ll_lastscid THEN rslt = 0 arg_msg = '物料需求不同分部不能保存' GOTO ext END IF ll_lastscid = ll_scid NEXT IF it_buy = 0 THEN CONTINUE IF obj_task.newbegin(ll_scid,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF obj_task.requiredate = DateTime(Today(), Now()) obj_task.Assign_emp = publ_operator obj_task.Kind = 0 obj_task.sptid = sptid[ll_i] obj_task.relcode = '' Long dftbanktypeid,dftmoneyid SELECT dftbanktypeid,dftmoneyid INTO :dftbanktypeid,:dftmoneyid FROM u_spt Where sptid = :sptid[ll_i] Using commit_transaction; obj_task.banktypeid = dftbanktypeid obj_task.train = '' obj_task.billtype = 2 obj_task.moneyid = dftmoneyid obj_task.mrate = f_get_mrate( dftmoneyid) FOR ll_j = 1 To it_buy CHOOSE CASE s_buy.mrp_unit[ll_j] CASE 0 s_buy.rate[ll_j] = 1 CASE 1 IF s_buy.rate_buy[ll_j] = 0 THEN s_buy.rate_buy[ll_j] = 1 s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_buy[ll_j] s_buy.rate[ll_j] = s_buy.rate_buy[ll_j] s_buy.unit[ll_j] = s_buy.unit_buy[ll_j] CASE 2 s_buy.unit[ll_j] = s_buy.unit_scll[ll_j] s_buy.rate[ll_j] = s_buy.rate_scll[ll_j] IF s_buy.rate_scll[ll_j] = 0 THEN s_buy.rate_scll[ll_j] = 1 s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_scll[ll_j] CASE 3 s_buy.unit[ll_j] = s_buy.unit_sale[ll_j] s_buy.rate[ll_j] = s_buy.rate_sale[ll_j] IF s_buy.rate_sale[ll_j] = 0 THEN s_buy.rate_sale[ll_j] = 1 s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_sale[ll_j] END CHOOSE Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate String ls_unit ls_unit = s_buy.unit[ll_j] IF uo_sptprice.uf_getmtrlsptprice(sptid[ll_i],s_buy.MtrlID[ll_j],ls_unit,s_buy.status[ll_j],s_buy.woodcode[ll_j],s_buy.pcode[ll_j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN s_buy.uprice[ll_j] = ls_1stnewcost // s_buy.rate[ll_j] = ls_1stzqrate ELSE s_buy.uprice[ll_j] = 0 END IF SELECT top 1 storageid INTO :s_buy.storageid[ll_j] FROM u_mtrl_storage Where MtrlID = :s_buy.MtrlID[ll_j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN SELECT storageid INTO :s_buy.storageid[ll_j] FROM u_buytaskmx WHERE mtrlid = :s_buy.MtrlID[ll_j] Order By TaskID Desc Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = s_buy.mtrlcode[ll_j] + '请先设置存放仓库' END IF END IF IF obj_task.acceptmx(0,& 0,& '',& s_buy.MtrlID[ll_j],& s_buy.uqty[ll_j],& 0,& s_buy.uprice[ll_j],& 1,& 0,& '',& s_buy.mtrlcode[ll_j],& arg_msg,& ll_j,& s_buy.requiredate[ll_j],& s_buy.storageid[ll_j],& s_buy.status[ll_j],& s_buy.woodcode[ll_j],& s_buy.pcode[ll_j],& s_buy.unit[ll_j],& s_buy.rate[ll_j],& s_buy.Orderid[ll_j],& s_buy.relprintid[ll_j],& s_buy.relcode[ll_j],& '',& s_buy.relid2[ll_j],0,& s_buy.plancode[ll_j],'','','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF ls_msg = '' THEN ls_msg = obj_task.taskcode ELSE ls_msg += ',' + obj_task.taskcode END IF NEXT IF ls_msg = '' THEN ls_msg = '没有采购订单生成' ELSE ls_msg = '生成采购订单:' + ls_msg END IF arg_msg = ls_msg ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy obj_task Destroy uo_sptprice Return (rslt) end function public function integer uof_auto_build_buy_forarr (long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long ll_mtrlid String ls_msg = '' s_order_ml_rqmtrl s_rqmtrl Long sptid[] Long it_mx = 0 uo_buytask obj_task obj_task = Create uo_buytask obj_task.commit_transaction = commit_transaction uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price //DateTime requiredate //String ls_taskcode //SELECT requiredate,taskcode // INTO :requiredate,:ls_taskcode // FROM u_saletask // Where scid = :arg_scid And taskid = :arg_taskid; Long it_buy = 1 Long ll_bound, ll_i, ll_j, ll_sptid, ll_scid Boolean has_spt IF UpperBound(arg_scid) <> UpperBound(arg_taskid) Or UpperBound(arg_taskid) <> UpperBound(arg_printid) THEN rslt = 0 arg_msg = '参数不正确' GOTO ext END IF ll_bound = UpperBound(arg_scid) IF ll_bound <= 0 THEN rslt = 0 arg_msg = '订单明细队列不能为空' GOTO ext END IF ll_scid = arg_scid[1] FOR ll_i = 2 To ll_bound IF ll_scid <> arg_scid[ll_i] THEN rslt = 0 arg_msg = '不同分部的订单明细不能汇总' GOTO ext END IF NEXT FOR ll_i = 1 To ll_bound //用游标读取明细 DECLARE CUR_INWAERMX CURSOR FOR SELECT distinct u_OrderRqMtrl.sptid FROM u_OrderRqMtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid WHERE u_orderrqmtrl.plantype = 2 AND u_orderrqmtrl.taskid = :arg_taskid[ll_i] AND u_orderrqmtrl.printid = :arg_printid[ll_i] AND u_orderrqmtrl.scid = :arg_scid[ll_i] AND u_OrderRqMtrl.truerqqty - IsNull(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 And u_OrderRqMtrl.sptid > 0 Using commit_transaction; OPEN CUR_INWAERMX; FETCH CUR_INWAERMX Into :ll_sptid; DO WHILE commit_transaction.SQLCode = 0 // 不含 has_spt = False FOR ll_j = 1 To it_mx IF sptid[ll_j] = ll_sptid THEN has_spt = True EXIT END IF NEXT IF Not has_spt THEN it_mx ++ sptid[it_mx] = ll_sptid END IF FETCH CUR_INWAERMX Into :ll_sptid; LOOP CLOSE CUR_INWAERMX; NEXT Long i,j FOR i = 1 To it_mx s_buytaskmx_arr s_buy IF obj_task.newbegin(ll_scid,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF obj_task.requiredate = DateTime(Today(), Now()) obj_task.Assign_emp = publ_operator obj_task.Kind = 0 obj_task.sptid = sptid[i] obj_task.relcode = '' Long dftbanktypeid,dftmoneyid String ls_sptcode, ls_sptname SELECT dftbanktypeid,dftmoneyid, sptcode,name INTO :dftbanktypeid,:dftmoneyid, :ls_sptcode, :ls_sptname FROM u_spt Where sptid = :sptid[i] Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询供应商信息失败,ID['+String(sptid[i])+'],'+sqlca.SQLErrText GOTO ext END IF IF dftbanktypeid = 0 THEN rslt = 0 arg_msg = '供应商编号['+ls_sptcode+']未定义默认结算方式' GOTO ext END IF IF dftmoneyid = 0 THEN rslt = 0 arg_msg = '供应商编号['+ls_sptcode+']未定义默认币种' GOTO ext END IF obj_task.banktypeid = dftbanktypeid obj_task.train = '' obj_task.billtype = 2 obj_task.moneyid = dftmoneyid obj_task.mrate = f_get_mrate( dftmoneyid) it_buy = 1 FOR ll_i = 1 To ll_bound DECLARE CUR_INWAERMX2 CURSOR FOR SELECT u_mtrldef.mtrlcode , u_mtrldef.unit , u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) , u_OrderRqMtrl.MtrlID , u_OrderRqMtrl.status , u_OrderRqMtrl.woodcode , u_OrderRqMtrl.pcode, u_orderrqmtrl.mxpkid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale, u_mtrldef.unit_buy, u_mtrldef.unit_scll, u_mtrldef.unit_sale, u_OrderRqMtrl.plancode FROM u_orderrqmtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_orderrqmtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid,u_mtrldef WHERE u_orderrqmtrl.plantype = 2 AND u_orderrqmtrl.taskid = :arg_taskid[ll_i] AND u_orderrqmtrl.printid = :arg_printid[ll_i] AND u_orderrqmtrl.scid = :arg_scid[ll_i] AND u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 AND u_OrderRqMtrl.sptid = :sptid[i] AND u_mtrldef.MtrlID = u_OrderRqMtrl.MtrlID Using commit_transaction; OPEN CUR_INWAERMX2; FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy], :s_buy.unit[it_buy], :s_buy.uqty[it_buy], :s_buy.MtrlID[it_buy], :s_buy.status[it_buy], :s_buy.woodcode[it_buy], :s_buy.pcode[it_buy], :s_buy.relid2[it_buy], :s_buy.mrp_unit[it_buy], :s_buy.rate_buy[it_buy], :s_buy.rate_scll[it_buy], :s_buy.rate_sale[it_buy], :s_buy.unit_buy[it_buy], :s_buy.unit_scll[it_buy], :s_buy.unit_sale[it_buy], :s_buy.plancode[it_buy]; DO WHILE commit_transaction.SQLCode = 0 s_buy.orderid[it_buy] = arg_taskid[ll_i] s_buy.relprintid[it_buy] = arg_printid[ll_i] s_buy.printid[it_buy] = it_buy SELECT requiredate,taskcode INTO :s_buy.requiredate[it_buy],:s_buy.relcode[it_buy] FROM u_saletask Where scid = :arg_scid[ll_i] And taskid = :arg_taskid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单需求日与相关号失败' GOTO ext END IF it_buy++ FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy], :s_buy.unit[it_buy], :s_buy.uqty[it_buy], :s_buy.MtrlID[it_buy], :s_buy.status[it_buy], :s_buy.woodcode[it_buy], :s_buy.pcode[it_buy], :s_buy.relid2[it_buy], :s_buy.mrp_unit[it_buy], :s_buy.rate_buy[it_buy], :s_buy.rate_scll[it_buy], :s_buy.rate_sale[it_buy], :s_buy.unit_buy[it_buy], :s_buy.unit_scll[it_buy], :s_buy.unit_sale[it_buy], :s_buy.plancode[it_buy]; LOOP CLOSE CUR_INWAERMX2; NEXT it_buy -- FOR j = 1 To it_buy CHOOSE CASE s_buy.mrp_unit[j] CASE 0 s_buy.rate[j] = 1 CASE 1 IF s_buy.rate_buy[j] = 0 THEN s_buy.rate_buy[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_buy[j] s_buy.rate[j] = s_buy.rate_buy[j] s_buy.unit[j] = s_buy.unit_buy[j] CASE 2 s_buy.unit[j] = s_buy.unit_scll[j] s_buy.rate[j] = s_buy.rate_scll[j] IF s_buy.rate_scll[j] = 0 THEN s_buy.rate_scll[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_scll[j] CASE 3 s_buy.unit[j] = s_buy.unit_sale[j] s_buy.rate[j] = s_buy.rate_sale[j] IF s_buy.rate_sale[j] = 0 THEN s_buy.rate_sale[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_sale[j] END CHOOSE Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate String ls_unit ls_unit = s_buy.unit[j] IF uo_sptprice.uf_getmtrlsptprice(sptid[i],s_buy.MtrlID[j],ls_unit,s_buy.status[j],s_buy.woodcode[j],s_buy.pcode[j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN s_buy.uprice[j] = ls_1stnewcost // s_buy.rate[j] = ls_1stzqrate ELSE s_buy.uprice[j] = 0 END IF SELECT top 1 storageid INTO :s_buy.storageid[j] FROM u_mtrl_storage Where MtrlID = :s_buy.MtrlID[j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN SELECT storageid INTO :s_buy.storageid[j] FROM u_buytaskmx WHERE mtrlid = :s_buy.MtrlID[j] Order By taskid Desc Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = s_buy.mtrlcode[j] + '请先设置存放仓库' END IF END IF IF obj_task.acceptmx(0,& 0,& '',& s_buy.MtrlID[j],& s_buy.uqty[j],& 0,& s_buy.uprice[j],& 1,& 0,& '',& s_buy.mtrlcode[j],& arg_msg,& j,& s_buy.requiredate[j],& s_buy.storageid[j],& s_buy.status[j],& s_buy.woodcode[j],& s_buy.pcode[j],& s_buy.unit[j],& s_buy.rate[j],& s_buy.orderid[j],& s_buy.relprintid[j],& s_buy.relcode[j],& '',& s_buy.relid2[j],0,s_buy.plancode[j],'','','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF ls_msg = '' THEN ls_msg = obj_task.taskcode ELSE ls_msg += ',' + obj_task.taskcode END IF NEXT IF ls_msg = '' THEN ls_msg = '没有采购订单生成' ELSE ls_msg = '生成采购订单:' + ls_msg END IF arg_msg = ls_msg ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer uof_auto_build_buy_notuse (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long ll_mtrlid string ls_msg = '' s_order_ml_rqmtrl s_rqmtrl Long sptid[] Long it_mx = 1 uo_buytask obj_task obj_task = Create uo_buytask obj_task.commit_transaction = commit_transaction uo_spt_price uo_sptprice uo_sptprice = create uo_spt_price DateTime requiredate String ls_taskcode SELECT requiredate,taskcode INTO :requiredate,:ls_taskcode FROM u_saletask Where scid = :arg_scid And taskid = :arg_taskid; Long it_buy = 1 //用游标读取明细 DECLARE CUR_INWAERMX CURSOR FOR SELECT distinct u_OrderRqMtrl.sptid FROM u_OrderRqMtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid WHERE u_orderrqmtrl.plantype = 2 AND u_orderrqmtrl.taskid = :arg_taskid AND u_orderrqmtrl.printid = :arg_printid AND u_orderrqmtrl.scid = :arg_scid AND u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 and u_OrderRqMtrl.sptid > 0 Using commit_transaction; OPEN CUR_INWAERMX; FETCH CUR_INWAERMX Into :sptid[it_mx]; DO WHILE commit_transaction.SQLCode = 0 it_mx++ FETCH CUR_INWAERMX Into :sptid[it_mx]; LOOP CLOSE CUR_INWAERMX; Long i,j FOR i = 1 To it_mx - 1 s_buytaskmx_arr s_buy IF obj_task.newbegin(arg_scid,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF obj_task.requiredate = requiredate obj_task.Assign_emp = publ_operator obj_task.Kind = 0 obj_task.sptid = sptid[i] obj_task.relcode = '' Long dftbanktypeid,dftmoneyid SELECT dftbanktypeid,dftmoneyid INTO :dftbanktypeid,:dftmoneyid FROM u_spt Where sptid = :sptid[i] Using commit_transaction; obj_task.banktypeid = dftbanktypeid obj_task.train = '' obj_task.billtype = 2 obj_task.moneyid = dftmoneyid obj_task.mrate = f_get_mrate( dftmoneyid) it_buy = 1 DECLARE CUR_INWAERMX2 CURSOR FOR SELECT u_mtrldef.mtrlcode , u_mtrldef.unit , u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) , u_OrderRqMtrl.MtrlID , u_OrderRqMtrl.status , u_OrderRqMtrl.woodcode , u_OrderRqMtrl.pcode, u_orderrqmtrl.mxpkid, u_mtrldef.mrp_unit, u_mtrldef.rate_buy, u_mtrldef.rate_scll, u_mtrldef.rate_sale, u_mtrldef.unit_buy, u_mtrldef.unit_scll, u_mtrldef.unit_sale FROM u_orderrqmtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_orderrqmtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid,u_mtrldef WHERE u_orderrqmtrl.plantype = 2 AND u_orderrqmtrl.taskid = :arg_taskid AND u_orderrqmtrl.printid = :arg_printid AND u_orderrqmtrl.scid = :arg_scid AND u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 AND u_OrderRqMtrl.sptid = :sptid[i] AND u_mtrldef.MtrlID = u_OrderRqMtrl.MtrlID Using commit_transaction; OPEN CUR_INWAERMX2; FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy], :s_buy.unit[it_buy], :s_buy.uqty[it_buy], :s_buy.MtrlID[it_buy], :s_buy.status[it_buy], :s_buy.woodcode[it_buy], :s_buy.pcode[it_buy], :s_buy.relid2[it_buy], :s_buy.mrp_unit[it_buy], :s_buy.rate_buy[it_buy], :s_buy.rate_scll[it_buy], :s_buy.rate_sale[it_buy], :s_buy.unit_buy[it_buy], :s_buy.unit_scll[it_buy], :s_buy.unit_sale[it_buy]; DO WHILE commit_transaction.SQLCode = 0 it_buy++ FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy], :s_buy.unit[it_buy], :s_buy.uqty[it_buy], :s_buy.MtrlID[it_buy], :s_buy.status[it_buy], :s_buy.woodcode[it_buy], :s_buy.pcode[it_buy], :s_buy.relid2[it_buy], :s_buy.mrp_unit[it_buy], :s_buy.rate_buy[it_buy], :s_buy.rate_scll[it_buy], :s_buy.rate_sale[it_buy], :s_buy.unit_buy[it_buy], :s_buy.unit_scll[it_buy], :s_buy.unit_sale[it_buy]; LOOP CLOSE CUR_INWAERMX2; FOR j = 1 To it_buy - 1 CHOOSE CASE s_buy.mrp_unit[j] case 0 s_buy.rate[j] = 1 CASE 1 if s_buy.rate_buy[j] = 0 then s_buy.rate_buy[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_buy[j] s_buy.rate[j] = s_buy.rate_buy[j] s_buy.unit[j] = s_buy.unit_buy[j] CASE 2 s_buy.unit[j] = s_buy.unit_scll[j] s_buy.rate[j] = s_buy.rate_scll[j] if s_buy.rate_scll[j] = 0 then s_buy.rate_scll[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_scll[j] CASE 3 s_buy.unit[j] = s_buy.unit_sale[j] s_buy.rate[j] = s_buy.rate_sale[j] if s_buy.rate_sale[j] = 0 then s_buy.rate_sale[j] = 1 s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_sale[j] END CHOOSE decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate string ls_unit ls_unit = s_buy.unit[j] IF uo_sptprice.uf_getmtrlsptprice(sptid[i],s_buy.MtrlID[j],ls_unit,s_buy.status[j],s_buy.woodcode[j],s_buy.pcode[j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN s_buy.uprice[j] = ls_1stnewcost // s_buy.rate[j] = ls_1stzqrate else s_buy.uprice[j] = 0 end if select top 1 storageid into :s_buy.storageid[j] from u_mtrl_storage where mtrlid = :s_buy.MtrlID[j] Using commit_transaction; if commit_transaction.sqlcode <> 0 then select storageid into :s_buy.storageid[j] from u_buytaskmx where mtrlid = :s_buy.MtrlID[j] order by taskid desc Using commit_transaction; if commit_transaction.sqlcode <> 0 then arg_msg = s_buy.mtrlcode[j] + '请先设置存放仓库' end if end if IF obj_task.acceptmx(0,& 0,& '',& s_buy.MtrlID[j],& s_buy.uqty[j],& 0,& s_buy.uprice[j],& 1,& 0,& '',& s_buy.mtrlcode[j],& arg_msg,& j,& requiredate,& s_buy.storageid[j],& s_buy.status[j],& s_buy.woodcode[j],& s_buy.pcode[j],& s_buy.unit[j],& s_buy.rate[j],& arg_taskid,& arg_printid,& ls_taskcode,& '',& s_buy.relid2[j],0,'','','','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF ls_msg = '' THEN ls_msg = obj_task.taskcode ELSE ls_msg += ',' + obj_task.taskcode END IF NEXT IF ls_msg = '' THEN ls_msg = '没有采购订单生成' ELSE ls_msg = '生成采购订单:' + ls_msg END IF arg_msg = ls_msg ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, integer arg_chk_zero, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit //arg_chk_zero //是否检查0需求 Int rslt = 1,cnt = 0 Int ll_flag,ll_scllflag IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF SELECT flag,scllflag INTO :ll_flag,:ll_scllflag FROM u_saletaskmx WHERE scid = :Arg_scid AND taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,销售订单明细内容!" GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 ARG_MSG = "销售订单明细还没有审核,不能领料审核,操作取消" GOTO ext END IF IF ll_scllflag <> 0 THEN rslt = 0 ARG_MSG = "销售订单明细已领料审核,操作取消" GOTO ext END IF IF arg_chk_zero = 1 THEN SELECT count(*) INTO :cnt FROM u_orderrqmtrl WHERE ( u_OrderRqMtrl.taskID = :arg_taskid ) AND ( u_OrderRqMtrl.scid = :arg_scid ) AND u_OrderRqMtrl.printid = :arg_printid AND truerqqty = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询订单明细物料需求失败!"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "订单明细物料需求存在需求数为0!" GOTO ext END IF END IF ////检查工价表是否已审核 //IF sys_option_chk_workprice = 1 THEN // //end if cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 ARG_MSG = "操作员姓名未登记或已取消!" GOTO ext END IF UPDATE u_SaleTaskmx SET scllrep = :arg_emp ,sclldate = getdate(), scllflag = 1 WHERE TaskID = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid AND flag = 1 AND scllflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单明细审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer uof_add_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//============================================================================== // 函数: uo_order_ml::uof_add_procode_qty() //------------------------------------------------------------------------------ // 描述: 更新工序完成数 //------------------------------------------------------------------------------ // 参数: // value long arg_scid // value long arg_taskid // value long arg_printid // value string arg_procode // value decimal arg_qty // reference string arg_msg // value boolean arg_ifcommit //------------------------------------------------------------------------------ // 返回值: integer //------------------------------------------------------------------------------ // 作者: HD Lee 日期: 2011.12.01 //------------------------------------------------------------------------------ // 修改历史: // //============================================================================== Int rslt = 1 String ls_taskcode String ls_mtrlcode DateTime null_dt SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的销售订单唯一码' GOTO ext END IF IF arg_qty = 0 THEN rslt = 1 GOTO ext END IF //if sys_option_add_orderrqwp_fqty = 0 then // arg_msg = '系统选项[071]限制,工序确认完成数只能手动完成' // rslt = 0 // GOTO ext //end if SELECT taskcode INTO :ls_taskcode FROM u_SaleTask WHERE scid = :arg_scid AND taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询订单编号失败' rslt = 0 GOTO ext END IF SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef,u_SaleTaskMx WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid AND u_SaleTaskMx.scid = :arg_scid AND u_SaleTaskMx.taskid = :arg_taskid AND u_SaleTaskMx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编号失败' rslt = 0 GOTO ext END IF Decimal lde_proqty, lde_finishqty ,ld_nofinqty SELECT U_OrderRqwp.proqty , U_OrderRqwp.finishqty INTO :lde_proqty, :lde_finishqty FROM U_OrderRqwp WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量失败~r~n'+sqlca.SQLErrText GOTO ext END IF IF arg_qty > 0 THEN //增加 IF arg_qty > lde_proqty - lde_finishqty THEN rslt = 0 arg_msg = '销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量为:'+String(lde_proqty - lde_finishqty,'#,##0.##########')+',不能增加完成:'+String(arg_qty,'#,##0.##########') GOTO ext END IF ELSE IF Abs(arg_qty) > lde_finishqty THEN rslt = 0 arg_msg = '销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量为:'+String(lde_finishqty,'#,##0.##########')+',不能取消完成:'+String(Abs(arg_qty),'#,##0.##########') GOTO ext END IF END IF UPDATE U_OrderRqwp SET finishqty = finishqty + :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量失败~r~n'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_finish_procode_qty_dsr (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, long arg_type, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Int li_finishflag DateTime null_dt SetNull(null_dt) IF sys_option_add_orderrqwp_fqty = 1 THEN arg_msg = '系统选项[071]限制,工序确认完成数只能由计件单确认增减' rslt = 0 GOTO ext END IF SELECT finishflag INTO :li_finishflag FROM U_OrderRqwp WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid And Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_type = 0 THEN IF li_finishflag = 1 THEN arg_msg = '工序已确认完成,不能再确认' rslt = 0 GOTO ext END IF string ls_dscrp ls_dscrp='//' + string(today(),'yyyymmdd') + ' ' + string(now(),'hh:mm') + '本次完成' + string(arg_fpqty,'#,##0.####') //proqty UPDATE U_OrderRqwp SET finishdate = getdate(), finishqty = finishqty + :arg_fpqty, dscrp= dscrp + :ls_dscrp WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode And finishflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Decimal dec_proqty ,dec_finishqty dec_proqty = 0 dec_finishqty = 0 SELECT proqty ,finishqty INTO :dec_proqty ,:dec_finishqty FROM U_OrderRqwp WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode And finishflag = 0; IF IsNull(dec_proqty) THEN dec_proqty = 0 IF IsNull(dec_finishqty) THEN dec_finishqty = 0 IF dec_proqty = dec_finishqty THEN UPDATE U_OrderRqwp SET finishflag = 1 WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode And finishflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE // IF li_finishflag = 0 THEN // arg_msg = '工序还未确认,不能取消确认' // rslt = 0 // GOTO ext // END IF // And finishflag = 1 UPDATE U_OrderRqwp SET finishflag = 0, finishdate = :null_dt, finishqty = 0, dscrp='' WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND Procode = :arg_procode ; IF sqlca.SQLCode <> 0 THEN arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public subroutine uof_workprice_parm (decimal arg_orderqty, string arg_status, string arg_woodcode, string arg_pcode, string arg_ls_mtrlsectype, string arg_ls_zxmtrlmode, string arg_ls_mtrlmode, string arg_ls_cuscode, string arg_ls_cusname, string arg_parmstr, ref decimal arg_value_dec, decimal arg_price);//orderqty 排产数量 //status 配置 //woodcode 配置1 //pcode 配置2 //ls_mtrlsectype 自定义1 //ls_zxmtrlmode 自定义2 //物料规格arg_ls_mtrlmode //arg_parmstr 公式 //arg_value_dec 返回的工价 datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(commit_transaction) ds_pricestr.Retrieve() ds_pricestr.InsertRow(0) String s_rtn Select Top 1 Replace( :arg_parmstr,'不包含',' not like ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'不等于','<>') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'包含',' like ') Into :arg_parmstr From u_user; arg_orderqty = Dec(String(arg_orderqty,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'指令单数量',:arg_orderqty) Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'大于等于',' >= ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'小于等于',' <= ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'等于',' = ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'大于',' > ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'小于',' < ') Into :arg_parmstr From u_user; If Pos(arg_parmstr,'配置1') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置1',"'"+:arg_woodcode+"'") Into :arg_parmstr From u_user; End If If Pos(arg_parmstr,'配置2') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置2',"'"+:arg_pcode+"'") Into :arg_parmstr From u_user; End If If Pos(arg_parmstr,'配置') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置',"'"+:arg_status+"'") Into :arg_parmstr From u_user; End If Select Top 1 Replace( :arg_parmstr,'自定义1',"'"+:arg_ls_mtrlsectype+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'自定义2',"'"+:arg_ls_zxmtrlmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'物料规格',"'"+:arg_ls_mtrlmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'客户编号',"'"+:arg_ls_cuscode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'客户名称',"'"+:arg_ls_cusname+"'") Into :arg_parmstr From u_user; //SELECT Top 1 Replace( :arg_parmstr,'工价表工价',"'"+:arg_price+"'") Into :arg_parmstr From u_user; ll_code = sqlca.SQLCode Long ll_pos String as_old as_old = '工价表工价' ll_pos = Pos(arg_parmstr,as_old) If ll_pos > 0 Then Do While ll_pos > 0 arg_parmstr = Replace(arg_parmstr, ll_pos, Len(as_old), String(arg_price)) ll_pos = Pos(arg_parmstr, as_old, ll_pos+Len(String(arg_price))) Loop End If ds_pricestr.Modify('cmpl.expression= "'+arg_parmstr+'"') ds_pricestr.AcceptText() //ds_pricestr.Retrieve() s_rtn = String(ds_pricestr.Object.cmpl[ds_pricestr.GetRow()]) arg_value_dec = Round(Dec(s_rtn),2) Destroy ds_pricestr end subroutine on uo_order_ml.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml.destroy TriggerEvent( this, "destructor" ) call super::destroy end on