f_cmp_fifo_cb_mtrlware.srf 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. $PBExportHeader$f_cmp_fifo_cb_mtrlware.srf
  2. global type f_cmp_fifo_cb_mtrlware from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_del_mtrlware_inmx (long arg_scid, long arg_mtrlwareid, long arg_inwareid, long arg_printid, string arg_inwarecode, datetime arg_inwaredate, decimal arg_inqty, decimal arg_inprice, long arg_if_outware, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg)
  6. global function integer f_cmp_fifo_cb_mtrlware (long arg_scid, long arg_mtrlwareid, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg)
  7. end prototypes
  8. global function integer f_del_mtrlware_inmx (long arg_scid, long arg_mtrlwareid, long arg_inwareid, long arg_printid, string arg_inwarecode, datetime arg_inwaredate, decimal arg_inqty, decimal arg_inprice, long arg_if_outware, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg);Long rslt = 1
  9. long ls_newid
  10. ls_newid = f_sys_scidentity(0,"u_mtrlware_inmx","mtrlwaremxid",arg_msg,false,commit_transaction)
  11. IF ls_newid <= 0 THEN
  12. rslt = 0
  13. GOTO ext
  14. END IF
  15. INSERT INTO u_mtrlware_inmx
  16. (mtrlwaremxid,
  17. scid,
  18. mtrlwareid,
  19. inwareid,
  20. printid,
  21. inwarecode,
  22. inwaredate,
  23. inqty,
  24. inprice,
  25. if_outware)
  26. VALUES
  27. ( :ls_newid,
  28. :arg_scid,
  29. :arg_mtrlwareid,
  30. :arg_inwareid,
  31. :arg_printid,
  32. :arg_inwarecode,
  33. :arg_inwaredate,
  34. :arg_inqty,
  35. :arg_inprice,
  36. :arg_if_outware) ;
  37. IF commit_transaction.SQLCode <> 0 THEN
  38. rslt = 0
  39. arg_msg = "插入入库批明细失败"+"~n"
  40. GOTO ext
  41. END IF
  42. ext:
  43. IF rslt = 0 THEN
  44. ROLLBACK Using commit_transaction;
  45. ELSEIF rslt = 1 And arg_ifcommit THEN
  46. COMMIT Using commit_transaction;
  47. END IF
  48. RETURN rslt
  49. end function
  50. global function integer f_cmp_fifo_cb_mtrlware (long arg_scid, long arg_mtrlwareid, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg);Long rslt = 1
  51. Long contractcnt
  52. Long i
  53. datastore ds
  54. ds = Create datastore
  55. ds.DataObject = "dddw_cmp_fifo_cb_mtrlware"
  56. ds.SetTransObject(commit_transaction)
  57. contractcnt = ds.Retrieve(arg_scid,arg_mtrlwareid)
  58. Long ll_inwareid ,ll_printid , ll_if_outware
  59. Decimal dec_inqty , dec_inprice ,dec_inamt
  60. UPDATE u_mtrlware_inmx SET outqty = 0
  61. Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid;
  62. IF commit_transaction.SQLCode <> 0 THEN
  63. rslt = 0
  64. arg_msg = "更新进仓批明细已出仓数量失败1"+"~n"
  65. GOTO ext
  66. END IF
  67. FOR i = 1 To contractcnt
  68. ll_inwareid = 0
  69. ll_printid = 0
  70. ll_if_outware = 0
  71. dec_inqty = 0
  72. dec_inprice = 0
  73. dec_inamt = 0
  74. ll_inwareid = ds.Object.inwareid[i]
  75. ll_printid = ds.Object.printid[i]
  76. ll_if_outware = ds.Object.if_outware[i]
  77. dec_inqty = ds.Object.inqty[i]
  78. dec_inprice = ds.Object.inprice[i]
  79. dec_inamt = ds.Object.inamt[i]
  80. IF ll_if_outware = 0 THEN
  81. UPDATE u_inwaremx SET u_inwaremx.cost = :dec_inprice ,u_inwaremx.costamt = :dec_inamt
  82. Where scid = :arg_scid And inwareid = :ll_inwareid And printid = :ll_printid;
  83. IF commit_transaction.SQLCode <> 0 THEN
  84. rslt = 0
  85. arg_msg = "更新进仓明细成本失败1"+"~n"
  86. GOTO ext
  87. END IF
  88. ELSE // ll_if_outware = 1
  89. UPDATE u_outwaremx SET u_outwaremx.cost = :dec_inprice ,u_outwaremx.costamt = :dec_inamt * (-1)
  90. Where scid = :arg_scid And outwareid = :ll_inwareid And printid = :ll_printid;
  91. IF commit_transaction.SQLCode <> 0 THEN
  92. rslt = 0
  93. arg_msg = "更新负数出仓明细成本失败2"+"~n"
  94. GOTO ext
  95. END IF
  96. END IF
  97. NEXT
  98. DateTime dt
  99. dt = DateTime(Date('2000-01-01'),Time(0))
  100. rslt = f_trigger_fifo_procedure(arg_scid,arg_mtrlwareid,dt,2,-1,-1,False,commit_transaction,arg_msg)
  101. //重算结存表
  102. rslt =f_cmp_fifo_warebalc(arg_scid,arg_mtrlwareid,False,commit_transaction,arg_msg)
  103. ext:
  104. IF rslt = 0 THEN
  105. ROLLBACK Using commit_transaction;
  106. ELSEIF rslt = 1 And arg_ifcommit THEN
  107. COMMIT Using commit_transaction;
  108. END IF
  109. RETURN rslt
  110. end function