Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235031
  • 博文数量: 90
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-04 15:21
文章分类

全部博文(90)

文章存档

2010年(7)

2009年(83)

我的朋友

分类:

2009-05-07 11:58:03

  FORM f_populate_data_seg  USING    fp_i_header TYPE  ty_t_header
                                   fp_i_item   TYPE  ty_t_item
                          CHANGING fp_i_edidd  TYPE  ty_t_edidd
                                   fp_wa_send  TYPE  zlbr_otc_tbl_nf.

  CONSTANTS: l_c_segnum  TYPE edilsegtyp VALUE 'ZSEG_L_BR_OPS_SAP_FAS_CDV',
             l_c_01      TYPE edi_hlevel VALUE '01',
             l_c_02      TYPE edi_hlevel VALUE '02',
             l_c_segnum1 TYPE edilsegtyp VALUE 'ZSEG_L_BR_OPS_SAP_FAS_CDITM',
             l_c_flag    TYPE char1      VALUE 'X'.

*--&& Local data declaration
  DATA: l_wa_seg_h  TYPE zseg_l_br_ops_sap_fas_cdv,
        l_wa_seg_i  TYPE zseg_l_br_ops_sap_fas_cditm,
        l_wa_edidd   TYPE edidd.
*--&& Local field symbols declaration
  FIELD-SYMBOLS:  TYPE ty_item.


  LOOP AT fp_i_item ASSIGNING .

*--&& Populate Header segment for each new document No
    AT NEW docnum.
      READ TABLE fp_i_header INTO l_wa_seg_h
                             WITH KEY docnum = -docnum
                             BINARY SEARCH.
      IF sy-subrc EQ 0.
        l_wa_edidd-segnam =  l_c_segnum.
        l_wa_edidd-sdata  = l_wa_seg_h.
        l_wa_edidd-hlevel = l_c_01.

*--&& Creating Data Segment
        APPEND l_wa_edidd TO fp_i_edidd .
        CLEAR : l_wa_edidd ,
                l_wa_seg_h .
      ENDIF.
    ENDAT.

*--&& Item segment population
    l_wa_seg_i-werks = -werks.
    l_wa_seg_i-itmnum = -itmnum.
    l_wa_seg_i-matnr = -matnr.
    l_wa_seg_i-menge = -menge.
*Begin of change on 22/01/2008.
    l_wa_seg_i-menge1 = -menge1.
    l_wa_seg_i-menge2 = -menge2.
    l_wa_seg_i-taxtype_rate_icm3 = -taxtype_rate_icm3.
    l_wa_seg_i-taxtype_rate_ipio = -taxtype_rate_ipio.
*End of change on 22/01/2008.
    l_wa_seg_i-meins = -meins.
    l_wa_seg_i-nfnet = -nfnet.
    l_wa_seg_i-nfpri = -nfpri.
    l_wa_seg_i-taxval = -taxval.
    l_wa_seg_i-tax_base = -tax_base.
    l_wa_seg_i-othbas_icm3 = -othbas_icm3.
    l_wa_seg_i-othbas_ipio = -othbas_ipio.
    l_wa_seg_i-excbas = -excbas.

    l_wa_edidd-segnam = l_c_segnum1.
    l_wa_edidd-sdata  = l_wa_seg_i.
    l_wa_edidd-hlevel = l_c_02.

    APPEND l_wa_edidd TO fp_i_edidd .
    CLEAR : l_wa_edidd,
            l_wa_seg_i.


    AT END OF docnum.
*--&& populate wa_send to update table Custom Table
*--&& for Nota Fiscal if IDoc is successfully send
      fp_wa_send-mandt          = sy-mandt.
      fp_wa_send-werks          = -werks.
      fp_wa_send-docnum         = -docnum.
      fp_wa_send-send_flag      = l_c_flag.
      fp_wa_send-date_last_send = sy-datum.

*--&& Send IDoc for each unique document No
      PERFORM f_send_idoc    USING    fp_i_edidd
                                      wa_edp13
                                      fp_wa_send.

      REFRESH : fp_i_edidd.

    ENDAT.




  ENDLOOP.

ENDFORM.                    " F_POPULATE_DATA_SEG
  
****************************************************************************
FORM f_send_idoc      USING    fp_i_edidd  TYPE  ty_t_edidd
                               fp_wa_edp13 TYPE ty_edp13
                               fp_wa_send  TYPE zlbr_otc_tbl_nf.

  DATA:  l_it_edidc    TYPE STANDARD TABLE OF edidc,
         l_wa_edidc    TYPE edidc.

* Local Constants
  CONSTANTS : l_c_1        TYPE char1       VALUE '1',
              l_c_msgtype  TYPE edi_mestyp  VALUE 'Z_L_BR_OPS_MTY_NOTA_TO_FAS',
              l_c_idoctp   TYPE edi_idoctp  VALUE 'Z_L_BR_OTC_BAS_SAP_FAS_NOTAFIS'.

*Populating Control record table.
  l_wa_edidc-rcvprn = fp_wa_edp13-rcvprn.       "Partner Number of Receiver
  l_wa_edidc-rcvprt = fp_wa_edp13-rcvprt.       "Partner Type of Receiver
  l_wa_edidc-rcvpor = fp_wa_edp13-rcvpor.       "Receiver port
  l_wa_edidc-mescod = fp_wa_edp13-mescod.       "Message code
  l_wa_edidc-mesfct = fp_wa_edp13-mesfct.       "Message function
  l_wa_edidc-direct = l_c_1.                    "Direction
  l_wa_edidc-mestyp = l_c_msgtype.
  l_wa_edidc-idoctp = l_c_idoctp.

*Send Master IDOC to ALE Layer
  CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
    EXPORTING
      master_idoc_control            = l_wa_edidc
    TABLES
      communication_idoc_control     = l_it_edidc
      master_idoc_data               = fp_i_edidd
    EXCEPTIONS
      error_in_idoc_control          = 1
      error_writing_idoc_status      = 2
      error_in_idoc_data             = 3
      sending_logical_system_unknown = 4
      OTHERS                         = 5.


  IF sy-subrc EQ 0.
    COMMIT WORK.
    v_success = v_success + 1.

*******  Update table with all info.....  plant and doc num....
    IF p_check EQ space.
      INSERT zlbr_otc_tbl_nf FROM fp_wa_send.
      CLEAR wa_send.
      IF sy-subrc NE 0.
        MESSAGE s071.      "Insertion failed into zlbr_otc_tbl_nf.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                    " F_SEND_IDOC
阅读(500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~