PDA

Ver la Versión Completa : BAPI_COMMIT_WORK no borra memoria de la BAPI URGE!!!!1


Jonathan Barrio Rodriguez
15/01/09, 00:22:25
:mad:

hOLA,

Uso 'bapi_price_conditions'
para modificar REGISTROS DE CONDICIONES en SD.
Tengo que modificar muchos en un mismo porgrama...

EL CASO es que meto un registro a la BAPI...
HAGO EL COMMIT WORK ( function BAPI_TRANSACTION_COMMIT)
Y al meter una serie de registros me explota en DUMP por unA VARIABLE
que guada un OFFSET... :(
No se me borran las variables ni las tablas de la memoria, osea al llamar a la BAPI DE nuevo me doy cuenta que los objetos del grupo de funciones que llama la BAPI NO ESTAN INICIADOS...

ALGUIEN SABE ALGUN TRUCO PARA ESTO???
gracias de antemano... pego algo de codigo a ver si ayuda

******************************************
loop at KONV_H where VBELN = TABLA_ALV-VBELN
and KNUMH = TABLA_ALV-KNUMH.

perform BAPI_CONDICIONES tables IT_RET2.
if IT_RET2[] is not INITIAL.
read table IT_RET2 with key TYPE = 'E' transporting no fields.

if SY-SUBRC = 0.
else.
*********************************************************************************
** Hemos comprobado dentro de esta condición el cambio de fecha en
**condiciones
** para saber si informarlo en el mensaje y tambien, actualizamos tabla, para
** mostrarla en la pantalla siguiente, correctamente

call function 'BAPI_TRANSACTION_COMMIT'
*EXPORTING
* WAIT = 5
importing
RETURN = WA_RET2.
endif.
clear: IT_RET2. refresh: IT_RET2.

endif.


*&---------------------------------------------------------------------*
*& Form BAPI_CONDICIONES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form BAPI_CONDICIONES tables IT_RET2." CHANGING IT_RET2.
*____________________________________________________________________*
* ESTRUCTURAS PARA LA BAPI DE ACTUALIZCION Y CRACCION CONDICIONES PRECIO*
*====================================================================*
*VAROABLES
* DATA SELECCION(2) TYPE C.
* DATA T_SELECCION(15) TYPE C.
* DATA: ESCALAS(13) TYPE C.
* DATA: CANTIDAD(13) TYPE C.
* DATA: UNIDADES(6) TYPE C.
data: POS type I.
* T_POS(02) TYPE C.
* DATA: T_KSTBM(15) TYPE C,
* T_KBETR(15) TYPE C,
* T_KONMS(15) TYPE C.
*
data: TABLA(3) type C.
* DATA: c_varkey(100) TYPE C.

* DATA COPY_SYTABIX LIKE SY-TABIX.
*--------------------------------------------------------------------*
* structures
data: WA_CONDCT type BAPICONDCT.
data: WA_CONDHD type BAPICONDHD.
data: WA_CONDIT type BAPICONDIT.
data: WA_CONDQS type BAPICONDQS.
data: WA_CONDVS type BAPICONDVS.
data: WA_RET2 type BAPIRET2.
data: WA_KNUMHS type BAPIKNUMHS.
data: WA_MEM_INITIAL type CND_MEM_INITIAL.

data: IT_CONDCT type table of BAPICONDCT.
data: IT_CONDHD type table of BAPICONDHD.
data: IT_CONDIT type table of BAPICONDIT.
data: IT_CONDQS type table of BAPICONDQS.
data: IT_CONDVS type table of BAPICONDVS.
* data: IT_RET2 type table of BAPIRET2.
data: IT_KNUMHS type table of BAPIKNUMHS.
data: IT_MEM_INITIAL type table of CND_MEM_INITIAL.

data: OPERACION(3) type C, "'009'.
NREGISTRO like VBAK-KNUMV."ZESTTAR-KNUMH. " '$000000001'.

data: KONV_H_M type standard table of KONM with header line.

NREGISTRO = KONV_H-KNUMH. "TARIFAS-KNUMV EN MM Y TABLA_ALV-KNUMV EN SD.

*****************
*TABLA IT_CONDCT.*" TI_BAPICONDCT STRUCTURE BAPICONDCT
*A965 ö A598
*****************
*nota:
*operacion:
*004 = modificar
*009 = crear


WA_CONDCT-OPERATION = '004'."OPERACION.
WA_CONDCT-COND_NO = NREGISTRO.
WA_CONDCT-TABLE_NO = KONV_H-KOTABNR."KNUMH. "tabla ESTABA EN
WA_CONDCT-APPLICATIO = KONV_H-KAPPL. "V PARA SD; M EN MM.
WA_CONDCT-COND_TYPE = KONV_H-KSCHL. "'ZCS0'.
WA_CONDCT-COND_USAGE = KONV_H-KVEWE. "'A'.
WA_CONDCT-VARKEY = KONV_H-VAKEY. "c_varkey.
WA_CONDCT-VALID_FROM = KONV_H-KOTABNR_DATAB. "'20091101'.
WA_CONDCT-VALID_TO = TABLA_ALV-VENDDAT. "KONV_H-DATBI. "'
append WA_CONDCT to IT_CONDCT.
*____________________________________________________________________*
*****************
*" TI_BAPICONDHD STRUCTURE BAPICONDHD
*KONH
*****************
WA_CONDHD-OPERATION = '004'.
WA_CONDHD-COND_NO = NREGISTRO.
WA_CONDHD-SD_DOC = KONV_H-VBELN.
WA_CONDHD-ITM_NUMBER = KONV_H-KPOSN.
WA_CONDHD-CREATED_BY = SY-UNAME.
WA_CONDHD-CREAT_DATE = SY-DATUM.
WA_CONDHD-COND_USAGE = KONV_H-KVEWE. "'A'. "si es 'E' crea una WA_CONDHD-TABLE_NO = KONV_H-
WA_CONDHD-APPLICATIO = KONV_H-KAPPL. "'M'.
WA_CONDHD-VARKEY = KONV_H-VAKEY. " c_varkey.

WA_CONDHD-VALID_TO = TABLA_ALV-VENDDAT."KONV_H-DATBI
WA_CONDHD-VALID_FROM = KONV_H-DATAB. "'20091101'.
*READ TABLE I_KONDAT WITH key VBELN = TABLA_ALV-VBELN.
*indice = sy-tabix.
*if sy-SUBRC = 0.
WA_CONDHD-COND_TYPE = KONV_H-KSCHL. "'ZCS0'.
*endif. "'ZSC0'.
append WA_CONDHD to IT_CONDHD.


case KONV_H-KSCHL.
when 'ZXL1'.
**********************
*" TI_BAPICONDIT STRUCTURE BAPICONDIT
**********************
WA_CONDIT-OPERATION = '004'. "023 los datos no se han de importar.'"OPERACION.
WA_CONDIT-COND_NO = NREGISTRO.
WA_CONDIT-SD_DOC = KONV_H-VBELN.
WA_CONDIT-ITM_NUMBER = KONV_H-KPOSN.
WA_CONDIT-COND_COUNT = KONV_H-KOPOS. "'01'.
WA_CONDIT-APPLICATIO = KONV_H-KAPPL."'M'.
WA_CONDIT-COND_TYPE = KONV_H-KSCHL. "'ZSC0'.
WA_CONDIT-SCALETYPE = KONV_H-KNPRS."'A'. "Clase de escala
WA_CONDIT-SCALEBASIN = KONV_H-KZBZG. "'C'. "Indicador:
WA_CONDIT-SCALE_QTY = KONV_H-KPEIN. "I_TARIFAS-
WA_CONDIT-COND_P_UNT = KONV_H-KPEIN. "I_TARIFAS-
WA_CONDIT-COND_UNIT = KONV_H-KMEIN. "Unidad de medida
WA_CONDIT-CALCTYPCON = KONV_H-KRECH. "'C'. "Regla de
WA_CONDIT-COND_VALUE = KONV_H-KBETR. "Importe de moneda
WA_CONDIT-CONDCURR = KONV_H-WAERS. "Unidad de


append WA_CONDIT to IT_CONDIT.


when 'ZXP1'.

select * into corresponding fields of table KONV_H_M
from KONM
for all entries in KONV_H
where KNUMH = KONV_H-KNUMH
and KNUMH = NREGISTRO."NREGISTRO.
delete adjacent duplicates from KONV_H_M.

WA_CONDIT-OPERATION = '004'. "023 los datos no se han de imp
WA_CONDIT-COND_NO = NREGISTRO.
WA_CONDIT-SD_DOC = KONV_H-VBELN.
WA_CONDIT-ITM_NUMBER = KONV_H-KPOSN.
WA_CONDIT-COND_COUNT = KONV_H-KOPOS. "'01'.
WA_CONDIT-APPLICATIO = KONV_H-KAPPL."'M'.
WA_CONDIT-COND_TYPE = KONV_H-KSCHL. "'ZSC0'.
WA_CONDIT-SCALETYPE = KONV_H-KZBZG."'B'. "Clase de e
WA_CONDIT-SCALEBASIN = KONV_H-KNPRS."'C'. "Indicador:

WA_CONDIT-SCALE_QTY = KONV_H-KSTBM. "KONV_H-KPEIN. "Cantidad
WA_CONDIT-COND_P_UNT = KONV_H-KPEIN. "
WA_CONDIT-COND_UNIT = KONV_H-KMEIN. "Unidad de medida
WA_CONDIT-CALCTYPCON = KONV_H-KRECH. "'C'. "Regla de
WA_CONDIT-COND_VALUE = KONV_H-KBETR. "Importe de moneda
WA_CONDIT-CONDCURR = 'EUR'."KONV_H_M-KONWA.

append WA_CONDIT to IT_CONDIT.

POS = 1.
****************
*SORT I_TARIFAS BY NTARIFA ASCENDING.
* Estructura BAPI de KONM con nombres de campo en inglés
****************
clear: KONV_H_M.
loop at KONV_H_M. " where KOPOS <> 1.
*" TI_BAPICONDQS STRUCTURE BAPICONDQS
WA_CONDQS-OPERATION = '004'."OPERACION."con '005' funciona bien.
WA_CONDQS-SD_DOC = KONV_H-VBELN. "'$000000001'. "documento
WA_CONDQS-ITM_NUMBER = KONV_H-KPOSN. "10.
WA_CONDQS-COND_NO = NREGISTRO. "Nº registro condición
WA_CONDQS-COND_COUNT = KONV_H_M-KOPOS.
WA_CONDQS-LINE_NO = KONV_H_M-KLFN1. "
WA_CONDQS-SCALE_QTY = KONV_H_M-KSTBM."100000. "Cantidad de la condición de base de escala
WA_CONDQS-COND_UNIT = 'M3'.

WA_CONDQS-CURRENCY = KONV_H_M-KBETR.
WA_CONDQS-CONDCURR = 'EUR'. " KONV_H-KONWA.
append WA_CONDQS to IT_CONDQS.

add 1 to POS.

clear: KONV_H_M.
endloop.
clear: KONV_H_M. refresh: KONV_H_M.
endcase.


data: IS_CRMSFK like BAPICRMSFK.
concatenate
WA_CONDCT-COND_USAGE "KONV_H-KVEWE
WA_CONDCT-COND_NO " NREGISTRO
'01'"WA_CONDCT-
KONV_H-DATBI " WA_CONDCT-VALID_TO
into IS_CRMSFK-SFA_KEY_P.

* MOVE WA_CONDCT-VARKEY TO is_crmsfk-SFA_KEY_P.
move WA_CONDCT-COND_NO to IS_CRMSFK-LINE_NO."NREGISTRO

BREAK SE04524.

call function 'CND_MAP_KNUMH_EXTRACT_MAPPING'
exporting
PI_BAPICRMSFK = IS_CRMSFK.

call function 'CND_MAP_KNUMH_OLD_SET'
exporting
PI_KVEWE = WA_CONDCT-COND_USAGE
PI_KNUMH_TMP = WA_CONDCT-COND_NO
PI_DATBI = KONV_H-KOTABNR_DATBI.

call function 'CND_MAP_KNUMH_READ_DB'.

call function 'BAPI_PRICES_CONDITIONS'
* EXPORTING
* PI_initialmode = 'X'
* PI_BLOCKNUMBER =
tables
TI_BAPICONDCT = IT_CONDCT
TI_BAPICONDHD = IT_CONDHD
TI_BAPICONDIT = IT_CONDIT
TI_BAPICONDQS = IT_CONDQS
TI_BAPICONDVS = IT_CONDVS
TO_BAPIRET2 = IT_RET2 "it_ret2
TO_BAPIKNUMHS = IT_KNUMHS
TO_MEM_INITIAL = IT_MEM_INITIAL
exceptions
UPDATE_ERROR = 1
others = 2.

stormshadow
06/08/09, 16:34:08
Que onda brother!, oye pues yo estoy implementando esa bapi y ya la tengo casi lista, pero tengo una preguntota, este campo: COND_NO que es el N° de registro de la condicón pues como lo obtienes? lo que pasa es que supuestamente se tiene que crear al crear el registro, o sea que se tiene que dejar en blanco para que se genere, pero si lo dejo en blanco no me crea nada! en cambio si le pongo un valor si m crea el registro...
Bueno esa es mi duda, gracias de antemano.

sanchezgc
29/08/11, 13:54:48
Intenta meter en un include zupdate.

la sentencia set update task local.

Colocala el include antes o despues de la bapi. pruebalo a mi me funcionó.