lunes, 27 de enero de 2014

Función para obtener los impuestos según país (SAP-ABAP)

Import de la función:



Tabla de retorno de la función:






Creación de estructura en la SE11:





Código fuente de la función:

 DATAlt_data TYPE STANDARD TABLE OF zcfcl_fi_es_tax,
        ls_data TYPE zcfcl_fi_es_tax.

  DATAls_t007a TYPE t007a,
        lt_t007a TYPE STANDARD TABLE OF t007a,
        lt_ftaxp TYPE STANDARD TABLE OF ftaxp,
        ls_ftaxp TYPE ftaxp,
        lv_kalsm TYPE t005-kalsm,
        lv_txjcd TYPE txjcd.

  DATAlv_valor TYPE DECIMALS 2.

  CONSTANTSlc_fix_kappl TYPE kappl VALUE 'TX'.

  CLEAR lv_kalsm.
  REFRESHlt_t007a[]lt_ftaxp[]et_data[].
  SELECT SINGLE kalsm FROM t005 INTO lv_kalsm
  WHERE land1 EQ iv_land1.
  IF sy-subrc EQ 0.
    CLEAR lv_txjcd.
    SELECT SINGLE txjcd FROM ttxj INTO lv_txjcd
    WHERE kalsm EQ lv_kalsm.
    IF sy-subrc NE OR lv_txjcd IS INITIAL.
      MOVE 'X' TO lv_txjcd.
    ENDIF.

    SELECT FROM t007a INTO TABLE lt_t007a
    WHERE kalsm EQ lv_kalsm.
    IF sy-subrc EQ 0.
      CLEAR ls_t007a.
      LOOP AT lt_t007a INTO ls_t007a.

        CALL FUNCTION 'GET_TAX_PERCENTAGE'
          EXPORTING
            aland   iv_land1
            datab   sy-datum
            mwskz   ls_t007a-mwskz
            txjcd   lv_txjcd
          TABLES
            t_ftaxp lt_ftaxp.

        IF lt_ftaxp[] IS NOT INITIAL.
          CLEAR ls_ftaxp.
          READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
          IF sy-subrc EQ 0.
            MOVE-CORRESPONDING ls_ftaxp TO ls_data.
            MOVE ls_t007a-mwskz TO ls_data-mwskz.
            lv_valor ls_ftaxp-kbetr / 10.
            WRITE  lv_valor TO ls_data-tax DECIMALS .
            REPLACE ALL OCCURRENCES OF '.' IN ls_data-tax WITH ','.
            CONDENSE ls_data-tax.
            APPEND ls_data TO lt_data.
          ENDIF.
        ENDIF.

      ENDLOOP.

    ENDIF.

  ENDIF.

  MOVE lt_data[] TO et_data[].

Form para obtener texto (SAP-ABAP... FM READ_TEXT)

*&---------------------------------------------------------------------*
*&      Form  F_GET_TEXT
*&---------------------------------------------------------------------*
FORM f_get_text  USING    p_v_obj      TYPE tdobject
                                               p_v_id        TYPE tdid
                                               p_v_langu   TYPE spras
                                               p_v_name   TYPE tdobname
                    CHANGING      p_v_string   TYPE string.

  DATAlt_lines_tab    TYPE  efg_tab_tline,
              ls_line_es       TYPE  tline,
              lv_texto_line   TYPE  string.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                          p_v_id
      language                p_v_langu
      name                     p_v_name
      object                   p_v_obj
    TABLES
      lines                      lt_lines_tab
    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.
* Implement suitable error handling here
  ELSE.
    LOOP AT lt_lines_tab INTO ls_line_es.
      IF sy-tabix EQ 1.
        p_v_string ls_line_es-tdline.
      ELSE.
        CONDENSE ls_line_es-tdline.
        CONCATENATE p_v_string ls_line_es-tdline INTO p_v_string SEPARATED BY space.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " F_GET_TEXT


LLAMADA A LA FORM: en este caso es un texto de posición.


      DATA:   lv_string         TYPE string,

                     lv_name         TYPE tdobname,       CLEARlv_stringlv_name.
      CONCATENATE <fs_item>-vbeln <fs_item>-vbpos INTO lv_name.


      PERFORM f_get_text    USING 'VBBP'
                                                          '0001'
                                                          syst-langu
                                                          lv_name
                                    CHANGING lv_string.



Form para eliminar ceros de la izquierda (SAP-ABAP)

*&---------------------------------------------------------------------*
*&      Form  F_ALPHA_O
*&---------------------------------------------------------------------*
FORM f_alpha_o  CHANGING p_v.

  WRITE p_v TO p_v USING EDIT MASK '==ALPHA'.
  CONDENSE p_v.

ENDFORM.                    " F_ALPHA_O

Llamada a la form:


DATA: lv_variable TYPE c LENGTH 5 VALUE '00005'.


PERFORM f_alpha_o CHANGING lv_variable.

Form para llenar un "Rango" con Set de Datos (SAP-ABAP)

*&---------------------------------------------------------------------*
*&      Form  F_GET_SET_DATA
*&---------------------------------------------------------------------*
FORM f_get_set_data TABLES p_t_range
                                           USING p_v_set.

  REFRESHp_t_range[].
  SELECT  setleaf~valsign      AS sign
                  setleaf~valoption  AS option
                  setleaf~valfrom    AS low
                  setleaf~valto        AS high
  INTO CORRESPONDING FIELDS OF TABLE p_t_range
  FROM  setheader INNER JOIN setleaf
    ON  setleaf~setclass  EQ setheader~setclass
   AND  setleaf~subclass  EQ setheader~subclass
   AND  setleaf~setname   EQ setheader~setname
  WHERE setheader~setname EQ p_v_set.

ENDFORM.                    "f_get_set_data

INVOCAR LA FORM:


  RANGES:
  lr_kschl FOR komv-kschl.

  PERFORM f_get_set_data TABLES lr_kschl
                                              USING 'Z0004'.  "set  creado en la trx GS01