20240106

READ TABLE (inline)

  METHOD read_table_1.
   data: t_kna1     type table of kna1.
**   expressão
*    itab[idx|key_comp = x]

** Forma Antiga
   READ TABLE t_kna1 into DATA(s_kna1_1)
     WITH KEY kunnr = '10' .

** Nova Forma
   data(s_kna1_2) = t_kna1[ kunnr = '10' ].


  ENDMETHOD.



  METHOD  read_table_2.

    types: BEGIN OF ty_kna1,
              kunnr     type kna1-kunnr,
              name1     type kna1-name1,
           END OF ty_kna1,

    y_t_kna1    type STANDARD TABLE OF ty_kna1
           WITH KEY PRIMARY_KEY COMPONENTS kunnr.

*   incluindo regisros na tabela interna
    data(t_kna1) = value y_t_kna1(
                 ( kunnr = '10'  name1 = 'Cliente Dez' )
                 ( kunnr = '11'  name1 = 'Cliente Vinte' )
    ).

    data(s_dez)   = t_kna1[ kunnr = '10' ].
    data(s_vinte) = t_kna1[ 2 ].

    TRY.
       data(s_none) = t_kna1[ 3 ].

    CATCH cx_sy_itab_line_not_found INTO data(ex).

    ENDTRY.



  ENDMETHOD.




  METHOD read_table_3.

    types: BEGIN OF ty_kna1,
              kunnr     type kna1-kunnr,
              name1     type kna1-name1,
           END OF ty_kna1,

    y_t_kna1    type STANDARD TABLE OF ty_kna1
           WITH KEY PRIMARY_KEY COMPONENTS kunnr.


    data(t_kna1) = VALUE y_t_kna1(
                     ( kunnr = '10' name1 = 'Cliente Dez' )
                     ( kunnr = '20' name1 = 'Cliente Vinte' )
    ).


*    data(s_10) = t_kna1[ kunnr = '10' ].
*    data(s_10_name1) = s_10-name1 .
*
*    ou

    data(s_10_name1) = t_kna1[ kunnr = '10' ]-name1 .

  ENDMETHOD.



** Table expression como LHS (left hand expression)
**
**
  METHOD build_name.

  ENDMETHOD.




  METHOD read_table_4.
     types: begin of y_order,
                vbeln        type vbak-vbeln,
                netwr        type vbak-netwr,
            end of y_order,

            begin of y_kna1,
              kunnr    type kna1-kunnr,
              name1    type kna1-name1,
              t_orders type STANDARD TABLE OF y_order
                 WITH DEFAULT KEY,
            end of y_kna1,

            y_t_kna1    type STANDARD TABLE OF y_kna1
              WITH KEY PRIMARY_KEY COMPONENTS kunnr.



     data(t_kna1) = value y_t_kna1(
       ( kunnr = '10'  name1 = 'Cliente dez'
         t_orders = value #(
           ( vbeln = '1001' netwr = '43421432' )
           ( vbeln = '1002' netwr = '3713322' )
         )
       )

       ( kunnr = '20'  name1 = 'Cliente vinte'
         t_orders = value #(
           ( vbeln = '2001' netwr = '202001' )
           ( vbeln = '2002' netwr = '202002' )
           ( vbeln = '2003' netwr = '202003' )
         )
       )
     ).



     data(v_2002_netwr) = t_kna1[ kunnr = '20' ]-t_orders[ vbeln = '2002' ]-netwr.

*    ou

     t_kna1[ kunnr = '20' ]-t_orders[ vbeln = '2002' ]-netwr = '202002'.

  ENDMETHOD.




  METHOD read_table_5.
     types: begin of y_kna1,
              kunnr    type kna1-kunnr,
              name1    type kna1-name1,
            end of y_kna1,

            y_t_kna1    type STANDARD TABLE OF y_kna1
              WITH KEY PRIMARY_KEY COMPONENTS kunnr
              WITH NON-UNIQUE SORTED KEY k2
              COMPONENTS name1.



     data(t_kna1) = value y_t_kna1(
       ( kunnr = '10'  name1 = 'Cliente dez' )
       ( kunnr = '20'  name1 = 'Cliente vinte' )
       ( kunnr = '30'  name1 = 'Cliente trinta' )
     ).



     data(s_trinta) = t_kna1[ KEY k2 index 2 ].

*    ou

     data(s_10)     = t_kna1[ KEY k2 name1 = 'Cliente dez' ].

  ENDMETHOD.