jueves, 23 de diciembre de 2010

Abap que crea script VBS

*Manda pulsaciones de teclas como si el usuario las invocara, llena la XD02

report zbatchxd02.
data begin of i_upload occurs 0.
data line(255).
data end of i_upload.

parameter p_name like rlgrap-filename.

data begin of i_outtab occurs 0.
data line(255).
data end of i_outtab.

data: begin of record,
customer(100),
name(100),
name2(100),
name3(100),
name4(100),
street(100),
street2(100),
housenumber(100),
house(100),
nosuppl(100),
district(100),
street3(100),
street4(100),
city(100),
region(100),
postalcode(100),
country(100),
telephone1(100),
taxcode1(100),
taxcode2(100),
zipcode(100),
end of record.


*$*$********************************************************************
*$*$ AT SELECTION-SCREEN
*$*$********************************************************************
at selection-screen.

* Para la seleccion del archivo a convertir
at selection-screen on value-request for p_name.
call function 'KD_GET_FILENAME_ON_F4'
exporting
program_name = syst-repid
dynpro_number = syst-dynnr
field_name = ''
static = ''
mask = ''
changing
file_name = p_name
exceptions
mask_too_long = 1
others = 2.

*$*$********************************************************************
*$*$ START-OF-SELECTION
*$*$********************************************************************
start-of-selection.
perform leer_archivo.
perform procesa_datos.
perform baja_script.
*Perform BATCHINPUT.

*$*$********************************************************************
*$*$ FORMS
*$*$********************************************************************
*&---------------------------------------------------------------------*
*& Form LEER_ARCHIVO
*&---------------------------------------------------------------------*
form leer_archivo.

* Para cargar el archivo de entrada
refresh i_upload.
call function 'WS_UPLOAD'
exporting
filename = p_name
* Filetype = 'WK1'
tables
data_tab = i_upload
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
customer_error = 9
others = 10.

endform. " LEER_ARCHIVO

*&---------------------------------------------------------------------*
*& Form PROCESA_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form procesa_datos.
clear: record.
data: c_tab type x value '09'.
loop at i_upload.
translate i_upload-line using '" '.
condense i_upload-line.
modify i_upload.
endloop.
i_outtab-line = 'set WshShell = WScript.CreateObject("WScript.Shell")'.
append i_outtab.

loop at i_upload.
split i_upload-line at c_tab into
record-customer
record-name
record-name2
record-name3
record-name4
record-street
record-street2
record-housenumber
record-nosuppl
record-district
record-street3
record-street4
record-city
record-region
record-postalcode
record-country
record-telephone1
record-taxcode1
record-taxcode2
record-zipcode.

condense: record-customer
,record-name
,record-name2
,record-name3
,record-name4
,record-street
,record-street2
,record-housenumber
,record-nosuppl
,record-district
,record-street3
,record-street4
,record-city
,record-region
,record-postalcode
,record-country
,record-telephone1
,record-taxcode1
,record-taxcode2
,record-zipcode.

i_outtab-line = 'WScript.Sleep 3500'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys
"{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{DEL}{
del}{del}"'.
append i_outtab.
*CUSTOMER
concatenate 'WshShell.SendKeys "' record-customer '"' into i_outtab-line
. append i_outtab.
*ENTER
i_outtab-line = 'WshShell.SendKeys "~"'.
append i_outtab.
i_outtab-line = 'WScript.Sleep 1500'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.




*NAME1
concatenate 'WshShell.SendKeys "' record-name '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*NAME2
concatenate 'WshShell.SendKeys "' record-name2 '"' into i_outtab-line.
append i_outtab.
*PREGUNTAMOS SI ES DE 2 RENGLONES
i_outtab-line = 'intAnswer = Msgbox("¿Es de 2 campos?", vbYesNo,
"Script")'.
append i_outtab.
i_outtab-line = 'If intAnswer = vbYes Then'.
append i_outtab.

i_outtab-line = 'WshShell.SendKeys "{TAB}{TAB}{TAB}"'.
append i_outtab.
i_outtab-line = 'Else'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}{DEL}{TAB}{TAB}{TAB}"'.
append i_outtab.
i_outtab-line = 'End If'.
append i_outtab.


*STREET
concatenate 'WshShell.SendKeys "' record-street '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*HOUSE NUMBER
concatenate 'WshShell.SendKeys "' record-housenumber '"' into
i_outtab-line. append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*POSTAL CODE
concatenate 'WshShell.SendKeys "' record-postalcode '"' into
i_outtab-line. append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*CITY
concatenate 'WshShell.SendKeys "' record-city '"' into
i_outtab-line. append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*DISTRICT
i_outtab-line = 'WshShell.SendKeys"{DEL}"'.append i_outtab.
concatenate 'WshShell.SendKeys "' record-district '"' into
i_outtab-line. append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*MANDA ESPACIO Y ESPERA
i_outtab-line = 'WshShell.SendKeys " "'.
append i_outtab.
i_outtab-line = 'WScript.Sleep 1500'.
append i_outtab.
*NAME3

concatenate 'WshShell.SendKeys "' record-name3 '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.

*NAME4
concatenate 'WshShell.SendKeys "' record-name4 '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}{TAB}"'.
append i_outtab.
*HOUSENOSUPPLY
concatenate 'WshShell.SendKeys "' record-nosuppl '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*STREET3
concatenate 'WshShell.SendKeys "' record-street3 '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*STREET4
concatenate 'WshShell.SendKeys "' record-street4 '"' into i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys
"{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}"'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys " "'.
append i_outtab.
i_outtab-line = 'WScript.Sleep 1500'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
*REGION
*concatenate 'WshShell.SendKeys "' record-region '"' into i_outtab-line.
* append i_outtab.
i_outtab-line = 'WshShell.SendKeys
"{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}"'.
append i_outtab.
*Telephone1
*concatenate 'WshShell.SendKeys "' record-telephone1 '"' into
*i_outtab-line.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{F8}"'.
append i_outtab.
i_outtab-line = 'WScript.Sleep 1500'.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}{TAB}{TAB}{TAB}"'.
append i_outtab.

*Taxcode1
concatenate 'WshShell.SendKeys "' record-taxcode1 '"' into i_outtab-line
.
append i_outtab.
i_outtab-line = 'WshShell.SendKeys "{TAB}"'.
append i_outtab.

*Taxcode2
concatenate 'WshShell.SendKeys "' record-taxcode2 '"' into i_outtab-line
.
i_outtab-line = 'MsgBox "¿Grabar ahora?"'.
append i_outtab.
i_outtab-line = 'WScript.Sleep 2500'.

i_outtab-line = 'WshShell.SendKeys "^s"'.
append i_outtab.

clear i_outtab.
append i_outtab.

endloop.

endform. " PROCESA_DATOS

*&---------------------------------------------------------------------*
*& Form BAJA_SCRIPT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form baja_script.
concatenate p_name '.vbs' into p_name.
call function 'WS_DOWNLOAD'
exporting
* BIN_FILESIZE = ' '
* CODEPAGE = ' '
filename = p_name
* FILETYPE = 'DAT'
* filetype = 'WK1'
* MODE = ' '
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* COL_SELECT = ' '
* COL_SELECTMASK = ' '
* importing
* filelength =
tables
data_tab = i_outtab
* FIELDNAMES =
exceptions
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
others = 8.

if sy-subrc = 0.
skip.
write:/ 'Script bajado'.
endif.
endform. " BAJA_SCRIPT

viernes, 17 de diciembre de 2010

obtener clave de oss marketplace

obtener clave de oss marketplace
te vas a service.sap.com
luego en la opcion keys and requests
luego sscrkeys llenas con los datos de la pantalla
de sap y luego das register y con eso te manda la
clave

Enviar mensajes abap

para enviar un mensaje usa
con popup
message i368(00) with 'test la hora es ' sy-uzeit.
en la barra de estado
Message S000(IH) with 'Terminado'.
Message e368(00) with 'No se encontró Pedido'.

permite varios parametros creo que 4 mensajes seguidos.

martes, 7 de diciembre de 2010

Write Abap con colores disponibles

REPORT ZCOLOR LINE-SIZE 90 NO STANDARD PAGE HEADING.

DATA: BEGIN OF TP OCCURS 10, ID, NR(8), TEXT(255), END OF TP.

DATA: LENGTH TYPE I VALUE 8, " Length of list
TESTSTRING(15) TYPE C VALUE '012345678901234',
WIDTH TYPE I. " Width of list
DATA: TXT_REPORT LIKE DOKHL-OBJECT.


START-OF-SELECTION.
PERFORM HEADING.
PERFORM OUTPUT_BODY.

FORM HEADING.
FORMAT INTENSIFIED OFF. " Remove any INTENSIFIED
ULINE AT (WIDTH). " Upper frame border
FORMAT COLOR COL_HEADING INTENSIFIED." Title color
WRITE: / SY-VLINE. " Left border
WRITE: 'No |Colour |intensified |intensified off|',
'inverse' NO-GAP.
WRITE: AT WIDTH SY-VLINE. " Right border
ULINE AT (WIDTH). " Line below titles
FORMAT COLOR OFF.
ENDFORM.

FORM OUTPUT_BODY.

DO LENGTH TIMES.
PERFORM WRITE_LINE USING SY-INDEX.
ENDDO.
ENDFORM.

FORM WRITE_LINE USING COUNT TYPE I.
DATA: HELP(14) TYPE C,
COUNT1 TYPE I.

COUNT1 = SY-INDEX - 1.
WRITE: / SY-VLINE NO-GAP.
WRITE: (4) COUNT1 COLOR COL_KEY INTENSIFIED NO-GAP.
WRITE: SY-VLINE NO-GAP.
CASE COUNT1.
WHEN '0'.
HELP = 'COL_BACKGROUND'.
WHEN '1'.
HELP = 'COL_HEADING'.
WHEN '2'.
HELP = 'COL_NORMAL'.
WHEN '3'.
HELP = 'COL_TOTAL'.
WHEN '4'.
HELP = 'COL_KEY'.
WHEN '5'.
HELP = 'COL_POSITIVE'.
WHEN '6'.
HELP = 'COL_NEGATIVE'.
WHEN '7'.
HELP = 'COL_GROUP'.
ENDCASE.
WRITE: HELP COLOR COL_KEY INTENSIFIED NO-GAP.
WRITE: SY-VLINE NO-GAP.
WRITE: TESTSTRING COLOR = COUNT1 INTENSIFIED NO-GAP.
WRITE: SY-VLINE NO-GAP.
WRITE: TESTSTRING COLOR = COUNT1 INTENSIFIED OFF NO-GAP.
WRITE: SY-VLINE NO-GAP.
WRITE: TESTSTRING COLOR = COUNT1 INVERSE NO-GAP.
WRITE AT WIDTH SY-VLINE NO-GAP.
ENDFORM.

Verificar disponibilidad de un material

REPORT ZEX_AVAILIBILITYCHK .

Parameter: p_matnr like BAPIMATVP-MATNR,
p_werks like BAPIMATVP-WERKS,
p_unit like BAPIADMM-UNIT.

*Data: int_wmdvsx like BAPIWMDVS occurs 0 with header line,
* int_wmdvex like BAPIWMDVE occurs 0 with header line.

Data: int_wmdvsx type table of bapiwmdvs with header line,
int_wmdvex type table of bapiwmdve with header line,
d_WKBST like BAPICM61V-WKBST.



CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
EXPORTING
PLANT = p_werks
MATERIAL = p_matnr
UNIT = p_unit
* CHECK_RULE =
* STGE_LOC =
* BATCH =
* CUSTOMER =
* DOC_NUMBER =
* ITM_NUMBER =
* WBS_ELEM =
* STOCK_IND =
* DEC_FOR_ROUNDING =
* DEC_FOR_ROUNDING_X =
* READ_ATP_LOCK =
* READ_ATP_LOCK_X =
IMPORTING
* ENDLEADTME =
AV_QTY_PLT = d_WKBST
* DIALOGFLAG =
* RETURN =
TABLES
WMDVSX = int_wmdvsx
WMDVEX = int_wmdvex
.


Write:/ d_WKBST.

If sy-subrc = 0.

endif.

viernes, 19 de noviembre de 2010

batch input, call transaction y direct input

REPORT ZBATCHINPUT.
* -------------------------------------------------------------------- *
* En este programa se utiliza la transacción FB09 (modificar posición de
* documento) para ejemplificar el uso del Batch-Input y del Call-
* Transaction.
************************************************************************
* BATCH-INPUT *
************************************************************************
* En el juego de datos se introduce un campo que no existe (BSEG-ABCDE);
* sin embargo, este error no detiene el proceso cuando se ejecuta el
* batch-input aunque sí se refleja en el log. Sin embargo en un call-
* transaction sí se considera un error y no se actualiza esa transacción
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* Se produce un JD. Éste contiene una transacción errónea, la primera.
* En el momento de procesar el JD podemos corregir la transacción o bien
* pasar a la siguiente (Sistema/Servicios/Batch_inp/Transacc.siguiente)
* en cuyo caso esta transacción quedará en el JD en el apartado de
* 'JD erróneos'.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* Es el mismo que on-line.
*
************************************************************************
* CALL-TRANSACTION *
************************************************************************
* En un Call Transaction las transacciones correctas se actualizan, las
* erróneas no.
* Hay que lanzar un Call Transaction por cada registro de la tabla.
* El modo de actualización puede ser A(Asíncrono) S(Síncrono) y L(Local)
* Si el programa se lanza en fondo da igual el MODE ('A', 'E' o 'N') del
* Call-Transaction; en este caso, si se quiere ver una orden SPOOL con
* los errores es necesario hacer el LOOP sobre la tabla de los errores
* y escribirlos con WRITE.
* Se habilita un procedimiento para guardar en un juego de datos las
* transacciones (registros) incorrectas. Esto es muy útil si el CALL
* TRANSACTION tiene lugar en un job de fondo donde no se permite el
* procesamiento on-line de las transacciones incorrectas.
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* El proceso depende del modo de visualización escogido.
* A: se procesan on-line todas las transacciones.
* E: sólo se procesan on-line las transacciones erróneas.
* N: no hay procesamiento on-line.
* Las transacc.incorrectas se pierden, salvo que se hayan corregido on-
* line. En el modo 'N' estas transacc. se pierden irremediablemente.
* Para evitar perder las transacc.erróneas éstas pueden almacenarse en
* un JD para procesarlas posteriormente on-line. Esto es lo que se ha
* hecho en este programa.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* Independientemente del modo de visualización (A, E ó N), las transacc.
* correctas se actualizan en el sistema y las incorrectas se pierden
* salvo que se hayan guardado en un JD.
* El resultado es similar al on-line.
*
*
* -------------------------------------------------------------------- *
* Tanto si es batch-input como call-transaction, se tiene que limpiar la
* tabla BDCTAB al comienzo de cada transacción, sino se van acumulando
* las transacciones y siempre se ejecutaría la primera.
* -------------------------------------------------------------------- *
*
************************************************************************
* DIRECT INPUT *
************************************************************************
* Sólo está permitido para los programas estándar de transferencia de
* datos (ver transacción SXDA).
TABLES:
BGR00,
BBKPF,
BBSEG.

CONSTANTS:
CODE LIKE TSTC-TCODE VALUE 'FB09',
FICHERO_SALIDA LIKE FILEINFO-NAME VALUE '/tmp/roman_tmp/dir_inp.txt',
CTE_NODATA LIKE BGR00-NODATA VALUE '#'.

DATA:
MENSAJE LIKE T100-TEXT,
STR_TMP(255).

DATA:
BEGIN OF ITAB OCCURS 0,
BELNR LIKE BKPF-BELNR,
BUKRS LIKE BKPF-BUKRS,
GJAHR LIKE BKPF-GJAHR,
ZUONR LIKE BSEG-ZUONR,
SGTXT LIKE BSEG-SGTXT,
END OF ITAB,
BDC_TAB LIKE STANDARD TABLE OF BDCDATA WITH HEADER LINE,
ERR_BI LIKE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE.


************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.

* Llenado de la tabla interna con los datos
PERFORM FILL_ITAB.
*======================================================================*
* Batch-Input *
*======================================================================*
PERFORM BATCHINPUT.
*======================================================================*
* Call Transaction *
*======================================================================*
PERFORM CALLTRANSACTION.
*======================================================================*
* Direct Input *
*======================================================================*
PERFORM DIRECTINPUT.


************************************************************************
* END-OF-SELECTION *
************************************************************************
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DYNPRO USING VALUE(DYNBEGIN)
VALUE(NAME)
VALUE(VALUE).

CLEAR BDC_TAB.
IF DYNBEGIN = 'X'.
BDC_TAB-PROGRAM = NAME.
BDC_TAB-DYNPRO = VALUE.
BDC_TAB-DYNBEGIN = 'X'.
ELSE.
BDC_TAB-FNAM = NAME.
BDC_TAB-FVAL = VALUE.
ENDIF.
APPEND BDC_TAB.
CLEAR BDC_TAB.

ENDFORM. " DYNPRO

*&---------------------------------------------------------------------*
*& Form BDC_OPEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_OPEN.

CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'Pruebas'
KEEP = 'X'
USER = SY-UNAME.

ENDFORM. " BDC_OPEN

*&---------------------------------------------------------------------*
*& Form BDC_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_INSERT.

CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = CODE
TABLES
DYNPROTAB = BDC_TAB.

ENDFORM. " BDC_INSERT

*&---------------------------------------------------------------------*
*& Form BDC_CLOSED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_CLOSED.

CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.

ENDFORM. " BDC_CLOSED

*&---------------------------------------------------------------------*
*& Form FILL_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_ITAB.
MOVE:
'9900000001' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=AC' TO ITAB-SGTXT.
APPEND ITAB.
MOVE:
'1900000002' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=VI' TO ITAB-SGTXT.
APPEND ITAB.
MOVE:
'1900000003' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=GU' TO ITAB-SGTXT.
APPEND ITAB.

ENDFORM. " FILL_ITAB

*&---------------------------------------------------------------------*
*& Form BATCHINPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BATCHINPUT.

LOOP AT ITAB.
REFRESH BDC_TAB. " ------------------ Borrar la transacción anterior

AT FIRST.
PERFORM BDC_OPEN. " ------------------- Apertura del juego de datos
ENDAT.

REFRESH BDC_TAB. "<------------------ Borrar la transacción anterior
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0102',
' ' 'RF05L-BELNR' ITAB-BELNR,
' ' 'RF05L-BUKRS' ITAB-BUKRS,
' ' 'RF05L-GJAHR' ITAB-GJAHR,
' ' 'RF05L-XKSAK' 'X',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF05L' '0300',
' ' 'BSEG-ABCDE' '21022000', " No existe !!!
' ' 'BSEG-ZUONR' ITAB-ZUONR,
' ' 'BSEG-SGTXT' ITAB-SGTXT,
' ' 'BDC_OKCODE' 'AE',
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' 'ENTE'.
* Adición de la transacción a la tabla del juego de datos. Se añade
* una transacción por cada registro de datos de ITAB.
PERFORM BDC_INSERT. " --------------- Inserción en el juego de datos

AT LAST.
PERFORM BDC_CLOSED. " ------------------- Cierre del juego de datos
ENDAT.

ENDLOOP.

ENDFORM. " BATCHINPUT

*&---------------------------------------------------------------------*
*& Form CALLTRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CALLTRANSACTION.
DATA COPY_SYTABIX LIKE SY-TABIX.

LOOP AT ITAB.
MOVE SY-TABIX TO COPY_SYTABIX.

* Apertura de un JD para las transacciones erróneas
AT FIRST.
PERFORM BDC_OPEN.
ENDAT.

* Proceso de cada registro de ITAB (cada registro es una transacción)
REFRESH BDC_TAB. "<------------------ Borrar la transacción anterior
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0102',
' ' 'RF05L-BELNR' ITAB-BELNR,
' ' 'RF05L-BUKRS' ITAB-BUKRS,
' ' 'RF05L-GJAHR' ITAB-GJAHR,
' ' 'RF05L-XKSAK' 'X',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF05L' '0300',
* ' ' 'BSEG-ABCDE' '21022000', " No existe !!!
' ' 'BSEG-ZUONR' ITAB-ZUONR,
' ' 'BSEG-SGTXT' ITAB-SGTXT,
' ' 'BDC_OKCODE' 'AE',
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' 'ENTE'.
* Escribimos los mensajes de cada transacción para que salgan agrupa-
* dos con el mensaje de 'sin errores' o 'con errores' de su transacc.
* correspondiente. Para ello es necesario limpiar la tabla ERR_BI en
* cada transacción ya que el sistema no la limpia cuando llama a la
* transacción.
REFRESH ERR_BI.
CALL TRANSACTION 'FB09' USING BDC_TAB MODE 'A' MESSAGES INTO ERR_BI.
NEW-LINE.
IF SY-SUBRC = 0.
WRITE:'Transacción', COPY_SYTABIX LEFT-JUSTIFIED, ': sin errores'.
ELSE.
WRITE:'Transacción', COPY_SYTABIX LEFT-JUSTIFIED, ': con errores'.
* Adición de la transacción errónea al JD para procesarlo on-line
* PERFORM BDC_INSERT.
ENDIF.
* ERR_BI va acumulando todos los errores que se van produciendo en las
* transacciones (no la limpia el sistema en cada transacción).
LOOP AT ERR_BI.
SELECT SINGLE TEXT INTO MENSAJE
FROM T100
WHERE SPRSL = 'S' AND
ARBGB = ERR_BI-MSGID AND
MSGNR = ERR_BI-MSGNR.
NEW-LINE.
WRITE AT: 1 ERR_BI-DYNAME,
15 ERR_BI-DYNUMB,
20 ERR_BI-MSGTYP,
22 ERR_BI-MSGNR,
26 MENSAJE.
************************************************************************
* Con las siguientes líneas de código podemos concatenar todas *
* las variables del mensaje en el cuerpo del mensaje. *
*----------------------------------------------------------------------*
* DATA: MENSAJE1 ... MENSAJE4 LIKE MENSAJE.
* SPLIT MENSAJE AT '&' INTO MENSAJE1 MENSAJE2 MENSAJE3 MENSAJE4.
* CONCATENATE MENSAJE1 ERR_BI-MSGV1 MENSAJE2 ERR_BI-MSGV2
* MENSAJE3 ERR_BI-MSGV3 MENSAJE4 ERR_BI-MSGV4
* INTO MENSAJE SEPARATED BY SPACE.
* WRITE MENSAJE.
************************************************************************

ENDLOOP.

* Cierre del JD abierto para los errores. Hay que colocarlo al final
* pues si lo colocamos después del AT FIRST y por lo tanto antes del
* cuerpo del LOOP, si la tabla interna sólo tiene un registro el AT
* LAST se procesa en el mismo bucle e inmediatamente después del AT
* FIRST por lo que inmediatamente después de abrir el JD éste se es
* cerrado. Si ocurriera que ese registro fuera erróneo, al pretender
* hacer el INSERT al JD ocurriría un error ya que el JD se cerró.
AT LAST.
PERFORM BDC_CLOSED.
ENDAT.

ENDLOOP."<--------------------------- Siguiente transacción (registro)

ENDFORM. " CALLTRANSACTION

*&---------------------------------------------------------------------*
*& Form DIRECTINPUT
*&---------------------------------------------------------------------*
* Para hacer un Direct Input usaremos el programa estándar de transf. de
* datos RFBIBL00.
*----------------------------------------------------------------------*
FORM DIRECTINPUT.

PERFORM CREATEFILE.
PERFORM RUN_RFBIBL00.

ENDFORM. " DIRECTINPUT

*&---------------------------------------------------------------------*
*& Form CREATEFILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CREATEFILE.

DATA: NAME_JD LIKE BGR00-GROUP VALUE 'JD_DIR_INPUT'.
OPEN DATASET FICHERO_SALIDA FOR OUTPUT IN TEXT MODE.
PERFORM REC_NODATA USING BGR00.
MOVE:
'0' TO BGR00-STYPE,
NAME_JD TO BGR00-GROUP,
SY-MANDT TO BGR00-MANDT,
SY-UNAME TO BGR00-USNAM,
'X' TO BGR00-XKEEP.
TRANSFER BGR00 TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBKPF.
MOVE:
'1' TO BBKPF-STYPE,
'FB01' TO BBKPF-TCODE,
'TEL1' TO BBKPF-BUKRS,
'03032000' TO BBKPF-BLDAT,
'KR' TO BBKPF-BLART,
'ESP' TO BBKPF-WAERS,
'ABCDE' TO BBKPF-XBLNR,
'X' TO BBKPF-XMWST.
TRANSFER BBKPF TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBSEG.
MOVE:
'2' TO BBSEG-STYPE,
'BBSEG' TO BBSEG-TBNAM,
'31' TO BBSEG-NEWBS,
'2000000014' TO BBSEG-NEWKO,
'85000' TO BBSEG-WRBTR,
'1D' TO BBSEG-MWSKZ,
'BSIT' TO BBSEG-HBKID.
TRANSFER BBSEG TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBSEG.
MOVE:
'2' TO BBSEG-STYPE,
'BBSEG' TO BBSEG-TBNAM,
'40' TO BBSEG-NEWBS,
'6000000' TO BBSEG-NEWKO,
'85000' TO BBSEG-WRBTR,
'ZTEL100001' TO BBSEG-KOSTL,
'=AC' TO BBSEG-SGTXT.
TRANSFER BBSEG TO FICHERO_SALIDA.
CLOSE DATASET FICHERO_SALIDA.

ENDFORM. " CREATEFILE

*&---------------------------------------------------------------------*
*& Form REC_NODATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM REC_NODATA USING REC_NAME.

DATA: COPY_SYSUBRC LIKE SY-SUBRC.
FIELD-SYMBOLS: .

WHILE COPY_SYSUBRC EQ 0.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE REC_NAME TO .
MOVE SY-SUBRC TO COPY_SYSUBRC.
CHECK SY-SUBRC EQ 0.
MOVE CTE_NODATA TO .
ENDWHILE.

ENDFORM. " REC_NODATA

*&---------------------------------------------------------------------*
*& Form RUN_RFBIBL00
*&---------------------------------------------------------------------*
* Si se emplea el CALLMODE = 'D' (Direct Input) hay algunas operaciones
* que no se admiten (como el cálculo automático de impuestos) y darían
* lugar a errores.
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* El programa creará un JD con las transacc.erróneas si así ha sido
* implementado en su código. El RFBIBL00 crea un JD con los errores en
* los CALLMODE 'C' y 'D'. En el 'B' crea un JD con todas las transacc.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* El resultado depende del CALLMODE
* B: Se crea el JD.
* C: Ocurre un error si el job que lanza el ZBORRAR14 no es reiniciable.
* D: Ocurre un error si el job que lanza el ZBORRAR14 no es reiniciable.
* Si el job es reiniciable se crea un JD con las transacc.erróneas tanto
* en modo 'C' como en 'D'.
* Para crear un job reiniciable:
* Transacc.BMV0/Ejecutar-->Definición de job.
* Escribir el nombre del job que lanza a el ZBORRAR14.
*----------------------------------------------------------------------*
FORM RUN_RFBIBL00.

SUBMIT RFBIBL00 WITH DS_NAME = FICHERO_SALIDA
WITH CALLMODE = 'D' AND RETURN.

ENDFORM. " RUN_RFBIBL00


traido De la web sapabap.iespana.es por si es borrado de alla

martes, 9 de noviembre de 2010

Ejecutar programa externo abap en proceso de fondo

Si lo que necesitas es llamar un programa externo desde sap pero que se pueda ejecutar como proceso de fondo.

SM69
(F5) modificar
(f6) crear
nombre de comando: ztest
sistema operativo: windows nt
comando del sistema operativo: C:\test.bat
(Ctrl + S) guardar
(f3) back
(Ctrl + S) guardar

para mandar llamar este comando esta es la programacion


REPORT zpractica.

data begin of t_data1 occurs 0.
include structure BTCXPM.
data end of t_data1.

CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = 'ZTEST'
TABLES
EXEC_PROTOCOL = T_DATA1.

jueves, 4 de noviembre de 2010

Abap eliminar caracteres de una cadena

Es para cuando no se puede usar el REPLACE ALL OCCURRENCES OF debido a que no lo tiene la version de sap, si se quiere insertar otro simbolo en vez de ese usar
translate donde elim nos dice que caracter sustituir por cual ej @ por ' '.


report zelcar.
data texto(5000) type c
value '@123"@=,<,>,~,/,”,,+,*,|,:,·$%&/()9876*1@)'.
data elim(4) value '@ * '.
write texto.
perform f_elimina_caracteres using texto.
*translate texto using elim.
write / texto.



**------------------------------------------------
** f_elimina_caracteres.
**------------------------------------------------
form f_elimina_caracteres changing texto.
data: len type i, caracter, va type i,texto2(5000) type c.
*creamos tabla interna con los caracteres a eliminar de el archivo
data: begin of i_careli occurs 0,
car,
end of i_careli.
*cuales caracteres queremos quitar =,<,>,~,/,”,’,+,*,|,:,
i_careli-car = '='.append i_careli.
i_careli-car = '<'.append i_careli.
i_careli-car = '>'.append i_careli.
i_careli-car = '~'.append i_careli.
i_careli-car = '/'.append i_careli.
i_careli-car = '+'.append i_careli.
i_careli-car = '*'.append i_careli.
i_careli-car = '|'.append i_careli.
i_careli-car = ':'.append i_careli.


write texto.
len = strlen( texto ).
while va <= len.

caracter = texto+va(+1).
loop at i_careli.
if i_careli-car = caracter.
caracter = ''.
endif.
endloop.
concatenate caracter texto2 into texto2.
va = va + 1.
endwhile.
texto = texto2.
endform.

lunes, 27 de septiembre de 2010

Comprobar si un campo es numerico ABAP

report ztest.

data irefer(60) value '1casa'.
data v_tipo(4).

CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = irefer
IMPORTING
* string_out =
htype = v_tipo
EXCEPTIONS
OTHERS = 1.

IF v_tipo EQ 'NUMC'.
if iREFER < 10000.
concatenate '01038' irefer+1(5) into irefer.
else.
concatenate '0100' irefer into irefer.
endif.

ENDIF.
write irefer.

lunes, 16 de agosto de 2010

Buscar Campos En SAP

Por Enrique de Luca

Fijate que elementos de datos tienen, y después vas por la SE16 a la tabla DD03L, y ponés en ROLLNAME( creo) el elemento de datos, y te va a tirar todos los estructura/tabla campo donde se utiliza.