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可分为两种类型:**出站IDoc** (Outbound IDoc) 和 **入站IDoc** (Inbound IDoc)。 - **出站IDoc**:当数据从SAP系统发送到非SAP系统时,会触发创建出站IDoc。此过程通常通过EDI子系统完成...
根据IDoc传输的方向,它们被分为入站(Inbound)IDoc和出站(Outbound)IDoc。当数据从SAP传输到非SAP系统时,通过EDI子系统实现,而SAP系统之间的传输则使用ALE(Application Link Enabling)技术。 在出站流程中...
第17章《Inbound via Workflow - Sales Order》则阐述了通过工作流处理销售订单的IDoc流程。 此外,压缩包中的其他章节也涵盖了关键知识点。第23章《Distributing Master Data》讲述了主数据的分发策略;第30章...
在SAP ABAP环境中,创建IDOC(Intermediate Document)是一项重要的任务,主要用于系统间的数据交换。IDOC作为SAP与其他系统通信的一种标准格式,能够帮助实现业务流程自动化。以下是一步步创建IDOC的详细步骤: 1)...
- **LS Inbound**: 目标系统接收IDOC并生成销售订单,`BORDE`是创建销售订单的IDOC类型,确保正确处理装运点确认以避免数量确认错误。 - **KU Outbound**: 销售订单被创建后,系统将输出消息回写到采购订单进行...
- **Binding SAP-Inbound Function and Message Type and IDOC Type** 使用事务代码BD51,将处理函数绑定到入站IDOC过程,确保消息类型和IDOC类型能调用正确的处理函数。 - **Define Inbound Process Code** ...
### SAP IDoc 应用及示例详解 #### 基本概念 ##### ALE (Application Link Enabling) - **定义**: ALE 是 SAP 专为 SAP 与 SAP 之间的集成设计的一种中间件技术。 - **历史**: 自 SAP 3.0 版本起成为 SAP 应用体系...
- outbound IDOC发送后,会在接收方系统中触发一个inbound IDOC(例如IDOC 33030)的创建。 - 接收方系统的inbound IDOC经过处理后,会自动生成对应的采购订单的发票校验。 - 这样就实现了自动化的发票校验过程,...
Inbound营销是一种现代营销策略,它侧重于吸引、转化、培育和建立与潜在客户的关系,而不是主动去寻找他们。对于学校来说,尤其是那些希望吸引潜在学生和家长的教育机构,Inbound营销能提供一种更为有效的方法来提升...
IDOC的交换流程包括外发(Outbound process)和接收(Inbound process)两个主要步骤。在发送方,应用程序首先创建应用文档,然后生成IDOC,IDOC随后传送到操作系统,并被转换成EDI标准格式发送给业务伙伴。在接收方...
EDI的交换分为两个流程:外发流程(Outbound process,简称OP)和接收流程(Inbound process,简称IP)。SAP遵循着EDI的这两个流程,并在系统中做了相应的实现。在实际应用中,数据首先在SAP系统中创建成应用文档,...
- 接收方系统接收到外向IDOC 33029后,会根据其内容生成Inbound IDOC 33030。 - Inbound IDOC 33030被处理后,会触发自动创建采购订单的发票校验(MIRO)。 5. **发票校验**: - 通过Inbound IDOC 33030的处理,...
【Sendgrid-Inbound-Parse-for-Discord】项目是一个整合Sendgrid的入站解析功能与Discord Webhook的解决方案,旨在实现将通过Sendgrid接收的邮件自动转发至Discord频道,以便于团队成员实时获取邮件通知。...
本文将深入探讨IDOC的配置过程,包括入站(Inbound)和出站(Outbound)配置,这对于SAP初学者来说是非常重要的基础知识。 1. SAP 入站配置(SAP-Inbound Configuration) 1.1 配置流程与预定义过程 在进行入站...
【用户洞察:Inbound for Schools Portrait.pdf】 Inbound营销是一种以吸引、转化和培养潜在客户为中心的策略,尤其适用于教育领域。"Inbound for Schools"着重于如何利用这种营销方式来提升学校的品牌知名度,吸引...
- 编写ABAP程序处理IDoc的生成和接收,包括 inbound 和 outbound 过程。 - 使用ST05事务码监控和调试IDoc通信。 5. **IDoc在业务流程中的应用**: - 供应链管理:如供应商门户集成、订单处理和库存同步。 - ...
- 状态记录(Status Record):记录IDoc从发送方到接收方的完整历史状态,帮助跟踪和诊断问题。 在SAP系统中,IDoc的定义和管理涉及以下几个关键概念: - IDoc类型(IDoc Type):定义了IDoc的具体结构和内容,...
入站处理(Inbound Processing)则涉及接收来自外部系统的IDoc,主要包括从入站端口接收数据、ALE层创建入站IDoc并进一步处理。这一过程通常涉及到对接收到的数据进行验证、转换,然后将数据集成到SAP系统的业务流程...
在SAP PI(Process Integration)系统中,配置和开发涉及一系列步骤,确保数据和服务在不同系统间顺畅交互。本文将详细解析从SLD到测试代理类的整个过程,并解决sxi_monitor不记录错误消息的问题。...
CIP(Customer Interaction Platform)Inbound Queue 是一种关键的IT系统组件,主要处理客户交互过程中的数据流动。本文将深入探讨CIP Inbound Queue的问题发现、监控和处理策略。 首先,我们关注的是“LI-CRM ...