123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- $PBExportHeader$f_reallocqty.srf
- global type f_reallocqty from function_object
- end type
- forward prototypes
- global function integer f_reallocqty (boolean arg_reallocall, boolean arg_ignorout, ref string arg_msg)
- end prototypes
- global function integer f_reallocqty (boolean arg_reallocall, boolean arg_ignorout, ref string arg_msg); //朗的代码
- Int rslt = 1
- Long ll_i, ll_j, ll_k, ll_cnt
- Boolean lb_enough
- Decimal ld_lake, ld_add
- dbauo_taskmx mx
- dbauo_adapter adapter
- uo_mtrlware_assign uo_assign_bill
- uo_assign_bill = Create uo_mtrlware_assign
- adapter = Create dbauo_adapter
- adapter.f_init()
- adapter.ins_reallocall = arg_reallocall
- adapter.ins_ignorout = arg_ignorout
- adapter.f_sort1()
- adapter.f_sort2()
- Long ll_bestIndex = 0, ll_bestCount = 0
- FOR ll_i = 1 To UpperBound(adapter.ins_sorts)
- IF adapter.ins_sorts[ll_i].ins_taskcount > ll_bestCount THEN
- ll_bestIndex = ll_i
- ll_bestCount = adapter.ins_sorts[ll_i].ins_taskcount
- END IF
- NEXT
- //MessageBox('', string(adapter.ins_sorts[1].ins_taskcount) + ',' + string(adapter.ins_sorts[2].ins_taskcount))
- dbauo_task task
- DateTime dt_serverTime
- SELECT TOP 1 GETDATE()
- INTO :dt_serverTime
- From u_user;
-
- String ls_logText
- IF ll_bestIndex > 0 THEN
- // 取消分配与占用库存
- FOR ll_i = 1 To UpperBound(adapter.ins_sorts[ll_bestIndex].ins_sort)
- task = adapter.ins_sorts[ll_bestIndex].ins_sort[ll_i]
- If (adapter.ins_ignorout And task.ins_hasoutware) Or (Not adapter.ins_reallocall And task.ins_isOK) THEN
- FOR ll_j = 1 To UpperBound(task.ins_mx)
- mx = task.ins_mx[ll_j]
- FOR ll_k = 1 To UpperBound(mx.ins_assigns)
- IF Not IsNull(mx.ins_assigns[ll_k].ins_mtrlwaremx) THEN
- mx.ins_assigns[ll_k].ins_mtrlwaremx.ins_noallocqty -= mx.ins_assigns[ll_k].ins_qty
- mx.ins_assigns[ll_k].ins_mtrlwaremx.ins_mtrlware.ins_noallocqty -= mx.ins_assigns[ll_k].ins_qty
- ELSE // 没有分配库存
- IF mx.ins_assigns[ll_k].ins_qty = 0 THEN CONTINUE
- // SELECT COUNT(0) INTO :ll_cnt FROM u_mtrlware where mtrlwareid = :mx.ins_assigns[ll_k].ins_mtrlwareid;
- // if sqlca.sqlcode <> 0 then
- // rslt = 0
- // arg_msg = '已分配的库存不存在 mtrlwareid=' + string(mx.ins_assigns[ll_k].ins_mtrlwareid)
- // goto ext
- // end if
- //
- // decimal ll_noallocqty
- // long ll_storagetype, ll_mtrlid
- // string ll_mtrlcuscode, ll_status, ll_pcode, ll_woodcode
- // SELECT u_mtrlware.noallocqty,
- // u_storage.storagetype,
- // u_mtrlware.mtrlid,
- // u_mtrlware.mtrlcuscode,
- // u_mtrlware.status,
- // u_mtrlware.pcode,
- // u_mtrlware.woodcode
- // INTO : ll_noallocqty,
- // :ll_storagetype,
- // :ll_mtrlid,
- // :ll_mtrlcuscode,
- // :ll_status,
- // :ll_pcode,
- // :ll_woodcode
- // FROM u_mtrlware inner join u_storage on u_mtrlware.storageid = u_storage.storageid
- // where u_mtrlware.mtrlwareid = :mx.ins_assigns[ll_k].ins_mtrlwareid;
- // if sqlca.sqlcode <> 0 then
- // rslt = 0
- // arg_msg = '查询库存信息失败'
- // goto ext
- // end if
- //
- // if ll_storagetype <> 1 then
- // rslt = 0
- // arg_msg = '库存仓库 storagetype <> 1'
- // goto ext
- // end if
- //
- // if ll_noallocqty <= 0 then
- // rslt = 0
- // arg_msg = '库存数为0'
- // goto ext
- // end if
- //
- // if ll_mtrlid <> mx.ins_mtrlid OR ll_mtrlcuscode <> mx.ins_mtrlcuscode &
- // OR ll_status <> mx.ins_status OR ll_pcode <> mx.ins_pcode &
- // OR ll_woodcode <> mx.ins_woodcode then
- // rslt = 0
- // arg_msg = '分配库存与明细物料不相符'
- // goto ext
- // end if
-
- END IF
- NEXT
- NEXT
- ELSE
- FOR ll_j = 1 To UpperBound(task.ins_mx)
- mx = task.ins_mx[ll_j]
- FOR ll_k = 1 To UpperBound(mx.ins_assigns)
- IF uo_assign_bill.uof_assign_del(mx.ins_assigns[ll_k].ins_assignid,&
- mx.ins_assigns[ll_k].ins_qty,ARG_MSG,False) <> 1 THEN
- // rslt = 0
- // goto ext
- // GOTO _next
- END IF
- NEXT
- NEXT
- END IF
- NEXT
-
- // 重新分配
- FOR ll_i = 1 To UpperBound(adapter.ins_sorts[ll_bestIndex].ins_sort)
- task = adapter.ins_sorts[ll_bestIndex].ins_sort[ll_i]
- ls_logText = String(dt_serverTime, 'yyyy-MM-dd HH:mm:ss') + '--' + String(ll_i, '00000') + '--'
- IF task.ins_hasmoney THEN
- ls_logText += '足钱--'
- ELSE
- ls_logText += '差钱--'
- END IF
-
- IF task.ins_hasoutware THEN
- ls_logText += '已发货--'
- ELSE
- ls_logText += '未发货--'
- END IF
-
- IF task.ins_isOK THEN
- ls_logText += '已齐货--'
- ELSE
- ls_logText += '未齐货--'
- END IF
-
- If (adapter.ins_ignorout And task.ins_hasoutware) Or (Not adapter.ins_reallocall And task.ins_isOK) THEN
- ls_logText += '跳过'
- task.f_WriteLog(ls_logText)
- CONTINUE
- END IF
-
- lb_enough = True
- FOR ll_j = 1 To UpperBound(task.ins_mx)
- IF task.ins_mx[ll_j].ins_saleqty > task.ins_mx[ll_j].ins_mtrlware.ins_noallocqty THEN
- lb_enough = False
- EXIT
- END IF
- NEXT
-
- IF lb_enough THEN
- ls_logText += '够库存--'
- ELSE
- ls_logText += '缺库存--'
- END IF
-
- IF Not lb_enough THEN
- ls_logText += '跳过'
- task.f_WriteLog(ls_logText)
- CONTINUE
- END IF
-
- FOR ll_j = 1 To UpperBound(task.ins_mx)
- mx = task.ins_mx[ll_j]
- // IF Not lb_enough THEN
- // // 取消分配
- // FOR ll_k = 1 To UpperBound(mx.ins_assigns)
- // IF uo_assign_bill.uof_assign_del(mx.ins_assigns[ll_k].ins_assignid,&
- // mx.ins_assigns[ll_k].ins_qty,ARG_MSG,False) <> 1 THEN
- // GOTO _next
- // END IF
- // NEXT
- // ELSE
- //
- // FOR ll_k = 1 To UpperBound(mx.ins_assigns)
- // // IF IsNull(mx.ins_assigns[ll_k].ins_mtrlwaremx) THEN
- // IF uo_assign_bill.uof_assign_del(mx.ins_assigns[ll_k].ins_assignid,&
- // mx.ins_assigns[ll_k].ins_qty,ARG_MSG,False) <> 1 THEN
- // GOTO _next
- // END IF
- // mx.ins_allocqty -= mx.ins_assigns[ll_k].ins_qty
- // // ELSE
- // // mx.ins_mtrlware.ins_noallocqty -= mx.ins_assigns[ll_k].ins_qty
- // // mx.ins_assigns[ll_k].ins_mtrlwaremx.ins_noallocqty -= mx.ins_assigns[ll_k].ins_qty
- // // END IF
- // NEXT
- //
- //
- // IF Not task.ins_isOK THEN
- ld_lake = mx.ins_saleqty - mx.ins_allocqty
- FOR ll_k = 1 To UpperBound(mx.ins_mtrlware.mx)
- IF ld_lake > mx.ins_mtrlware.mx[ll_k].ins_noallocqty THEN
- ld_add = mx.ins_mtrlware.mx[ll_k].ins_noallocqty
- ld_lake -= ld_add
- ELSE
- ld_add = ld_lake
- ld_lake = 0
- END IF
-
- IF ld_add > 0 THEN
- IF ld_add = 300 THEN
- ld_add = ld_add
- END IF
-
- mx.ins_mtrlware.mx[ll_k].ins_noallocqty -= ld_add
- mx.ins_mtrlware.ins_noallocqty -= ld_add
-
- IF uo_assign_bill.uof_assign_add(mx.ins_task.ins_scid,&
- mx.ins_mtrlware.mx[ll_k].ins_mtrlwareid,1,mx.ins_task.ins_taskid,&
- mx.ins_printid,ld_add,0,'','','',&
- 0,2,publ_operator,ARG_MSG,True) <> 1 THEN
- // GOTO _next
- END IF
-
- END IF
-
- IF ld_lake = 0 THEN EXIT
- ls_logText += String(ld_lake,'0.00') + '--'
- NEXT
- ls_logText += '分配完成'
- task.f_WriteLog(ls_logText)
- // END IF
- // END IF
- // _next:
- NEXT
-
-
- NEXT
- END IF
- //ext:
- Destroy uo_assign_bill
- Destroy adapter
- IF rslt = 0 THEN
- ROLLBACK;
- ELSE
- COMMIT;
- END IF
- RETURN rslt
- end function
|