PDA

Ver la Versión Completa : Bapi_requirements_change


javispill
12/09/08, 06:40:59
Hola a todos.

Estoy haciendo un programa que lee unos ficheros y tiene que cargar los datos en la MD61.

Primero tiene que borrar los datos existentes y luego cargar los del fichero, por lo que primero estoy usando BAPI_REQUIREMENTS_CHANGE para eliminar
y luego BAPI_REQUIREMENTS_CREATE para cargar los neuvos datos.

Pues el problema que tengo es que la primera BAPI me devuelve el siguiente error Period indicator cannot be converted
No se muy bien como funciona esta bapi he probado varias combinaciones. Por ejemplo no pasandole nada en TABLES, así no me devuelve nada pero cuando ejecuto la de create me dice Requirement already exists, maintain via change transaction firstCALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = t_prodplan-item_n
plant = t_prodplan-plantnam
requirementstype = ' '
version = 'LT'
reqmtsplannumber = ' '
vers_activ = ' '
* REQUIREMENT_PARAM =
* MRP_AREA =
do_commit = 'X'
update_mode = 'X'
delete_old = 'X'
* NO_WITHDR = ' '
*IMPORTING
* REQUIREMENT_ITEM_OUT =
TABLES
requirements_schedule_in = t_in
REQUIREMENTS_CHAR_IN = t_char_in
return = t_return_pp_del.

A ver si alguien que haya usado esta bapi me puede echar una mano.

Gracias.

Un saludo

javispill
12/09/08, 09:05:57
ya lo he conseguido , simplemente usando la de change , lo malo es que me carga cantidades muy raras que no se de donde salen

yo le paso la cantidad en requirements_schedule_in-qty_pquanty

pero nada

javispill
12/09/08, 09:07:59
luego tb le paso el periodoen el req_date = '20080101' por ejemplo y me lo pone donde le sale del nabo

javispill
12/09/08, 12:10:13
Ya esta solucionado, ahora solo me queda que me ponga bien el tipo de periodo (M) que es para meses y he visto que hay que pasarle el parametro
date_type = '3' pero me lo sigue poniendo en semanas.

He probado con todas las posibilidades pero no me lo pone en meses.

¿nadie ha usado esta bapi nunca?

corozco
23/09/10, 14:47:23
Ya esta solucionado, ahora solo me queda que me ponga bien el tipo de periodo (M) que es para meses y he visto que hay que pasarle el parametro
date_type = '3' pero me lo sigue poniendo en semanas.

He probado con todas las posibilidades pero no me lo pone en meses.

¿nadie ha usado esta bapi nunca?

Alguien sabe como usar la BAPI, tengo algunas dudas de como utilizar la BAPI: 'BAPI_REQUIREMENTS_CHANGE'.

Hasurac
12/12/11, 11:23:23
Hola como estas, yo he utilizado esta bapi, te paso mi codigo

primero los bajo de un ecxel

LOOP AT lt_excel INTO ls_excel.

CASE ls_excel-col.
WHEN c_1.
wa_upload-mantr = ls_excel-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_upload-mantr
IMPORTING
output = wa_upload-mantr.
WHEN c_2.
wa_upload-werks = ls_excel-value.
WHEN c_3.
wa_upload-versb = ls_excel-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_upload-versb
IMPORTING
output = wa_upload-versb.
WHEN c_4.
REPLACE ALL OCCURRENCES OF '.' IN ls_excel-value WITH ''.
wa_upload-pdatu = ls_excel-value.
WHEN c_5.
wa_upload-entlu = ls_excel-value.
WHEN c_6.
wa_upload-plnmg = ls_excel-value.
WHEN c_7.
wa_upload-bedae = ls_excel-value.
WHEN c_8.
wa_upload-vervs = ls_excel-value.
WHEN c_9.
wa_upload-uni_me = ls_excel-value.

ENDCASE.

CLEAR: ls_excel.

AT END OF row.
APPEND wa_upload TO gt_upload.
CLEAR wa_upload.
ENDAT.
ENDLOOp.

despues chequeo los datos y realizo las converciones necesarias aca veras la parde del meses

DATA: lv_date(8) TYPE c,
lv_row TYPE num ,
lv_val(8) TYPE c,
lv_long TYPE num,
lv_plnmg(17) TYPE c.



IF gt_upload IS NOT INITIAL.

CLEAR lv_row.

SELECT * INTO TABLE gt_marc FROM marc AS tb1
FOR ALL ENTRIES IN gt_upload
WHERE tb1~matnr EQ gt_upload-mantr AND
tb1~werks EQ gt_upload-werks.

SELECT * INTO TABLE gt_t001w FROM t001w AS tb1
FOR ALL ENTRIES IN gt_upload
WHERE tb1~werks EQ gt_upload-werks.

SELECT * INTO TABLE gt_t006 FROM t006b
FOR ALL ENTRIES IN gt_upload
WHERE mseh3 EQ gt_upload-uni_me AND
spras EQ sy-langu.


LOOP AT gt_upload INTO wa_upload.

lv_row = lv_row + c_1.

READ TABLE gt_marc INTO wa_marc WITH KEY matnr = wa_upload-mantr.

IF sy-subrc NE 0 .

wa_alv_error-row = lv_row.
wa_alv_error-messag = text-001.
REPLACE c_m WITH wa_upload-mantr INTO wa_alv_error-messag.
REPLACE c_w WITH wa_upload-werks INTO wa_alv_error-messag.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ENDIF.

READ TABLE gt_t001w INTO wa_t001w WITH KEY werks = wa_upload-werks.

IF sy-subrc NE 0 .

wa_alv_error-row = lv_row.
wa_alv_error-messag = text-002.
REPLACE c_w WITH wa_upload-werks INTO wa_alv_error-messag.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ENDIF.


CONCATENATE wa_upload-pdatu+4(4) wa_upload-pdatu+2(2) wa_upload-pdatu(2)
INTO lv_date.

CALL FUNCTION 'RP_CHECK_DATE'
EXPORTING
date = lv_date.
IF sy-subrc EQ c_1.
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-003.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ELSE.
wa_upload-pdatu = lv_date.

ENDIF.



IF NOT wa_upload-entlu CO c_val_pp .
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-004.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ELSE.

CASE wa_upload-entlu.

WHEN c_c OR c_k OR c_p.
wa_upload-entlu = c_5.
WHEN c_d OR c_t.
wa_upload-entlu = c_1.
WHEN c_m1.
wa_upload-entlu = c_3.
WHEN OTHERS.
wa_upload-entlu = c_2.
ENDCASE.

ENDIF.

lv_plnmg = wa_upload-plnmg.
CONDENSE lv_plnmg.

IF NOT lv_plnmg CA c_num .
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-005.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ELSE.

lv_long = STRLEN( lv_plnmg ).
IF lv_plnmg CA '.'.
lv_long = lv_long - ( sy-fdpos + c_1 ).
ENDIF.
IF lv_long GT c_3.
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-005.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ENDIF.
ENDIF.


CLEAR lv_plnmg.

CONCATENATE c_i* wa_upload-bedae c_f* INTO lv_val.

IF NOT c_val_cn CP lv_val .
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-006.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ENDIF.

IF wa_upload-vervs NE c_x AND wa_upload-vervs IS NOT INITIAL.
wa_alv_error-row = lv_row.
wa_alv_error-messag = text-007.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.
ENDIF.


READ TABLE gt_t006 INTO wa_t006 WITH KEY mseh3 = wa_upload-uni_me.

IF sy-subrc NE 0 .

wa_alv_error-row = lv_row.
wa_alv_error-messag = text-008.
REPLACE c_m WITH wa_upload-uni_me INTO wa_alv_error-messag.
APPEND wa_alv_error TO gt_alv_error.
CLEAR wa_alv_error.
wa_upload-error = c_x.

ELSE.
wa_upload-uni_me = wa_t006-msehi.

ENDIF.


MODIFY gt_upload FROM wa_upload INDEX lv_row .


ENDLOOP.
una ves echo esto loopeo la estructura para cargar los datos a pasar a la bapi


FORM populate_requirements_item.
CLEAR w_bapisitemr.
w_bapisitemr-material = wa_upload-mantr.
w_bapisitemr-plant = wa_upload-werks.
w_bapisitemr-requ_type = wa_upload-bedae.
w_bapisitemr-version = wa_upload-versb.
w_bapisitemr-vers_activ = wa_upload-vervs.
w_bapisitemr-req_number = space.

ENDFORM. "populate_requirements_item

*&---------------------------------------------------------------------*
*& Form populate_requirements_schedule
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_requirements_schedule.
i_requirements_schedule_in-date_type = wa_upload-entlu.
i_requirements_schedule_in-req_date = wa_upload-pdatu.
i_requirements_schedule_in-req_qty = wa_upload-plnmg.
i_requirements_schedule_in-unit = wa_upload-uni_me.
APPEND i_requirements_schedule_in.

ENDFORM. "populate_requirements_schedule


echo esto

lo que yo realizo es
un create y despues si tira error un change para que la modifique


CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
EXPORTING
requirements_item = w_bapisitemr
TABLES
requirements_schedule_in = i_requirements_schedule_in
return = i_bapireturn1.



READ TABLE i_bapireturn1 INTO w_bapireturn1 WITH KEY type = c_e id = c_6p number = c_011.

IF sy-subrc IS INITIAL.

CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = w_bapisitemr-material
plant = w_bapisitemr-plant
requirementstype = w_bapisitemr-requ_type
version = w_bapisitemr-version
reqmtsplannumber = space
vers_activ = w_bapisitemr-vers_activ
TABLES
requirements_schedule_in = i_requirements_schedule_in
return = i_bapireturn1.

READ TABLE i_bapireturn1 INTO w_bapireturn1 WITH KEY type = c_e id = c_6p number = c_012.

IF sy-subrc IS INITIAL.

WAIT UP TO c_9 SECONDS.

CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = w_bapisitemr-material
plant = w_bapisitemr-plant
requirementstype = w_bapisitemr-requ_type
version = w_bapisitemr-version
reqmtsplannumber = space
vers_activ = w_bapisitemr-vers_activ
TABLES
requirements_schedule_in = i_requirements_schedule_in
return = i_bapireturn1.



ENDIF.

ENDIF.

espero que te sirba saludos; aunque en mi caso surgio otro problema, no me modifica mas de un registros con el mismo material aunque esten en distintos meses si saves algo de esto te lo agradesco saludos