Create Move Order

提前後表后,產生新的Move Order並打單去倉庫領料中的procedure(BY Part報表(p_org_id in number,p_component in varchar2,
                  p_JOB_LO in varchar2,JOB_HI in varchar2,
                  p_seq_number varchar2,p_user_id in number,
                  p_txn_action_id in number,p_txn_type_id in number,
                  p_reason1 in number,p_reason in varchar2,p_transaction_type in varchar2) is
 p_api_version_number  NUMBER;
 p_trohdr_rec   INV_MOVE_ORDER_PUB.TROHDR_REC_TYPE;
 p_trohdr_val_rec  INV_MOVE_ORDER_PUB.TROHDR_VAL_REC_TYPE;
 x_trohdr_rec   INV_MOVE_ORDER_PUB.TROHDR_REC_TYPE;
 x_trohdr_val_rec  INV_MOVE_ORDER_PUB.TROHDR_VAL_REC_TYPE;
 p_trolin_tbl   INV_MOVE_ORDER_PUB.Trolin_Tbl_Type;
 p_trolin_val_tbl  INV_MOVE_ORDER_PUB.Trolin_Val_Tbl_Type;

 x_trolin_tbl   INV_MOVE_ORDER_PUB.Trolin_Tbl_Type;
 x_trolin_val_tbl  INV_MOVE_ORDER_PUB.Trolin_Val_Tbl_Type;
 x_return_status                 VARCHAR2(2000);
 x_msg_count                     NUMBER;
 x_msg_data                      VARCHAR2(2000);
        p_msg                           VARCHAR2(2000):='TEST';
        p_num                           NUMBER:=1;
cursor move_order is
select tmp.organization_id,tmp.job,
       tmp.wip_entity_id,
       tmp.assembly,tmp.assembly_id,
    tmp.component,tmp.inventory_item_id,
       tmp.date_required,

    tmp.req_qty,tmp.issue_qty,
    tmp.req_qty-nvl(tmp.issue_qty,0) open_qty,
    tmp.source_inv,tmp.supply_inv,
    tmp.primary_uom_code
from
(select job.wip_entity_id,job.job,job.assembly,
       job.component,job.assembly_id,
       job.date_required,job.req_qty,
    job.primary_uom_code,
    job.inventory_item_id,
    job.organization_id,
    job.source_inv,
    job.supply_inv,

    abs(sum(txn.primary_quantity)) issue_qty
from
(select mmt.organization_id,mmt.inventory_item_id,
       mmt.subinventory_code,mmt.transfer_subinventory,
    mmt.primary_quantity/nvl(muc.conversion_rate,1) primary_quantity,mmt.transaction_reference
from   mtl_material_transactions mmt,mtl_uom_conversions muc
where   mmt.organization_id          =  p_org_id
AND     mmt.transaction_action_id    =  p_txn_action_id   --2
AND     mmt.inventory_item_id=muc.inventory_item_id(+)
AND     muc.disable_date is null
AND     mmt.transaction_type_id in (SELECT * FROM THE (select CAST( bg_fn_vostrtbl (p_transaction_type) AS voTableType ) FROM dual))  --204
AND     mmt.reason_id in (SELECT * FROM THE (select CAST( bg_fn_vostrtbl (p_reason) AS voTableType ) FROM dual))) txn,
--AND     mmt.reason_id               in  (p_reason1,p_reason2)) txn,--5 is 11 INV - Production Issue  528 is 66 INV - Reverse Adjust

/*ignore the txn reason id update by hermit on 20070531*/
(SELECT
    we.organization_id,
 we.wip_entity_id,
 we.wip_entity_name  Job,
 msi1.segment1  Assembly,
 wro.supply_subinventory         Supply_inv,
 NVL(wdj.primary_item_id, -1) Assembly_Id,
 wro.date_required  Date_Required,
 msi2.segment1  Component,
 wro.attribute5                  source_inv,
        msi2.inventory_item_id,
        wro.required_quantity/nvl(muc.conversion_rate,1)     Req_qty,

 decode(muc.unit_of_measure,null,msi2.primary_uom_code,muc.uom_code) primary_uom_code
FROM
 mtl_system_items  msi1,
 wip_entities  we,
 mtl_system_items  msi2,
 wip_requirement_operations wro,
 wip_discrete_jobs  wdj,
        mtl_uom_conversions muc
WHERE
 wdj.organization_id  =  P_Org_Id
AND wdj.status_type  NOT IN (7,12)
AND msi1.organization_id  =  P_Org_Id
AND msi1.inventory_item_id(+) =  wdj.primary_item_id

AND we.organization_id  =  P_Org_Id
AND we.wip_entity_id  =  wdj.wip_entity_id
AND we.entity_type  =  1
AND wro.organization_id  =  P_Org_Id
AND wro.wip_entity_id  =  wdj.wip_entity_id
AND wro.wip_supply_type <> 6
AND wro.required_quantity >  0
AND msi2.organization_id  =  P_Org_Id
AND msi2.inventory_item_id =  wro.inventory_item_id
AND     msi2.inventory_item_id=muc.inventory_item_id(+)
AND     muc.disable_date is null
) job
where   txn.organization_id(+)          =  p_org_id

AND     txn.inventory_item_id(+)        =  job.inventory_item_id
AND     txn.transfer_subinventory(+)    =  job.supply_inv
AND     txn.transaction_reference(+)    =  job.job
group by
job.wip_entity_id,job.job,job.assembly,
       job.component,job.assembly_id,
       job.date_required,job.req_qty,
    job.inventory_item_id,
    job.organization_id,
    job.source_inv,
    job.supply_inv,
    job.primary_uom_code
) tmp

where
    tmp.organization_id=p_org_id
and tmp.Component=p_Component;
--and tmp.req_qty-nvl(tmp.issue_qty,0)>0 ;
--consider the overisuue material transaction
BEGIN
-- p_trohdr_rec
---------------------
--- record contains information to be used to create the
-- move order header
-- p_trohdr_val_rec
---------------------
--  contains information values as supposed to internal

-- IDs used to create the move order header
 fnd_global.APPS_INITIALIZE(user_id => p_user_id,resp_id => 20634,resp_appl_id =>401);--2348
 p_trohdr_rec.request_number  := p_seq_number;
 --p_trohdr_rec.from_subinventory_code := p_source_inv;
 p_trohdr_rec.organization_id  :=  p_org_id;
 p_trohdr_rec.header_status:= 1; -- status- incomplete
 --p_trohdr_rec.to_subinventory_code := p_dest_inv;
 p_trohdr_rec.move_order_type  :=  1;
 p_trohdr_rec.transaction_type_id :=  p_txn_type_id;  --wip backflush Transfer
 p_trohdr_rec.Operation   :=  inv_globals.g_opr_create;
 --p_trohdr_val_rec.from_subinventory := p_source_inv;
 p_trohdr_val_rec.organization  := p_org_id;
 --p_trohdr_val_rec.to_subinventory := p_dest_inv;

 p_trohdr_val_rec.move_order_type := 1;
 p_api_version_number   := 1.0;
 inv_move_order_pub.create_move_order_header
 (
  p_api_version_number => p_api_version_number,
  p_init_msg_list  => FND_API.G_TRUE,
  p_return_values  => FND_API.G_FALSE,
  p_commit  => FND_API.G_FALSE,
  x_return_status  => x_return_status,
  x_msg_count  => x_msg_count,
  x_msg_data  => x_msg_data,
  p_trohdr_rec  => p_trohdr_rec,
  p_trohdr_val_rec => p_trohdr_val_rec,

  x_trohdr_rec  => x_trohdr_rec,
  x_trohdr_val_rec => x_trohdr_val_rec
 );
 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
  COMMIT;
         dbms_output.put_line('Return Status = '|| SUBSTR (x_return_status,1,255));
         -- dbms_output.put_line('Request Number= '|| x_trohdr_rec.request_number);
 ELSE
  dbms_output.put_line('Return Status = '|| SUBSTR (x_return_status,1,255));
  dbms_output.put_line('Msg Count     = '|| TO_CHAR(x_msg_count));
  dbms_output.put_line('Msg Data      = '|| SUBSTR (x_msg_data,1,255));
  IF x_msg_count >1 THEN
   FOR I IN 1..x_msg_count LOOP

    dbms_output.put_line(I||'. '|| SUBSTR (FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE ), 1, 255));
   END LOOP;
  END IF;
 END IF;
 -- Line create --
        --delete from wippminr_move_order;
        FOR MOVE_REC IN MOVE_ORDER loop
        p_trolin_tbl(p_num).operation  := inv_globals.g_opr_create;
 p_trolin_tbl(p_num).line_number  := p_num;
 p_trolin_tbl(p_num).from_subinventory_code := move_rec.source_inv;
 p_trolin_tbl(p_num).header_id  := x_trohdr_rec.header_id;
 p_trolin_tbl(p_num).inventory_item_id := move_rec.inventory_item_id;-- Z-1001
 p_trolin_tbl(p_num).organization_id := p_org_id;

 p_trolin_tbl(p_num).quantity  := ABS(move_rec.open_qty);
 p_trolin_tbl(p_num).to_subinventory_code:= move_rec.supply_inv;
 p_trolin_tbl(p_num).transaction_type_id := p_txn_type_id;--204;  --wip backflush Transfer
 p_trolin_tbl(p_num).date_required := SYSDATE;
 p_trolin_tbl(p_num).uom_code  := move_rec.primary_uom_code;
        p_trolin_tbl(p_num).reason_id           := p_reason1;  --5
 p_trolin_tbl(p_num).reference   := move_rec.job;
        p_trolin_tbl(p_num).line_status  := 1;
        p_num:=p_num+1;
--/*
    insert into bg_wippminr_move_order
    values(p_org_id,move_rec.wip_entity_id,
           move_rec.Assembly_Id,move_rec.job,move_rec.inventory_item_id,p_component,

           move_rec.primary_uom_code,move_rec.source_inv,move_rec.Supply_inv,
           move_rec.Date_Required,move_rec.req_qty,move_rec.issue_qty,
           p_seq_number); --*/
end loop;
 p_api_version_number   := 1.0;
 inv_move_order_pub.create_move_order_lines
 (
  p_api_version_number => p_api_version_number,
  p_init_msg_list  => FND_API.G_TRUE,
  p_return_values  => FND_API.G_FALSE,
  p_commit  => FND_API.G_FALSE,
  x_return_status  => x_return_status,
  x_msg_count  => x_msg_count,

  x_msg_data  => x_msg_data,
  p_trolin_tbl  => p_trolin_tbl,
  p_trolin_val_tbl => p_trolin_val_tbl,
  x_trolin_tbl  => x_trolin_tbl,
  x_trolin_val_tbl => x_trolin_val_tbl
 );
 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
         COMMIT;
         dbms_output.put_line('Return Status = '|| SUBSTR (x_return_status,1,255));
         dbms_output.put_line('Header Id     = '|| x_trolin_tbl(1).header_id);
 ELSE
  dbms_output.put_line('Return Status = '|| SUBSTR (x_return_status,1,255));
  dbms_output.put_line('Msg Count     = '|| TO_CHAR(x_msg_count));

  dbms_output.put_line('Msg Data      = '|| SUBSTR (x_msg_data,1,255));
  IF x_msg_count >1 THEN
   FOR I IN 1..x_msg_count LOOP
    dbms_output.put_line(I||'. '|| SUBSTR (FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE ), 1, 255));
   END LOOP;
  END IF;
 END IF;
END;
/
)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7960369/viewspace-219176/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7960369/viewspace-219176/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值