PDA

Ver la Versión Completa : subir Excel mediante batch input


Truco
05/03/09, 14:38:05
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.


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=10571
http://www.mundosap.com/foro/showthread.php?t=274.

las probé todas y ninguna me funciona...

ayuda please que estoy aprendiendo en esto..

PercyFloresSotelo
05/03/09, 16:29:16
Hola, mandame tu correo y te paso un codigo que hice que te permite que escojas que delimitador podes usar para cualquier archivo



Saludos................