$PBExportHeader$f_delallocqty.srf global type f_delallocqty from function_object end type forward prototypes global function integer f_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg) end prototypes global function integer f_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg);Int rslt = 1 uo_mtrlware_assign uo_assign_bill uo_assign_bill = Create uo_mtrlware_assign Long ll_i //==================================================================== // u_mtrlware_assign 字段 //==================================================================== Long ll_cnt = 0 Long ll_assignid, ll_assignid_arr[] Decimal ld_assignqty, ld_assignqty_arr[] //==================================================================== // 查询超期未开发货单的分配 //==================================================================== DECLARE Cur1 CURSOR FOR SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS assignqty FROM u_mtrlware_assign INNER JOIN u_SaleTaskMx ON u_mtrlware_assign.Scid = u_SaleTaskMx.scid AND u_mtrlware_assign.Relbillid = u_SaleTaskMx.TaskID AND u_mtrlware_assign.Relprintid = u_SaleTaskMx.printid WHERE (u_mtrlware_assign.assigntype = 1) AND (GETDATE() > DATEADD(s, :arg_assignday * 24 * 60 * 60, u_mtrlware_assign.Opdate)) AND (NOT EXISTS(SELECT 1 FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE (u_outwaremx.ifrel = 1) AND (u_outwaremx.scid = u_SaleTaskMx.scid) AND (u_outwaremx.relid = u_Saletaskmx.Taskid) AND (u_outwaremx.relprintid = u_saletaskmx.printid) AND (u_outware.billtype = 1) AND (u_outware.thflag = 0))) AND (NOT EXISTS(SELECT 1 FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid INNER JOIN u_Order_ml ON u_inwaremx.scid = u_Order_ml.scid AND u_inwaremx.relid = u_Order_ml.OrderID WHERE (u_Order_ml.ordertype = 1) AND (u_inwaremx.ifrel = 1) AND (u_inware.billtype = 3) AND (u_inware.inwarecode = u_mtrlware_assign.inwarecode) AND (u_inwaremx.printid = u_mtrlware_assign.inprintid))); OPEN Cur1; FETCH Cur1 Into :ll_assignid, :ld_assignqty; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_assignid_arr[ll_cnt] = ll_assignid ld_assignqty_arr[ll_cnt] = ld_assignqty FETCH Cur1 Into :ll_assignid, :ld_assignqty; LOOP CLOSE Cur1; //==================================================================== // 查询已开发货单超期未仓审的分配 //==================================================================== DECLARE Cur2 CURSOR FOR SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS assignqty FROM u_mtrlware_assign INNER JOIN u_SaleTaskMx ON u_mtrlware_assign.Scid = u_SaleTaskMx.scid AND u_mtrlware_assign.Relbillid = u_SaleTaskMx.TaskID AND u_mtrlware_assign.Relprintid = u_SaleTaskMx.printid INNER JOIN u_outwaremx ON u_SaleTaskMx.TaskID = u_outwaremx.relid AND u_SaleTaskMx.scid = u_outwaremx.scid AND u_SaleTaskMx.printid = u_outwaremx.relprintid INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE (u_mtrlware_assign.assigntype = 1) AND (u_outware.billtype = 1) AND (u_outware.thflag = 0) AND (u_outwaremx.ifrel = 1) AND (u_outware.flag = 0) AND (GETDATE() > DATEADD(s, :arg_outday * 24 * 60 * 60, u_outware.Opdate)) AND (NOT EXISTS(SELECT 1 FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid INNER JOIN u_Order_ml ON u_inwaremx.scid = u_Order_ml.scid AND u_inwaremx.relid = u_Order_ml.OrderID WHERE (u_Order_ml.ordertype = 1) AND (u_inwaremx.ifrel = 1) AND (u_inware.billtype = 3) AND (u_inware.inwarecode = u_mtrlware_assign.inwarecode) AND (u_inwaremx.printid = u_mtrlware_assign.inprintid))) ; OPEN Cur2; FETCH Cur2 Into :ll_assignid, :ld_assignqty; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_assignid_arr[ll_cnt] = ll_assignid ld_assignqty_arr[ll_cnt] = ld_assignqty FETCH Cur2 Into :ll_assignid, :ld_assignqty; LOOP CLOSE Cur2; //==================================================================== // 取消分配 //==================================================================== FOR ll_i = 1 To ll_cnt IF uo_assign_bill.uof_assign_del(ll_assignid_arr[ll_i],& ld_assignqty_arr[ll_i],ARG_MSG,True) <> 1 THEN GOTO _next END IF _next: NEXT Destroy uo_assign_bill //IF rslt = 1 THEN // COMMIT; //ELSE // ROLLBACK; //END IF RETURN rslt end function