SAP ABAP SMARTFORMS

From SapWiki
Revision as of 14:44, 4 April 2020 by WikiSysop (talk | contribs)

Ejemplo de función que retorna smartform en BASE 64 con preview para pruebas en la trn. SE37

 FUNCTION zhr_get_pdf.
 *"----------------------------------------------------------------------
 *"*"Interfase local
 *"  IMPORTING
 *"     VALUE(P_PERNR) TYPE  PERNR_D OPTIONAL
 *"     VALUE(P_IDDOCUMENTO) TYPE  TIM_REQ_ID OPTIONAL
 *"  EXPORTING
 *"     VALUE(P_BINFILE) TYPE  XSTRING
 *"     VALUE(P_FILEBASE64) TYPE  STRING
 *"     VALUE(P_ERRMSG) TYPE  STRING
 *"----------------------------------------------------------------------
   DATA: lt_otf             TYPE TABLE OF itcoo,
         lt_pdfdata         TYPE TABLE OF tline,
         ls_control_param   TYPE ssfctrlop,
         ls_composer_param  TYPE ssfcompop,
         ls_job_output_info TYPE ssfcrescl,
         l_formname         TYPE tdsfname VALUE 'ZSF_MY_SMARTFORM',
         l_fm_name          TYPE rs38l_fnam,
         l_bin_file         TYPE xstring.
 
   DATA wa_data TYPE kna1.  "only for example
 
 *insert some logic here
 
 *--------------------------------------------------------------------*
 * call Smartform
 *--------------------------------------------------------------------*
   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
     EXPORTING
       formname           = l_formname
     IMPORTING
       fm_name            = l_fm_name
     EXCEPTIONS
       no_form            = 1
       no_function_module = 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 INTO p_errmsg.
     RETURN.
   ENDIF.
 
   ls_control_param-device = 'PRINTER'.
   ls_control_param-no_dialog = 'X'.
   ls_control_param-preview   = ''.
   ls_control_param-no_open   = ''.
   ls_composer_param-tdcover  = ' '.
   ls_control_param-getotf    = 'X'.
   ls_composer_param-tdimmed  = 'X'.
   ls_composer_param-tdcopies = 1.
 
   CALL FUNCTION l_fm_name
     EXPORTING
       control_parameters = ls_control_param
       output_options     = ls_composer_param
       i_data             = wa_data
     IMPORTING
       job_output_info    = ls_job_output_info
     EXCEPTIONS
       formatting_error   = 1
       internal_error     = 2
       send_error         = 3
       user_canceled      = 4
       OTHERS             = 5.
   IF sy-subrc <> 0.
 * Implement suitable error handling here
 *     Transfer SF errors to internal table
     DATA lt_errortab TYPE tsferror.
 
     CALL FUNCTION 'SSF_READ_ERRORS'
       IMPORTING
         errortab = lt_errortab.
 
     LOOP AT lt_errortab INTO DATA(wa).
       MESSAGE ID wa-msgid TYPE wa-msgty NUMBER wa-msgno
             WITH wa-msgv1 wa-msgv2 wa-msgv3 wa-msgv4 INTO p_errmsg.
       EXIT.
     ENDLOOP.
     RETURN.
   ENDIF.
 
   lt_otf[]  = ls_job_output_info-otfdata[].
   CALL FUNCTION 'CONVERT_OTF'
     EXPORTING
       format                = 'PDF'
     IMPORTING
       bin_file              = l_bin_file
     TABLES
       otf                   = lt_otf
       lines                 = lt_pdfdata
     EXCEPTIONS ##FM_SUBRC_OK
       err_max_linewidth     = 1
       err_format            = 2
       err_conv_not_possible = 3
       OTHERS                = 4.
 
   IF NOT l_bin_file IS INITIAL.
     p_binfile = l_bin_file.
   ENDIF.
 
   CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
     EXPORTING
       input  = p_binfile
     IMPORTING
       output = p_filebase64.
 
   IF sy-tcode = 'SE37'.
 *  Preview PDF.
     CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
       EXPORTING
         i_otf                    = lt_otf[]
       EXCEPTIONS ##fm_subrc_ok
         convert_otf_to_pdf_error = 1
         cntl_error               = 2
         OTHERS                   = 3.
   ENDIF.
 
 ENDFUNCTION.

Problema de generación de smartform despues de un transporte

Ver Nota: SAP Note 630105 - Generating Smart Forms after transport
Solution
If you want to generate the transported Smart Forms before the first call
in the target system, create report RSTXGALL in the system. You can then
run RSTXGALL after a transport if required.
report rstxgall.
data: form type tdsfname,
forms type table of tdsfname.
select formname from stxfadm into table forms
where formtype = space.
loop at forms into form.
  call function 'SSF_FUNCTION_MODULE_NAME'
  exporting
    formname = form
  exceptions
    others = 1.
endloop.

Incluir un texto estandard(sapscript) en un formulario smartform

Si se desea utilizar un texto estandard(SO10) como un texto include, y este posee un estilo X(SE72), este estilo X debe crearse como smartstyle con los mismos parrafos y caracteres.

Fondo gris en imagenes (logos)

Si al cargar una imagen en la SE78 y en vez de verse el color blanco original se ve un gris leve, esto es porque sap admite imágenes de hasta 256 colores, entonces una solución es grabar la imagen como BMP de 256 colores con el PAINT de Windows u otro editor de imágenes, aunque pierde resolución (ver nota SAP 205837)

Activar/desactivar editor microsoft Office

ver reporte RSCPSETEDITOR

Activar trace smartform

transaccion SFTRACE

Traducción de SMARTFORMS

Ir a SE63, Translation-->R/3 Enterprise-->Other Long Texts, seleccionar FS Forms and Styles->SSF SAP Smart Form, ingresar nombre de smartform en Object Name, y seleccionar Source & Target language.


Printing Several Forms in One Print Request

ejemplo programa: SF_EXAMPLE_03
ver nota SAP Note 85318 - Appending documents to existing spool

ejemplo

 FORM  print_and_release USING p_nodialog  "si p_dialog = space => ver pdf, sino, imprimir
                               p_data TYPE vbrk_t "tabla de vbrk
                      CHANGING p_subrc.
 
   DATA: lt_errortab       TYPE tsferror,
         ls_control_param  TYPE ssfctrlop,
         ls_composer_param TYPE ssfcompop,
         ls_job_info       TYPE ssfcrescl,
         l_formname        TYPE tdsfname VALUE 'ZHCMSF_MYSMARTFORM',
         l_fm_name         TYPE rs38l_fnam.
 
   p_subrc = 0.
 
   DATA(l_lines) = lines( p_data ).
   IF l_lines = 0.
     RETURN.
   ENDIF.
 
 * determine smartform function module for invoice
   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
     EXPORTING
       formname           = l_formname
 *     variant            = ' '
 *     direct_call        = ' '
     IMPORTING
       fm_name            = l_fm_name
     EXCEPTIONS
       no_form            = 1
       no_function_module = 2
       OTHERS             = 3.
   IF sy-subrc <> 0.
 *   error handling
     p_subrc = sy-subrc.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
     RETURN.
   ENDIF.
 
   ls_control_param-no_dialog = p_nodialog.
   ls_control_param-langu = sy-langu.
   ls_control_param-no_open   = 'X'.
   ls_control_param-no_close  = 'X'.
 
   ls_composer_param-tdimmed = 'X'.
   ls_composer_param-tddelete = 'X'.
   ls_composer_param-tdlifetime = '0'.
   ls_composer_param-tdreceiver = sy-uname.
   ls_composer_param-tdcopies = '001'.
   ls_composer_param-tdarmod = '1'.
 
   IF p_nodialog = 'X'.
     ls_control_param-no_dialog = space.
     ls_composer_param-tdnewid        = 'X'.
   ELSE.
     ls_composer_param-tddest = 'LOCL'.
     ls_composer_param-tdnewid        = 'X'.
     ls_control_param-getotf     = 'X'.
     ls_control_param-preview    = 'X'.
     ls_control_param-no_dialog  = 'X'.
   ENDIF.
 
   LOOP AT p_data INTO DATA(wa_data).
     DATA(l_tabix) = sy-tabix.
     IF l_tabix = 1.
       CALL FUNCTION 'SSF_OPEN'
         EXPORTING
           user_settings      = ' '
           control_parameters = ls_control_param
           output_options     = ls_composer_param
         EXCEPTIONS
           formatting_error   = 1
           internal_error     = 2
           send_error         = 3
           user_canceled      = 4
           OTHERS             = 5.
 
       IF sy-subrc <> 0.
 *   error handling
         p_subrc = sy-subrc.
         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
         RETURN.
       ENDIF.
     ENDIF.
 
     CALL FUNCTION l_fm_name
       EXPORTING
         control_parameters = ls_control_param
         output_options     = ls_composer_param
         user_settings      = space
         i_data             = wa_data
       IMPORTING
         job_output_info    = ls_job_info
       EXCEPTIONS
         formatting_error   = 1
         internal_error     = 2
         send_error         = 3
         user_canceled      = 4
         OTHERS             = 5.
     IF sy-subrc <> 0.
 *   error handling
 * Transfer SF errors to internal table
       CALL FUNCTION 'SSF_READ_ERRORS'
         IMPORTING
           errortab = lt_errortab.
 
       LOOP AT lt_errortab INTO DATA(wa).
         MESSAGE ID wa-msgid TYPE 'I' NUMBER wa-msgno
               WITH wa-msgv1 wa-msgv2 wa-msgv3 wa-msgv4 DISPLAY LIKE 'E'.
         EXIT.
       ENDLOOP.
       p_subrc = 4.
       RETURN.
     ENDIF.
 
     IF l_tabix = l_lines.
       CALL FUNCTION 'SSF_CLOSE'
         IMPORTING
           job_output_info  = ls_job_info
         EXCEPTIONS
           formatting_error = 1
           internal_error   = 2
           send_error       = 3
           OTHERS           = 4.
 
       IF sy-subrc <> 0.
 *   error handling
         p_subrc = sy-subrc.
         MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
         RETURN.
       ENDIF.
     ENDIF.
 
     IF p_nodialog = space.
 *  Preview PDF, OJO visualiza despues de Cerrar el smartform
       CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
         EXPORTING
           i_otf                    = ls_job_info-otfdata
         EXCEPTIONS ##FM_SUBRC_OK
           convert_otf_to_pdf_error = 1
           cntl_error               = 2
           OTHERS                   = 3.
 
     ENDIF.
   ENDLOOP.
 
 ENDFORM.