`
Jack Wu
  • 浏览: 894880 次
  • 来自: ...
社区版块
存档分类
最新评论

Inbound IDOC Status Report for Sales Orders

阅读更多

Requirement:

Sales Orders are being created through inbound IDocs using FM 'EDI_DATA_INCOMING'. Now a Report is required to check the status of these Inbound IDocs along with Sales Orders generated against customer Purchase Orders.

Processing:

The report selects, 'ORDERS' IDoc numbers & status, generated between given time range, from table EDIDC. Further, it calls Function Module 'IDOC_READ_COMPLETELY' to get the IDoc details. Then required information is extracted by reading relevant field data of IDoc segments.

代码:
REPORT  Z_EDI_FILE_LOAD_STATUS_REPORT           .
*-----------------------------------------------------------------------
* Staus Report for Inbound IDOCs ( Sales Orders )
*-----------------------------------------------------------------------
* Program        : Z_EDI_FILE_LOAD_STATUS_REPORT
* Presented By   : www.rmtiwari.com
*-----------------------------------------------------------------------
TABLES : EDIDC.
*-----------------------------------------------------------------------
* ALV stuff
TYPE-POOLS: SLIS.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      GS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
      GT_SORT     TYPE SLIS_T_SORTINFO_ALV,
      GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.

DATA : BEGIN OF T_REPORT OCCURS 0,
         IDOC_NO       TYPE EDI_DOCNUM,
         IDOC_DATE     TYPE SY-DATUM,
         IDOC_TIME     TYPE SY-UZEIT,
         SORDER_NO     TYPE VBELN,
         STP_NO        TYPE KNA1-KUNNR,
         STP_NAME(35)  TYPE C,
         STP_PHONE(12) TYPE C,
         PO_NO(15)     TYPE C,
         STATUS        TYPE C,
         S_TEXT(70)    TYPE C,
         ERROR(70)     TYPE C,
       END OF T_REPORT.

*------------------PARAMETER------------------------------------------*

selection-screen begin of block date with frame title TEXT-S01.
select-options: UDATE for  EDIDC-UPDDAT
                      default SY-datum obligatory,    "Changed On
                UTIME for  EDIDC-UPDTIM .             "Changed Time

selection-screen end   of block date.

*----------------------------------------------------------------------*
INITIALIZATION.

START-OF-SELECTION.
PERFORM SHOW_STATUS_REPORT.

*&---------------------------------------------------------------------*
*&      Form  alv_grid
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->   p1        text
*  < --  p2        text
*----------------------------------------------------------------------*
FORM ALV_GRID.

  IF GT_FIELDCAT[] IS INITIAL.
    PERFORM FIELDCAT_INIT.
    PERFORM LAYOUT_INIT.
    PERFORM SORT_INIT.
  ENDIF.

  PERFORM GRID_DISPLAY.

ENDFORM.                    "alv_grid
*&---------------------------------------------------------------------*
*&      Form  layout_init
*&---------------------------------------------------------------------*
 
FORM LAYOUT_INIT.
  GS_LAYOUT-ZEBRA             = 'X'.
  GS_LAYOUT-CELL_MERGE        = 'X'.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GS_LAYOUT-NO_VLINE          = ' '.
  GS_LAYOUT-TOTALS_BEFORE_ITEMS = ' '.

ENDFORM.                    " layout_init
*&---------------------------------------------------------------------*
*&      Form  fieldcat_init
*&---------------------------------------------------------------------*
 
FORM FIELDCAT_INIT.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

   CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'IDOC_NO'.
  LS_FIELDCAT-KEY          = 'X'.
  LS_FIELDCAT-REPTEXT_DDIC = 'IDOC'.
  LS_FIELDCAT-OUTPUTLEN    = 10.
* Fix for ALV print bug, which puts 'N/A' over last digit
* Set inttype to 'N' to stop corruption of printed ALV cell.
  LS_FIELDCAT-INTTYPE = 'N'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'IDOC_DATE'.
  LS_FIELDCAT-REPTEXT_DDIC = 'Creation Date'.
  LS_FIELDCAT-OUTPUTLEN    = 10.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'IDOC_TIME'.
  LS_FIELDCAT-REPTEXT_DDIC = 'Creation Time'.
  LS_FIELDCAT-OUTPUTLEN    = 8.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'STATUS'.
  LS_FIELDCAT-REPTEXT_DDIC = 'St'.
  LS_FIELDCAT-OUTPUTLEN    = 2.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'ERROR'.
  LS_FIELDCAT-REPTEXT_DDIC = 'Message'.
  LS_FIELDCAT-OUTPUTLEN    = 70.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.


  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'STP_NO'.
  LS_FIELDCAT-REPTEXT_DDIC = 'S.T.Party No'.
  LS_FIELDCAT-OUTPUTLEN    = 10.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'STP_NAME'.
  LS_FIELDCAT-REPTEXT_DDIC = 'Sold to Party Name'.
  LS_FIELDCAT-OUTPUTLEN    = 35.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.


  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'PO_NO'.
  LS_FIELDCAT-REPTEXT_DDIC = 'Purch Order'.
  LS_FIELDCAT-OUTPUTLEN    = 15.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME    = 'STP_PHONE'.
  LS_FIELDCAT-REPTEXT_DDIC = 'S.T.Party Phone'.
  LS_FIELDCAT-OUTPUTLEN    = 15.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

ENDFORM.                    "fieldcat_init

*&---------------------------------------------------------------------*
*&      Form  sort_init
*&---------------------------------------------------------------------*
 
FORM SORT_INIT.
  DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.
*
  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'IDOC_DATE'.
  LS_SORT-SPOS      = 1.
  LS_SORT-UP        = 'X'.
  APPEND LS_SORT TO GT_SORT.

  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'IDOC_TIME'.
  LS_SORT-SPOS      = 2.
  LS_SORT-UP        = 'X'.
  APPEND LS_SORT TO GT_SORT.

  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'STATUS'.
  LS_SORT-SPOS      = 3.
  LS_SORT-UP        = 'X'.
  APPEND LS_SORT TO GT_SORT.

  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'IDOC_NO'.
  LS_SORT-SPOS      = 4.
  LS_SORT-UP        = 'X'.
  APPEND LS_SORT TO GT_SORT.

ENDFORM.                    "sort_init
*&---------------------------------------------------------------------*
*&      Form  grid_display
*&---------------------------------------------------------------------*
 
FORM GRID_DISPLAY.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT     = GS_LAYOUT
      IT_FIELDCAT   = GT_FIELDCAT
      IT_SORT       = GT_SORT
      i_callback_program      = SY-REPID
      I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
      I_DEFAULT     = ' '
      I_SAVE        = 'X'
    TABLES
      T_OUTTAB      = T_REPORT
    EXCEPTIONS
      PROGRAM_ERROR = 1
      OTHERS        = 2.

ENDFORM.                    "grid_display
*&---------------------------------------------------------------------*
*&      Form  COMMENT_BUILD
*&---------------------------------------------------------------------*
*       Processing of listheader
*----------------------------------------------------------------------*
FORM COMMENT_BUILD USING P_FK_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.

  DATA: LS_LINE TYPE SLIS_LISTHEADER.
  REFRESH P_FK_LIST_TOP_OF_PAGE.
* List Heading : Typ H
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'H'.
  LS_LINE-INFO  = 'Sales Order Interface: Z_EDI_FILE_LOAD'.
  APPEND LS_LINE TO P_FK_LIST_TOP_OF_PAGE.

* List : Typ S
  clear LS_LINE.
  LS_LINE-typ  = 'S'.
  LS_LINE-key  = 'Date Range:'.
  LS_LINE-info  = UDATE-low.
  if not UDATE-high is initial.
    write ' To ' to  LS_LINE-info+30.
    LS_LINE-info+36 = UDATE-high.
  endif.


  APPEND LS_LINE TO P_FK_LIST_TOP_OF_PAGE.

ENDFORM.                               " COMMENT_BUILD

*---------------------------------------------------------------------*
*       FORM TOP_OF_PAGE                                              *
*---------------------------------------------------------------------*
*       Ereigniss TOP_OF_PAGE                                       *
*       event     TOP_OF_PAGE
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.

  PERFORM COMMENT_BUILD  USING gt_LIST_TOP_OF_PAGE[].
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.

ENDFORM.                    "TOP_OF_PAGE

 

*&---------------------------------------------------------------------*
*&      Form  show_status_report
*&---------------------------------------------------------------------*
 
FORM SHOW_STATUS_REPORT .
* Report to show status.

  DATA: BEGIN OF T_TEDS2 OCCURS 0.
          INCLUDE STRUCTURE TEDS2.
  DATA: END OF T_TEDS2.

  DATA: BEGIN OF T_IDOC_CONTROL_TMP OCCURS 0.
          INCLUDE STRUCTURE EDIDC.
  DATA: END OF T_IDOC_CONTROL_TMP.

  CONSTANTS: C_STATUS_IN_IDOC_POSTED       LIKE EDIDC-STATUS VALUE '53'.

  DATA : T_EDIDS TYPE STANDARD TABLE OF EDIDS WITH HEADER LINE.
  DATA : T_EDIDD TYPE STANDARD TABLE OF EDIDD WITH HEADER LINE.

  DATA : GV_PARTNER_SEG TYPE E1EDKA1,
         GV_PO_REF_SEG  TYPE E2EDK02.


* Get text for status values
  SELECT * FROM TEDS2 INTO TABLE T_TEDS2 WHERE LANGUA = SY-LANGU.

* Read the IDoc's status after processing
  SELECT * FROM EDIDC
    INTO TABLE T_IDOC_CONTROL_TMP
   WHERE UPDDAT IN UDATE
     AND UPDTIM IN UTIME
     AND MESTYP = 'ORDERS'.

  LOOP AT T_IDOC_CONTROL_TMP.

*   IDoc has been processed, since control record changed.
    READ TABLE T_TEDS2 WITH KEY STATUS = T_IDOC_CONTROL_TMP-STATUS.
    T_REPORT-IDOC_NO = T_IDOC_CONTROL_TMP-DOCNUM.
    T_REPORT-IDOC_DATE = T_IDOC_CONTROL_TMP-CREDAT.
    T_REPORT-IDOC_TIME = T_IDOC_CONTROL_TMP-CRETIM.
    T_REPORT-S_TEXT = T_TEDS2-DESCRP.
    IF T_IDOC_CONTROL_TMP-STATUS = C_STATUS_IN_IDOC_POSTED.
*     ok status
      T_REPORT-STATUS = 'S'.
    ELSE.
*     error status
      T_REPORT-STATUS = 'E'.
    ENDIF.

*     Get IDoc details.

    CALL FUNCTION 'IDOC_READ_COMPLETELY'
      EXPORTING
        DOCUMENT_NUMBER         = T_REPORT-IDOC_NO
      TABLES
        INT_EDIDS               = T_EDIDS
        INT_EDIDD               = T_EDIDD
      EXCEPTIONS
        DOCUMENT_NOT_EXIST      = 1
        DOCUMENT_NUMBER_INVALID = 2
        OTHERS                  = 3.

*   Get Error status
    READ TABLE T_EDIDS WITH KEY STATUS = T_IDOC_CONTROL_TMP-STATUS.
    IF SY-SUBRC EQ 0.
      REPLACE FIRST OCCURRENCE OF '&1' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA1.
      REPLACE FIRST OCCURRENCE OF '&2' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA2.
      REPLACE FIRST OCCURRENCE OF '&3' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA3.
      REPLACE FIRST OCCURRENCE OF '&4' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA4.

      REPLACE FIRST OCCURRENCE OF '&' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA1.
      REPLACE FIRST OCCURRENCE OF '&' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA2.
      REPLACE FIRST OCCURRENCE OF '&' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA3.
      REPLACE FIRST OCCURRENCE OF '&' IN T_EDIDS-STATXT
                            WITH T_EDIDS-STAPA4.


      T_REPORT-ERROR = T_EDIDS-STATXT.
    ENDIF.
    LOOP AT T_EDIDD.

      CASE T_EDIDD-SEGNAM.

        WHEN 'E1EDKA1'.
          GV_PARTNER_SEG = T_EDIDD-SDATA.

          CLEAR : T_REPORT-STP_NAME.

          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = GV_PARTNER_SEG-PARTN
            IMPORTING
              OUTPUT = T_REPORT-STP_NO.

          SELECT SINGLE NAME1 TELF1
            INTO (T_REPORT-STP_NAME,T_REPORT-STP_PHONE)
            FROM KNA1
           WHERE KUNNR = T_REPORT-STP_NO.

        WHEN 'E1EDK02'.
          GV_PO_REF_SEG = T_EDIDD-SDATA.
          T_REPORT-PO_NO = GV_PO_REF_SEG-BELNR.
      ENDCASE.

    ENDLOOP.

    APPEND T_REPORT.
  ENDLOOP .

  SORT T_REPORT BY STATUS IDOC_NO.

* Show Report
  PERFORM ALV_GRID.

ENDFORM.                    " show_status_report

 

分享到:
评论

相关推荐

    IDoc Basics For Functional Consultants.docx

    根据传输方向的不同,IDoc可分为两种类型:**出站IDoc** (Outbound IDoc) 和 **入站IDoc** (Inbound IDoc)。 - **出站IDoc**:当数据从SAP系统发送到非SAP系统时,会触发创建出站IDoc。此过程通常通过EDI子系统完成...

    IDoc Basics for Functional Consultants

    根据IDoc传输的方向,它们被分为入站(Inbound)IDoc和出站(Outbound)IDoc。当数据从SAP传输到非SAP系统时,通过EDI子系统实现,而SAP系统之间的传输则使用ALE(Application Link Enabling)技术。 在出站流程中...

    ALE, EDI, & IDoc Technologies for SAP, 2nd Edition part 2

    第17章《Inbound via Workflow - Sales Order》则阐述了通过工作流处理销售订单的IDoc流程。 此外,压缩包中的其他章节也涵盖了关键知识点。第23章《Distributing Master Data》讲述了主数据的分发策略;第30章...

    sap abap 创建IDOC

    在SAP ABAP环境中,创建IDOC(Intermediate Document)是一项重要的任务,主要用于系统间的数据交换。IDOC作为SAP与其他系统通信的一种标准格式,能够帮助实现业务流程自动化。以下是一步步创建IDOC的详细步骤: 1)...

    SAP IDOC - 消息输出 - 采购订单<->销售订单

    - **LS Inbound**: 目标系统接收IDOC并生成销售订单,`BORDE`是创建销售订单的IDOC类型,确保正确处理装运点确认以避免数量确认错误。 - **KU Outbound**: 销售订单被创建后,系统将输出消息回写到采购订单进行...

    SAP IDOC配置

    - **Binding SAP-Inbound Function and Message Type and IDOC Type** 使用事务代码BD51,将处理函数绑定到入站IDOC过程,确保消息类型和IDOC类型能调用正确的处理函数。 - **Define Inbound Process Code** ...

    sap idoc应用及示例

    ### SAP IDoc 应用及示例详解 #### 基本概念 ##### ALE (Application Link Enabling) - **定义**: ALE 是 SAP 专为 SAP 与 SAP 之间的集成设计的一种中间件技术。 - **历史**: 自 SAP 3.0 版本起成为 SAP 应用体系...

    SAP 公司间库存调拨通过IDOC完成自动发票校验

    - outbound IDOC发送后,会在接收方系统中触发一个inbound IDOC(例如IDOC 33030)的创建。 - 接收方系统的inbound IDOC经过处理后,会自动生成对应的采购订单的发票校验。 - 这样就实现了自动化的发票校验过程,...

    用户洞察:inbound-marketing-for-schools-ebook.pdf

    Inbound营销是一种现代营销策略,它侧重于吸引、转化、培育和建立与潜在客户的关系,而不是主动去寻找他们。对于学校来说,尤其是那些希望吸引潜在学生和家长的教育机构,Inbound营销能提供一种更为有效的方法来提升...

    IDOC详细开发

    IDOC的交换流程包括外发(Outbound process)和接收(Inbound process)两个主要步骤。在发送方,应用程序首先创建应用文档,然后生成IDOC,IDOC随后传送到操作系统,并被转换成EDI标准格式发送给业务伙伴。在接收方...

    SAP IDOC详解

    EDI的交换分为两个流程:外发流程(Outbound process,简称OP)和接收流程(Inbound process,简称IP)。SAP遵循着EDI的这两个流程,并在系统中做了相应的实现。在实际应用中,数据首先在SAP系统中创建成应用文档,...

    SAP公司间采购EDI配置-如何触发自动MIRO.docx

    - 接收方系统接收到外向IDOC 33029后,会根据其内容生成Inbound IDOC 33030。 - Inbound IDOC 33030被处理后,会触发自动创建采购订单的发票校验(MIRO)。 5. **发票校验**: - 通过Inbound IDOC 33030的处理,...

    Sendgrid-Inbound-Parse-for-Discord

    【Sendgrid-Inbound-Parse-for-Discord】项目是一个整合Sendgrid的入站解析功能与Discord Webhook的解决方案,旨在实现将通过Sendgrid接收的邮件自动转发至Discord频道,以便于团队成员实时获取邮件通知。...

    idoc 配置总结初学者必备

    本文将深入探讨IDOC的配置过程,包括入站(Inbound)和出站(Outbound)配置,这对于SAP初学者来说是非常重要的基础知识。 1. SAP 入站配置(SAP-Inbound Configuration) 1.1 配置流程与预定义过程 在进行入站...

    用户洞察:Inbound for Schools Portrait.pdf

    【用户洞察:Inbound for Schools Portrait.pdf】 Inbound营销是一种以吸引、转化和培养潜在客户为中心的策略,尤其适用于教育领域。"Inbound for Schools"着重于如何利用这种营销方式来提升学校的品牌知名度,吸引...

    BC620 SAP IDoc Interface

    - 编写ABAP程序处理IDoc的生成和接收,包括 inbound 和 outbound 过程。 - 使用ST05事务码监控和调试IDoc通信。 5. **IDoc在业务流程中的应用**: - 供应链管理:如供应商门户集成、订单处理和库存同步。 - ...

    IDOC-培训教程(1).ppt

    - 状态记录(Status Record):记录IDoc从发送方到接收方的完整历史状态,帮助跟踪和诊断问题。 在SAP系统中,IDoc的定义和管理涉及以下几个关键概念: - IDoc类型(IDoc Type):定义了IDoc的具体结构和内容,...

    IDOC-培训教程.ppt

    入站处理(Inbound Processing)则涉及接收来自外部系统的IDoc,主要包括从入站端口接收数据、ALE层创建入站IDoc并进一步处理。这一过程通常涉及到对接收到的数据进行验证、转换,然后将数据集成到SAP系统的业务流程...

    SAP PI 配置 从配置到开发测试 Inbound outbound都覆盖

    在SAP PI(Process Integration)系统中,配置和开发涉及一系列步骤,确保数据和服务在不同系统间顺畅交互。本文将详细解析从SLD到测试代理类的整个过程,并解决sxi_monitor不记录错误消息的问题。...

    CIP Inbound queue.

    CIP(Customer Interaction Platform)Inbound Queue 是一种关键的IT系统组件,主要处理客户交互过程中的数据流动。本文将深入探讨CIP Inbound Queue的问题发现、监控和处理策略。 首先,我们关注的是“LI-CRM ...

Global site tag (gtag.js) - Google Analytics