среда, 13 января 2016 г.

PRTE в замещениях.

  DATA ls_prte TYPE prteb.
  DATA lv_index TYPE sy-tabix.

  CALL FUNCTION 'CJDT_PRTE_GET'
    EXPORTING
      proj_imp  = proj-pspnr
      prps_imp  = prps-pspnr
    IMPORTING
      prte_exp  = ls_prte
      index_exp = lv_index.

  IF lv_index IS INITIAL.
    CALL FUNCTION 'CJDT_TRTAB_CREATE'
      EXPORTING
        projwa = proj
      EXCEPTIONS
        OTHERS = 1.
    CALL FUNCTION 'CJDT_PRTE_GET'
      EXPORTING
        proj_imp  = proj-pspnr
        prps_imp  = prps-pspnr
      IMPORTING
        prte_exp  = ls_prte
        index_exp = lv_index.
  ENDIF.

  CHECK lv_index IS NOT INITIAL.
  CHECK ls_prte-pstrt NE proj-plfaz OR
        ls_prte-pende NE proj-plsez OR
        ls_prte-estrt NE proj-sprog OR
        ls_prte-eende NE proj-eprog.

  ls_prte-pstrt = proj-plfaz.
  ls_prte-pende = proj-plsez.
  ls_prte-estrt = proj-sprog.
  ls_prte-eende = proj-eprog.

  CALL FUNCTION 'CJDT_PRTE_MODIFY'
    EXPORTING
      index_imp = lv_index
      prte_imp  = ls_prte
    EXCEPTIONS
      OTHERS    = 1.

* check and save dates
  CALL FUNCTION 'CJTR_POST_DATES'
    EXCEPTIONS
      sched_wrong    = 1
      check_top_down = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

понедельник, 2 июля 2012 г.

Easy report for update position in FI document

*&---------------------------------------------------------------------*
*& Report  ZSIT_VAT_XREF_UPDATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zsit_vat_xref_update.

TABLES bkpf.
TABLES bseg.

TYPE-POOLS slis.
TYPE-POOLS icon.

DATA gt_alv                       TYPE TABLE OF zssit_vat_xref_update.
DATA gs_alv                       TYPE zssit_vat_xref_update.

DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.

FIELD-SYMBOLS                TYPE zssit_vat_xref_update.
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.

PARAMETERS p_bukrs TYPE bkpf-bukrs OBLIGATORY MEMORY ID buk.
SELECT-OPTIONS s_gjahr FOR bseg-gjahr OBLIGATORY MEMORY ID gjr.
SELECT-OPTIONS s_hkont FOR bseg-hkont.
SELECT-OPTIONS s_belnr FOR bseg-belnr.

SELECTION-SCREEN END OF BLOCK bl1.
**********************************************************************
START-OF-SELECTION.
**********************************************************************
  PERFORM select_data.
**********************************************************************
END-OF-SELECTION.
**********************************************************************
  IF gt_alv[] IS INITIAL.
    MESSAGE 'No data for selection conditions' TYPE 'S'.
    EXIT.
  ENDIF.
  PERFORM display_data.
**********************************************************************

*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       Select data
*----------------------------------------------------------------------*
FORM select_data .

  DATA lv_datum                   TYPE bkpf-budat.

  CLEAR gt_alv[].
* Select open items
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE gt_alv
    FROM bsis
    WHERE bukrs EQ p_bukrs
      AND hkont IN s_hkont
      AND gjahr IN s_gjahr
      AND belnr IN s_belnr
      AND mwskz NE ''
      AND mwskz NE '**'.
* Get add data from BSEG
  LOOP AT gt_alv ASSIGNING .
* Check Cancel docs
    SELECT SINGLE belnr
      INTO -belnr
      FROM bkpf
      WHERE bukrs EQ -bukrs
        AND belnr EQ -belnr
        AND gjahr EQ -gjahr
        AND stblg NE ''.
    IF sy-subrc EQ 0.
      DELETE gt_alv.
      CONTINUE.
    ENDIF.
* Current XREF1
    SELECT SINGLE xref1
      INTO -xref1
      FROM bseg
      WHERE bukrs EQ -bukrs
        AND belnr EQ -belnr
        AND gjahr EQ -gjahr
        AND buzei EQ -buzei
        AND koart EQ 'K'.
* Check XREF1
    IF STRLEN( -xref1 ) NE 6 OR -xref1(6) CN '0123456789'.
      DELETE gt_alv.
      CONTINUE.
    ELSE.
      " Check date
      CLEAR lv_datum.
      CONCATENATE '20' -xref1(6)
             INTO lv_datum.
      ADD 1 TO lv_datum.
      SUBTRACT 1 FROM lv_datum.
      IF lv_datum IS INITIAL.
        DELETE gt_alv.
        CONTINUE.
      ENDIF.
    ENDIF.
* Correct new XREF1
    PERFORM get_new_xref1 USING .
  ENDLOOP.
*
ENDFORM.                    " SELECT_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       Output
*----------------------------------------------------------------------*
FORM display_data .

  DATA ls_layout                  TYPE lvc_s_layo.

  ls_layout-cwidth_opt = 'X'.
  ls_layout-box_fname = 'CBOX'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'CALLBACK_PF_STATUS_SET'
      i_callback_user_command  = 'CALLBACK_USER_COMMAND'
      i_structure_name         = 'ZSSIT_VAT_XREF_UPDATE'
      is_layout_lvc            = ls_layout
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_alv
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*       User command
*----------------------------------------------------------------------*
FORM callback_user_command USING command LIKE sy-ucomm
                  selfield TYPE slis_selfield.

  CASE command.
**********************************************************************
    WHEN '&IC1'. " Double click
**********************************************************************
      READ TABLE gt_alv ASSIGNING  INDEX selfield-tabindex.
      CHECK sy-subrc EQ 0.
      CASE selfield-fieldname.
        WHEN 'BELNR'.
          SET PARAMETER ID 'BLN' FIELD -belnr.
          SET PARAMETER ID 'BUK' FIELD -bukrs.
          SET PARAMETER ID 'GJR' FIELD -gjahr.
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      ENDCASE.
**********************************************************************
    WHEN '&XREF'. " Change XREF1
      PERFORM change_xref1.
      selfield-refresh = 'X'.
  ENDCASE.
ENDFORM.                    "CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM callback_pf_status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
*&      Form  change_xref1
*&---------------------------------------------------------------------*
*       change_xref1
*----------------------------------------------------------------------*
FORM change_xref1 .

  DATA ls_bseg                    TYPE bseg.
  DATA lt_mess                    TYPE TABLE OF bdcmsgcoll.
  DATA ls_mess                    TYPE bdcmsgcoll.
* Change

  LOOP AT gt_alv ASSIGNING  WHERE cbox IS NOT INITIAL.

    CLEAR bdcdata. REFRESH bdcdata.
    CLEAR lt_mess[].

    PERFORM bdc_dynpro USING 'SAPMF05L' '100'.
    PERFORM bdc_field  USING 'RF05L-BELNR'  -belnr.
    PERFORM bdc_field  USING 'RF05L-BUKRS'  -bukrs.
    PERFORM bdc_field  USING 'RF05L-GJAHR'  -gjahr.
    PERFORM bdc_field  USING 'BDC_OKCODE'   '/00'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
    PERFORM bdc_field  USING 'BDC_OKCODE'   'ABZL'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '1130'.
    PERFORM bdc_field  USING 'RF05L-BUZEI'  -buzei.
    PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
    PERFORM bdc_field  USING 'BDC_CURSOR'   'RF05L-ANZDT(01)'.
    PERFORM bdc_field  USING 'BDC_OKCODE'   'PK'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '302'.
    PERFORM bdc_field  USING 'BDC_OKCODE'   '=ZK'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '1302'.
    PERFORM bdc_field  USING 'BSEG-XREF1'   -xref1_new.
    PERFORM bdc_field  USING 'BDC_OKCODE'   '=ENTR'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '302'.
    PERFORM bdc_field  USING 'BDC_OKCODE'   'AB'.

    PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
    PERFORM bdc_field  USING 'BDC_OKCODE'   '/11'.

    PERFORM bdc_transaction TABLES lt_mess
                            USING  'FB02' 'X' 'N' 'S'.

    READ TABLE lt_mess INTO ls_mess WITH KEY msgid = 'F5' msgnr =  '300'.
    IF sy-subrc EQ 0.
      -status = icon_led_green.
    ELSE.
      -status = icon_led_red.
    ENDIF.

  ENDLOOP.
  IF sy-subrc NE 0.
    MESSAGE 'Select positions' TYPE 'I'.
    RETURN.
  ENDIF.
**********************************************************************

ENDFORM.                    " change_xref1
*&---------------------------------------------------------------------*
*&      Form  GET_NEW_XREF1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_new_xref1  USING  ps_alv TYPE zssit_vat_xref_update.

ENDFORM.                    " GET_NEW_XREF1
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD
*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM bdc_transaction TABLES p_messtab
                     USING  p_tcode
                            p_ctu
                            p_mode
                            p_update.
  DATA: l_subrc LIKE sy-subrc.

  IF p_ctu <> 'X'.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        tcode     = p_tcode
      TABLES
        dynprotab = bdcdata
      EXCEPTIONS
        OTHERS    = 1.
  ELSE.
    CALL TRANSACTION p_tcode USING bdcdata
                     MODE   p_mode
                     UPDATE p_update
                     MESSAGES INTO p_messtab.
  ENDIF.
  l_subrc = sy-subrc.
  REFRESH bdcdata.
  sy-subrc = l_subrc.
ENDFORM.                    "BDC_TRANSACTION

вторник, 26 июня 2012 г.

Easy report with reuse and posting


REPORT  z_rep.

TABLES bkpf.
TABLES bseg.

TYPE-POOLS slis.

DATA gt_out                       TYPE TABLE OF zsrep_alv.
DATA gs_alv                       TYPE zs_alv.
DATA gv_budat                     TYPE zsrep_alv-budat.


FIELD-SYMBOLS                TYPE zsrep_alv.
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.

PARAMETERS p_bukrs TYPE bkpf-bukrs OBLIGATORY MEMORY ID buk.
PARAMETERS p_spmon TYPE spmon OBLIGATORY MEMORY ID spm.
PARAMETERS p_gl_k  TYPE bseg-hkont OBLIGATORY MEMORY ID glk.
PARAMETERS p_gl_d  TYPE bseg-hkont OBLIGATORY MEMORY ID gld.
PARAMETERS p_blart TYPE bkpf-blart OBLIGATORY MEMORY ID blr.
SELECT-OPTIONS s_matnr FOR bseg-matnr.
SELECT-OPTIONS s_werks FOR bseg-werks.

SELECTION-SCREEN END OF BLOCK bl1.
**********************************************************************
START-OF-SELECTION.
**********************************************************************
  
PERFORM select_data.
**********************************************************************
END-OF-SELECTION.
**********************************************************************
  
IF gt_out[] IS INITIAL.
    
MESSAGE 'No data for selection conditions' TYPE 'S'.
    
EXIT.
  
ENDIF.
  
PERFORM display_data.
**********************************************************************

*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       Select data
*----------------------------------------------------------------------*
FORM select_data .

  
RANGES lr_budat FOR bkpf-budat.

  lr_budat
-sign   = 'I'.
  lr_budat
-option = 'BT'.
  
CALL FUNCTION 'OIUREP_MONTH_FIRST_LAST'
    
EXPORTING
      i_month     
= p_spmon+4(2)
      i_year      
= p_spmon(4)
    
IMPORTING
      e_first_day 
= lr_budat-low
      e_last_day  
= lr_budat-high
    
EXCEPTIONS
      
OTHERS      = 1.
  
APPEND lr_budat.
  gv_budat 
= lr_budat-high.

  
CLEAR gt_out[].
* Select open items
  
SELECT *
    
INTO CORRESPONDING FIELDS OF TABLE gt_out
    
FROM bsis
    
WHERE bukrs EQ p_bukrs
      
AND hkont EQ p_gl_k
      
AND gjahr EQ p_spmon(4)
      
AND budat IN lr_budat
      
AND werks IN s_werks.
* Get add data from BSEG
  
LOOP AT gt_out ASSIGNING .
* Check Cancel docs
    
SELECT SINGLE belnr
      
INTO -belnr
      
FROM bkpf
      
WHERE bukrs EQ -bukrs
        
AND belnr EQ -belnr
        
AND gjahr EQ -gjahr
        
AND stblg NE ''.
    
IF sy-subrc EQ 0.
      
DELETE gt_out.
      
CONTINUE.
    
ENDIF.
* Check material
    
SELECT SINGLE matnr
      
INTO -matnr
      
FROM bseg
      
WHERE bukrs EQ -bukrs
        
AND belnr EQ -belnr
        
AND gjahr EQ -gjahr
        
AND buzei EQ -buzei.
    
IF NOT -matnr IN s_matnr.
      
DELETE gt_out.
      
CONTINUE.
    
ENDIF.
* Change sign by SHKZG
    
IF -shkzg EQ 'H'.
      
-dmbtr = - -dmbtr.
      
-wrbtr = - -wrbtr.
    
ENDIF.
  
ENDLOOP.
*
ENDFORM.                    " SELECT_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       Output
*----------------------------------------------------------------------*
FORM display_data .

  
DATA ls_layout                  TYPE lvc_s_layo.

  ls_layout
-cwidth_opt = 'X'.
  ls_layout
-box_fname = 'CBOX'.

  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    
EXPORTING
      i_callback_program       
= sy-cprog
      i_callback_pf_status_set 
= 'CALLBACK_PF_STATUS_SET'
      i_callback_user_command  
= 'CALLBACK_USER_COMMAND'
      i_structure_name         
= 'ZSREP_ALV'
      is_layout_lvc            
= ls_layout
      i_save                   
= 'A'
    
TABLES
      t_outtab                 
= gt_out
    
EXCEPTIONS
      program_error            
= 1
      
OTHERS                   = 2.
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.


ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*       User command
*----------------------------------------------------------------------*
FORM callback_user_command USING command LIKE sy-ucomm
                  selfield 
TYPE slis_selfield.

  
CASE command.
**********************************************************************
    
WHEN '&IC1'. " Double click
**********************************************************************
      
READ TABLE gt_out ASSIGNING  INDEX selfield-tabindex.
      
CHECK sy-subrc EQ 0.
      
CASE selfield-fieldname.
        
WHEN 'BELNR' OR 'BELNR_CLR'.
          
IF selfield-fieldname EQ 'BELNR'.
            
SET PARAMETER ID 'BLN' FIELD -belnr.
          
ELSE.
            
SET PARAMETER ID 'BLN' FIELD -belnr_clr.
          
ENDIF.
          
SET PARAMETER ID 'BUK' FIELD -bukrs.
          
SET PARAMETER ID 'GJR' FIELD -gjahr.
          
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      
ENDCASE.
**********************************************************************
    
WHEN '&POST'. " Post doc
      
PERFORM post.
      selfield
-refresh = 'X'.
  
ENDCASE.
ENDFORM.                    "CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM callback_pf_status_set USING rt_extab TYPE slis_t_extab.
  
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
*&      Form  POST
*&---------------------------------------------------------------------*
*       Post
*----------------------------------------------------------------------*
FORM post .

  
DATA ls_hdr                     TYPE bapiache09.
  
DATA lt_acc                     TYPE TABLE OF bapiacgl09.
  
DATA ls_acc                     TYPE bapiacgl09.
  
DATA lt_amt                     TYPE TABLE OF bapiaccr09.
  
DATA ls_amt                     TYPE bapiaccr09.
  
DATA lt_ext                     TYPE TABLE OF bapiparex.
  
DATA ls_ext                     TYPE bapiparex.
  
DATA lt_ret                     TYPE TABLE OF bapiret2.
  
DATA lt_ret_all                 TYPE TABLE OF bapiret2.
  
DATA lv_obj_type                TYPE bapiache09-obj_type.
  
DATA lv_obj_key                 TYPE bapiache09-obj_key.
  
DATA lv_test                    TYPE xfeld.
  
DATA lv_error                   TYPE xfeld.
  
DATA lt_coll                    TYPE TABLE OF zsrep_alv.
  
DATA ls_t001                    TYPE t001.

  
FIELD-SYMBOLS             TYPE zsrep_alv.
* Collect by MATNR/WERKS
  
LOOP AT gt_out ASSIGNING  WHERE cbox IS NOT INITIAL.
    
CLEAR gs_alv.
    gs_alv
-bukrs = -bukrs.
    gs_alv
-hkont = -hkont.
    gs_alv
-waers = -waers.
    gs_alv
-dmbtr = -dmbtr.
    gs_alv
-wrbtr = -wrbtr.
    gs_alv
-matnr = -matnr.
    gs_alv
-werks = -werks.
    
COLLECT gs_alv INTO lt_coll.
  
ENDLOOP.
* Delete zero lines
  
DELETE lt_coll WHERE dmbtr EQ 0 OR wrbtr EQ 0.
* No lines was select
  
IF lt_coll[] IS INITIAL.
    
MESSAGE 'Select positions' TYPE 'I'.
    
RETURN.
  
ENDIF.
**********************************************************************
  
DO 2 TIMES.
    
IF sy-index EQ 1.
      lv_test 
= 'X'.
    
ELSE.
      
CHECK lv_error IS INITIAL.
      
CLEAR lt_ret_all[].
      lv_test 
= ''.
    
ENDIF.

    
LOOP AT lt_coll ASSIGNING .
*
      
IF ls_t001-bukrs NE -bukrs.
        
SELECT SINGLE *
          
INTO ls_t001
          
FROM t001
          
WHERE bukrs EQ -bukrs.
      
ENDIF.

      
CLEAR ls_hdr.
      
CLEAR lt_acc[].
      
CLEAR lt_amt[].
      
CLEAR lt_ret[].
      
CLEAR lt_ext[].

      ls_hdr
-username     = sy-uname.
      ls_hdr
-comp_code    = -bukrs.
      ls_hdr
-doc_date     = gv_budat.
      ls_hdr
-pstng_date   = gv_budat.
      ls_hdr
-doc_type     = p_blart.
      ls_hdr
-header_txt   = '16* to 90*'.

      
CLEAR ls_acc.
      ls_acc
-itemno_acc = 1.
      ls_acc
-acct_type  = 'S'.
      ls_acc
-gl_account = p_gl_k.
      ls_acc
-material   = -matnr.
      ls_acc
-plant      = -werks.
      
INSERT ls_acc INTO TABLE lt_acc.

      
CLEAR ls_amt.
      ls_amt
-itemno_acc = ls_acc-itemno_acc.
      ls_amt
-curr_type  = '00'.
      ls_amt
-currency   = -waers.
      ls_amt
-amt_doccur = - -wrbtr.
      
INSERT ls_amt INTO TABLE lt_amt.

      ls_amt
-curr_type  = '10'.
      ls_amt
-currency   = ls_t001-waers.
      
ls_amt-amt_doccur = - -dmbtr.
      
INSERT ls_amt INTO TABLE lt_amt.

      
ADD 1 TO ls_acc-itemno_acc.
      ls_acc
-gl_account = p_gl_d.
      
INSERT ls_acc INTO TABLE lt_acc.

      ls_amt
-itemno_acc = ls_acc-itemno_acc.
      ls_amt
-curr_type  = '00'.
      ls_amt
-currency   = -waers.
      ls_amt
-amt_doccur = -wrbtr.
      
INSERT ls_amt INTO TABLE lt_amt.

      ls_amt
-curr_type  = '10'.
      ls_amt
-currency   = ls_t001-waers.
      ls_amt
-amt_doccur = -dmbtr.
      
INSERT ls_amt INTO TABLE lt_amt.
*
      
IF lv_test IS NOT INITIAL.
        
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
          
EXPORTING
            documentheader 
= ls_hdr
          
TABLES
            accountgl      
= lt_acc
            currencyamount 
= lt_amt
            extension2     
= lt_ext
            
return         = lt_ret.
      
ELSE.
        
CLEAR lv_obj_key.
        
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
          
EXPORTING
            documentheader 
= ls_hdr
          
IMPORTING
            obj_type       
= lv_obj_type
            obj_key        
= lv_obj_key
          
TABLES
            accountgl      
= lt_acc
            currencyamount 
= lt_amt
            extension2     
= lt_ext
            
return         = lt_ret.
      
ENDIF.

      
INSERT LINES OF lt_ret INTO TABLE lt_ret_all.
      
LOOP AT lt_ret TRANSPORTING NO FIELDS WHERE type EQ 'E' OR type EQ 'A'.
        lv_error 
= 'X'.
        
EXIT.
      
ENDLOOP.
      
IF lv_error IS INITIAL AND lv_test IS INITIAL.
        
LOOP AT gt_out ASSIGNING  WHERE cbox   EQ 'X'
                                         
AND waers  EQ -waers
                                         
AND matnr  EQ -matnr
                                         
AND werks  EQ -werks.
          
-belnr_clr = lv_obj_key+0(10).
          
-gjahr_clr = lv_obj_key+14(4).
        
ENDLOOP.
      
ENDIF.
    
ENDLOOP.
  
ENDDO.
*
  
IF lv_error IS NOT INITIAL.
    
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  
ELSE.
    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      
EXPORTING
        
wait = 'X'.
  
ENDIF.
* Display log
  
IF lv_error IS NOT INITIAL.
    
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
      
EXPORTING
        it_message 
= lt_ret_all.
  
ELSE.
    
PERFORM select_data. " reselect data
  
ENDIF.
**********************************************************************

ENDFORM.                    " POST