123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- $PBExportHeader$f_reallocqty_yyx.srf
- global type f_reallocqty_yyx from function_object
- end type
- forward prototypes
- global function integer f_reallocqty_yyx (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg)
- end prototypes
- global function integer f_reallocqty_yyx (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg);//YYX 2011-10-27
- //
- //1.取消要取消分配的订单明细
- //2.要分配订单明细重新排序
- //3.重新分配
- Int rslt = 1
- Long i
- uo_mtrlware_assign uo_mtrlware_fp
- uo_mtrlware_fp = Create uo_mtrlware_assign
- datastore ds_fp_cancel
- ds_fp_cancel = Create datastore
- datastore ds_refp
- ds_refp = Create datastore
- ds_refp.DataObject = 'ds_reallocqty_sort'
- ds_refp.SetTransObject(sqlca)
- datastore ds_refpmx
- ds_refpmx = Create datastore
- ds_refpmx.DataObject = 'ds_reallocqty_sortmx'
- ds_refpmx.SetTransObject(sqlca)
- datastore ds_refpmx_mtrlware
- ds_refpmx_mtrlware = Create datastore
- ds_refpmx_mtrlware.DataObject = 'ds_reallocqty_sortmx_mtrlware'
- ds_refpmx_mtrlware.SetTransObject(sqlca)
- //1.取消分配
- IF arg_reallocall And arg_ignorout THEN
- //未开过发货单则打散重新分配
- ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_1'
- ds_fp_cancel.SetTransObject(sqlca)
- ds_fp_cancel.Retrieve(arg_fpgrade)
- ELSEIF arg_reallocall And Not arg_ignorout THEN
- //全部打散重新分配
- ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_2'
- ds_fp_cancel.SetTransObject(sqlca)
- ds_fp_cancel.Retrieve(arg_fpgrade)
- ELSEIF Not arg_reallocall And arg_ignorout THEN
- //不齐货并且未开过发货单则打散重新分配
- ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_3'
- ds_fp_cancel.SetTransObject(sqlca)
- ds_fp_cancel.Retrieve(arg_fpgrade)
- ELSEIF Not arg_reallocall And Not arg_ignorout THEN
- //不齐货则打散重新分配
- ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_4'
- ds_fp_cancel.SetTransObject(sqlca)
- ds_fp_cancel.Retrieve(arg_fpgrade)
- END IF
- FOR i = 1 To ds_fp_cancel.RowCount()
- IF uo_mtrlware_fp.uof_assign_del(ds_fp_cancel.Object.assignid[i],&
- ds_fp_cancel.Object.qty[i],arg_msg,False) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- NEXT
- COMMIT;
- //2.排序.重新分配
- //时间段以内按
- //1 齐货
- //2 足钱
- //3 日期
- //4 优先级
- //5 少货数量
- Long j,k,l
- Long ll_scid,ll_taskid,ll_printid,ll_mtrlid,ll_mtrlwareid, ll_fpgrade
- String ls_status,ls_woodcode,ls_pcode
- Decimal ld_notfpqty_task,ld_notfpqty_mtrlware,ld_fpqty_real
- String arg_log
- Boolean if_enough = True
- Boolean if_hasfpqty = False
- ds_refp.Retrieve()
- ds_refp.AcceptText()
- FOR j = 1 To ds_refp.RowCount()
- arg_log = String(Now(), 'yyyy-MM-dd HH:mm:ss') + '--'
- ll_scid = ds_refp.Object.u_saletask_scid[j]
- ll_taskid = ds_refp.Object.u_saletask_taskid[j]
-
- ds_refpmx.Retrieve(ll_scid,ll_taskid)
- ds_refpmx.AcceptText()
-
- IF ds_refpmx.RowCount() = 0 THEN
- //不齐货
- arg_log += '分配失败,没有明细'
- f_task_writelog(ll_scid,ll_taskid,arg_log)
- CONTINUE
- END IF
- if_enough = True
- if_hasfpqty = False
-
- FOR k = 1 To ds_refpmx.RowCount()
- IF ds_refpmx.Object.notfpqty[k] > ds_refpmx.Object.warenotfpqty[k] THEN
- if_enough = False
- EXIT
- END IF
- NEXT
-
- // IF ds_refpmx.Object.notfpqty_sm[1] > ds_refpmx.Object.warenotfpqty_sm[1] THEN
- IF Not if_enough THEN
- //不齐货
- FOR k = 1 To ds_refpmx.RowCount()
- IF ds_refpmx.Object.fpqty[k] > 0 THEN
- if_hasfpqty = True
- EXIT
- END IF
- NEXT
- IF if_hasfpqty THEN
- arg_log += '分配失败,明细不能齐货printid=' + String(ds_refpmx.Object.printid[k])
- f_task_writelog(ll_scid,ll_taskid,arg_log)
- CONTINUE
- END IF
- END IF
- //齐货
- FOR k = 1 To ds_refpmx.RowCount()
- ll_scid = ds_refpmx.Object.scid[k]
- ll_taskid = ds_refpmx.Object.taskid[k]
- ll_printid = ds_refpmx.Object.printid[k]
- ll_mtrlid = ds_refpmx.Object.mtrlid[k]
- ls_status = ds_refpmx.Object.status[k]
- ls_woodcode = ds_refpmx.Object.woodcode[k]
- ls_pcode = ds_refpmx.Object.pcode[k]
-
- IF if_enough THEN
- ld_notfpqty_task = ds_refpmx.Object.notfpqty[k]
- ll_fpgrade = 2
- ELSE
- IF ds_refpmx.Object.notfpqty[k] > ds_refpmx.Object.fpqty[k] THEN
- ld_notfpqty_task = ds_refpmx.Object.fpqty[k]
- ELSE
- ld_notfpqty_task = ds_refpmx.Object.notfpqty[k]
- END IF
- ll_fpgrade = ds_refpmx.Object.fpgrade[k]
- END IF
-
- IF ld_notfpqty_task <= 0 THEN
- CONTINUE
- END IF
-
- ds_refpmx_mtrlware.Retrieve(ll_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
- ds_refpmx_mtrlware.AcceptText()
-
- FOR l = 1 To ds_refpmx_mtrlware.RowCount()
-
- IF ld_notfpqty_task <= 0 THEN EXIT
-
- ll_scid = ds_refpmx_mtrlware.Object.u_mtrlware_scid[l]
- ll_mtrlwareid = ds_refpmx_mtrlware.Object.u_mtrlware_mtrlwareid[l]
- ld_notfpqty_mtrlware = ds_refpmx_mtrlware.Object.notfpqty[l]
-
- IF ld_notfpqty_mtrlware <= 0 THEN CONTINUE
-
- IF ld_notfpqty_task > ld_notfpqty_mtrlware THEN
- ld_fpqty_real = ld_notfpqty_mtrlware
- ld_notfpqty_task = ld_notfpqty_task - ld_notfpqty_mtrlware
- ELSE
- ld_fpqty_real = ld_notfpqty_task
- ld_notfpqty_task = 0
- END IF
-
- IF uo_mtrlware_fp.uof_assign_add(ll_scid,ll_mtrlwareid,1,ll_taskid,ll_printid,&
- ld_fpqty_real,0,'','','',0,ll_fpgrade,publ_operator,arg_msg,False) = 0 THEN
- arg_log += '分配失败,明细行:'+String(k)+','+arg_msg
- // f_task_writelog(ll_scid,ll_taskid,arg_log)
- END IF
- // arg_log = '分配成功'
- // f_task_writelog(ll_scid,ll_taskid,arg_log)
-
- NEXT
- NEXT
- COMMIT;
- arg_log += '分配完毕'
- f_task_writelog(ll_scid,ll_taskid,arg_log)
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSE
- COMMIT;
- END IF
- Destroy uo_mtrlware_fp
- Destroy ds_fp_cancel
- Destroy ds_refp
- Destroy ds_refpmx
- Destroy ds_refpmx_mtrlware
- RETURN rslt
- end function
|