我们的项目是利用了一个stag2表,存放一些必要的物料信息,然后再APEX平台直接显示一批数据的信息,然后一起发运。
表的信息为:
object_version_number NUMBER NOT NULL,
batch_id NUMBER NOT NULL,
ridx NUMBER NOT NULL,
--
cust_po_number VARCHAR2(240) NOT NULL,
oe_header_id NUMBER NOT NULL,
oe_line_id NUMBER NOT NULL,
oe_line_number NUMBER NOT NULL,
item_id NUMBER NOT NULL,
organization_id NUMBER NOT NULL,
requested_quantity NUMBER NOT NULL,
shipped_quantity NUMBER NOT NULL,
subinventory_code VARCHAR2(10),
ship_options VARCHAR2(20),
location_id NUMBER,
lot_number VARCHAR2(80),
serial_number VARCHAR2(30),
ship_method_code VARCHAR2(30),
actual_departure_date DATE DEFAULT SYSDATE NOT NULL ,
--
created_by NUMBER NOT NULL,
creation_date DATE NOT NULL,
last_updated_by NUMBER NOT NULL,
last_update_date DATE NOT NULL,
last_update_login NUMBER,
request_id NUMBER,
--
process_code VARCHAR2(30) DEFAULT 'PENDING' NOT NULL,
error_message VARCHAR2(2000)
而要发运的数据,有几种情况,一种是用货位号,批号控制的数据,另一种是由序列号控制的。
这个时候就要分成两种情况考虑。
第一种情况:
首先要根据stag2表的信息,在物料单中找出满足条件的物料单,循环:
对当前物料单的requested_qty 和 stag2表的shipped_quantity进行比较,如果小于,则将这个物料编号信息放到一个内存表中,
大于的话,在判断shipped_qty是否等于shipped_quantity,不等就要更新一下物料单的发运数量。存入内存表。
如果正好等于的话,直接存入内存表
循环结束;
然后就是进行发货号的生成和分配,然后发运即可。
第二种情况:
根据header_id和line_id等信息找出满足条件的物料单,循环:
然后查出当前的物料单的序列号表,循环:
如果要发运的序列号在表中,将该条物料单放入到内存表。
跳出所有循环
循环结束;
如果这个物料单是要发运的物料单,则对其进行,首先将序列号清空,这里是为了之后的分行,不带有序列号,我是将物料单的发运数量=0,ordered数量=requested数量。
接下来分出一行来,然后对一行数据进行分配序列号,这一行就是stag2表的要发运的序列号,然后在将剩下的序列号和物料单的信息存储下来。
循环结束;
在外面做的是发运操作,但是再发运之前要为分行后的物料单分配多个序列号(如果是需要多个的话),然后再发运。
以上是我的代码逻辑,看不懂的地方请见谅,由于还有任务,不能写的太详细了。。