WIP任务单批量发料功能开发

       最近仓库提出任务单能不能批量发料功能?从技术角度来说,理论上是可以实现在的。经过对业务部关键用户的需求调研和分析得出如下:

1. 由于不同装配件所有用到的原材料或半成品在不同仓库不同用户有权限发料
2. 部分原材料或半成品实物与系统的现有量不相符,其中原因:实物与系统操作的及时性问题所导致的。关键用户同意按照系统现有量扣帐。
3. 启用批次的物料采用先进先出原则扣帐
4. 采用模拟标准任务单发料直接往表mtl_material_transactions_temp和TL_TRANSACTION_LOTS_TEMP插入数据。


本次开发借鉴标准系统标准API:
1. WIP_POPULATE_TEMP.Insert_Temp 往表mtl_material_transactions_temp
2. inv_quantity_tree_pub.query_quantities 判断现有量 API

主要代码如下,其中核心代码CUX_WIPBATTXMAT_PKG.InsertTemp
————————————————
CREATE OR REPLACE Package CUX_WIPBATTXMAT_PKG As
  --任务单装配
  Type CUX_WIPDISCRETEJOBS Is Record(
    TRANSACTION_HEADER_ID  Number,
    WIP_ENTITY_ID          Number, --任务单ID
    WIP_ENTITY_NAME        Varchar2(240), --任务单编号
    JOB_TYPE_MEANING       Varchar2(80), --类型
    ASSEMBLY_NUM           Varchar2(40), --装配件
    ASSEMBLY_DESC          Varchar2(240), --装配件说明
    CLASS_CODE             Varchar2(10), --分类
    STATUS_TYPE_DISP       Varchar2(80), --状态
    START_QUANTITY         Number, --数量
    DATE_RELEASED          Date, --发放日期
    INVENTORY_ITEM_ID      Number, --装配件ID
    TRANSACTION_TYPE       Varchar2(80), --事务处理类型
    TRANSACTION_DATE       Date, --事务处理日期
    TRANSFER_SUBINVENTORY  Varchar2(8), --子库存
    TRANSFER_LOCATION_ID   Number, --货位ID
    TRANSFER_LOCATION_CODE Varchar2(30) --货位代码
    );
  --提交请求  GB任务单批量发料请求
  procedure SubmitRpt(ERRBUF            OUT VARCHAR2,
                      RETCODE           OUT NUMBER,
                      P_ORGANIZATION_ID NUMBER,
                      P_GROUP_ID        Number,
                      P_USER_ID         Number);
 
  --提交单个任务单组件发放
  Procedure WipCmpRelRequest(P_GROUP_ID              In Number,
                      P_WIP_ENTITY_ID         IN NUMBER,
                      P_TRANSACTION_DATE      IN Date,
                      P_ORGANIZATION_ID       IN NUMBER,
                      P_SUBINVENTORY          IN VARCHAR2,
                      P_LOCATOR_ID            IN NUMBER,
                      P_TRANSACTION_HEADER_ID In NUMBER,
                      P_USER_ID               IN NUMBER,
                      P_DEBUG_FLAG            Varchar2);
 
  procedure WipCmpRel(ERRBUF            OUT VARCHAR2,
                   RETCODE           OUT NUMBER,
                   P_GROUP_ID              In Number,
                   P_WIP_ENTITY_ID         IN NUMBER,
                   P_TRANSACTION_DATE      IN Varchar2,
                   P_ORGANIZATION_ID       IN NUMBER,
                   P_SUBINVENTORY          IN VARCHAR2,
                   P_LOCATOR_ID            IN NUMBER,
                   P_TRANSACTION_HEADER_ID In NUMBER,
                   P_USER_ID               IN NUMBER,
                   P_DEBUG_FLAG            Varchar2);
  
  Procedure InsertTemp(P_TRANSACTION_MODE      IN NUMBER,
                       P_WIP_ENTITY_ID         IN NUMBER,
                       P_LINE_ID               IN NUMBER,
                       P_TRANSACTION_DATE      IN DATE,
                       P_TRANSACTION_TYPE_ID   IN NUMBER,
                       P_TRANSACTION_ACTION_ID IN NUMBER,
                       P_SUBINVENTORY          IN VARCHAR2,
                       P_LOCATOR_ID            IN NUMBER,
                       P_ASSEMBLY_QUANTITY     IN NUMBER,
                       P_OPERATION_SEQ_NUM     IN NUMBER,
                       P_DEPARTMENT_ID         IN NUMBER,
                       P_CRITERIA_SUB          IN VARCHAR2,
                       P_ORGANIZATION_ID       IN NUMBER,
                       P_ACCT_PERIOD_ID        IN NUMBER,
                       P_LAST_UPDATED_BY       IN NUMBER,
                       P_ENTITY_TYPE           IN NUMBER,
                       P_TRANSACTION_HEADER_ID IN NUMBER,
                       P_DEBUG_FLAG            Varchar2,
                       X_COMMIT_COUNT          In Out Number);
End CUX_WIPBATTXMAT_PKG;
————————————————
 

CREATE OR REPLACE Package Body CUX_WIPBATTXMAT_PKG As
  Procedure Log(p_Msg In Varchar2) Is
  Begin
    Fnd_File.Put_Line(Fnd_File.Log, p_Msg);
  End Log;
 
  --===============================================================
  -- Output
  --===============================================================
  Procedure Output(p_Msg In Varchar2) Is
  Begin
    Fnd_File.Put_Line(Fnd_File.Output, p_Msg);
  End Output;
  --批量发料失效的明细
 procedure WipCmpRelFailure(P_ORGANIZATION_ID NUMBER, P_GROUP_ID Number) Is
   Cursor Cr Is
     Select WDJ.WIP_ENTITY_ID,
            WDJ.WIP_ENTITY_NAME,
            WDJ.STATUS_TYPE_DISP,
            MSI.SEGMENT1            COMP_NUM,
            MSI.DESCRIPTION         COMP_DESC,
            WRO.REQUIRED_QUANTITY,
            WRO.QUANTITY_ISSUED,
            WRO.SUPPLY_SUBINVENTORY
       From CUX.CUX_WIPBATISSUED_ALL   WIPB,
            WIP_DISCRETE_JOBS_V        WDJ,
            WIP_REQUIREMENT_OPERATIONS WRO,
            MTL_SYSTEM_ITEMS_B         MSI
      Where WIPB.WIP_ENTITY_ID = WDJ.WIP_ENTITY_ID
        And WDJ.WIP_ENTITY_ID = WRO.WIP_ENTITY_ID
        And WRO.Inventory_Item_Id = MSI.INVENTORY_ITEM_ID
        And WRO.organization_id = MSI.ORGANIZATION_ID
        And WIPB.Group_Id = P_GROUP_ID
        And WIPB.ORGANIZATION_ID = P_ORGANIZATION_ID
        And (WRO.WIP_SUPPLY_TYPE = 1 Or WRO.WIP_SUPPLY_TYPE = 2)
        And WDJ.STATUS_TYPE = 3
        And Nvl(WRO.QUANTITY_ISSUED, 0) - WRO.REQUIRED_QUANTITY < 0
      Order By WDJ.WIP_ENTITY_ID;
   i Number :=1;     
 Begin
   OUTPUT('<TR BGCOLOR="#E6E6FA"><TD COLSPAN="10">任务单未发料明细</TD></TR>');
   Output('<tr BGCOLOR="#FFE66F">
      <td align="center">序号</td>
      <td align="center">任务单</td>
      <td align="center">状态</td>
      <td align="center">任务单标识</td>
      <td align="center">组件</td>
      <td align="center">组件说明</td>
      <td align="center">子库存</td>
      <td align="center">数量</td>
      <td align="center">已发料</td>
      <td align="center">未发数</td></tr>');
   For Rs In Cr Loop
     Output('<tr>
      <td align="center">'|| i ||'</td>
      <td>'||Rs.Wip_Entity_Name||'</td>
      <td>'||Rs.Status_Type_Disp||'</td>
      <td>'||Rs.Wip_Entity_Id||'</td>
      <td>'||Rs.Comp_Num||'</td>
      <td>'||Rs.Comp_Desc||'</td>
      <td>'||Rs.Supply_Subinventory||'</td>
      <td>'||Rs.Required_Quantity||'</td>
      <td>'||Rs.Quantity_Issued||'</td>
      <td>'||(Rs.Required_Quantity - Nvl(Rs.Quantity_Issued,0))||'</td></tr>');
      i := i +1;
   End Loop;
 End WipCmpRelFailure;
  --提交请求  GB任务单批量发料请求
  procedure SubmitRpt(ERRBUF            OUT VARCHAR2,
                      RETCODE           OUT NUMBER,
                      P_ORGANIZATION_ID NUMBER,
                      P_GROUP_ID        Number,
                      P_USER_ID         Number) Is
    Cursor Cr Is
      Select *
        From CUX.CUX_WIPBATISSUED_ALL
       Where GROUP_ID = P_GROUP_ID
         And ORGANIZATION_ID = P_ORGANIZATION_ID
         And PROCESS_FLAG =2 ;
    l_TrxHdrId Number;
  Begin
    ---更新为处理中
    Update CUX.CUX_WIPBATISSUED_ALL
       Set PROCESS_FLAG = 2
     Where GROUP_ID = P_GROUP_ID
       And ORGANIZATION_ID = P_ORGANIZATION_ID
       And PROCESS_FLAG = 1;
    Commit;
    CUX_GOBAOPUBLIC_PKG.HTMLSTART('GB任务单批量发料请求');
    OUTPUT('<TABLE CLASS="CONTEXT" BORDERCOLOR="#669933" WIDTH="100%" BORDER=1>
           <TR BGCOLOR="#E6E6FA"><TD COLSPAN="10">提交日期:' ||  TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') ||  '</TD></TR>
           <TR BGCOLOR="#E6E6FA"><TD COLSPAN="10">组标识:' ||P_GROUP_ID || '</TD></TR>');
    Select mtl_material_transactions_s.NEXTVAL
      INTO l_TrxHdrId
      FROM SYS.dual;
    For Rs In Cr Loop
      WipCmpRelRequest(P_GROUP_ID,
             Rs.Wip_Entity_Id,
             Rs.Transaction_Date,
             Rs.Organization_Id,
             Rs.Subinventory_Code,
             Rs.Locator_Id,
             l_TrxHdrId,
             P_USER_ID,
             'Y');
    End Loop;
    WipCmpRelFailure(P_ORGANIZATION_ID, P_GROUP_ID);
    OUTPUT('</TABLE></BODY></HTML>');
  End SubmitRpt;
  
  --提交单个任务单组件发放
  Procedure WipCmpRelRequest(P_GROUP_ID              In Number,
                      P_WIP_ENTITY_ID         IN NUMBER,
                      P_TRANSACTION_DATE      IN DATE,
                      P_ORGANIZATION_ID       IN NUMBER,
                      P_SUBINVENTORY          IN VARCHAR2,
                      P_LOCATOR_ID            IN NUMBER,
                      P_TRANSACTION_HEADER_ID In NUMBER,
                      P_USER_ID               IN NUMBER,
                      P_DEBUG_FLAG            Varchar2) Is
    v_ReqID          Number;
    l_phase          Varchar(200);
    l_status         Varchar(200);
    l_dev_phase      Varchar(200);
    l_dev_status     Varchar(200);
    l_message        Varchar(2000);
    l_request_status boolean;  
    l_TranDate       Varchar2(30);                    
  Begin
    l_TranDate := To_Char(P_TRANSACTION_DATE,'YYYY/MM/DD HH24:MI:SS');
    v_ReqID := fnd_request.submit_request('CUX',
                                          'CUX_WIPBATTXMATSINGLE',
                                          null,
                                          null,
                                          false,
                                          P_GROUP_ID,
                                          P_WIP_ENTITY_ID,
                                          l_TranDate,
                                          P_ORGANIZATION_ID,
                                          P_SUBINVENTORY,
                                          P_LOCATOR_ID,
                                          P_TRANSACTION_HEADER_ID,
                                          P_USER_ID,
                                          P_DEBUG_FLAG);
    If (Nvl(v_ReqID, 0) > 0) Then
      COMMIT;
      Log('请求ID:'||v_ReqID);
      l_request_status := Fnd_Concurrent.Wait_For_Request(v_ReqID,
                                                          5,
                                                          0,
                                                          l_phase,
                                                          l_status,
                                                          l_dev_phase,
                                                          l_dev_status,
                                                          l_message);
      IF l_request_status THEN
        IF l_dev_status = 'NORMAL' THEN
          Log('[GB任务单组件发放:'|| P_WIP_ENTITY_ID ||']运行成功');
        ELSE
          Log('[GB任务单组件发放:'|| P_WIP_ENTITY_ID ||']运行失败:' || l_dev_status);
          Return;
        END IF;
      ELSE
        Log('请求[GB任务单组件发放:'|| P_WIP_ENTITY_ID ||'未完成,无法查看报表内容!');
        Return;
      END IF;
    End If;
  End WipCmpRelRequest;
  ---任务单装配件输出
  procedure WipDiscreteJobsHtml(P_WipDiscreteJobs CUX_WIPDISCRETEJOBS) Is
  Begin
    CUX_GOBAOPUBLIC_PKG.HTMLSTART('GB任务单组件发放');
    OUTPUT('<TABLE CLASS="CONTEXT" BORDERCOLOR="#669933" WIDTH="100%" BORDER=1>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值