SAP CREAR JOB CON CONEXION FTP Y DEJAR EXCEL

La idea es de un programa que muestra un listado pasarlo a Excel y dejar el archivo en una ruta FTP.
Este programa lanza una ALV con los datos de selección.

Para ello partimos de la pantalla del programa


En mi caso he creado tres programa para cada uno de los radio-buttons puesto que al crear el job no se puede ejecutar el mismo programa.

La idea es que si está marcado para ejecutar en job entre en la siguiente subrutina

  ELSEIF tb_t  EQ abap_true AND  "Apuntes todos
           r_man EQ abap_true AND  "Job con pantalla de seleccion ACTIVADO
           pt_listado2[]      IS NOT INITIAL"Que haya datos

      PERFORM crea_job_datos_selec_man.

La subrutina es de la siguiente forma:


FORM crea_job_datos_selec_man.




*Creamos el Job con los datos de seleccion ( Fechas porque ya tenemos todo en listado )
*  BREAK-POINT.

  "Crear Job
  CONCATENATE 'ZDIARIO_EJEC_MANUAL_' sy-datum  INTO gv_jobname.
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname  gv_jobname
    IMPORTING
      jobcount gv_jobcount.



****  WRITE:/ 'Submit zidoc_inb_pulse_idocs'.
****  WRITE:/ 'Ruta', lv_ruta_servidor.

*Lanzar Job
  SUBMIT zhn_diario_fi_man
      WITH p_ejer   EQ p_ejer     "Ejercicio
      WITH p_cldoc  IN p_cldoc    "Clase de Documento
      WITH r_cuenta IN r_cuenta   "Nº de Cuenta
      WITH r_fechac IN r_fechac   "Fechas
      WITH r_stores IN r_stores   "Tiendas
  VIA JOB gv_jobname  NUMBER gv_jobcount AND RETURN.


  WRITE:'El Job'gv_jobname'se ha creado correctamente'.


  CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
      jobcount  gv_jobcount
      jobname   gv_jobname
      strtimmed 'X'.




ENDFORM.


Fijense que el submit se hace al mismo programa con distinto nombre man
este programa también tiene el sigueinte cambio:

IF tb_t  EQ abap_true AND  "Apuntes todos
      pt_listado2[] IS NOT INITIAL"Que haya datos
*       AND p_patch EQ abap_false.
*      PERFORM alv_report2 USING pt_listado2.   "2

      PERFORM abro_conexion_ftp.


Y la subrutina de la siguiente forma:
FORM abro_conexion_ftp.

  DATAc_key_pass     TYPE i          VALUE '26101957', "26101957 es lo que hay que poner
        c_password(30VALUE 'XXXXXXXX',
        c_username(30VALUE 'XXXXXXXX',
        c_port(30)     VALUE 'XXXX',
        c_host(30)     VALUE 'XX.XXX.XXX.XXX XXXX',
        c_sapftp       LIKE  rfcdes-rfcdest  VALUE 'SAPFTP'.

  DATA " gv_username        LIKE ztbsd_directorio-username,
    gv_password(30)    TYPE c,
    gv_long_pass       TYPE i,
    gv_rfc_destination TYPE rfcdest,
    gv_host(64)        TYPE c,
    gv_directorio(64)  TYPE c,
*    gv_path            LIKE ztbsd_directorio-path,
    gv_fname(120)      TYPE c,
    gv_handle          TYPE i,
    gv_command(70)     TYPE c,
    gv_file_name       TYPE adfilename,
    file(30)           TYPE c,
    gv_error           TYPE sysubrc.

  DATABEGIN OF mtab_data OCCURS 0,
          line(1500TYPE c,
        END OF mtab_data.

*****ENCRIPTAR PASSWORD****
  gv_long_pass strlenc_password ).
  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      source      c_password
      sourcelen   gv_long_pass
      key         c_key_pass
    IMPORTING
      destination gv_password.


  IF sy-subrc EQ 0.
*Todo ok
  ELSE.
    WRITE:'Error en la función contraseña'.
  ENDIF.



  CLEAR gv_handle.
  IF sy-batch 'X'.
    gv_rfc_destination 'SAPFTPA'"Para lanzarlo en JOB
    c_sapftp 'SAPFTPA'.
  ELSE.
    gv_rfc_destination c_sapftp.
  ENDIF.


  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            c_username
      password        gv_password
      host            c_host
      rfc_destination c_sapftp
    IMPORTING
      handle          gv_handle
    EXCEPTIONS
      not_connected   1
      OTHERS          2.


  IF sy-subrc NE 0.
    WRITE/ sy-msgnosy-msgidsy-msgv1.
    WRITE'Error en la conexión RFC'.
  ENDIF.


*Como es un Job lo creo en una carpeta JOB Manuales
  gv_command  'mkdir /FI/DIARIO_JOB_MANUALES_'.
  CONCATENATE gv_command sy-datum INTO gv_command.

  CLEAR mtab_data[].
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle        gv_handle
      command       gv_command
    TABLES
      data          mtab_data
    EXCEPTIONS
      tcpip_error   1
      command_error 2
      data_error    3
      OTHERS        4.

  CLEAR mtab_data[].
*Me posiciono
  REPLACE 'mkdir' WITH 'cd' INTO gv_command.
*  gv_command  = 'cd /FI/DIARIO_JOB_MANUALES'.

  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle        gv_handle
      command       gv_command
*     COMPRESS      =
*     rfc_destination = 'SAPFTP'
*     VERIFY        =
* IMPORTING
*     FILESIZE      =
*     FILEDATE      =
*     FILETIME      =
    TABLES
      data          mtab_data
    EXCEPTIONS
      tcpip_error   1
      command_error 2
      data_error    3
      OTHERS        4.
  IF sy-subrc <> 0.
    WRITE'Error en el posicionamiento del directorio'.
  ENDIF.



*Conviero a CSV tabla interna
  DATAitab TYPE truxs_t_text_data.
  DATAls_itab LIKE LINE OF itab.

  CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
    EXPORTING
      i_field_seperator    ';'
      i_line_header        ''
*     I_FILENAME           =
*     I_APPL_KEEP          = ' '
    TABLES
      i_tab_sap_data       pt_listado2[]
    CHANGING
      i_tab_converted_data itab
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    WRITE'Error al pasar datos a la tabla interna'.
  ENDIF.

*Relleno la cabecera
  ls_itab 'Cl.Documento;Descripción Cl.Documento;Nº de Cuenta;D/H;Descripción Cuenta;Total Cuenta;Moneda;Fecha;Nº Apunte'.
  INSERT ls_itab INTO itab INDEX 1.



  DATA gv_length TYPE i.
  CLEAR mtab_data[].
*Paso a modo pasivo
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle        gv_handle
      command       'set passive on'
    TABLES
      data          mtab_data
    EXCEPTIONS
      command_error 1
      tcpip_error   2.



*Creo el csv en el FTP
  CALL FUNCTION 'FTP_R3_TO_SERVER'
    EXPORTING
      handle         gv_handle
      fname          'Todos_los_apuntes(Totalizado).csv'
*     blob_length    = gv_length
      character_mode 'X'
    TABLES
*     blob           = pt_listado2
      text           itab
    EXCEPTIONS
      tcpip_error    1
      command_error  2
      data_error     3
      OTHERS         4.
  IF sy-subrc <> 0.
    WRITE'Error en cargar el excel al directorio FTP'.
  ENDIF.


  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle gv_handle.

  IF sy-subrc EQ 0.
    WRITE'El proceso se ha creado correctamente'.
  ENDIF.


* BREAK-POINT.

ENDFORM.


Al terminar el Job creará el excel en la ruta expecificada:






















Comentarios

Publicar un comentario