在系统中,我们经常可以看到EDI方式的输出,与打印输出类似。下面我们基于文章"IDOC实例,Outbound IDOC"的基础上,简单讲解这种方式的IDOC输出。
1,创建一个function:Y_IDOC_PO_SEND.
这是我们的Outbound Funtion Module,用来创建IDOC的内容。同样的,该函数的接口都是标准的。
下面将要介绍的tcode WE41中可以查看系统已有的同类函数,可以参照设置我们的函数接口。然后写入如下代码:
DATA: ls_pohead TYPE ypohead,
        ls_poitem TYPE ypoitem,
        ls_ekko TYPE ekko,
        lt_ekpo TYPE TABLE OF ekpo WITH HEADER LINE.
* control_record_out
  CLEAR control_record_out.
  MOVE control_record_in TO control_record_out.
* control_record_out-mestyp = 'YPO'. "Message Type
* control_record_out-idoctp = 'YPOIDOC'. "IDOC Type
  control_record_out-direct = '1'.
  control_record_out-serial = sy-datum.
  control_record_out-serial+8 = sy-uzeit.
* Read from ekko/ekpo
  CLEAR ls_ekko.
  SELECT SINGLE *
    INTO ls_ekko
    FROM ekko
    WHERE ebeln = object-objky(10) "采购单号
    AND   loekz = space.
  IF sy-subrc <> 0.
    RAISE error_message_received.
  ENDIF.
REFRESH lt_ekpo.
  SELECT *
    INTO TABLE lt_ekpo
    FROM ekpo
    WHERE ebeln = ls_ekko-ebeln
    AND   loekz = space.
* INT_EDIDD
  CLEAR int_edidd.
  int_edidd-docnum = control_record_out-docnum.
  int_edidd-segnam = 'YPOHEAD'."结点名称
  int_edidd-dtint2 = 0.
  CLEAR ls_pohead.
  ls_pohead-ebeln = ls_ekko-ebeln.
  ls_pohead-bukrs = ls_ekko-bukrs.
  ls_pohead-bedat = ls_ekko-bedat.
  int_edidd-sdata = ls_pohead. "结点内容
  APPEND int_edidd.
LOOP AT lt_ekpo.
    CLEAR int_edidd.
    int_edidd-docnum = control_record_out-docnum.
    int_edidd-segnam = 'YPOITEM'.
    int_edidd-dtint2 = 0.
    CLEAR ls_poitem.
    ls_poitem-ebeln = lt_ekpo-ebeln.
    ls_poitem-ebelp = lt_ekpo-ebelp.
    ls_poitem-matnr = lt_ekpo-matnr.
    ls_poitem-menge = lt_ekpo-menge.
    ls_poitem-meins = lt_ekpo-meins.
    int_edidd-sdata = ls_poitem.
    APPEND int_edidd.
  ENDLOOP.
2,WE41, 创建Outbound Process Code
进入编辑状态后,选择“添加新条目”按钮,创建YPOSEND,对应于新建的Y_IDOC_PO_SEND。
选中下面的Process with ALE Service,代表创建Outbound IDOC后自动发送给接收方。
3,NACE/NACO,创建我们的输出类型
创建一个EDI类型的输出,Program填写RSNASTED,Form Routine填写EDI_PROCESSING。
当然我们也可以在这里找一个已有的EDI输出类型做测试,比如Application EF下的XX01。
4,WE20设置Partner Profile.
前两篇文章中,我们并没有要求填写Partner function,不过这次必须填写了。
Partner function是从属于partner type下面的,这个逻辑关系在表TPAR中体现。
假设我们选中partner type=LS,Partner function=LS。其维护与之前的类似,点击加号添加一个Outbound Parameter,步骤与之前类似,不过必须记得在Message Control中添加一行,Application=EF,Message Type=XX01,Process code为YPOSEND。这里EF和XX01与上面NACO中的定义对应。
5,发送IDOC
事实上,我们已经定义完毕了,可以维护某采购订单的输出类型来发送IDOC了。
为了大家能更好的理解,我们来模仿这个输出过程。创建新程序,写入:
TABLES: nast.
DATA: rcode TYPE i.

CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'. "采购单号
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'. "Partner number
nast-parvw = 'LS'. "Partner function
PERFORM edi_processing(rsnasted) USING rcode 'X'.
IF rcode IS INITIAL.
  COMMIT WORK. "发送IDOC到接收方
ENDIF.
上面的方法并不会在NAST留下输出记录。如果您希望能在NAST中留下一条记录,则应该这样:
TABLES: nast.
DATA: rcode TYPE i.

CLEAR nast.
nast-kappl = 'EF'.
nast-objky = '4014000182'.
nast-kschl = 'XX01'.
nast-parnr = 'I02LS'.
nast-parvw = 'LS'.
nast-spras = sy-langu.
nast-erdat = sy-datum.
nast-eruhr = sy-uzeit.
nast-nacha = '6'. "EDI
nast-anzal = 0.
nast-usnam = sy-uname.
PERFORM einzelnachricht(rsnast00) USING rcode.
IF rcode IS INITIAL.
  COMMIT WORK. "发送IDOC到接收方
ENDIF.
下面这种方式同样可用于触发其他方式的输出类型,比如打印输出。

IDOC实例,消息方式的IDOC相关推荐

  1. ABAP传输自定义IDOC实例

    首先确定出站方和入站方,本例中我使用150作为发送方将200作为接收方. 发送端系统配置 进入tcode-SALE,点击定义逻辑系统,这里我定义D01CLNT150为发送端, D01CLNT200为接 ...

  2. SAP MM 如何根据一个已经存在的IDoc产生新的IDoc?

    SAP MM 如何根据一个已经存在的IDoc产生新的IDoc? WE19, 输入已经存在的IDoc号码,比如 9496900 双击相关的segment,做了修改或者不做任何修改之后,直接点'stand ...

  3. sap idoc生成文件传到别的服务器,IDOC 实例详解

    本帖最后由 kanter 于 2015-5-21 15:53 编辑 IDOC 是用于在不同的 SAP 系统之间或 SAP 系统与外部系统之间传输信息的一种文档表示 形式. 本实例讲述从 SAP 客户端 ...

  4. IDOC实例, Outbound IDOC

    最近群里的兄弟对IDOC的学习热情高涨,所以我在这里做个最简单的IDOC例子,供大家分享. 简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具. 假设I04和I02是同一个集团下两 ...

  5. IDOC实例, Inbound IDOC

    这里将继续沿用上篇文章的例子,讲述I02对接收到的采购订单信息进行的相关处理. 1,创建IDOC Type和Message Type. 与上篇Outbound Idoc中的前两个步骤完全一样. 2,创 ...

  6. 什么是IDOC,以及IDOC的步骤

    创建IDOC:    第一步:WE31 创建IDOC所包含的字段.    第二步:WE30 创建IDOC 把Segment分配给IDOC    第三步:WE81  创建信息类型    第四步:WE82 ...

  7. SAP IDOC开发

    创建IDOC:    第一步:WE31 创建IDOC所包含的字段.    第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把IDOC类 ...

  8. IDOC 创建,增强,管理,配置

    创建IDOC:    第一步:WE31 创建IDOC所包含的字段.    第二步:WE30 创建IDOC 把Segment分配给IDOC    第三步:WE81  创建信息类型    第四步:WE82 ...

  9. ALEIDoc EDI(7)--IDoc Extension

    SAP已经提供很多标准的IDoc type.Message type及相关的程序,可以通过配置就可以完成一般的分发和接受.     但是,由于客户的定制化,很多标准表做过了增强,同时也有一些新增的主数 ...

最新文章

  1. AOP的研究认识了MVC
  2. Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll
  3. Linux 操作系统原理 — 多处理器架构
  4. python编程入门与案例详解课后题答案-Python入门之三角函数sin()函数实例详解
  5. fir.im Weekly - APP 性能监测优化 二三事
  6. 【c++】10. memset()、【strcpy_s()、memcpy_s()】、【strcpy(),memcpy()】
  7. Google Maps JavaScript API V3 根据地址 加载地图
  8. 2018/7/10-纪中某C组题【jzoj3792,jzoj3793,jzoj3794】
  9. php header 404 nginx,ThinkPHP在nginx下怎么设置?路由统统404,疯了~
  10. 时间戳服务器显示invalid,signtool签名时间戳失败的解决方法
  11. [2018.03.14 T2] 树(tree)
  12. RK3399 ALC5640芯片配置
  13. Excel中不复制隐藏行
  14. 租借高防服务器和托管高防服务器哪个好?
  15. 多语言id1033,2052
  16. iphone中怎么添加邮箱_如何在iPhone的Gmail中添加附件
  17. vscode的下载、安装
  18. Opencv4学习-2、小案例之绿布抠图-视频背景图替换
  19. win10 jdk1.8迅雷下载
  20. 将Sleuth添加到项目里做链路追踪的三种方式(Greenwich.SR5版)

热门文章

  1. Content-Type简要说明
  2. [UVa10296]Jogging Trails
  3. 集群文件系统GlusterFS安装配置
  4. 传统网站与Web标准——表格布局实例
  5. [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
  6. MOSS2007 webcast系列(一)
  7. centos安装nginx步骤
  8. 《敏捷迭代开发:管理者指南》—第2章2.9节增量交付
  9. Linux防火墙设置-DNS服务器篇
  10. Linux安装pecl和pear