sexta-feira, 26 de março de 2010

BAPI_INSPOPER_RECORDRESULTS

Estes ultimos dias precisei de utilizar a BAPI BAPI_INSPOPER_RECORDRESULTS e infelizmente achei pouca informação sobre ela, mas juntando tudo consegui resolver o problema.
Necessidade de utiliza-la foi para inserir resultados em um lote de controle especifico.
Foi necessário copiar os resultados de um lote de controle X e colar no lote de controle Y.
Processo manual para fazer o desejado.
Entrar na transação QA32, ver algum lote de controle que tenha resultados, entrar em outro lote de controle que deseja inserir resultados e ir copiando os valores de cada caracteristica de resultado no lote de controle que desejamos salvar.

Código da utilização da BAPI:

TYPES: BEGIN OF ty_qals,
prueflos TYPE qals-prueflos,
ktextlos TYPE qals-ktextlos,
werk TYPE qals-werk,
matnr TYPE qals-matnr,
herkunft TYPE qals-herkunft,
losmenge TYPE qals-losmenge,
lifnr TYPE qals-lifnr,
ekorg TYPE qals-ekorg,
ebeln TYPE qals-ebeln,
ebelp TYPE qals-ebelp,
mblnr TYPE qals-mblnr,
enstehdat TYPE qals-enstehdat,
END OF ty_qals,


BEGIN OF ty_inspointdata .
INCLUDE STRUCTURE bapi2045l4.
TYPES: END OF ty_inspointdata.

DATA: t_qals_qa01 TYPE STANDARD TABLE OF ty_qals.

DATA: t_sample_results TYPE STANDARD TABLE OF bapi2045d3,
t_bapireturn2 TYPE bapiret2,
t_ireturntable TYPE STANDARD TABLE OF bapiret2,
t_inspointdata TYPE STANDARD TABLE OF ty_inspointdata,
wa_sample_results LIKE LINE OF t_sample_results,
wa_inspointdata LIKE LINE OF t_inspointdata,
wa_return LIKE bapiret2,
wa_ireturntable LIKE LINE OF t_ireturntable,
wa_qals_qa01 LIKE LINE OF t_qals_qa01,
l_num(4) TYPE n,
l_qibpvornr TYPE qibpvornr,
t_results TYPE STANDARD TABLE OF bapi2045d2,
wa_results LIKE LINE OF t_results,
v_lote_c TYPE qals-prueflos.

l_num = 10.
l_qibpvornr = l_num.
READ TABLE t_qals_qa01 INTO wa_qals_qa01 INDEX 1.

CLEAR: t_results[],
t_inspointdata[].

* Lê resultados inseridos na QA01
CALL FUNCTION 'BAPI_INSPOPER_GETDETAIL'
EXPORTING
insplot = wa_qals_qa01-prueflos "Lote de controle ja com resultados
inspoper = l_qibpvornr
read_insppoints = 'X'
read_char_results = 'X'
char_filter_no = '1 '
char_filter_tcode = 'QE11'
insppoint_from = 0
IMPORTING
return = wa_return
TABLES
insppoints = t_inspointdata
char_results = t_results.

IF wa_return-id = 'E'.
* Caso não consiga ler os resultados, gera log de erro
ENDIF.

* Prepara para inserir resultados lote gerado no Batchinput
LOOP AT t_results INTO wa_results.
wa_results-insplot = v_lote_c. "Lote de controle que receberá resultados
MOVE-CORRESPONDING wa_results TO wa_sample_results.
MODIFY t_results FROM wa_results INDEX sy-tabix.
APPEND wa_sample_results TO t_sample_results.
ENDLOOP.


READ TABLE t_inspointdata INTO wa_inspointdata INDEX 1.
wa_inspointdata-inspoper = l_qibpvornr.
wa_inspointdata-insplot = v_lote_c. "Lote de controle que receberá resultados
wa_inspointdata-userc1 = '1'.
wa_inspointdata-userd1 = sy-datum.
wa_inspointdata-usert1 = sy-uzeit.

* Inserir resultados no lote gerado pelo batchinput
CALL FUNCTION 'BAPI_INSPOPER_RECORDRESULTS'
EXPORTING
insplot = v_lote_c "Lote de controle que receberá resultados
inspoper = l_qibpvornr "Operação (Ex. = 10)
insppointdata = wa_inspointdata
IMPORTING
return = t_bapireturn2
TABLES
char_results = t_results
sample_results = t_sample_results
returntable = t_ireturntable.

IF NOT t_ireturntable[] IS INITIAL.
READ TABLE t_ireturntable INTO wa_ireturntable WITH KEY type = 'E'.
IF sy-subrc = 0.
* Caso dê erro, gerar log de erro.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = t_bapireturn2.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = t_bapireturn2.
ENDIF.

FREE: t_sample_results,
t_inspointdata.

Um comentário:

  1. Oi Adriano aqui é o Rômulo da Usiminas,

    Agora é a minha vez de sofrer um pouco com esta BAPI. Só que meu caso é mais complicado, tenho que receber resultados e a DU por RFC.

    Seu post me fez lembrar de um detalhe que estava esquecendo, espero que resolva meu problema atual.

    Abraços,
    Rômulo
    Desde 2007 abapeando por ai.

    ResponderExcluir