cancel
Showing results for 
Search instead for 
Did you mean: 

Alterar requisição de compra via BI ou BAPI

Former Member
0 Kudos

Olá a todos,

Necessito de desenvolver um programa para alterar a categoria de classificação contábil (EBAN-KNTTP) de uma requisição de compra de serviços de 'U - desconhecido' para outra, por exemplo 'K -Centro de Custo'.

Estou a deparar-me com as seguintes dificuldades:

- a transação antiga ME52 dá erro (erro ME456), logo não posso fazer esta alteração através de batch input (a SAP não recomenda batch input com chamada às novas transacções como a ME52N);

- a transacção nova ME52N permite fazer esta alteração, por isso tentei usar o BAPI_REQUISITION_CHANGE, mas, de acordo com a nota SAP 204689, este BAPI não faz esta alteração específica por falha no design do BAPI.

Conclusão: não consigo fazer esta modificação sem ser online.

Alguém sabe dar-me alternativas?

Muito obrigada!

Cumps,

Mónica Rodrigues

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Já pensou em fazer por BDC/LSMW usando a ME52?

abraç

Former Member
0 Kudos

Olá, Eduardo.

Obrigada pela sua resposta, mas a LSMW não é opção... Não se trata de um alteração pontual; o utilizador final deverá poder executar o programa sempre que necessitar...

Cumprimentos,

Mónica Rodrigues

Former Member
0 Kudos

por bdc você consegue restringir que ele poderá alterar somente a classificação contábil.

Former Member
0 Kudos

BDC não é batch input?

Cumps,

MR

Former Member
0 Kudos

depende do que se entende por batch input. você pode chamar um bdc por call transaction ou em modo batch.

Former Member
Former Member
0 Kudos

Teria de utilizar a ME52 e não posso usá-la...

Obrigada, Eduardo.

Answers (2)

Answers (2)

carlos_do
Discoverer
0 Kudos

Prezados:

Tenho uma requisição criada através da BAPI_REQUISITION_CREATE com apenas um item (0010), desejo criar um novo item (0020). Qual BAPI utilizar, pois já utilizei a CREATE e está informa que number da Req já existe.

carla_bussolo
Advisor
Advisor
0 Kudos

Prezado Carlos,

Queira, por gentileza, abrir uma nova thread com a sua dúvida.

Obrigada,

Carla Bussolo

former_member182114
Active Contributor
0 Kudos

Bom dia Monica,

Neste caso acredito que você deva usar um batch input na transação ME52N, a SAP não recomenda, porém neste caso acho que você está sem opção e poderia usá-la de forma restrita à essa funcionalidade.

Além disto, verifique se a função BAPI_PR_CHANGE está disponível em seu sistema e se atende às suas necessidades.

Atenciosamente,

Fernando Da Ró

Former Member
0 Kudos

Bom dia, Fernando.

Já tentei de tudo, inclusive BI à ME52N. Não funcionou.

A SAP recusa-se a alterar o BAPI, sem um pedido de desenvolvimento da nossa parte. Julgo que este assunto não deve ser tratado como um desenvolvimento mas sim como uma correcção ao BAPI, já que se trata de uma funcionalidade não suportada, por falha no desenho do BAPI.

Por estes motivos, tive de recorrer a uma solução mais radical...

Obrigada pela sua resposta!

Cumps,

Mónica Rodrigues

former_member182114
Active Contributor
0 Kudos

Bom dia Monica,

Que problemas você enfrentou no BI para ME52N. Consegui replicar aqui por SHDB sem problemas relativos à troca pra K.

Cumprimentos,

Fernando Da Ró

Former Member
0 Kudos

Bom dai, Fernando.

Ontem tive problemas com a net, pelo que não lhe respondi.

Quanto ao registo criado na SHDB para a ME52N, através do código gerado não se consegue perceber (ou pelo menos, eu não consigo perceber) qual o código para alterar a categoria de classificação contabilística (KNTTP). Junto envio o código gerado na SHDB:

(...)

perform bdc_dynpro using 'SAPLMEGUI' '0014'.

perform bdc_field using 'BDC_OKCODE'

'=MECHOB'.

perform bdc_field using 'BDC_CURSOR'

'MEREQ_TOPLINE-BSART'.

perform bdc_dynpro using 'SAPLMEGUI' '0002'.

perform bdc_field using 'BDC_OKCODE'

'=MEOK'.

perform bdc_field using 'BDC_CURSOR'

'MEPO_SELECT-BANFN'.

perform bdc_field using 'MEPO_SELECT-BANFN'

record-BANFN_001.

perform bdc_field using 'MEPO_SELECT-BSTYP_B'

record-BSTYP_B_002.

perform bdc_dynpro using 'SAPLMEGUI' '0014'.

perform bdc_field using 'BDC_OKCODE'

'=MEV4001BUTTON'.

perform bdc_field using 'BDC_CURSOR'

'MEREQ_TOPLINE-BSART'.

perform bdc_dynpro using 'SAPLMEGUI' '0014'.

perform bdc_field using 'BDC_OKCODE'

'=GRIDENTER'.

perform bdc_dynpro using 'SAPLMEGUI' '0014'.

perform bdc_field using 'BDC_OKCODE'

'=CONT'.

perform bdc_field using 'DYN_6000-LIST'

record-LIST_003.

perform bdc_field using 'BDC_CURSOR'

'ESLL-SRVPOS(01)'.

perform bdc_field using 'RM11P-NEW_ROW'

record-NEW_ROW_004.

perform bdc_dynpro using 'SAPLMLSK' '0200'.

perform bdc_field using 'BDC_CURSOR'

'ESKN-KOSTL(01)'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'VRTKZ1'

record-VRTKZ1_005.

perform bdc_field using 'ESKN-KOSTL(01)'

record-KOSTL_01_006.

perform bdc_dynpro using 'SAPLMLSK' '0200'.

perform bdc_field using 'BDC_CURSOR'

'ESLL-INTROW'.

perform bdc_field using 'BDC_OKCODE'

'=BACK'.

perform bdc_field using 'VRTKZ1'

record-VRTKZ1_007.

perform bdc_dynpro using 'SAPLMEGUI' '0014'.

perform bdc_field using 'BDC_OKCODE'

'=MEBACK'.

perform bdc_field using 'DYN_6000-LIST'

record-LIST_008.

perform bdc_field using 'BDC_CURSOR'

'ESLL-SRVPOS(01)'.

perform bdc_field using 'RM11P-NEW_ROW'

record-NEW_ROW_009.

perform bdc_dynpro using 'SAPLSPO1' '0100'.

perform bdc_field using 'BDC_OKCODE'

'=NO'.

perform bdc_transaction using 'ME52N'.

(...)

Cumps,

Mónica Rodrigues

former_member182114
Active Contributor
0 Kudos

Bom dia Monica,

Analisando o seu código fico até em dúvida se a modificação que tentei foi no lugar correto (sou técnico, não funcional). O caminho que utilizei foi ME52N --> Other Requisition --> Go to Tab Account Assignment --> change the values --> Save

Atenciosamente, Fernando Da Ros

perform bdc_dynpro using 'SAPLMEGUI'        '0014'.
perform bdc_field  using 'BDC_OKCODE'       '=MECHOB'.
perform bdc_dynpro using 'SAPLMEGUI'        '0002'.
perform bdc_field  using 'BDC_OKCODE'       '=MEOK'.
perform bdc_field  using 'BDC_CURSOR'       'MEPO_SELECT-BANFN'.
perform bdc_field  using 'MEPO_SELECT-BANFN'   record-BANFN_001.
perform bdc_field  using 'MEPO_SELECT-BSTYP_B' record-BSTYP_B_002.
perform bdc_dynpro using 'SAPLMEGUI'        '0014'.
perform bdc_field  using 'BDC_OKCODE'       '=TABREQDT6'.
perform bdc_dynpro using 'SAPLMEGUI'        '0014'.
perform bdc_field  using 'BDC_OKCODE'       '/00'.
perform bdc_field  using 'DYN_6000-LIST'    record-LIST_003.
perform bdc_field  using 'BDC_CURSOR'       'MEACCT1200-KNTTP'.
perform bdc_field  using 'MEACCT1200-KNTTP' record-KNTTP_004.
perform bdc_field  using 'MEACCT1200-VRTKZ' record-VRTKZ_005.
perform bdc_field  using 'MEACCT1200-TWRKZ' record-TWRKZ_006.
perform bdc_dynpro using 'SAPLMEGUI'        '0014'.
perform bdc_field  using 'BDC_OKCODE'       '=MESAVE'.
perform bdc_transaction using 'ME52N'.

Former Member
0 Kudos

Bom dia, Fernando.

Em que versão SAP é que está a trabalhar? Eu trabalho na release na ECC 6.0 e não tenho essa opção na ME52N (se tivesse maneira, enviava-lhe um print screen da ME52N)... O menu "Goto" só tem a opção "Back". Já estive a pesquisar no IMG, mas não encontro nada que possa influenciar as opções para alteração da ctg classificação contábil...

Cumps,

Mónica Rodrigues

former_member182114
Active Contributor
0 Kudos

Desculpe Mônica, estava logado em inglês e acabai passando a informação errada pra ti, estou usando ECC 6.0.

A opção de selecionar a tabstrip (tab) de account é visível quando executando o SHDB apenas, no canto direito mostra uma seta para esquerda, outra pra direita e um seletor onde se pode ir direto a uma tab qualquer. Usei ela para ir diretamente para a tab que gostaria de modificar o valor, isto gerou o código abaixo que comentei ser o "Goto":

perform bdc_dynpro using 'SAPLMEGUI'        '0014'.
perform bdc_field  using 'BDC_OKCODE'       '=TABREQDT6'.

Você testou o código que te passei ? Ele é muito direto e apenas para mudar o tipo, aconselho você gravar um novo SHDB, usando a dica de escolher a tab de accounting (p/mudar o KNTTP) usando o seletor de tabs ao invés de clicar diretamente na tab.

Espero que isso ajude.

Atenciosamente,

Fernando Da Ró

Former Member
0 Kudos

Fernando,

Em itens de serviço, essa opção não existe... Veja o seu mail, sff.

Cumps,

Mónica Rodrigues

daniel_carvalho
Active Contributor
0 Kudos

Olá,

Pelo que verifiquei no sistema do cliente que estou alocado aqui (versão ECC 5.0), a BAPI BAPI_REQUISITION_CHANGE possui os seguintes parâmetros:

IMPORTING

VALUE(NUMBER) LIKE BAPIEBAN-PREQ_NO -> Número da Requisição de Compra

TABLES

REQUISITION_ITEMS_OLD STRUCTURE BAPIEBANV -> Dados da tabela EBAN conforme está na requisição de compra, antes da alteração.

REQUISITION_ITEMS_NEW STRUCTURE BAPIEBANV -> Dados da tabela EBAN conforme deveria estar na requisição de compra, após a alteração. Se não deseja alterar, sugiro que copie o conteúdo da tabela REQUISITION_ITEMS_OLD para esta.

REQUISITION_ACCOUNT_OLD STRUCTURE BAPIEBKNV OPTIONAL -> Dados da tabela EBKN conforme está na requisição de compra, antes da alteração.

REQUISITION_ACCOUNT_NEW STRUCTURE BAPIEBKNV OPTIONAL -> Dados da tabela EBKN conforme deveria estar na requisição de compra, após a alteração. Se não deseja alterar, sugiro que copie o conteúdo da tabela REQUISITION_ACCOUNT_OLD para esta.

REQUISITION_TEXT_OLD STRUCTURE BAPIEBANTX OPTIONAL -> Dados com os textos da Requisição de compra. Se quiser, não precisa preencher

REQUISITION_TEXT_NEW STRUCTURE BAPIEBANTX OPTIONAL -> Dados com os textos da Requisição de compra. Se quiser, não precisa preencher

RETURN STRUCTURE BAPIRETURN OPTIONAL -> Dados com as mensagens de retorno após execução da BAPI.

Sugiro você testar a BAPI via transação SE37, fazendo do seguinte modo:

1) Crie o exemplo de teste, preenchendo todas as informações necessárias e depois salve como dados de teste (será necessário para acessar os dados no "Diretório de Dados de Teste");

2) Vá até a transação SE37 e escolha no menu: Módulo de função -> Testar -> Sequências de teste;

3) Insira as seguintes BAPIs: BAPI_REQUISITION_CHANGE e BAPI_TRANSACTION_COMMIT;

4) Pressione o botão "Executar" (reloginho);

5) Acione o botão "Diretório de dados de teste" e encontre a variante salva no primeiro passo;

6) Execute a função. Após isso, verifique as mensagens retornadas no parâmetro (tabela interna) RETURN;

7) Ao acionar o botão "Back", automaticamente o sistema solicitará o parâmetro WAIT para a segunda BAPI (BAPI_TRANSACTION_COMMIT). Se no passo anterior a BAPI de Requisição conseguiu salvar as alterações, execute a próxima BAPI com WAIT = X;

😎 Pronto. Sua requisição foi alterada.

Se mesmo assim sua BAPI não funcionar, recomendo pressionar a SAP para que eles desenvolvam uma nota de correção (OSS) para que a BAPI possa ter o mesmo comportamento em relação à transação "enjoy standard" ME52N.

Espero ter colaborado.

Atenciosamente,

Daniel.

Former Member
0 Kudos

Olá, Daniel.

Foi exactamente assim que descobri que a BAPI não funciona para alterar a ctg de classificação contábil da req.compra... Depois vi a nota da SAP 204689 que refere a falha no desenho da BAPI.

Já estive "à luta" com a SAP sobre este assunto, mas recusam-se a alterar a BAPI sem um pedido de desenvolvimento, quando eu considero que se trata de uma falha do sistema e não um desenvolvimento. O próximo passo será pressão da parte do cliente.

Muito obrigada pela sua ajuda!

Cumps,

Mónica Rodrigues

daniel_carvalho
Active Contributor
0 Kudos

Isso mesmo Monica,

Peça ao cliente para fazer uma pressão. Tenho exemplo de que isso irá funcionar.

Aqui no Unibanco, o cliente teve uma necessidade de uma alteração para fazer com que uma BAPI (BAPI_ENTRYSHEET_CREATE) que é a BAPI da transação ML81N funcionassse para uma determinada situação: Ela não estava permitindo a alteração de um campo chamado TAXTARIFFCODE (código de tarifa fiscal).

Resultado: O cliente fez pressão na SAP e conseguimos com que eles criassem a nota 1308456. É verdade que eles somente a criaram e nos pediram para que a implementássemos manualmente em nosso sistema. Sabe o que aconteceu? A nota já foi para a produção e acredito que nem a SAP sabe disso, hehehe!

Saudações,

Daniel Carvalho

Former Member
0 Kudos

Olá, Daniel.

Pois, o cliente já está notificado e já agiu junto da SAP Portugal. Vamos ver o que vai dar...

Obrigada!

Cumps,

MR

former_member182114
Active Contributor
0 Kudos

Bom dia Mónica,

Finalmente !!!!

Consegui realizar a operação desejada. Utilizei SAP GUI Scripting, uma ferramenta recente em que pode-se fazer um script de execução. No conceito ele é similar ao SHDB, porém é capaz de interagir com os objetos MySap (ME52n).

O incoveniente é não rodar em background, pois é vinculado ao SAP GUI. Espero que seja útil.

Atenciosamente,

Fernando Da Rós

Veja mais detalhes abaixo:

Automation and Integration of SAP GUI for Users and Developers

TechEd 2003 SAP GUI Scripting API Presentation

Exemplo de uma atualização com sucesso (alterando o segundo item para o KOSTL = "AUTO"):

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").resizeWorkingPane 106,33,false
session.findById("wnd[0]/tbar[0]/okcd").text = "me52n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB2:SAPLMEVIEWS:1100/subSUB2"+
                 ":SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:3212/cntlGRIDCONTROL/"+
                 "shellcont/shell").modifyCell 1,"KNTTP","K"
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB2:SAPLMEVIEWS:1100/subSUB2"+
                 ":SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:3212/cntlGRIDCONTROL/"+
                 "shellcont/shell").setCurrentCell 1,"KNTTP"
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB2:SAPLMEVIEWS:1100/subSUB2"+
                 ":SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:3212/cntlGRIDCONTROL/"+
                 "shellcont/shell").pressEnter
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2"+
                 ":SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:3303"+
                 "tabsREQ_ITEM_DETAIL/tabpTABREQDT1/ssubTABSTRIPCONTROL1SUB:"+
                 "SAPLMEGUI:1328/subSUB0:SAPLMLSP:0400/btnACCASS").press
session.findById("wnd[0]/usr/tblSAPLMLSKTC_0200/txtRM11K-MKNTM[0,0]").text = "1"
session.findById("wnd[0]/usr/tblSAPLMLSKTC_0200/ctxtESKN-KOSTL[1,0]").text = "auto"
session.findById("wnd[0]/usr/tblSAPLMLSKTC_0200/ctxtESKN-SAKTO[2,0]").text = "400000"
session.findById("wnd[0]/usr/tblSAPLMLSKTC_0200/ctxtESKN-SAKTO[2,0]").setFocus
session.findById("wnd[0]/usr/tblSAPLMLSKTC_0200/ctxtESKN-SAKTO[2,0]").caretPosition = 6
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[11]").press