公众号:SAP Technical
本文作者:matinal
 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分


*&---------------------------------------------------------------------*
*& Report Z_IDOC_EDI_CONVERT *
*& *
*&---------------------------------------------------------------------*
REPORT Z_IDOC_EDI_CONVERT .
TABLES:ZEDITAB,EDISDEF,EDSAPPL.
*&---------------------------------------------------------------------*
*& Author: ZHT.
*& paramenters region.(parameters)
*&---------------------------------------------------------------------*
PARAMETERS:
P_FILE LIKE FILEPATH-PATHINTERN OBLIGATORY , "read file path.
W_FILE LIKE FILEPATH-PATHINTERN OBLIGATORY , "write file path
CRITERIA TYPE C LENGTH DEFAULT '*' OBLIGATORY,
IDOC_EDI RADIOBUTTON GROUP RDO, "radio button. idoc convert edi.
EDI_IDOC RADIOBUTTON GROUP RDO. "radio button edi convert idoc. IF IDOC_EDI = 'X'.
" Choose idoc convert to edi.
CALL FUNCTION 'ZIDOC_CONVERT_EDI'
EXPORTING
P_FILE = P_FILE
W_FILE = W_FILE
CRITERIA = CRITERIA.
ELSEIF EDI_IDOC = 'X'.
" Choose edi convert to idoc..
CALL FUNCTION 'ZEDI_CONVERT_IDOC'
EXPORTING
P_FILE = P_FILE
W_FILE = W_FILE
CRITERIA = CRITERIA.
ENDIF. ​

idoc convert edi的代码如下:


FUNCTION ZIDOC_CONVERT_EDI.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(P_FILE) TYPE FILENAME-FILEINTERN
*" REFERENCE(W_FILE) TYPE FILENAME-FILEINTERN
*" REFERENCE(CRITERIA) TYPE ZCRITERIA
*"----------------------------------------------------------------------
DATA:
readfielname LIKE filepath-pathintern ,writefielname LIKE filepath-pathintern ,
mess TYPE string,segtype LIKE edsappl-segtyp,str_format TYPE c LENGTH ,
str_filedvalue TYPE c LENGTH ,readresult TYPE c LENGTH ,
curr_field_length TYPE i,_index TYPE i VALUE ,INX TYPE i VALUE ,
len TYPE i,
substring_result TYPE c LENGTH ,
count TYPE i,
str TYPE c LENGTH VALUE '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&',
read_line_index TYPE i VALUE ,write_str TYPE c LENGTH ,strlenth TYPE i ,
write_result TYPE c LENGTH ,itab_lines TYPE i,
gen_filename TYPE STRING , " generate fileName.
read_filename TYPE STRING, " read file name.
ms_type TYPE c LENGTH ,
prefix_path TYPE c LENGTH , "prefix path,
max_length TYPE i, "last a record .
sigent_filename TYPE Z_FILE_NAME,
document_number TYPE EDI4DOCNUC,
idoc_number TYPE EDI4DOCNUC, wname TYPE string, "temp write file name.
fname_write TYPE String,
fname_read(),
many_record TYPE i,
mess_type TYPE zmestype. "message type.
readfielname = p_file. "logical path.
writefielname = w_file. "physical file.
*&Structure region:(work area)Author: ZHT.
DATA:BEGIN OF idoc_doment_wa,
format_str TYPE c LENGTH ,
read_result TYPE c LENGTH ,
fieldvalue TYPE c LENGTH ,
END OF idoc_doment_wa.
DATA:BEGIN OF writestr, "declare a structure ,
str TYPE string,
strlength TYPE i,
END OF writestr.
DATA:str_itab LIKE TABLE OF writestr.
*&Internal Tables Region.*& Author: ZHT.
DATA:zeditab_itab LIKE STANDARD TABLE OF zeditab WITH HEADER LINE,
zeditab_itab_two LIKE STANDARD TABLE OF zeditab WITH HEADER LINE,
itab_edsappl LIKE STANDARD TABLE OF edsappl WITH HEADER LINE ,
idoc_doment_itab LIKE idoc_doment_wa OCCURS WITH HEADER LINE,
tb_list_of_file LIKE TABLE OF rsfillst,
wa_list_of_file LIKE LINE OF tb_list_of_file.
*&file process .parameters: readfielname and writefielname return a writefielname internal table.
CALL FUNCTION 'ZIDOC_EDI_FILEPROCESS_PATH_FUN'
EXPORTING
CRITERIA = CRITERIA
READFIELNAME = readfielname
READ_FILENAME = read_filename
WRITEFIELNAME = writefielname
GEN_FILENAME = gen_filename
IMPORTING
FNAME_WRITE = fname_write
TABLES
TB_LIST_OF_FILE = tb_list_of_file.
prefix_path = fname_write.
"&loop all files.
LOOP AT tb_list_of_file INTO wa_list_of_file.
CONCATENATE wa_list_of_file-dirname wa_list_of_file-name INTO fname_read .
IF wa_list_of_file-name <> '.' AND wa_list_of_file-name <> '..'.
*&open dataset.(read file).
OPEN DATASET fname_read FOR INPUT IN TEXT MODE ENCODING DEFAULT MESSAGE mess.
DO.
READ DATASET fname_read INTO readresult.
IF sy-subrc <> .
EXIT. "if sy-subrc <> 0.
ENDIF.
IF sy-index = .
mess_type = readresult+(). "get Message type.
idoc_number = readresult+(). "get idoc number.
CLEAR: zeditab_itab,idoc_doment_itab.
SELECT * INTO CORRESPONDING FIELDS OF TABLE zeditab_itab FROM zeditab WHERE messagetype = mess_type AND zidefaultidoc = ''. "search data,. return zditab internal table.
itab_lines = LINES( zeditab_itab ).
wname = wa_list_of_file-name.
CALL FUNCTION 'ZGENERATE_FILENAME_FUNCTION'
EXPORTING
MESS_TYPE = MESS_TYPE
READ_FILE_NAME = WNAME
ZTYPE = 'IDOC_EDI'
IMPORTING
WRITE_FINENAME = gen_filename.
sigent_filename = gen_filename.
fname_write = gen_filename.
CLEAR gen_filename.
ENDIF.
"&if is first line.
IF sy-index <> .
idoc_doment_itab-read_result = readresult.
str_format = idoc_doment_itab-read_result+(). "Reading the document. Get top 7 as a format.
IF str_format = 'E2EDL24'.
many_record = many_record + .
ENDIF.
CALL FUNCTION 'ZHT_SEARCH_EDISDEF' "Call function,import format. return a SEGTYPE.
EXPORTING
strformat = str_format
IMPORTING
segtype = segtype.
idoc_doment_itab-format_str = segtype.
idoc_doment_itab-fieldvalue = readresult+().
APPEND idoc_doment_itab.
CLEAR str_format.
ENDIF.
ENDDO.
CLOSE DATASET fname_read. "Close DataSet
"&Automatic single data processing
CALL FUNCTION 'ZSINGLE_RECORD_FUNCTION'
TABLES
ZEDITAB_ITAB_TWO = ZEDITAB_ITAB_TWO
ZEDITAB_ITAB = ZEDITAB_ITAB
IDOC_DOMENT_ITAB = IDOC_DOMENT_ITAB.
"&Automatic many data processing
CALL FUNCTION 'ZMANY_RECORD_FUNCTION'
EXPORTING
many_record = many_record
TABLES
ZEDITAB_ITAB_TWO = ZEDITAB_ITAB_TWO
ZEDITAB_ITAB = ZEDITAB_ITAB
IDOC_DOMENT_ITAB = IDOC_DOMENT_ITAB.
CLEAR: many_record.
DATA:read_index TYPE i VALUE .
DATA:sum_num TYPE i.
LOOP AT zeditab_itab_two.
sum_num = zeditab_itab_two-edi_index.
ENDLOOP.
REFRESH: zeditab_itab,IDOC_DOMENT_ITAB,str_itab.
"&loop all line.
DO sum_num TIMES.
IF sy-subrc <> .
EXIT.
ENDIF.
LOOP AT zeditab_itab_two WHERE edi_index = _index.
"Append space.
IF read_index = .
write_str = zeditab_itab_two-eancomsegment.
IF STRLEN( write_str ) < .
len = - STRLEN( write_str ).
strlenth = STRLEN( str ) - len.
CONCATENATE write_str str+strlenth(len) INTO write_str.
ENDIF.
ENDIF.
IF zeditab_itab_two-qualifiervalue = space.
strlenth = STRLEN( str ) - zeditab_itab_two-length.
CONCATENATE write_str str+strlenth(zeditab_itab_two-length) INTO write_str.
ELSE.
CALL FUNCTION 'ZIDOC_EDI_REPLACE_FUNCTION' "CALL FUNCTION . replace str. return a resullt.
EXPORTING
qualifiervalue = zeditab_itab_two-qualifiervalue
format = zeditab_itab_two-z_format
param_num =
IMPORTING
reploace_result = zeditab_itab_two-qualifiervalue.
CONCATENATE write_str zeditab_itab_two-qualifiervalue INTO write_str.
ENDIF.
read_index = read_index + .
writestr-str = write_str.
ENDLOOP.
APPEND writestr TO str_itab.
read_index = .
_index = _index + .
ENDDO.
_index = . IF itab_lines <> .
"OPEN DATASET .
CONCATENATE prefix_path fname_write INTO fname_write.
OPEN DATASET fname_write FOR OUTPUT IN TEXT MODE ENCODING DEFAULT MESSAGE mess.
LOOP AT str_itab INTO writestr.
count = STRLEN( writestr-str ).
DO count TIMES.
REPLACE '&' WITH ' ' INTO writestr-str LENGTH . "replace #&# with ' '.
ENDDO.
SELECT COUNT(*) INTO document_number FROM ZEDITAB WHERE EDI_INDEX = INX AND MESSAGETYPE = MESS_TYPE.
INX = INX + .
CALL FUNCTION 'IDOC_EDI_LOGDATA_FUN'
EXPORTING
DOCUMENT_NUMBER = idoc_number "idoc number.
IDOC_MESSAGETYPE = MESS_TYPE
IDOC_NUMBER = document_number "document number.
FILE_NAME = sigent_filename.
WRITE: / writestr-str.
TRANSFER writestr-str TO fname_write.
ENDLOOP.
INX = .
CLOSE DATASET fname_write. "close dataset.
IF itab_lines = .
MESSAGE e000(ZIDOC_EDI_MSG).
ELSE.
MESSAGE s001(ZIDOC_EDI_MSG) WITH fname_write.
ENDIF.
WRITE: / sy-uline.
ENDIF.
CLEAR fname_write.
REFRESH: zeditab_itab,str_itab,zeditab_itab_two.
* DATA:filename TYPE filepath-pathintern.
* filename = wa_list_of_file-name.
* IF MESS_TYPE <> 'ORDRSP'.
* CALL FUNCTION 'ZMOVEOUTEDI_IDOCFILEFUNCITON'
* EXPORTING
* resourefilepath = fname_read
* messagetype = mess_type
* filename = filename.
* ENDIF.
ENDIF.
ENDLOOP.
ENDFUNCTION. ​

【ABAP系列】SAP 一个完整的SAP的Abap例子(idoc,edi文件的相互转换)的更多相关文章

  1. 一个完整的JENKINS下的ANT BUILD.XML文件(Jenkins可以参考)

    一个完整的JENKINS下的ANT BUILD.XML文件 <?xml version="1.0" encoding="UTF-8"?> <p ...

  2. 一个完整的SAP RFC调用接口封装

    因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...

  3. Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件

    网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...

  4. 一个完整的JENKINS下的ANT BUILD.XML文件

    网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...

  5. 【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_RE ...

  6. 【ABAP系列】SAP ABAP 字符编码与解码、Unicode

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 字符编码与解码 ...

  7. 【ABAP系列】SAP ABAP Break Point

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP Break P ...

  8. 【ABAP系列】SAP ABAP替代校验全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP替代校验全解析 ...

  9. 【ABAP系列】SAP ABAP DATA - COMMON PART

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP DATA - ...

随机推荐

  1. 〇一——body内标签之交互输入标签一

    今天来搞一下body内的input标签 在一般的网页中,我们经常会遇到一些交互界面,比如注册.登录.评论等环境.在这些交互界面里最常使用的就是input标签. 一.input标签基本使用 input标 ...

  2. Mongodb数据模型

    描述表关系的方式: 方式一:嵌入式 > db.person.find({name:'zjf'}).pretty() { "_id" : ObjectId("592f ...

  3. javascript / angular 如何把object转成array

    取出的api 格式是纯object格式 {"name":"james","city":"Taipei","co ...

  4. EasyUI-combotree 下拉树 数据回显时默认选中

    组合树(combotree)把选择控件和下拉树结合起来.它与组合框(combobox)相似,不同的是把列表替换成树组件.组合树(combotree)支持带有用于多选的树状态复选框的树. 依赖 comb ...

  5. ORACLE/SQL用函数进行每年,每月,每周,每日的数据汇总

    15/03/21  用函数进行每年,每月,每周,每日的数据汇总 假设一个销售明细表 sale_detail 含有 国家(country),销售时间(sale_time),销售额(sale_money) ...

  6. 计算机网络(七),TCP与UDP的区别

    七.TCP与UDP的区别 1.面向连接VS无连接 TCP面向连接而UDP面向无连接的,TCP是和单对单传送数据,UDP适合多波发布 2.可靠性 TCP利用握手,确认,重传机制提供了可靠性保证,UDP可 ...

  7. TTTTTTTTTTTT POJ 2112 奶牛与机器 多重二分匹配 跑最大流 建图很经典!!

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 15682   Accepted: 5597 ...

  8. 哈密尔顿环x

    欧拉回路是指不重复地走过所有路径的回路,而哈密尔顿环是指不重复地走过所有的点,并且最后还能回到起点的回路.  代码如下: #include<iostream> #include<cs ...

  9. python脚本中selenium启动浏览器报错os.path.basename(self.path), self.start_error_message) selenium.common.excep

    在python脚本中,使用selenium启动浏览器报错,原因是未安装浏览器驱动,报错内容如下: # -*- coding:utf-8 -*-from selenium import webdrive ...

  10. ValidateUtil常用验证工具类,如手机、密码、邮箱等

    package cn.com.ssk.util.utils; import java.util.regex.Pattern; import org.apache.commons.lang3.Strin ...