PDA

Ver la Versión Completa : Batch Input en transaccion xk02 y fd02


shinharold
03/06/09, 22:52:48
hola buenas tardes a todos,
pues les cuento soy nuevo aqui en MUNDOSAP y en SAP tambien, iclusive en programacion, estoy recien graduado de la U y de la academia.
bueno miremos haber..............es mi cuarta aplicacion que me han asigando, la cosa es bien simple, se trata de una actualizacion masiva de datos d direccion y telefonos en las transacciones XK02 ACREEDORES Y FD02 DEUDORES.

como soy nuevo, acorde que para aprender lo haria con un Batch Input, y ah!!! cosa seria......el cuento iba bien hice la grabacion la use, borre el include que viene por default hice el mio propio,.....y todo muy bien hasta que llege al punto del cambio de direcciones, y pasa, que al hacer un cambio en, ya sea la direccion, la ciudad o la region (o cualquiera de los datos que se encuentran enmarcados en el frame de direccion)
este en la fd02 o en la xk02 generan un mensaje de error tipo warning el cual dice que "no se puede verificar la direccion", por lo cual cuando ejecuto el BI se pierde el control del programa y queda parado.
yo le busque una solucion a este controlando tambien el warning (screen 600)
el problema es que a veces me funciona bien y otras se queda pegado por un cliente entonces ya no se que hacer........
y es que es muy erratico por ej: en la xk02 no sale cuando se cambia una direccion contrario a la fd02.....??

que me recomendarian ustedes, que hubieran hecho???
les ha tocado alguna vez algo parecido???

de antemano muchas gracias
espero muchas respuestas.....:D :D :D

shinharold
17/06/09, 15:30:16
hola a todos!!!

bueno eh aqui pongo parte del codigo que trabaje para controlar el cambio de direccion en ambas transacciones !!

si alguien tiene o encuentra una mejor forma de hacerlo que lo comente aqui, :p :p :p


por cierto las partes en rojo son el codigo que controla el screen de validacion de direccion estos solo se ponen cuando se cambia direccion, ciudad o region.....

FORM CARGAR_ACREEDORES.


*// PERFORM QUE AYUDA OBTIENE EL DATO DE LOS TELEFONOS PARA HACER LA VALIDACION IF.
PERFORM TELEFONIEN_CHECK.

LOOP AT IT_PLANO.

REFRESH IT_BDCDATA.

* // PRIMER DYNPRO DOND C INGRESA NUMERO D CLIENT, SOCIEDAD.
* // Y C SELECCIONA TIPO D DATOS A MODIFICAR, EN ESTE CASO:.
* // DIRECCION
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0101'.
PERFORM BDC_FIELD:
USING 'RF02K-LIFNR' IT_PLANO-LIFNR,
USING 'RF02K-D0110' 'X',
USING 'USE_ZAV' 'X',
USING 'BDC_CURSOR' 'RF02K-LIFNR',
USING 'BDC_OKCODE' '/00'.


**// CARGA EN LA CABECERA IT_TELE.
READ TABLE IT_TELE WITH KEY LIFNR = IT_PLANO-LIFNR.

* //SEGUNDO DYNPRO DOND C MODIFICAN DATOS PERSONALES DL DEUDOR.
* PERFORM BDC_DYNPRO
* USING 'SAPMF02D' '0111'.

LOOP AT IT_TELE WHERE STREET = IT_PLANO-STREET.
V_CONT = V_CONT + 1.
ENDLOOP.

IF V_CONT >= 1." TIENE LA MISMA DIR KE EN ARCHIVO PLANO.
IF IT_TELE-CITY1 = IT_PLANO-CITY1
OR IT_PLANO-CITY1 IS INITIAL.
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0111'.
PERFORM BDC_FIELD:
USING 'ADDR1_DATA-NAME1' IT_PLANO-NAME1,
USING 'ADDR1_DATA-NAME3' IT_PLANO-NAME3,
USING 'ADDR1_DATA-NAME4' IT_PLANO-NAME4,
USING 'SZA1_D0100-MOB_NUMBER' IT_PLANO-MOB_NUMBER,
USING 'SZA1_D0100-FAX_NUMBER' IT_PLANO-FAX_NUMBER,
USING 'SZA1_D0100-SMTP_ADDR' IT_PLANO-SMTP_ADDR,
USING 'BDC_OKCODE' '=$MTE',
USING 'BDC_CURSOR' 'ADDR1_DATA-NAME1'.

ELSEIF IT_TELE-CITY1 <> IT_PLANO-CITY1.
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0111'.
PERFORM BDC_FIELD:
USING 'ADDR1_DATA-NAME1' IT_PLANO-NAME1,
USING 'ADDR1_DATA-NAME3' IT_PLANO-NAME3,
USING 'ADDR1_DATA-NAME4' IT_PLANO-NAME4,
USING 'ADDR1_DATA-REGION' IT_PLANO-REGION,
USING 'ADDR1_DATA-CITY1' IT_PLANO-CITY1,
USING 'SZA1_D0100-MOB_NUMBER' IT_PLANO-MOB_NUMBER,
USING 'SZA1_D0100-FAX_NUMBER' IT_PLANO-FAX_NUMBER,
USING 'SZA1_D0100-SMTP_ADDR' IT_PLANO-SMTP_ADDR,
USING 'BDC_OKCODE' '=$MTE',
USING 'BDC_CURSOR' 'ADDR1_DATA-NAME1'.
*// CONTROLA WARNING RESULTADO DEL CAMBIO D REGION O CIUDAD.
PERFORM BDC_DYNPRO
USING 'SAPLSPO1' '0600'.
PERFORM BDC_FIELD
USING 'BDC_OKCODE' '=OPT1'.

ENDIF.

ELSEIF V_CONT = 0."DIFIERE DIR CONTRA ARCHIVO PLANO.
IF IT_PLANO-STREET IS INITIAL.
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0111'.
PERFORM BDC_FIELD:
USING 'ADDR1_DATA-NAME1' IT_PLANO-NAME1,
USING 'ADDR1_DATA-NAME3' IT_PLANO-NAME3,
USING 'ADDR1_DATA-NAME4' IT_PLANO-NAME4,
USING 'SZA1_D0100-MOB_NUMBER' IT_PLANO-MOB_NUMBER,
USING 'SZA1_D0100-FAX_NUMBER' IT_PLANO-FAX_NUMBER,
USING 'SZA1_D0100-SMTP_ADDR' IT_PLANO-SMTP_ADDR,
USING 'BDC_OKCODE' '=$MTE',
USING 'BDC_CURSOR' 'ADDR1_DATA-NAME1'.

ELSEIF IT_TELE-CITY1 = IT_PLANO-CITY1.
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0111'.
PERFORM BDC_FIELD:
USING 'ADDR1_DATA-NAME1' IT_PLANO-NAME1,
USING 'ADDR1_DATA-NAME3' IT_PLANO-NAME3,
USING 'ADDR1_DATA-NAME4' IT_PLANO-NAME4,
USING 'ADDR1_DATA-STREET' IT_PLANO-STREET,
USING 'SZA1_D0100-MOB_NUMBER' IT_PLANO-MOB_NUMBER,
USING 'SZA1_D0100-FAX_NUMBER' IT_PLANO-FAX_NUMBER,
USING 'SZA1_D0100-SMTP_ADDR' IT_PLANO-SMTP_ADDR,
USING 'BDC_OKCODE' '=$MTE',
USING 'BDC_CURSOR' 'ADDR1_DATA-NAME1'.
*// CONTROLA WARNING RESULTADO DEL CAMBIO DIRECCION.
* PERFORM BDC_DYNPRO
* USING 'SAPLSPO1' '0600'.
* PERFORM BDC_FIELD
* USING 'BDC_OKCODE' '=OPT1'.

ELSEIF IT_TELE-CITY1 <> IT_PLANO-CITY1.
PERFORM BDC_DYNPRO
USING 'SAPMF02K' '0111'.
PERFORM BDC_FIELD:
USING 'ADDR1_DATA-NAME1' IT_PLANO-NAME1,
USING 'ADDR1_DATA-NAME3' IT_PLANO-NAME3,
USING 'ADDR1_DATA-NAME4' IT_PLANO-NAME4,
USING 'ADDR1_DATA-STREET' IT_PLANO-STREET,
USING 'ADDR1_DATA-CITY1' IT_PLANO-CITY1,
USING 'ADDR1_DATA-REGION' IT_PLANO-REGION,
USING 'SZA1_D0100-MOB_NUMBER' IT_PLANO-MOB_NUMBER,
USING 'SZA1_D0100-FAX_NUMBER' IT_PLANO-FAX_NUMBER,
USING 'SZA1_D0100-SMTP_ADDR' IT_PLANO-SMTP_ADDR,
USING 'BDC_OKCODE' '=$MTE',
USING 'BDC_CURSOR' 'ADDR1_DATA-NAME1'.
*// CONTROLA WARNING RESULTADO DEL CAMBIO D REGION O CIUDAD.
PERFORM BDC_DYNPRO
USING 'SAPLSPO1' '0600'.
PERFORM BDC_FIELD
USING 'BDC_OKCODE' '=OPT1'.
ENDIF.
ENDIF.

ballan
17/06/09, 16:03:26
Aunque suene duro de primeras te desaconsejo la utilizacion de batch input a no ser que sea imprescindible o para algo muy muy sencillo (por ejemplo ir a una transaccion y pulsar un boton o algo asi)

En el caso de clientes y proveedores existen unas bapis (funciones) que te permiten tratar eso objetos, en concreto las bapis para modificar datos de cliente y de acreedor son respectivamente BAPI_CUSTOMER_CHANGEFROMDATA1 y VENDOR_MAINTAIN_XK02

Intenta modificar los datos necesarios con estas funciones y la primera vez maldeciras por tener que volver a escribir codigo pero a la larga agradeceras infinitamente el uso de bapis/funciones frente a los batch inputs

shinharold
17/06/09, 16:42:43
eh encontrado unas BAPI's que tal vez pueden ayudar con este asunto y son:

en la transaccion BAPI

BPContactPersonRel
--->BAPI_BUPR_CONTP_ADDR_CHANGE. (cambia direccion)
--->BAPI_BUPR_CONTP_ADDR_CHANGE. (cambia demas datos)


no se si sirvan para cambiar datos de las transacciones XK02 Y FD02, pero dice que sirve para cambiar los datos de contacto de personas???

alguno o alguna lo ha usado alguna vez???
saben si se puede usar para estas transacciones??? :confused: :confused:

ballan
17/06/09, 17:02:39
A mi me suena que las funciones que llevan BUPA o BUPR son utilizadas por SRM, creo que estaran adaptadas a los tipos de datos existentes en SRM que no tienen porque coincidir con los datos de R3

Es cuestion de probar o utilizar las 2 que te nombre anteriormente

shinharold
18/06/09, 18:16:36
gracias ballan, por tus comentarios, por el momento tratare de implementar las BAPI's que nombraste y vere a ver como me va.

tratare de colocar el codigo en proximos dias...:D :D :D

braschilester
30/09/09, 09:34:22
amigos como puedo saber que BAPI es para sierto modulo y transaccion
Ejemplo necesito realizar una BAPI de FI Transaccion AS01 o MM01 O KA01 como puedo saber que BAPI utilizar.....

gracias.:eek: