jueves, 9 de mayo de 2013

R3: EXIT_SAPLRSAP_004: Modify DataSource 0GLACCEXT_T011_HIER, 0PROFIT_CTR_0106_HIER, 0ACCOUNT_0109_HIER


CASE i_datasource.
  WHEN '0GLACCEXT_T011_HIER'.
    PERFORM jerarquia_balance TABLES c_t_hienode  c_t_hienode3.
    PERFORM jerarquia_carpetas TABLES C_T_FOLDERT.

  WHEN '0PROFIT_CTR_0106_HIER'.
      PERFORM profit_carpetas TABLES C_T_FOLDERT.

  WHEN '0ACCOUNT_0109_HIER'.
    PERFORM cuenta_carpetas TABLES C_T_FOLDERT.

ENDCASE.


*****************************


*&---------------------------------------------------------------------*
*&      Form  jerarquia_balance
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_T_DATA  text
*----------------------------------------------------------------------*

TYPE-POOLS: rsap.

TYPES: BEGIN OF s_reorg,
   nodo TYPE rshienodid,
   nodo_n TYPE rshienodid,
  END OF s_reorg.

TYPES t_reorg TYPE TABLE OF s_reorg.

TYPES: BEGIN OF s_node3,
  nodeid(8) TYPE n,
  iobjnm(30) TYPE c,
  nodename(32) TYPE c,
  tlevel(2) TYPE n,
  link TYPE c,
  parentid(8) TYPE n,
  childid(8) TYPE n,
  nextid(8) TYPE n,
  datefrom TYPE d,
  dateto TYPE d,
  intervl TYPE c,
  fieldnm(30) TYPE c,
  glaccext(18) TYPE c,
  rsign TYPE c,
  plumi TYPE c,
END OF s_node3.


*&---------------------------------------------------------------------*
*&      Form  jerarquia_balance
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_T_DATA   text
*----------------------------------------------------------------------*
FORM jerarquia_balance  TABLES i_t_data TYPE rsap_t_hienode
                               i_t_data3.

  DATA it_nodos TYPE rsap_t_hienode.
  DATA wa_nodos TYPE rsap_s_hienode.

  DATA wa_nodos_companyb33 TYPE rsap_s_hienode.
  DATA wa_nodos_companyb195 TYPE rsap_s_hienode.
  DATA lineas TYPE i.
  DATA nod_piv TYPE rshienodid.
  DATA ztab LIKE sy-tabix.
  DATA ztab_companyb33 LIKE sy-tabix.
  DATA ztab_companyb195 LIKE sy-tabix.

  DATA nodo_companyb126 TYPE rshienodid.
  DATA nodo_companyb138 TYPE rshienodid.
  DATA nodo_companybobsnotes TYPE rshienodid.
*  DATA nodo_companyb2 TYPE rshienodid.
  DATA nodo_companyb26 TYPE rshienodid.
*

*
  READ TABLE i_t_data INTO wa_nodos
    WITH KEY nodename = 'companyB126'.

  IF sy-subrc EQ 0.
    nodo_companyb126 = wa_nodos-nodeid.
  ENDIF.

  READ TABLE i_t_data INTO wa_nodos
  WITH KEY nodename = 'companyB138'.

  IF sy-subrc EQ 0.
    nodo_companyb138 = wa_nodos-nodeid.
  ENDIF.

  READ TABLE i_t_data INTO wa_nodos
  WITH KEY nodename = 'companyB26'.

  IF sy-subrc EQ 0.
    nodo_companyb26 = wa_nodos-nodeid.
  ENDIF.

  READ TABLE i_t_data INTO wa_nodos
  WITH KEY nodename = 'companyB0BSNOTES'.

  IF sy-subrc EQ 0.
    nodo_companybobsnotes = wa_nodos-nodeid.
  ENDIF.

*  READ TABLE i_t_data INTO wa_nodos
*  WITH KEY nodename = 'companyB2'.
*
*  IF sy-subrc EQ 0.
*    nodo_companyb2 = wa_nodos-nodeid.
*  ENDIF.



* En esta extraccion tenemos que colocar
* el nodo companyB138-Resultado del ejercicio 
* entre los nodos companyB33 y companyB195
* Así el nodo companyB138 tiene que ser nodo HIJO del nodo companyB26


  DATA it_reorg TYPE t_reorg.
  DATA wa_reorg TYPE s_reorg.

  DESCRIBE TABLE i_t_data LINES lineas.

  READ TABLE i_t_data INTO wa_nodos INDEX lineas.

  IF sy-subrc EQ 0.
    nod_piv = wa_nodos-nodeid.
  ENDIF.


  LOOP AT i_t_data INTO wa_nodos.
    IF wa_nodos-nodeid > nodo_companyb126.                      "1277
      EXIT.
    ENDIF.
    IF wa_nodos-nodeid >= nodo_companyb138. "875
      DELETE i_t_data INDEX sy-tabix.

      ADD 1 TO nod_piv.
      wa_reorg-nodo = wa_nodos-nodeid.
      wa_reorg-nodo_n = nod_piv.

      APPEND wa_reorg TO it_reorg.
      ADD 2 TO wa_nodos-tlevel.
      APPEND wa_nodos TO it_nodos.
    ENDIF.
  ENDLOOP.

  LOOP AT it_nodos INTO wa_nodos.

    IF wa_nodos-nodeid <> nodo_companyb138. "875
      ztab = sy-tabix.


      PERFORM dame_nuevo_nodo
                  TABLES
                     it_reorg
                  USING
                     wa_nodos-nodeid.

      PERFORM dame_nuevo_nodo
                  TABLES
                     it_reorg
                  USING
                     wa_nodos-parentid.

      PERFORM dame_nuevo_nodo
                  TABLES
                     it_reorg
                  USING
                     wa_nodos-childid.

      PERFORM dame_nuevo_nodo
                  TABLES
                     it_reorg
                  USING
                     wa_nodos-nextid.

      MODIFY it_nodos FROM wa_nodos INDEX ztab.
    ENDIF.

  ENDLOOP.


*------------------------------

  LOOP AT it_nodos INTO wa_nodos WHERE nodeid = nodo_companyb138. "875
    ztab = sy-tabix.

    PERFORM dame_nuevo_nodo
                TABLES
                   it_reorg
                USING
                   wa_nodos-nodeid.
    PERFORM dame_nuevo_nodo
                TABLES
                   it_reorg
                USING
                   wa_nodos-childid.

    READ TABLE i_t_data INTO wa_nodos_companyb33
    WITH KEY nodename = 'companyB33'.

    IF sy-subrc EQ 0.
      ztab_companyb33 = sy-tabix.
      wa_nodos_companyb33-nextid = wa_nodos-nodeid.
      MODIFY i_t_data FROM wa_nodos_companyb33 INDEX ztab_companyb33.
    ENDIF.


    READ TABLE i_t_data INTO wa_nodos_companyb195
    WITH KEY nodename = 'companyB195'.

    IF sy-subrc EQ 0.
      ztab_companyb195 = sy-tabix.
      wa_nodos-nextid = wa_nodos_companyb195-nodeid.
    ENDIF.

    MODIFY it_nodos FROM wa_nodos INDEX ztab.

  ENDLOOP.

*****************

*  DATA ztab_companyb180 LIKE sy-tabix.
*  DATA wa_nodos_companyb180 TYPE rsap_s_hienode.
*
*
*
*  READ TABLE i_t_data INTO wa_nodos_companyb180
*  WITH KEY nodename = 'companyB180'.
*
*  IF sy-subrc EQ 0.
*    ztab_companyb180 = sy-tabix.
*    wa_nodos_companyb180-nextid = nodo_companybobsnotes. "1278
*    MODIFY i_t_data FROM wa_nodos_companyb180 INDEX ztab_companyb180.
*  ENDIF.

**********************************************
  DATA ztab_companyb0bsnotes LIKE sy-tabix.
  DATA wa_nodos_companyb0bsnotes TYPE rsap_s_hienode.


  READ TABLE i_t_data INTO wa_nodos_companyb0bsnotes
  WITH KEY nodename = 'companyB0BSNOTES'.

  IF sy-subrc EQ 0.
    ztab_companyb0bsnotes = sy-tabix.
    CLEAR wa_nodos_companyb0bsnotes-childid.
    MODIFY i_t_data
    FROM wa_nodos_companyb0bsnotes INDEX ztab_companyb0bsnotes.
  ENDIF.

*******************************
  DATA ztab_companyb138 LIKE sy-tabix.
  DATA wa_nodos_companyb138 TYPE rsap_s_hienode.



  READ TABLE it_nodos INTO wa_nodos_companyb138
  WITH KEY nodename = 'companyB138'.

  IF sy-subrc EQ 0.
    ztab_companyb138 = sy-tabix.
    wa_nodos_companyb138-parentid = nodo_companyb26. "483
    wa_nodos_companyb138-tlevel = 5.
    MODIFY it_nodos FROM wa_nodos_companyb138 INDEX ztab_companyb138.
  ENDIF.

********************************************
  DATA ztab_companyb125 LIKE sy-tabix.
  DATA wa_nodos_companyb125 TYPE rsap_s_hienode.



  READ TABLE it_nodos INTO wa_nodos_companyb125
  WITH KEY nodename = 'companyB125'.

  IF sy-subrc EQ 0.
    ztab_companyb125 = sy-tabix.
    wa_nodos_companyb125-tlevel = 6.
    MODIFY it_nodos FROM wa_nodos_companyb125 INDEX ztab_companyb125.
  ENDIF.

********************************************
  DATA ztab_companyb126 LIKE sy-tabix.
  DATA wa_nodos_companyb126 TYPE rsap_s_hienode.



  READ TABLE it_nodos INTO wa_nodos_companyb126
  WITH KEY nodename = 'companyB126'.

  IF sy-subrc EQ 0.
    ztab_companyb126 = sy-tabix.
    wa_nodos_companyb126-tlevel = 6.
    MODIFY it_nodos FROM wa_nodos_companyb126 INDEX ztab_companyb126.
  ENDIF.


*******************************
  APPEND LINES OF it_nodos TO i_t_data.



* sincroniza

  i_t_data3[] = i_t_data[].

  FIELD-SYMBOLS TYPE s_node3.
  DATA long TYPE i.

  LOOP AT i_t_data3 ASSIGNING .

    IF -iobjnm = '0HIER_NODE'.
      -fieldnm = 'NODNAME'.
    ENDIF.

    IF -iobjnm = '0GLACCEXT'.
      -fieldnm = 'GLACCEXT'.
      -glaccext = -nodename.
      long = STRLEN( -nodename ).
      long = long - 2.
      IF -nodename+long = '1A'.
        -plumi = 1.
      ENDIF.
      IF -nodename+long = '2A'.
        -plumi = 1.
      ENDIF.

    ENDIF.

  ENDLOOP.







ENDFORM.                    " jerarquia_balance

*&---------------------------------------------------------------------*
*&      Form  dame_nuevo_nodo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->T_REORG    text
*      -->NODO       text
*----------------------------------------------------------------------*
FORM dame_nuevo_nodo TABLES it_reorg TYPE t_reorg
                     USING nodo TYPE rshienodid.

  DATA wa_reorg TYPE s_reorg.

  IF NOT nodo IS INITIAL.

    READ TABLE it_reorg INTO wa_reorg
     WITH KEY nodo = nodo.

    IF sy-subrc EQ 0.
      nodo = wa_reorg-nodo_n.
    ELSE.
      BREAK-POINT.
    ENDIF.

  ENDIF.

ENDFORM.                    "dame_nuevo_nodo

*----------------------------------------------------------------------*
FORM jerarquia_carpetas TABLES C_T_FOLDERT TYPE RSAP_T_FOLDERT.
*  LOOP at C_T_FOLDERT..
*    C_T_FOLDERT-LANGU = 'EN'.
*    MODIFY C_T_FOLDERT.
*  ENDLOOP.


ENDFORM.                    "jerarquia_carpetas
*----------------------------------------------------------------------*
FORM profit_carpetas TABLES C_T_FOLDERT  TYPE RSAP_T_FOLDERT.

  LOOP at C_T_FOLDERT..

    IF C_T_FOLDERT-LANGU = 'E'.
      select single DESCRIPT into C_T_FOLDERT-TXTLG
      from SETHEADERT where
       LANGU   = 'S' and
       SUBCLASS = C_T_FOLDERT-NODENAME(4) and
       SETCLASS = '0106' and
       SETNAME = C_T_FOLDERT-NODENAME+4(24).

      C_T_FOLDERT-TXTSH = C_T_FOLDERT-TXTLG.
      C_T_FOLDERT-TXTMD = C_T_FOLDERT-TXTLG.
    ENDIF.


    MODIFY C_T_FOLDERT.
  ENDLOOP..
ENDFORM.                    "profit_carpetas
*----------------------------------------------------------------------*
FORM cuenta_carpetas TABLES C_T_FOLDERT  TYPE RSAP_T_FOLDERT.
  LOOP at C_T_FOLDERT..

    IF C_T_FOLDERT-LANGU = 'E'.
      select single DESCRIPT into C_T_FOLDERT-TXTLG
      from SETHEADERT where
       LANGU   = 'S' and
       SUBCLASS = C_T_FOLDERT-NODENAME(4) and
*       SETCLASS = '0106' and
       SETNAME = C_T_FOLDERT-NODENAME+4(10).

      C_T_FOLDERT-TXTSH = C_T_FOLDERT-TXTLG.
      C_T_FOLDERT-TXTMD = C_T_FOLDERT-TXTLG.
    ENDIF.


    MODIFY C_T_FOLDERT.
  ENDLOOP..
ENDFORM.                    "cuenta_carpetas

No hay comentarios: