on 03-26-2009 2:54 PM
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
Já pensou em fazer por BDC/LSMW usando a ME52?
abraç
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
dê uma olhada no documento do link abaixo
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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ó
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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'.
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
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ó
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.
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
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
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
User | Count |
---|---|
95 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.