Difference between revisions of "SAP ABAP SMARTFORMS"

From SapWiki
Line 172: Line 172:
 
                       CHANGING p_subrc.
 
                       CHANGING p_subrc.
 
   
 
   
   DATA: lt_errortab TYPE tsferror,
+
   DATA: lt_errortab       TYPE tsferror,
         lt_control_param      TYPE ssfctrlop,
+
         ls_control_param  TYPE ssfctrlop,
         lt_composer_param    TYPE ssfcompop,
+
         ls_composer_param TYPE ssfcompop,
         lt_job_info          TYPE ssfcrescl,
+
         ls_job_info      TYPE ssfcrescl,
         l_formname           TYPE tdsfname VALUE 'ZHCMSF_MYSMARTFORM',
+
         l_formname       TYPE tdsfname VALUE 'ZHCMSF_MYSMARTFORM',
         l_fm_name           TYPE rs38l_fnam.
+
         l_fm_name         TYPE rs38l_fnam.
 
   
 
   
 
   p_subrc = 0.
 
   p_subrc = 0.
Line 190: Line 190:
 
     EXPORTING
 
     EXPORTING
 
       formname          = l_formname
 
       formname          = l_formname
 +
*    variant            = ' '
 +
*    direct_call        = ' '
 
     IMPORTING
 
     IMPORTING
 
       fm_name            = l_fm_name
 
       fm_name            = l_fm_name
Line 204: Line 206:
 
   ENDIF.
 
   ENDIF.
 
   
 
   
   lt_control_param-no_dialog = p_nodialog.
+
   ls_control_param-no_dialog = p_nodialog.
   lt_control_param-langu = sy-langu.
+
   ls_control_param-langu = sy-langu.
   lt_control_param-no_open  = 'X'.
+
   ls_control_param-no_open  = 'X'.
   lt_control_param-no_close  = 'X'.
+
   ls_control_param-no_close  = 'X'.
 
   
 
   
   lt_composer_param-tdimmed = 'X'.
+
   ls_composer_param-tdimmed = 'X'.
   lt_composer_param-tddelete = 'X'.
+
   ls_composer_param-tddelete = 'X'.
   lt_composer_param-tdlifetime = '0'.
+
   ls_composer_param-tdlifetime = '0'.
   lt_composer_param-tdreceiver = sy-uname.
+
   ls_composer_param-tdreceiver = sy-uname.
   lt_composer_param-tdcopies = '001'.
+
   ls_composer_param-tdcopies = '001'.
   lt_composer_param-tdarmod = '1'.
+
   ls_composer_param-tdarmod = '1'.
 
   
 
   
 
   IF p_nodialog = 'X'.
 
   IF p_nodialog = 'X'.
     lt_control_param-no_dialog = space.
+
     ls_control_param-no_dialog = space.
     lt_composer_param-tdnewid        = 'X'.
+
     ls_composer_param-tdnewid        = 'X'.
 
   ELSE.
 
   ELSE.
     lt_composer_param-tddest = 'LOCL'. "'IMPR'.
+
     ls_composer_param-tddest = 'LOCL'.
     lt_composer_param-tdnewid        = 'X'.
+
     ls_composer_param-tdnewid        = 'X'.
     lt_control_param-getotf    = 'X'.
+
     ls_control_param-getotf    = 'X'.
     lt_control_param-preview    = 'X'.
+
     ls_control_param-preview    = 'X'.
     lt_control_param-no_dialog  = 'X'.
+
     ls_control_param-no_dialog  = 'X'.
 
   ENDIF.
 
   ENDIF.
 
   
 
   
Line 233: Line 235:
 
         EXPORTING
 
         EXPORTING
 
           user_settings      = ' '
 
           user_settings      = ' '
           control_parameters = lt_control_param
+
           control_parameters = ls_control_param
           output_options    = lt_composer_param
+
           output_options    = ls_composer_param
 
         EXCEPTIONS
 
         EXCEPTIONS
 
           formatting_error  = 1
 
           formatting_error  = 1
Line 253: Line 255:
 
     CALL FUNCTION l_fm_name
 
     CALL FUNCTION l_fm_name
 
       EXPORTING
 
       EXPORTING
         control_parameters = lt_control_param
+
         control_parameters = ls_control_param
         output_options    = lt_composer_param
+
         output_options    = ls_composer_param
 
         user_settings      = space
 
         user_settings      = space
 
         i_data            = wa_data
 
         i_data            = wa_data
 
       IMPORTING
 
       IMPORTING
         job_output_info    = lt_job_info
+
         job_output_info    = ls_job_info
 
       EXCEPTIONS
 
       EXCEPTIONS
 
         formatting_error  = 1
 
         formatting_error  = 1
Line 284: Line 286:
 
       CALL FUNCTION 'SSF_CLOSE'
 
       CALL FUNCTION 'SSF_CLOSE'
 
         IMPORTING
 
         IMPORTING
           job_output_info  = lt_job_info
+
           job_output_info  = ls_job_info
 
         EXCEPTIONS
 
         EXCEPTIONS
 
           formatting_error = 1
 
           formatting_error = 1
Line 296: Line 298:
 
         MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
 
         MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
 
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
 
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
         return.
+
         RETURN.
 
       ENDIF.
 
       ENDIF.
 
     ENDIF.
 
     ENDIF.
Line 304: Line 306:
 
       CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
 
       CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
 
         EXPORTING
 
         EXPORTING
           i_otf                    = lt_job_info-otfdata
+
           i_otf                    = ls_job_info-otfdata
 
         EXCEPTIONS ##FM_SUBRC_OK
 
         EXCEPTIONS ##FM_SUBRC_OK
 
           convert_otf_to_pdf_error = 1
 
           convert_otf_to_pdf_error = 1

Revision as of 16:04, 27 March 2020

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: l_formname          TYPE tdsfname VALUE 'ZSF_MY_SMARTFORM',
        lf_fm_name          TYPE rs38l_fnam,
        ls_control_param    TYPE ssfctrlop,
        ls_composer_param   TYPE ssfcompop,
        ga_job_output_info  TYPE ssfcrescl.
        
*insert some logic here
  
*
*--------------------------------------------------------------------*
* call Smartform
*--------------------------------------------------------------------*
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = l_formname
    IMPORTING
      fm_name            = lf_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 lf_fm_name
    EXPORTING
      control_parameters = ls_control_param
      output_options     = ls_composer_param
      i_data             = wa_data
    IMPORTING
      job_output_info    = ga_job_output_info
*              TABLES
*     detalle            = it_ccnom1
    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.

  ltd_otf[]  = ga_job_output_info-otfdata[].
  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
*     max_linewidth         = 800
    IMPORTING
      bin_filesize          = lv_bytes
      bin_file              = bin_file
    TABLES
      otf                   = ltd_otf
      lines                 = gt_pdfdata
    EXCEPTIONS ##FM_SUBRC_OK
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.

  IF NOT bin_file IS INITIAL.
    p_binfile = 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                    = ltd_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.