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:





Documento FI en distintos LEDGERS

19 10 2011

En esta ocasión comparto la función FAGL_GET_DOC_DETAILS_OF_LEDGER que nos servirá para conocer un documento FI en otro LEDGER.
Porque dependiendo de la configuración del sistema es posible que el número de un documento FI sea distinto según el LEDGER. E incluso puede hasta variar el ejercicio. 

A la función FAGL_GET_DOC_DETAILS_OF_LEDGER hay que pasarle el LEDGER de destino; y la sociedad, documento y ejercicio.

image

 

Como resultado, en la estructura ES_DETAILS, obtendremos: el ejercicio, período y número de documento del LEDGER de destino.

image


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:





Pasar SmartForm a PDF

11 05 2011

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con las siguientes pocas líneas vamos a poder hacerlo.


*Declaraciones
DATA: w_ctrlop    TYPE ssfctrlop,
          w_compop TYPE ssfcompop,
          w_return    TYPE ssfcrescl,
          otfdata       LIKE itcoo OCCURS 0 WITH HEADER LINE,
          lc_name     TYPE rs38l_fnam,
          intab         TYPE  soli_tab,
          objbin       TYPE  solix_tab, 
          wa_intab   TYPE LINE OF soli_tab,
          wa_objbin TYPE LINE OF solix_tab,
          objpack    LIKE sopcklsti1 WITH HEADER LINE.

*Función que devuelve el modulo de función del SmartForm
CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’
   EXPORTING
      formname           = ‘ZSMARTFORM’  “Nombre del formulario SmartForm
   IMPORTING
      fm_name            = lc_name
   EXCEPTIONS
      no_form                  = 1
      no_function_module = 2 
   OTHERS                     = 3.

*Llama al modulo de función del SF
    w_ctrlop-getotf          = ‘X’.
    w_ctrlop-no_dialog    = ‘X’.
    w_compop-tdnoprev  = ‘X’.

CALL FUNCTION lc_name
   EXPORTING
        output_options        = w_compop 
        control_parameters = w_ctrlop
   IMPORTING
        job_output_info       = w_return
   EXCEPTIONS
        formatting_error   = 1
        internal_error       = 2
        send_error           = 3
        user_canceled      = 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.
   ELSE.
      otfdata[] = w_return-otfdata[].
   ENDIF.

*En la tabla otfdata nos queda guardado el formulario en formtao OTF
*Ahora sólo resta convertir el OTF en PDF
LOOP AT otfdata.
    wa_intab = otfdata.
    APPEND wa_intab TO intab.
    CLEAR wa_intab.
ENDLOOP.

*Convertir el OTF en PDF
CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
    EXPORTING
      format_src           = ‘OTF’
      format_dst          = ‘PDF’
*     ADDR_TYPE        =
      devtype               = ‘LP01′
*     FUNCPARA          =
    CHANGING
      transfer_bin         = objpack-transf_bin
      content_txt          = intab
      content_bin         = objbin
      objhead              = intab
      len                     = objpack-doc_size
   EXCEPTIONS
      err_conv_failed   = 1 
   OTHERS                = 2.

*LISTO!!! En la tabla objbin nos queda guardado el PDF para salvarlo *en la PC con la función ‘GUI_DOWNLOAD’ o bien enviarlo por mail con *la función ‘SO_NEW_DOCUMENT_ATT_SEND_API1’


Technorati tags:





Pasar Sapscript a PDF

4 05 2011

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con las siguientes pocas líneas vamos a poder hacerlo.


*Declaraciones
TABLES: itcpo.

DATA: otfdata LIKE itcoo OCCURS 0 WITH HEADER LINE,
          intab         TYPE  soli_tab,
          objbin       TYPE  solix_tab, 
          wa_intab   TYPE LINE OF soli_tab,
          wa_objbin TYPE LINE OF solix_tab,
          objpack    LIKE sopcklsti1 WITH HEADER LINE.

*Antes de la llamada a la función ‘OPEN_FORM’
itcpo-tdgetotf = ‘X’.
itcpo-tddest   = ‘LP01’.

CALL FUNCTION ‘OPEN_FORM’
   EXPORTING
      form       = ‘ZSAPSCRIPT’  “Nombre del formulario Sapscript 
      language = ‘S’
      options   = itcpo
      device    = ‘PRINTER’
      dialog     = ‘ ‘              “Vacío para que no muestre el pop-up de impresión
   EXCEPTIONS
   OTHERS   = 1.

 

*En el ‘CLOSE_FORM’
CALL FUNCTION ‘CLOSE_FORM’
   TABLES
      otfdata = otfdata
   EXCEPTIONS
   OTHERS  = 1.

*En la tabla otfdata nos queda guardado el formulario en formtao OTF
*Ahora sólo resta convertir el OTF en PDF

LOOP AT otfdata.
    wa_intab = otfdata.
    APPEND wa_intab TO intab.
    CLEAR wa_intab.
ENDLOOP.

*Convertir el OTF en PDF
CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
    EXPORTING
      format_src           = ‘OTF’
      format_dst          = ‘PDF’
*     ADDR_TYPE        =
      devtype               = ‘LP01’
*     FUNCPARA          =
    CHANGING
      transfer_bin         = objpack-transf_bin
      content_txt          = intab
      content_bin         = objbin
      objhead              = intab
      len                     = objpack-doc_size
   EXCEPTIONS
      err_conv_failed   = 1 
   OTHERS                = 2.

*LISTO!!! En la tabla objbin nos queda guardado el PDF para salvarlo *en la PC con la función ‘GUI_DOWNLOAD’ o bien enviarlo por mail con *la función ‘SO_NEW_DOCUMENT_ATT_SEND_API1’


Technorati tags: