$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