f_delallocqty.srf 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. $PBExportHeader$f_delallocqty.srf
  2. global type f_delallocqty from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg)
  6. end prototypes
  7. global function integer f_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg);Int rslt = 1
  8. uo_mtrlware_assign uo_assign_bill
  9. uo_assign_bill = Create uo_mtrlware_assign
  10. Long ll_i
  11. //====================================================================
  12. // u_mtrlware_assign 字段
  13. //====================================================================
  14. Long ll_cnt = 0
  15. Long ll_assignid, ll_assignid_arr[]
  16. Decimal ld_assignqty, ld_assignqty_arr[]
  17. //====================================================================
  18. // 查询超期未开发货单的分配
  19. //====================================================================
  20. DECLARE Cur1 CURSOR FOR
  21. SELECT
  22. u_mtrlware_assign.Assignid,
  23. u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS assignqty
  24. FROM u_mtrlware_assign INNER JOIN
  25. u_SaleTaskMx ON u_mtrlware_assign.Scid = u_SaleTaskMx.scid AND
  26. u_mtrlware_assign.Relbillid = u_SaleTaskMx.TaskID AND
  27. u_mtrlware_assign.Relprintid = u_SaleTaskMx.printid
  28. WHERE (u_mtrlware_assign.assigntype = 1) AND
  29. (GETDATE() > DATEADD(s, :arg_assignday * 24 * 60 * 60, u_mtrlware_assign.Opdate)) AND
  30. (NOT EXISTS(SELECT 1
  31. FROM u_outwaremx INNER JOIN
  32. u_outware ON u_outwaremx.scid = u_outware.scid AND
  33. u_outwaremx.outwareid = u_outware.outwareid
  34. WHERE (u_outwaremx.ifrel = 1) AND
  35. (u_outwaremx.scid = u_SaleTaskMx.scid) AND
  36. (u_outwaremx.relid = u_Saletaskmx.Taskid) AND
  37. (u_outwaremx.relprintid = u_saletaskmx.printid) AND
  38. (u_outware.billtype = 1) AND (u_outware.thflag = 0))) AND
  39. (NOT EXISTS(SELECT 1
  40. FROM u_inwaremx INNER JOIN
  41. u_inware ON u_inwaremx.scid = u_inware.scid AND
  42. u_inwaremx.inwareid = u_inware.inwareid INNER JOIN
  43. u_Order_ml ON u_inwaremx.scid = u_Order_ml.scid AND
  44. u_inwaremx.relid = u_Order_ml.OrderID
  45. WHERE (u_Order_ml.ordertype = 1) AND
  46. (u_inwaremx.ifrel = 1) AND
  47. (u_inware.billtype = 3) AND
  48. (u_inware.inwarecode = u_mtrlware_assign.inwarecode) AND
  49. (u_inwaremx.printid = u_mtrlware_assign.inprintid)));
  50. OPEN Cur1;
  51. FETCH Cur1 Into :ll_assignid, :ld_assignqty;
  52. DO WHILE sqlca.SQLCode = 0
  53. ll_cnt++
  54. ll_assignid_arr[ll_cnt] = ll_assignid
  55. ld_assignqty_arr[ll_cnt] = ld_assignqty
  56. FETCH Cur1 Into :ll_assignid, :ld_assignqty;
  57. LOOP
  58. CLOSE Cur1;
  59. //====================================================================
  60. // 查询已开发货单超期未仓审的分配
  61. //====================================================================
  62. DECLARE Cur2 CURSOR FOR
  63. SELECT
  64. u_mtrlware_assign.Assignid,
  65. u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS assignqty
  66. FROM u_mtrlware_assign INNER JOIN
  67. u_SaleTaskMx ON u_mtrlware_assign.Scid = u_SaleTaskMx.scid AND
  68. u_mtrlware_assign.Relbillid = u_SaleTaskMx.TaskID AND
  69. u_mtrlware_assign.Relprintid = u_SaleTaskMx.printid INNER JOIN
  70. u_outwaremx ON u_SaleTaskMx.TaskID = u_outwaremx.relid AND
  71. u_SaleTaskMx.scid = u_outwaremx.scid AND
  72. u_SaleTaskMx.printid = u_outwaremx.relprintid INNER JOIN
  73. u_outware ON u_outwaremx.scid = u_outware.scid AND
  74. u_outwaremx.outwareid = u_outware.outwareid
  75. WHERE (u_mtrlware_assign.assigntype = 1) AND
  76. (u_outware.billtype = 1) AND
  77. (u_outware.thflag = 0) AND
  78. (u_outwaremx.ifrel = 1) AND
  79. (u_outware.flag = 0) AND
  80. (GETDATE() > DATEADD(s, :arg_outday * 24 * 60 * 60, u_outware.Opdate)) AND
  81. (NOT EXISTS(SELECT 1
  82. FROM u_inwaremx INNER JOIN
  83. u_inware ON u_inwaremx.scid = u_inware.scid AND
  84. u_inwaremx.inwareid = u_inware.inwareid INNER JOIN
  85. u_Order_ml ON u_inwaremx.scid = u_Order_ml.scid AND
  86. u_inwaremx.relid = u_Order_ml.OrderID
  87. WHERE (u_Order_ml.ordertype = 1) AND
  88. (u_inwaremx.ifrel = 1) AND
  89. (u_inware.billtype = 3) AND
  90. (u_inware.inwarecode = u_mtrlware_assign.inwarecode) AND
  91. (u_inwaremx.printid = u_mtrlware_assign.inprintid))) ;
  92. OPEN Cur2;
  93. FETCH Cur2 Into :ll_assignid, :ld_assignqty;
  94. DO WHILE sqlca.SQLCode = 0
  95. ll_cnt++
  96. ll_assignid_arr[ll_cnt] = ll_assignid
  97. ld_assignqty_arr[ll_cnt] = ld_assignqty
  98. FETCH Cur2 Into :ll_assignid, :ld_assignqty;
  99. LOOP
  100. CLOSE Cur2;
  101. //====================================================================
  102. // 取消分配
  103. //====================================================================
  104. FOR ll_i = 1 To ll_cnt
  105. IF uo_assign_bill.uof_assign_del(ll_assignid_arr[ll_i],&
  106. ld_assignqty_arr[ll_i],ARG_MSG,True) <> 1 THEN
  107. GOTO _next
  108. END IF
  109. _next:
  110. NEXT
  111. Destroy uo_assign_bill
  112. //IF rslt = 1 THEN
  113. // COMMIT;
  114. //ELSE
  115. // ROLLBACK;
  116. //END IF
  117. RETURN rslt
  118. end function