subir Excel mediante batch input

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Truco
    Junior Member
    • feb
    • 12

    #1

    subir Excel mediante batch input

    Tengo el siguiente batch input de la Tx PA30 que funciona trayendo los datos para el infotipo 2003 desde un texto plano separado por tabulaciones.


    Código:
    REPORT zhr_bi_inf_2003_PRUEBA NO STANDARD PAGE HEADING LINE-SIZE 255.
    
    
    *----------------------------------------------------------------------*
    * Declaración de tabla dinámica.
    *----------------------------------------------------------------------*
    
    DATA : BEGIN OF t_2003 OCCURS 0,
            pernr(038), " LIKE p2003-pernr,     * se comentan sentencias like
            begda(010), " LIKE p2003-begda,     * para entregar una mayor    amplitud a tabla
            endda(010), " LIKE p2003-endda,     * temporal t_2003
            tprog(004), " LIKE p2003-tprog.     *
            clave type char3,
    *DATA : END OF t_2003.                      *
           end of t_2003.
    
    *-----------------------------------------------------------------------*
    *          BDC_DATA                                                     *
    *-----------------------------------------------------------------------*
    
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    
    *FIELD-SYMBOLS==========================================================
    *CONSTANTS==============================================================
    *FLAGS==================================================================
    *VARIABLES==============================================================
    
    DATA : w_pernr(8),
           w_begda(8),
           w_endda(8),
           w_tprog(8).
    
    *PARAMETERS=============================================================
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-100.
    PARAMETERS : p_datain(128) TYPE c OBLIGATORY,
                 p_namjob      LIKE d0100-mapn OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b1.
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_datain.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                mask             = ',*.*,*.*.'
                mode             = 'O'
                title            = text-001
           IMPORTING
                filename         = p_datain
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
    
    *TOP-OF-PAGE.
    *START PROGRAM**********************************************************
    START-OF-SELECTION.
      REFRESH : t_2003, bdc_tab.
      PERFORM data_upload.
      PERFORM main_job.
    END-OF-SELECTION.
    *END PROGRAM************************************************************
    
    *&---------------------------------------------------------------------*
    *&      Form  MAIN_JOB
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    
    
    FORM main_job.
      AUTHORITY-CHECK OBJECT 'P_ORGIN'  " Objeto de autorizacion DE PA30.
      ID 'INFTY' FIELD '2003'         " campo infotipo 2003.
      ID 'AUTHC' DUMMY.
    
      IF sy-subrc = 0.
        CLEAR bdc_tab.
        PERFORM open_group.
          LOOP AT t_2003.
            REFRESH bdc_tab.
            CLEAR bdc_tab.
            "PERFORM data_format.    ***se comenta ya que no genera ninguna utilidad.
            PERFORM fill_screen.
            PERFORM bdc_insert.
          ENDLOOP.
        PERFORM close_group.
        ENDIF.
    ENDFORM.                    " MAIN_JOB
    
    *&---------------------------------------------------------------------*
    *&      Form  FILL_SCREEN
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM fill_screen.
      PERFORM move_bdc USING:
        'X'  'SAPMP50A'     '1000',
        ' '  'BDC_OKCODE'   '=INS',
        ' '  'RP50G-PERNR'  t_2003-pernr,
        ' '  'RP50G-BEGDA' t_2003-begda,   "w_begda
        ' '  'RP50G-ENDDA' t_2003-endda,   "w_endda,
        ' '  'RP50G-CHOIC'  '2003',
        ' '  'RP50G-SUBTY'  '06',
        'X'  'MP200000'    '2100',
        ' '  'BDC_CURSOR'  'P2003-TPROG',
        ' '  'BDC_OKCODE'  '=UPD',
        ' '  'P2003-TPROG'  t_2003-tprog.
    ENDFORM.                    " FILL_SCREEN
    *&---------------------------------------------------------------------*
    *&      Form  MOVE_BDC
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_0127   text
    *      -->P_0128   text
    *      -->P_0129   text
    *----------------------------------------------------------------------*
    FORM move_bdc USING  dynbegin  prog_or_fnam dynpro_or_fval.
      CLEAR bdc_tab.
      IF dynbegin = 'X'.
        MOVE: prog_or_fnam       TO bdc_tab-program,
              dynpro_or_fval     TO bdc_tab-dynpro,
              dynbegin           TO bdc_tab-dynbegin.
      ELSE.
        MOVE: prog_or_fnam       TO bdc_tab-fnam,
              dynpro_or_fval     TO bdc_tab-fval.
      ENDIF.
      APPEND bdc_tab.
    ENDFORM.                               " MOVE_BDC
    
    *&---------------------------------------------------------------------*
    *&      Form  OPEN_GROUP
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM open_group.
      CALL FUNCTION 'BDC_OPEN_GROUP'
           EXPORTING
                client = sy-mandt
                group  = p_namjob
                keep   = 'X'
                user   = sy-uname.
      IF sy-subrc NE 0.
        WRITE: text-001,sy-subrc,'CALL FUNCTION BDC_OPEN_GROUP',/.
        EXIT.
      ENDIF.
    ENDFORM.                    " OPEN_GROUP
    
    *&---------------------------------------------------------------------*
    *&      Form  BDC_INSERT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM bdc_insert.
      CALL FUNCTION 'BDC_INSERT'
           EXPORTING
                tcode     = 'PA30'
           TABLES
                dynprotab = bdc_tab.
      IF sy-subrc NE 0.
        WRITE: text-001,sy-subrc,'CALL FUNCTION BDC_INSERT',/.
        EXIT.
      ENDIF.
    ENDFORM.                    " BDC_INSERT
    
    *&---------------------------------------------------------------------*
    *&      Form  CLOSE_GROUP
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM close_group.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
      IF sy-subrc NE 0.
        WRITE: text-001,sy-subrc,'CALL FUNCTION BDC_CLOSE_GROUP', /.
        EXIT.
      ELSE.
        MESSAGE i000(ps) WITH 'SE HA GENERADO EL JUEGO DE DATOS '
                              p_namjob
                              'Debe Seleccionar la transaccion SM35 para ejecutar la carga'.
      ENDIF.
    ENDFORM.                    " CLOSE_GROUP
    *&---------------------------------------------------------------------*
    *&      Form  data_upload
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM data_upload.
      CALL FUNCTION 'WS_UPLOAD'
           EXPORTING
                filename                = p_datain
                filetype                = 'DAT'
           TABLES
                data_tab                = t_2003
           EXCEPTIONS
                conversion_error        = 1
                file_open_error         = 2
                file_read_error         = 3
                invalid_table_width     = 4
                invalid_type            = 5
                no_batch                = 6
                unknown_error           = 7
                gui_refuse_filetransfer = 8
                OTHERS                  = 9.
      IF sy-subrc NE 0.
        WRITE: text-001,sy-subrc,'CALL FUNCTION WS_UPLOAD',/.
        EXIT.
      ENDIF.
    ENDFORM.                    " data_upload
    *&---------------------------------------------------------------------*
    *&      Form  data_format
    *&---------------------------------------------------------------------*
    *       text                                  concatena, no se utiliza.
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    * FORM data_format.
    *-----------------------------------------------------------------------
    */  t_2003-anzhl = t_2003-anzhl / 10.
    */  w_anzhl = t_2003-anzhl.
    */  w_anzhx = w_anzhl.
    */  REPLACE '.' WITH ',' INTO w_anzhx.
    */  CONDENSE w_anzhx.
    *-----------------------------------------------------------------------
    * CONCATENATE t_2003-begda+1(3) t_2003-begda+4(4) "t_2003-begda+0(4)
    *         INTO w_begda.
    *  CONCATENATE t_2003-endda+1(3) t_2003-endda+4(4) "t_2003-endda+0(4)
    *         INTO w_endda.
    * ENDFORM.                    " data_format

    pero necesito solucionar los siguientes problemas:

    Necesito que sea capáz de leer desde un excel con cabecera, ya que los usuarios ingresan los datos a un excel que luego graban como texto separado por columnas, el problema es ke las fechas no quedan en formato SAP, es decir lo que debería ser por ejemplo 07092009, en el texto quedan 7092009, lo cual provoca que el dato no ingrese en sap...

    entonces lo mejor es leerlo directamente desde el excel.


    la idea en realidad es ke pueda leer cualquier formato, pero me conformo con excel (xls) o con .CSV.


    he encontrado funciones que convierten un excel .csv a texto separado por comas, pero al llamarlos desde el batch input SAP no toma las comas como un salto al siguiente campo.


    las funciones que he utilizado son las siguientes:


    http://www.mundosap.com/foro/showthread.php?t=274.

    las probé todas y ninguna me funciona...

    ayuda please que estoy aprendiendo en esto..
  • PercyFloresSotelo
    Member
    • jul
    • 66

    #2
    Hola, mandame tu correo y te paso un codigo que hice que te permite que escojas que delimitador podes usar para cualquier archivo



    Saludos................
    ----
    "Hay dos tipos de inteligencia: la ocasional y la del trabajo. La primera depende de la suerte, la segunda es fruto del intercambio de horas por conocimientos."

    ____________________
    Percy Flores Sotelo
    Consultor SAP / CO - ABAP
    www.Ferreyros.com.pe
    Ferreyros - Perú

    Comentario

    Trabajando...