Jump to content
rafig

AutoIT com SAP/R3

Recommended Posts

Prezados,

Eu trabalho numa empresa e faço trabalhos no SAP-R3. Existem tarefas as quais são rotineiras e as quais eu gostaria de automatizar a execução destas e por isto venhor até vocês.

O que exatamente eu gostaria? vou explicar.

Um exemplo daqui:

Normalmente precisamos alterar dentro do SAP o código de criticidade de uma equipamento, os quais possuem 3 letras: criticadde A. B ou C.

Acontece que dependendo do processo eu preciso mudar todos os equipamentos de criticidade A para B ou vice-versa ou até mesmo um lote desses equipamentos para C. Porém, no SAP isto só pode ser feito manualmente e um a um, como às vezes, a lista de equipamentos é grande demais, levamos 3 a 4 dias numa atividade maçante de entrar em cada equipamento e realizar esta modificação.

Então o que gostaria é de mudar isto, automatizando da seguinte forma:

Eu gostaria de executar o .exe gerado pelo AutoIT e deixá-lo em espera até que eu faça LOGON no SAP-R3. Ao entrar no SAP, então o o .exe acessar a transação específica, [Enter], insere o código do equipamento, [Enter], vai até campo onde está escrito a criticidade (ex. A) e muda (ex. muda para B ), salva e pega outro código de outro equipamento e faz a mesma coisa que fez para o equiapmento anterior. Porém, que o .exe pegue a transação e o código de cada equipamento de uma planilha excel (xlsx).

Bem, eu tenho conhecimento de programação PHP, C, JAVA (pouco, mas que supre minhas necessidades). Já de AutoIT não conheço e estou aprendendo agora.

Se alguém puder me ajudar a desenvolver algo do tipo citado acima, agradacerei imensamente.

Tenho certeza que futuramente conseguirei aprender o suficiente para ajudar outros, mas como estou precisando apresentar algo cuja velocidade de aprendizado meu é inferior a velocidade de minha necessidade no momento, então estou pedindo ajuda. Não gostaria que fizessem o programa, que desenvolvessem o acript, mas que me ajudadassem a desenvolver dando dicas. Por que se alguém fizer, eu não aprendo, mas se eu fizer com certeza me desenvolvo.

Desde já agradeço a todos.

Edited by rafig

Share this post


Link to post
Share on other sites

Olá @rafig,

 

Eu também uso SAP na empresa onde trabalho, e automatizar com AutoIt depende do gestor/administrador do SAP liberar um objeto .dll ou .ocx para interação ou configuração, caso contrário, não vai funcionar mesmo.

 

No meu caso, a empresa não libera e assunto encerrado, resta-me fazer tudo na mão.

 

Há poucos exemplos no fórum americano do AutoIt, reservo-me o direito de não fazer um copia e cola, pois é pouca coisa para procurar sobre o assunto e está bem redigido.

 

Lamento não ter mais conhecimento para compartilhar sobre este assunto.

  • Like 1

Share this post


Link to post
Share on other sites

E ae rapazeaada!

@rafig , eu trabalho "majoritariamente" com automação no SAP. E é possível automatizar sem a liberação do gestor/administrador do SAP, @Luigi.

Mas sem uma integração "background" (utilizando .dll ou .ocx).

O que tem que ser feito são "bots" para automatizar o trabalho. E quem aprova é só o gerente da área! kkkkkk

@rafig, você disse que não quer código, então vão dicas:

 

1 - Use o Au3Info.exe para obter os dados das janelas e controles que você quer interagir.

2 - Explore o Help do AutoIt! É de longe o melhor professor para autodidatas ;)

3 - WinActive,WinActivate,WinWaitActive,WinWaitNotActive, ControlClick, ControlGetText, Send, Sleep, Opt ; estude estas funções pra começar....

4 - Eu preferi fazer minhas próprias funções para ler / escrever no Excel, mas peguei tudo lendo a UDF Excel.au3, você pode utilizar para interagir com o arquivo em Excel.

5 - Seu problema:

Eu gostaria de executar o .exe gerado pelo AutoIT e deixá-lo em espera até que eu faça LOGON no SAP-R3.

(faça esperar até existir a ttela do "SAP Acess..", a tela inicial do sap ex.: WinWaitActive('SAP Easy Access'))

Ao entrar no SAP, então o o .exe acessar a transação específica

(Dê um clique no controle "Edit1", é o campo em que você digita a transação ex.: ControlClick('SAP Easy Access','','Edit1'), dorme alguns milesegundos Sleep (250) , digita a transação ex.: Send( iw31 ) e Enter....Send( ENTER ), [Enter], ....etc

 

6 - Se possível, utilize uma máquina virtual ou acesso remoto, para você não perder tempo "assistindo" ao robô.

 

Por ter conhecimento de programação, o resto você consegue lendo o Help...

Espero ter dado um sentido para a usa vida! :ninja:

 

Se precisar de mais...posta aí! :like_icon:

Edited by NOx
  • Like 2

Share this post


Link to post
Share on other sites

Está respondendo... ;)

 

Estamos com algumas dificuldades técnicas no fórum e trabalhando para resolver, mas nem sempre é tão rápido ou fácil como gostaríamos...

 

Por enquanto, evite de usar os emoticons e as tags de CODE. O mais simples possível e em modo texto puro!

 

Se precisar enviar algum código:

PEQUENO: use o espaço normal mas sem as tags CODE (fica feio mas vai)

GRANDE: crie um arquivo e anexe ele ao post.

Share this post


Link to post
Share on other sites

Prezado administrador, eu apenas consegui fazer uma simples pergunta, como a feita acima, e só. Tentei argumentar algumas coisas a dias, após os colegas do forum darem dicas e responderem ao meu questionamento, mas até o momento a única coisa que consigo são frases assim, como estas. As mensagens de retorno que recebo é de que há um problema com o servidor.

Quase que nem a frase acima iria.

  • Like 1

Share this post


Link to post
Share on other sites

Prezados,

Eu consegui fazer o que desejava no SAP usando AutoiT. Gostaria muito de poder colocar aqui como foi feita a minha conquista (como iniciante. E muuito iniciante).

Mas infelizmente, eu já tentei diversas vezes e não consegui conforme eu mesmo e o administrador do forum reportam sobre os problemas que vem ocorrendo com o servidor. Se houver alguma outra maneira de eu dizer de demonstrar através dos scripts que criei usando o help, então por favor informem. Não vou colocar meu email aqui por que não sei se posso, não lembro de todas as regras do forum, apesar de tê-las lido. Ao Luigi e Nox, :like_icon:

Share this post


Link to post
Share on other sites

@rafig, eu tenho utilizado o Github para compartilhar código, fica a dica.

 

Eu mesmo gostaria muito de ver o seu exemplo de código. ^^

Share this post


Link to post
Share on other sites

NOX, suas dicas foram valiosíssimas, tenho aprendido bastante com o help. Eu consegui criar um script, mas sem máquina virtual. Tive que ficar vendo o robozinho atuar. Bem o que fiz foi, modificar em torno de 900 planos de manutenção para PSVs em que precisei padronizar todos para que tivessem o valor do ciclo de manutenção com resultado assim: [(ciclo já existente)* 360] / 1.1

Também mudei a unidade de todos os ciclos para DIA ao invés de MES ou SEMANA ou outra unidade qualquer que tenha existido lá. Mudei as tolerâncias (+) e (-) para 10% e 0%, respectivamentes, Mudei o Horizonte de abertura de todos para 80% e mudei o intervalo de revisão de todos para 10 e unidade ANO.

Para fazer isto o script pegou as informações sobre cada plano (identificação) em uma arquivo excel, o usuário diz qual o valor da última linha da planilha e qual planilha será usada, daí o robozinho faz o resto. Usei a letra "q" para sair, "p" para pausar, "r" para reiniciar.

Funcionou perfeitamente.

Luigi, preciso aprender como funciona o Github para eu poder usar e postar o script que fiz e assim poder compartilhar como eu consegui e como estou conseguindo resolver meus problemas aqui. E, é claro, poder ajudar outros tb.

Abraço.

Share this post


Link to post
Share on other sites

Eu estou tendo somente uma dificuldade que tb pode ser dita como curiosidade, porém útil.

Queria saber como faço quebra de linha dentro de um texto no MsgBox? Sei que em C ou Java ou PHP eu posso usar "\n", mas aqui no AutoIt, como faço?

A dúvida parece boba, mas eu ainda não vi em nenhum lugar (se eu estive procurando nos lugares certos!) e será muito útil pra mim.

Share this post


Link to post
Share on other sites

NOX, eu não sabia que o nome do campo onde digitamos a transação é "Edit1". Valeu!! Como eu faço para saber o nome dos campos no SAP? Onde eu pego esta informações? Isto será bastante útil para os futuros scripts que irei fazer aqui com AutoIt. Já tenho até mais algumas idéias.

Share this post


Link to post
Share on other sites

Olá rafig.

 

O equivalente em AutoIt ao \n do C, é @CRLF. Exemplo:

 

$Texto = "Primeira linha" & @CRLF & "segunda linha"

Share this post


Link to post
Share on other sites

Opa!! Valeu Manimal. Olhando no help a partir do que vc falou pra mim, vi que tem tb @CR, @LF. Usei o @CRLF e @LF e funcionou "certim". Muito obrigado.

Share this post


Link to post
Share on other sites

NOX, eu não sabia que o nome do campo onde digitamos a transação é "Edit1". Valeu!! Como eu faço para saber o nome dos campos no SAP? Onde eu pego esta informações? Isto será bastante útil para os futuros scripts que irei fazer aqui com AutoIt. Já tenho até mais algumas idéias.

1 - Use o Au3Info.exe para obter os dados das janelas e controles que você quer interagir.

 

Na aba Control.

Share this post


Link to post
Share on other sites

Olá.

 

 

Opa!! Valeu Manimal. Olhando no help a partir do que vc falou pra mim, vi que tem tb @CR, @LF. Usei o @CRLF e @LF e funcionou "certim". Muito obrigado.

 

Realmente existem várias macros que podem ser utilizadas aqui.

 

Como o Luigi me alertou, referenciei errado a resposta. Quando respondi, pensei apenas em fazer uma quebra de linha e larguei logo de cara um @CRLF, mas o correto das macros são o seguinte:

 

  • @CR = \r => Carriage Return (o \r vem do RETURN) => hexa x0D ou Chr(13)
  • @LF = \n => Line Feed (o \n vem do NEW LINE) => hexa x0A ou Chr(10)
  • @CRLF = \r\n => Carriage Return + Line Feed => hexa x0D0A ou Chr(13)+Chr(10)

 

Estes comandos era antigamente utilizados nas impressoras matriciais:

  • CR = voltava a cabeça de impressão para a primeira posição
  • LF = avançava a linha

portanto o par CR+LF significava que a impressora deveria avançar uma linha e voltar ao começo para imprimir nova linha

 

Quando se faziam arquivos TEXTO, era comum utilizar estas macros dentro do arquivo para, ao imprimir, ficar correto a impressão. Depois padronizou-se estes caracteres como terminação de linha em arquivos texto, tanto é que, por exemplo, o comando FileReadLine lê a posição atual (file pointer) até a próxima EOL (End of Line) que nesse caso pode ser tanto o LF, o CR ou o par CRLF.

 

E o por quê existem tantos EOL? Porque basicamente cada SO (Sistema Operacional) acabou utilizando um padrão diferente para quebra de linha:

  • Unix = só LF
  • Mac = só CR
  • Windows = CRLF

 

Em face disso, os comandos atuais consideram como quebra de linha ou EOL todos os caracteres acima.

 

Em C (variantes e derivados) as macros seguem o mesmo princípio:

  • \n = LF = new line
  • \r = CR = carriage return

 

Obrigado ao Luigi que me lembrou destas diferenças!

 

Veja mais em:Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or CR (Carriage return, '\r', 0x0D, 13 in decimal, displayed as "^M" in some editors) individually, or CR followed by LF (CR+LF, '\r\n', 0x0D0A). These characters are based on printer commands: The line feed indicated that one line of paper should feed out of the printer thus instructed the printer to advance the paper one line, and a carriage return indicated that the printer carriage should return to the beginning of the current line. Some rare systems, such as QNX before version 4, used the ASCII RS (record separator, 0x1E, 30 in decimal) character as the newline character.

Share this post


Link to post
Share on other sites

Thanks everyone.That's a great help. I've learned a lot. It's so clear now.

Percebi que @CR como faz um "Return" então dar um certo delay, o que ajuda muito. É como um ENTER com delay.

Show!

Share this post


Link to post
Share on other sites

NOx,

No comentário que fiz:"NOX, eu não sabia que o nome do campo onde digitamos a transação é "Edit1". Valeu!! Como eu faço para saber o nome dos campos no SAP? Onde eu pego esta informações? Isto será bastante útil para os futuros scripts que irei fazer aqui com AutoIt. Já tenho até mais algumas idéias."

Então você respondeu: "1 - Use o Au3Info.exe para obter os dados das janelas e controles que você quer interagir. Na aba Control. "

Porém, ao colocar o alvo (arrastá-lo) sobre um campo ou uma aba do SAP ou outro programa, a aba control do Au3Info aparece sempre em branco. Por quê? Eu testei as opções do Au3Info mas nada funcionou, a aba control fica sempre em branco.

Estou usando muito as coordenadas do mouse, mas se a tela do SAP ou outro programa abrir reduzida ou fora de posição então não funciona corretamente por que as coordenadas do mouse serão diferentes.

Logo, como faço para saber exatamente o nome do campo no SAP para poder usar o comando seguinte, conforme seu exemplo usando 'Edit1' : ControlClick('SAP Easy Access','','Edit1') ?

Share this post


Link to post
Share on other sites

Não sei...qual versão do SAP você usa?

Dá uma olhada na imagem em anexo. É como aparece pra mim. B)

 

Se for usar MouseClick, maximiza a janela que ajuda. :muttley:

post-3915-0-61596400-1501733669_thumb.jpg

Share this post


Link to post
Share on other sites

É ai que está o problema. Você vai ter que abrir o Au3Info "dentro do CITRIX".
Como você deve saber, as aplicações que abrimos no CITRIX, não estão rodando na sua máquina local e sim no servidor do XenApp.

Se você abrir o AU3Info naturalmente, ele vai retornar os "dados da janela" virtual e não da janela do SAP de fato.

 

Se você tiver acesso ao disco local da sua máquina (rede tb serve :dance: ), você pode conseguir executar dentro da virtualização e obter os dados corretos.

 

Siga os passos abaixo:

(Existem outras formas. Eu acho essa mamão)

1 - Na tela do SAP Easy Access, vá em Favoritos >> Download em PC(ou Upload do PC) . Isso vai abrir uma janela que vai permitir a navegação (Open ou Save As).

2 - Computer >> LocalDisk (C: ou D: ou etc...depende de onde está o Au3info)

3 - Navegue até a pasta onde está o AutoIT, menu de contexto e "Open in new Window". Assim, você vai iniciar o Explorer da máquina virtual.

:excl: - A partir daqui, acho melhor você fazer um exercício de tentativa e erro... :up: :muttley:

4 - Comparação do AU3info "dentro" e "fora" do CITRIX

 

*obs.: Você também tem que executar os scripts que desenvolver dentro da virtualização.

 

Boa sorte!

post-3915-0-56882000-1501813931_thumb.jpg

post-3915-0-55830000-1501814154_thumb.jpg

post-3915-0-70456700-1501814160_thumb.jpg

post-3915-0-72359100-1501814168_thumb.jpg

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×