quarta-feira, 10 de julho de 2019

Novas característica ABAP 7.40

  Copiado de outro site.

https://zbap.net/abap-7-4-new-features-4eb4cde1a622

segunda-feira, 8 de julho de 2019

Incluindo execução programa RV80HGEN VOFM no tranporte

Ver nota  598475 - XPRA RV80HGEN when transporting VOFM objects


Solution

Implement the following modification in your system.
This ensures that the XPRA RV80HGEN is automatically attached in a new order when a VOFM object is created. If an existing VOFM is changed, you must still insert the RV80HGEN manually into the transport request.

quinta-feira, 4 de julho de 2019

Envio de boleto por email - solução por BTE

Solução de envio por email utilizando o programa RFFOBR_D.

Utilizar BTE  processo 2040

Marcar "controle de impressão" - > editar avisos
Informar formulário de impressao.

Na BTE

    TYPESBEGIN OF tp_chect ,        "vornumerierte Schecks: zum
             zbukr TYPE reguh-zbukr,    "Zahlungsbeleg gehörende Schecknr
             vblnr TYPE reguh-vblnr,    "prenumbered checks: check number
             chect TYPE regud-chect,    "of a payment documents
           END OF tp_chect.

    DATAlt_chect TYPE TABLE OF tp_chect.

    DATAls_regup_aux TYPE regup.

    FIELD-SYMBOLS<lfss_regup> TYPE regup,
                   <lfss_regud> TYPE regud,
                   <lfst_chect> TYPE ANY TABLE.

    ASSIGN ('(RFFOBR_D)REGUP'TO <lfss_regup>.
    CHECK sy-subrc 0.
    ASSIGN ('(RFFOBR_D)REGUD'TO <lfss_regud>.
    CHECK sy-subrc 0.
    ASSIGN ('(RFFOBR_D)tab_schecks[]'TO <lfst_chect>.
    CHECK sy-subrc 0.

    lt_chect[] <lfst_chect>.

    SELECT SINGLE *
      INTO ls_regup_aux
      FROM regup
     WHERE laufd EQ is_reguh-laufd
       AND laufi EQ is_reguh-laufi
       AND xvorl EQ is_reguh-xvorl
       AND zbukr EQ is_reguh-zbukr
       AND lifnr EQ is_reguh-lifnr
       AND kunnr EQ is_reguh-kunnr
       AND empfg EQ is_reguh-empfg
       AND vblnr EQ is_reguh-vblnr.

    <lfss_regup>-zfbdt ls_regup_aux-zfbdt.
    <lfss_regup>-zbd1t ls_regup_aux-zbd1t.
    <lfss_regup>-zbd2t ls_regup_aux-zbd2t.
    <lfss_regup>-zbd3t ls_regup_aux-zbd3t.
    <lfss_regup>-bldat ls_regup_aux-bldat.

    CALL FUNCTION 'J_1B_FI_NETDUE'
      EXPORTING
        zfbdt   <lfss_regup>-zfbdt
        zbd1t   <lfss_regup>-zbd1t
        zbd2t   <lfss_regup>-zbd2t
        zbd3t   <lfss_regup>-zbd3t
      IMPORTING
        duedate <lfss_regud>-ausft.

    DATAlt_regup_br TYPE TABLE OF regup.

    APPEND <lfss_regup> TO lt_regup_br.

    CLEAR <lfss_regud>-chect.

    READ TABLE lt_chect INTO DATA(ls_chect)
                                 WITH KEY zbukr is_reguh-zbukr
                                          vblnr is_reguh-vblnr.

    IF sy-subrc 0.
      <lfss_regud>-chect ls_chect-chect.
    ENDIF.

    CALL FUNCTION 'BOLETO_DATA'
      EXPORTING
        line_reguh is_reguh
      TABLES
        itab_regup lt_regup_br
      CHANGING
        line_regud <lfss_regud>.

    SELECT SINGLE fornr
      INTO @DATA(l_fornr)
      FROM zfi_cfg
     WHERE bukrs EQ @is_reguh-zbukr
       AND hbkid EQ @is_reguh-hbkid.

    IF sy-subrc 0.
      cs_finaa-fornr l_fornr. "Formulário por banco
    ENDIF.

    SELECT prsnradrnr
      INTO TABLE @DATA(lt_addr)
      FROM kna1 AS a INNER JOIN
           knvk AS b
           ON a~kunnr EQ b~kunnr
     WHERE a~kunnr EQ @is_reguh-kunnr
       AND abtnr   EQ '0009'.

    IF lt_addr[] IS NOT INITIAL.

      SELECT adr6~smtp_addr,
             adrt~remark
        FROM adr6
        INNER JOIN adrt
         ON adrt~addrnumber EQ adr6~addrnumber
        AND adrt~persnumber EQ adr6~persnumber
        AND adrt~consnumber EQ adr6~consnumber
        INTO TABLE @DATA(lt_email)
        FOR ALL ENTRIES IN @lt_addr
      WHERE adr6~addrnumber EQ @lt_addr-adrnr
        AND adrt~comm_type  EQ 'INT'
        AND adrt~persnumber EQ @lt_addr-prsnr.

      DATA(ls_emaillt_email[ remark 'BOLETO' ].

      IF sy-subrc <> OR
         sy-subrc AND ls_email-smtp_addr IS INITIAL ).
        ls_email lt_email[ remark 'NFE' ].

        IF sy-subrc <> OR
           sy-subrc AND ls_email-smtp_addr IS INITIAL ).
          ls_email lt_email[ ].
        ENDIF.

      ENDIF.

      IF sy-subrc AND ls_email-smtp_addr IS NOT INITIAL.
        cs_finaa-intad ls_email-smtp_addr.
      ENDIF.

    ENDIF.

    SELECT SINGLE low
      INTO @DATA(l_low)
      FROM tvarvc
     WHERE name EQ 'ZFI_EMAIL_FI_DEPT'
       AND type EQ 'P'.
        

    "Email com cópia para financeiro
    IF sy-subrc AND l_low IS NOT INITIAL.
      cs_finaa-intad_cc l_low.
    ENDIF.

    cs_finaa-nacha 'I'.

segunda-feira, 1 de julho de 2019

Enviar anexo email - Texto OU PDF (smartforms)

*&---------------------------------------------------------------------*
*&      Form  ENVIA_EMAIL
*&---------------------------------------------------------------------*
FORM envia_email .

  DATA: cl_send_request       TYPE REF TO cl_bcs,
        cl_document           TYPE REF TO cl_document_bcs,
        cl_sender             TYPE REF TO cl_sapuser_bcs,
        cl_recipient          TYPE REF TO if_recipient_bcs,
        cl_bcs_exception      TYPE REF TO cx_bcs.

  DATA: li_text               TYPE bcsy_text,
        li_bin_cont           TYPE solix_tab.

  DATA: lv_sent_to_all        TYPE os_boolean,
        lv_filename  TYPE string,
        lv_texto     TYPE string,
        lv_texto_aux TYPE string,
        lv_length    TYPE sood-objlen,
        lv_size      TYPE so_obj_len,
        lv_title     TYPE sood-objdes.

  CHECK p_email = 'X'.

  TRY.
*     -------- create persistent send request ------------------------
      cl_send_request = cl_bcs=>create_persistent( ).

      lv_title = text-005.
*     -------- create and set document -------------------------------
      APPEND text-006 TO li_text.
      lv_length = STRLEN( text-006 ).
      cl_document = cl_document_bcs=>create_document(
                      i_type    = 'RAW'
                      i_text    = li_text
                      i_length  = lv_length
                      i_subject = lv_title ).

      LOOP AT it_files INTO wa_files.

        REFRESH li_text.

        CLEAR: lv_length, li_bin_cont, lv_texto.

        OPEN DATASET wa_files-fullname FOR INPUT
                     IN TEXT MODE ENCODING NON-UNICODE.

        DO.

          READ DATASET wa_files-fullname INTO lv_texto_aux.
          IF sy-subrc = 0.
            IF lv_texto IS INITIAL.
              CONCATENATE lv_texto_aux cl_bcs_convert=>gc_crlf INTO lv_texto.
            ELSE.
              CONCATENATE lv_texto lv_texto_aux cl_bcs_convert=>gc_crlf
                          INTO lv_texto.
            ENDIF.
          ELSE.
            EXIT.
          ENDIF.

        ENDDO.

        CLOSE DATASET wa_files-fullname.

        TRY.
            cl_bcs_convert=>string_to_solix(
              EXPORTING
                iv_string   = lv_texto
                iv_codepage = '4103'  "suitable for MS Excel, leave empty
                iv_add_bom  = 'X'     "for other doc types
              IMPORTING
                et_solix  = li_bin_cont
                ev_size   = lv_length ).

          CATCH cx_bcs.
            MESSAGE e445(so).
        ENDTRY.



        lv_title = wa_files-filename.

        CALL METHOD cl_document->add_attachment
          EXPORTING
            i_attachment_type    = 'CSV'
            i_attachment_subject = lv_title
            i_attachment_size    = lv_length
            i_att_content_hex    = li_bin_cont.

      ENDLOOP.

      CALL METHOD cl_send_request->set_document( cl_document ).
*     --------- set sender -------------------------------------------
*     note: this is necessary only if you want to set the sender
*           different from actual user (SY-UNAME). Otherwise sender is
*           set automatically with actual user.

      cl_sender = cl_sapuser_bcs=>create( sy-uname ).
      CALL METHOD cl_send_request->set_sender
        EXPORTING
          i_sender = cl_sender.

*     --------- add recipient (e-mail address) -----------------------
*     create recipient - please replace e-mail address !!!

      DATA: lv_email TYPE ad_smtpadr.

      LOOP AT s_email.

        lv_email =  s_email-low.

        cl_recipient = cl_cam_address_bcs=>create_internet_address(
                                          lv_email ).

*     add recipient with its respective attributes to send request
        CALL METHOD cl_send_request->add_recipient
          EXPORTING
            i_recipient = cl_recipient
            i_express   = 'X'.

      ENDLOOP.

      cl_send_request->send_request->set_link_to_outbox( 'X' ).

*     ---------- send document ---------------------------------------
      CALL METHOD cl_send_request->send(
        EXPORTING
          i_with_error_screen = 'X'
        RECEIVING
          result              = lv_sent_to_all ).
      IF lv_sent_to_all = 'X'.
        WRITE text-009.

        "Elimino arquivo do diretório se foi enviado corretamente
        DELETE DATASET wa_files-fullname.

      ENDIF.

      COMMIT WORK.

* -----------------------------------------------------------
* *                     exception handling
* -----------------------------------------------------------
* * replace this very rudimentary exception handling
* * with your own one !!!
* -----------------------------------------------------------
    CATCH cx_bcs INTO cl_bcs_exception.
      WRITE: text-007.
      WRITE: text-008, cl_bcs_exception->error_type.
      EXIT.

  ENDTRY.

ENDFORM.                    " ENVIA_EMAIL


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ENVIADO PDF POR SMARTFORMS
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


DATAlw_output_info    TYPE ssfcrescl.

DATAlw_output_options     TYPE  ssfcompop,
      lw_control_parameters TYPE  ssfctrlop.

lw_control_parameters VALUE #(
"DEVICE = 'LOCL'
no_dialog abap_true
preview abap_false
GETOTF ABAP_TRUE
"LANGU
).

lw_output_options VALUE #tddest 'LOCL' ).

BREAK-POINT.

CALL FUNCTION '/1BCDWB/SF00000019'
  EXPORTING
*   ARCHIVE_INDEX      =
*   ARCHIVE_INDEX_TAB  =
*   ARCHIVE_PARAMETERS =
    control_parameters lw_control_parameters
*   MAIL_APPL_OBJ      =
*   MAIL_RECIPIENT     =
*   MAIL_SENDER        =
    output_options     lw_output_options
    user_settings      ''
    it_romaneio        lt_romaneio_print
    iw_info_transp     ztbsd_roma03
    I_TIPO_IMP '1'
  IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
    job_output_info    lw_output_info
*   JOB_OUTPUT_OPTIONS =
  EXCEPTIONS
    formatting_error   1
    internal_error     2
    send_error         3
    user_canceled      4
    OTHERS             5.

IF sy-subrc <> 0.
  EXIT.
* Implement suitable error handling here
ENDIF.

BREAK-POINT.

CHECK lw_output_info-otfdata IS NOT INITIAL.

DATAlt_lines    TYPE TABLE OF tline.

DATAlv_bin_filesize TYPE so_obj_len,
      lv_bin_file     TYPE  xstring.

DATAlt_text     TYPE bcsy_text,
      lt_bin_cont TYPE solix_tab.

DATAlv_sent_to_all TYPE os_boolean,
      lv_filename    TYPE string,
      lv_texto       TYPE string,
      lv_texto_aux   TYPE string,
      lv_length      TYPE sood-objlen,
      lv_size        TYPE so_obj_len,
      lv_title       TYPE sood-objdes.

CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    format                'PDF'
  IMPORTING
    bin_filesize          lv_bin_filesize
    bin_file              lv_bin_file
  TABLES
    otf                   lw_output_info-otfdata
    lines                 lt_lines
  EXCEPTIONS
    err_max_linewidth     1
    err_format            2
    err_conv_not_possible 3
    err_bad_otf           4
    OTHERS                5.

DATAlt_binary_content TYPE solix_tab.

***Xstring to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer     lv_bin_file
  TABLES
    binary_tab lt_binary_content.

*  CHECK p_email = 'X'.

TRY.
*     -------- create persistent send request ------------------------
    DATA(lo_send_requestcl_bcs=>create_persistent).

    lv_title TEXT-005.
*     -------- create and set document -------------------------------
    APPEND 'teste' TO lt_text.
    lv_length strlen|teste| ).
    DATA(lo_documentcl_document_bcs=>create_document(
                                        i_type    'RAW'
                                        i_text    lt_text
                                        i_length  lv_length
                                        i_subject lv_title ).

    TRY.
        cl_bcs_convert=>string_to_solix(
          EXPORTING
            iv_string   lv_texto
            iv_codepage '4103'  "suitable for MS Excel, leave empty
            iv_add_bom  'X'     "for other doc types
          IMPORTING
            et_solix  lt_bin_cont
            ev_size   lv_length ).

      CATCH cx_bcs.
        MESSAGE e445(so).
    ENDTRY.

    lv_title 'teste'.


    CALL METHOD lo_document->add_attachment
      EXPORTING
        i_attachment_type    'PDF'
        i_attachment_subject lv_title
        i_attachment_size    lv_bin_filesize
        i_att_content_hex    lt_binary_content.

    CALL METHOD lo_send_request->set_documentlo_document ).
*     --------- set sender -------------------------------------------
*     note: this is necessary only if you want to set the sender
*           different from actual user (SY-UNAME). Otherwise sender is
*           set automatically with actual user.

    DATA(lo_sendercl_sapuser_bcs=>createsy-uname ).
    CALL METHOD lo_send_request->set_sender
      EXPORTING
        i_sender lo_sender.

*     --------- add recipient (e-mail address) -----------------------
*     create recipient - please replace e-mail address !!!

    DATAlv_email TYPE ad_smtpadr.

    lv_email 'ednszk@hotmail.com'.

    DATA(lo_recipientcl_cam_address_bcs=>create_internet_address(
                                      lv_email ).

*     add recipient with its respective attributes to send request
    CALL METHOD lo_send_request->add_recipient
      EXPORTING
        i_recipient lo_recipient
        i_express   'X'.

    lo_send_request->send_request->set_link_to_outbox'X' ).

*     ---------- send document ---------------------------------------
    CALL METHOD lo_send_request->send(
      EXPORTING
        i_with_error_screen 'X'
      RECEIVING
        result              lv_sent_to_all ).
    IF lv_sent_to_all 'X'.
      WRITE TEXT-009.

    ENDIF.

    COMMIT WORK.

* -----------------------------------------------------------
* *                     exception handling
* -----------------------------------------------------------
* * replace this very rudimentary exception handling
* * with your own one !!!
* -----------------------------------------------------------
  CATCH cx_bcs INTO DATA(lo_bcs_exception).
*      WRITE: TEXT-007.
*      WRITE: TEXT-008, lo_bcs_exception->error_type.
    EXIT.

ENDTRY.