Función para cancelar/reversar facturaciones de ventas (SD)

28 02 2019

Con la bapi BAPI_BILLINGDOC_CANCEL1 podemos cancelar/reversar documentos de facturación del área de ventas (SAP SD).

Esta bapi cumple la misma labor que la transacción VF11.


Este es el código:

DATA:
lv_doc         LIKE bapivbrksuccessbill_doc,
lv_date       TYPE bf_datm1eb,
t_return      TYPE TABLE OF bapireturn1,
t_success    TYPE TABLE OF bapivbrksuccess.

lv_doc  = vbeln. «Número de factura SD que se quiere cancelar.
lv_date = fecha. «Fecha en la que se contabilizará la cancelación.

* Función que reversa el documento
CALL FUNCTION BAPI_BILLINGDOC_CANCEL1
EXPORTING
billingdocument = lv_doc
billingdate  = lv_date
*testrun         =
*no_commit   =
TABLES
return  = t_return
success = t_success.

*La tabla t_return devuelve todos los mensajes ocurridos durante la cancelación.
*La tabla t_succes devuelve, entre otros datos, el número de la cancelación.


Technorati tags:





Función para obtener las cc-nóminas (sueldo) de un empleado

22 09 2011

En el mundo de SAP HR, la cc-nómina ("Clave Concepto Nómina") es cada uno de los conceptos que componen el sueldo de un trabajador.

Estos conceptos se ven muy claros en un recibo de sueldo. Cada renglón con código, descripción y monto es un concepto; y por ende una cc-nómina.

Es decir: el sueldo es un concepto, las horas extras es otro concepto, etc, etc.


Si alguna vez nos toca hacer un programa donde necesitemos conocer el sueldo y/o composición de un empleado. Entonces la función HRCM_PAYROLL_RESULTS_GET nos será de muchísima utilidad para evitar el uso de base de datos lógicas de HR y su “engorrosa” codificación.
Ya que con sólo pasarle el número de legajo del trabajador y una fecha de inicio y fin, obtendremos una estructura completa de tablas con información del sueldo y sus cc-nóminas.

image

Por ejemplo en la estructura payroll_result_tab tendremos la tabla RT con el listado de cc-nóminas con sus respectivos montos:

image


Technorati tags:





Función SAVE_TEXT – Crear y guardar Textos en SAP

15 08 2008

Con la función SAVE_TEXT vamos a poder crear y completar campos de textos en SAP. Podremos llenar, por ejemplo, textos de cabecera y posición en forma masiva.


Vamos a necesitar algo de información previa. Para eso hay que ir al lugar donde ponemos el texto y clickeamos en el menú Pasar a —> Cabecera…

 

El código que tenemos que agregar es:

*Declaraciones para los textos.
DATA: it_header  TYPE thead,
           it_lines      TYPE TABLE OF tline.

         REFRESH it_lines.
         CLEAR it_header.

*—–>Texto para agregar       
        it_lines-tdline = ‘Este es un texto de cabecera’.
        APPEND wa_lines TO it_lines.

*—–>Completamos con los datos que obtuvimos arriba 
        it_header-tdobject = ‘VBBK’.  «VG_OBJ
        it_header-tdname = ‘0000000057’.  «VG_NAME
        it_header-tdid   = ‘ZCER’.  «VG_ID
        it_header-tdspras = ‘E’.  «VG_LANG
        it_header-tdlinesize = ‘072’.

*—->Llamamos a la función que nos completa el texto
        CALL FUNCTION ‘SAVE_TEXT’
          EXPORTING
            header          = it_header
            insert          = ‘X’
            savemode_direct = ‘X’
          TABLES
            lines           = it_lines
          EXCEPTIONS
            id              = 1
            language        = 2
            name            = 3
            object          = 4
            OTHERS          = 5.
        IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.

Como resultado obtenemos:


Technorati tags:





Función RZL_READ_DIR_LOCAL – Conocer contenido de un directorio

14 08 2008

Con la función RZL_READ_DIR_LOCAL podemos saber cuál es el contenido de un directorio del servidor en SAP.

Este es el código:

*-Declaro un parameter en el cual se completa la ruta del servidor del que queremos conocer su contenido
PARAMETERS:
            p_file TYPE rlgrap-filename OBLIGATORY DEFAULT ‘/data/’.

*-Variable para pasarle la ruta a la función
DATA: lv_name TYPE salfile-longname.

*->Levanto la lista de directorios
    lv_name = p_file.
    CALL FUNCTION ‘RZL_READ_DIR_LOCAL’
      EXPORTING
        name           = lv_name
      TABLES
        file_tbl       = it_filedir
      EXCEPTIONS
        argument_error = 1
        not_found      = 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.
    ENDIF.

*Como resultado en la tabla interna it_filedir obtenemos todo el contenido, *ya sean subcarpetas o archivos, de la ruta del servidor que ingresamos *por parámetro.


Technorati tags:





Crear Matchcodes (ayudas) con una tabla interna.

28 11 2007

El próximo ejemplo sirve para crear ayudas (matchcodes) con una tabla interna de nuestro programa.
Así de simple, hacemos una búsqueda a alguna tabla y el resultado lo guardamos en una tabla interna que se la pasamos a la función F4IF_INT_TABLE_VALUE_REQUEST que nos va a mostrar la ayuda.

Quiero agradecer esta forma de crear ayudas a mi compañero y amigo Rodrigo (http://ramgv-sap.blogspot.com).


*En este ejemplo creo un select-option para un material. Cuya ayuda será *el nº de material para VBELN =  ‘0000000001’ y POSNR = ‘000010’.

TABLES: VBAP,
             DDSHRETVAL.

DATA: BEGIN OF IT_MATNR OCCURS 0,
               MATNR LIKE VBAP-MATNR,
               ARKTX LIKE VBAP-ARKTX,
           END OF IT_MATNR.

DATA: BEGIN OF IT_MATCH OCCURS 0,  «Esta tabla nos devuelve la ayuda
               SHLPNAME  LIKE DDSHRETVAL-SHLPNAME,
               FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
               RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
               FIELDVAL  LIKE DDSHRETVAL-FIELDVAL,
               RETFIELD  LIKE DDSHRETVAL-RETFIELD,
           END OF IT_MATCH.

SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
  SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLQ1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
  SELECT MATNR
              ARKTX
      FROM VBAP
        INTO TABLE IT_MATNR
        WHERE VBELN EQ ‘0000000001’ AND
                    POSNR EQ ‘000010’.

  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
    EXPORTING
      RETFIELD        = ‘MATNR’
      WINDOW_TITLE    = ‘Material’
      VALUE_ORG       = ‘S’
    TABLES
      VALUE_TAB       = IT_MATNR
      RETURN_TAB      = IT_MATCH
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC EQ 0.
    READ TABLE IT_MATCH INDEX 1.
    MOVE IT_MATCH-FIELDVAL TO S_MATNR-LOW.
  ENDIF.


Technorati tags:





Ayudas (matchcodes) para entradas en base al tipo de datos

27 11 2007

Generalmente cuando queremos agregar ayudas (matchcodes) vamos a la transacción SE11 y nos fijamos qué «Ayuda para búsqueda» tiene asociado el campo.

Pero muchas veces el matchcode es del tipo «Ayudas para entradas en base al tipo de datos». En esos casos la ayuda se genera con una función.
Por tal motivo la solución es buscar alguna transacción que tenga el matchcode del campo que necesitamos y debuggueamos al momento de abrir la ayuda para encontrar la función.

A continuación voy a dejar un ejemplo para los campos LAUFD (Fecha de Ejecución) y LAUFI (ID Ejecución). Son parámetros muy comunes (Ej: transacción F110).


DATA: TLAUFK LIKE ILAUFK OCCURS 0 WITH HEADER LINE.

PARAMETERS:
            P_LAUFD LIKE F110V-LAUFD OBLIGATORY,   «Fecha de Ejecución
            P_LAUFI LIKE F110V-LAUFI OBLIGATORY.     «ID Ejecución

**Habilito con la tecla F4 el matchcode para el campo LAUFI
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFI.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

  CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.

 

**Habilito con la tecla F4 el matchcode para el campo LAUFD
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFD.
  REFRESH TLAUFK.
  TLAUFK-LAUFK = SPACE.
  TLAUFK-SIGN = ‘I’.
  APPEND TLAUFK. 

CALL FUNCTION ‘F4_ZAHLLAUF’
    EXPORTING
      F1TYP = ‘D’
      F2NME = ‘P_LAUFI’
    IMPORTING
      LAUFD = P_LAUFD
      LAUFI = P_LAUFI
    TABLES
      LAUFK = TLAUFK.


Technorati tags:





Leer campos de texto en SAP

24 11 2007

Para poder leer los campos de texto se usa la función read_text_inline. Esto generalmente lo usamos en formularios para mostrar textos de cabecera o de posición por ejemplo.


Para saber como llenar los campos, vamos al lugar donde cargamos el texto:
image

Una vez ahí clickeamos en el menú Pasar a —> Cabecera…
image

VG_INLINE  suele tener el valor 1 (VG_INLINE = ‘1’.)

 

El código que tenemos que agregar es:

TYPES: it_lin LIKE tline .

DATA:   VG_INLINE TYPE CHAR1,
             VG_NAME LIKE THEAD-TDNAME,
             IT_LINES TYPE TABLE OF IT_LIN,
             IT_INLINE TYPE TABLE OF IT_LIN,
             VG_ID LIKE THEAD-TDID,
             VG_LANG LIKE THEAD-TDSPRAS,
             VG_OBJ LIKE THEAD-TDOBJECT,

CALL FUNCTION ‘READ_TEXT_INLINE’
  EXPORTING
    ID                        = VG_ID
    INLINE_COUNT    = VG_INLINE
    LANGUAGE          = VG_LANG
    NAME                  =  VG_NAME
    OBJECT               = VG_OBJ
  TABLES
    INLINES               = IT_INLINE
    LINES                  = IT_LINES
EXCEPTIONS
   ID                              = 1
   LANGUAGE                = 2
   NAME                        = 3
   NOT_FOUND              = 4
   OBJECT                     = 5
   REFERENCE_CHECK   = 6
   OTHERS                     = 7.
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* En la tabla IT_LINES nos queda el texto guardado


Technorati tags:





Calculadora en un POP-UP

24 11 2007

image

El siguiente código nos generará una calculadora en una ventana (POP-UP). La función ‘FITRV_CALCULATOR’ nos devolverá en la variable X_VALUE el resultado del cálculo que haya hecho el usuario para luego utilizarlo como queramos en nuestro programa.


*——————————————–
* Calculadora para usuarios
*——————————————–

REPORT ZCALCULADORA.

DATA: X_VALUE(15) TYPE C.

CALL FUNCTION ‘FITRV_CALCULATOR’
* EXPORTING
*   INPUT_VALUE                =
*   CURRENCY                   =
*   START_COLUMN               = ’10’
*   START_ROW                  = ’10’
  IMPORTING
    OUTPUT_VALUE               = X_VALUE
  EXCEPTIONS
    INVALID_INPUT              = 1
    CALCULATION_CANCELED       = 2
    OTHERS                     = 3.

IF SY-SUBRC = 0. «En este ejemplo imprimimos por pantalla el resultado
  WRITE:/ ‘Output Value ‘, X_VALUE.
ENDIF.


Technorati tags:





Mostrar importe en letras

20 11 2007

A la siguiente función vamos a poder pasarle en una variable un monto (importe) y la misma nos devolverá en una estructura el importe escrito en letras (el monto en texto).

Esto suele ser muy útil sobre todo en formularios donde debemos dejar explícitos los precios en letras


DATA: IMPORTE_LETRAS TYPE SPELL.

CALL FUNCTION ‘SPELL_AMOUNT’
     EXPORTING
        AMOUNT = VG_MONTO    «importe
        CURRENCY = ‘USD’           «moneda
        LANGUAGE = SY-LANGU   «idioma en que devuelve el texto
     IMPORTING
        IN_WORDS = IMPORTE_LETRAS
     EXCEPTIONS
        NOT_FOUND = 1
        TOO_LARGE = 2
        OTHERS = 3.

* IMPORTE_LETRAS-WORD = tendrá el texto de la parte entera
* IMPORTE_LETRAS-IN_WORDS = tendrá el texto de la parte decimal.


Technorati tags:





Función para sumarle meses a una fecha

17 11 2007

La siguiente función sirve para sumarle/agregarle meses a una fecha.

A la función le pasamos como parámetros una fecha de entrada (inicial) y un número de meses. La función nos devolverá una fecha que será el resultado de agregar el número de meses a la fecha inicial.


*——————————————————————————-
*LV_DATE_ENT : Fecha de entrada a la que le calculo los meses
*LV_MES: Cantidad de meses que le sumo a LV_DATE_ENT
*LV_DATE_SAL : Fecha que me devuelve la función

*——————————————————————————-

CALL FUNCTION ‘HR_PSD_DATES_ADD_MONTHS’
    EXPORTING
      V_DATE       = LV_DATE_ENT
      V_MONTHS     = LV_MES
    IMPORTING
      E_DATE       = LV_DATE_SAL
    EXCEPTIONS
      NOT_POSITIVE = 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.


Technorati tags:





WS_EXECUTE – Función para ejecutar un programa desde SAP

7 11 2007

WS_EXECUTE es una función que nos permite ejecutar cualquier programa instalado en nuestra computadora desde SAP. Cabe aclarar que aquel programa que queramos correr debe permitir parámetros MS-DOS.

En el siguiente ejemplo voy a mostrar como zippear (comprimir) dos archivos desde SAP. Como resultado obtendremos un archivo WinZip que contendrá dos archivos de texto.
Comprimiremos el archivo 1.txt y el archivo 2.txt, y el resultado será el archivo destino.zip.

Parámetros que acepta WinZip desde MS-DOS: http://www.memecode.com/docs/winzip.html

Rutas de los archivos:

  • C:1.txt
  • C:2.txt
  • C:destino.zip

 

Código:

CALL FUNCTION ‘WS_EXECUTE’
    EXPORTING
       * DOCUMENT = ‘ ‘
       * CD = ‘ ‘
       COMMANDLINE = ‘ -min -a c:destino.zip c:1.txt c:2.txt’
       * INFORM = ‘ ‘
       PROGRAM = ‘winzip32.exe’
       * STAT = ‘ ‘
       * WINID = ‘ ‘
       * OSMAC_SCRIPT = ‘ ‘
       * OSMAC_CREATOR = ‘ ‘
       * WIN16_EXT = ‘ ‘
       * EXEC_RC = ‘ ‘
    * IMPORTING
       * RBUFF =
    EXCEPTIONS
       FRONTEND_ERROR = 1
       NO_BATCH = 2
       PROG_NOT_FOUND = 3
       ILLEGAL_OPTION = 4
       GUI_REFUSE_EXECUTE = 5
       OTHERS = 6 .

IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.


Technorati tags: