SAP AÑADIR CAMPOS A VA05 ( FIELD SYMBOLS )

En este artículo veremos como añadir campos a la VA05, esta transacción no es común como las demás porque consiste en una tabla dinámica en la cual se van cargando los datos, por lo que tendremos que asignar field symbols.

Para esto tenemos una badi a implementar para tal efecto
BADI_SDOC_WRAPPER

En ella tenemos dos métodos que deberemos implementar ambos

IF_BADI_SDOC_WRAPPER~ADAPT_RESULT_COMP
Método para añadir campos al listado


La idea es añadir cinco campos al listado

  1. Motivo de pedido
  2. Texto de la posición del pedido
  3. Ultima Factura
  4. Referencia de la última Factura
  5. Marca ( Característica )




METHOD if_badi_sdoc_wrapper~adapt_result_comp.


    "Añadimos el motivo de pedido el texto de posición ref última factura y la última factura

    DATAls_result TYPE if_sdoc_select=>tcs_result_comp.
    CLEAR ls_result.

    "1 Motivo de Pedido => Grupo Materiales
    ls_result-name          'ZZKONDM'.
    ls_result-table         space.
    ls_result-field          'TEXT20'.
    ls_result-table_alias   space.
    ls_result-text          'Motivo de Pedido'.

    APPEND ls_result TO ct_result_comp.

    "2 Texto de la posición
    ls_result-name          'ZZSGTXT'.
    ls_result-table         space.
    ls_result-field          'TEXT70'.
    ls_result-table_alias   space.
    ls_result-text          'Texto Motivo'.

    APPEND ls_result TO ct_result_comp.


    "3 Nº Última factura
    ls_result-name          'ZZULFACT'.
    ls_result-table         space.
    ls_result-field          'TEXT10'.
    ls_result-table_alias   space.
    ls_result-text          'Última Factura'.

    APPEND ls_result TO ct_result_comp.


    "4 Ref Última factura
    ls_result-name          'ZZULREUF'.
    ls_result-table         space.
    ls_result-field          'CHAR16'.
    ls_result-table_alias   space.
    ls_result-text          'Ref ult Fact'.

    APPEND ls_result TO ct_result_comp.


    "5 MARCA
    ls_result-name          'ZZMARCA'.
    ls_result-table         space.
    ls_result-field          'CHAR30'.
    ls_result-table_alias   space.
    ls_result-text          'Marca'.

    APPEND ls_result TO ct_result_comp.

  ENDMETHOD.








IF_BADI_SDOC_WRAPPER~POST_PROCESSING
Método para la asignación de los valores de los campos añadidos

FIELD-SYMBOLS<result>     TYPE any,
                   <bezei>      TYPE char20,
                   <zzsgtxt>    TYPE char70,
                   <zzulfact>   TYPE char10,
                   <zzulfact_o> TYPE char35,
                   <zzulreuf>   TYPE char16,
                   <zzmarca>    TYPE char30,
                   <lv_matnr>   TYPE matnr,
                   <lv_vbeln>   TYPE vbeln,
                   <lv_posnr>   TYPE posnr.

    DATAlv_vkaus TYPE abrvw,
          lv_kondm TYPE char20,
          lv_sgtxt TYPE char70,
          lv_marca TYPE atwtb,
          lv_bstkd TYPE bstkd.

    DATAlt_tdline TYPE STANDARD TABLE OF tline,
          ls_tdline TYPE tline,
          lv_name   TYPE tdobname,
          gv_text   TYPE string,
          lv_ihrez  TYPE ihrez.






**********************************************************************
*Primer campo ( MOTIVO DE PEDIDO ).
    TRY.
        ASSIGN COMPONENT 'VBELN' OF STRUCTURE cs_result
                                      TO <lv_vbeln> .

        ASSIGN COMPONENT 'POSNR' OF STRUCTURE cs_result
                                      TO <lv_posnr> .


        IF <lv_vbeln> IS ASSIGNED AND
           <lv_posnr> IS ASSIGNED.

          "1 Añado la utilización por posición
          SELECT SINGLE vtext FROM t178t AS a
            JOIN    vbap  AS ON  b~kondm a~kondm

            INTO lv_kondm
            WHERE b~vbeln EQ <lv_vbeln> AND
                  b~posnr EQ <lv_posnr> AND
                  a~spras 'S'.

        ENDIF.

        "2 lo meto en la estructura
        ASSIGN COMPONENT 'ZZKONDM' OF STRUCTURE cs_result TO <bezei>.
        IF <bezei> IS ASSIGNED.
          MOVE lv_kondm TO <bezei>.
        ENDIF.

      CATCH cx_root.
    ENDTRY.




**********************************************************************
*Segundo campo ( Texto de la Posición ).

    IF <lv_vbeln> IS ASSIGNED AND <lv_posnr> IS ASSIGNED.

      CONCATENATE <lv_vbeln> <lv_posnr> INTO lv_name.

      "1 Añado el texto de la posición del pedido.
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          client                  sy-mandt
          id                      'Z001'
          language                'S'
          name                    lv_name
          object                  'VBBP'
        TABLES
          lines                   lt_tdline
        EXCEPTIONS
          id                      1
          language                2
          name                    3
          not_found               4
          object                  5
          reference_check         6
          wrong_access_to_archive 7
          OTHERS                  8.

      IF sy-subrc 0.
        LOOP AT lt_tdline INTO ls_tdline.
          CONCATENATE gv_text ls_tdline-tdline  INTO gv_text SEPARATED BY space.
*        p_gv_text =  ls_tdline-tdline.
        ENDLOOP.
      ELSE.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


      TRY .
          "2 lo meto en la estructura
          ASSIGN COMPONENT 'ZZSGTXT' OF STRUCTURE cs_result TO <zzsgtxt>.
          IF <zzsgtxt> IS ASSIGNED.
            MOVE gv_text TO <zzsgtxt>.
            CONDENSE <zzsgtxt>.
          ENDIF.
        CATCH cx_root.

      ENDTRY.

    ENDIF.





**********************************************************************
*Tercer campo ( ÚLTIMA FACTURA ). NOTA: Lo muevo de sitio. 
    TRY.

        ASSIGN COMPONENT 'BSTKD'    OF STRUCTURE cs_result TO <zzulfact_o>.
        ASSIGN COMPONENT 'ZZULFACT' OF STRUCTURE cs_result TO <zzulfact>.

        IF <zzulfact_o> IS ASSIGNED AND <zzulfact> IS ASSIGNED AND
           <lv_vbeln>   IS ASSIGNED AND <lv_posnr> IS ASSIGNED.

          IF <zzulfact_o> IS INITIAL.
            "Lo busco en VBKD
            CLEAR lv_bstkd.
            SELECT SINGLE bstkd INTO lv_bstkd FROM vbkd
                WHERE vbeln EQ <lv_vbeln> AND
                      posnr EQ    <lv_posnr>.

            MOVE lv_bstkd TO <zzulfact>.

          ELSE.


            MOVE  <zzulfact_o> TO <zzulfact>.
            CLEAR <zzulfact_o>.
          ENDIF.
        ENDIF.

      CATCH cx_root.
    ENDTRY.




**********************************************************************
*Cuarto Campo ( REF ULTIMA FACT ).

    IF <lv_vbeln> IS ASSIGNED AND <lv_posnr> IS ASSIGNED.

      TRY.

          ASSIGN COMPONENT 'ZZULREUF' OF STRUCTURE cs_result TO <zzulreuf>.

          IF <zzulreuf> IS ASSIGNED.

            CLEAR lv_ihrez.
            SELECT SINGLE ihrez FROM vbkd INTO lv_ihrez
                       WHERE vbeln EQ <lv_vbeln> AND
                             posnr EQ <lv_posnr>.

            MOVE lv_ihrez TO <zzulreuf>.

          ENDIF.

        CATCH cx_root.
      ENDTRY.

    ENDIF.




**********************************************************************
*Quinto Campo ( MARCA ).

    TRY.

        ASSIGN COMPONENT 'MATNR' OF STRUCTURE cs_result TO <lv_matnr>.
        ASSIGN COMPONENT 'ZZMARCA' OF STRUCTURE cs_result TO <zzmarca>.

        IF <lv_matnr> IS ASSIGNED AND <zzmarca> IS ASSIGNED.

          CLEAR lv_marca.
          SELECT SINGLE atwtb FROM zausp INTO lv_marca
                     WHERE matnr EQ <lv_matnr> AND
                           atnam EQ 'MARCAS'.

          MOVE lv_marca TO <zzmarca>.

        ENDIF.

      CATCH cx_root.
    ENDTRY.



  ENDMETHOD.





Comentarios

  1. Estimado Diego, gracias. Lo estoy probando en S4 HANA 1709.

    ResponderEliminar
  2. ¿Esto es para la lista de salida? ¿les funcionó? Estoy reviando en version de Hana pero no lo puedo implentar, dice que no existe la Badi en SE19. En se18 si la puedo verificar

    ResponderEliminar
  3. Me pasa algo parecido, alguien ha conseguido implementar esa badi como comentan en el post?
    Gracias

    ResponderEliminar

Publicar un comentario