Mostrando postagens com marcador Abap. Mostrar todas as postagens
Mostrando postagens com marcador Abap. Mostrar todas as postagens

quinta-feira, 14 de dezembro de 2017

10 GB ou Tupinambá salva o dia.

Um personagem recorrente de nossas histórias é Jarbas de Hutt. Ele foi o grande mentor do nosso herói Tupinamba. Quando Jarbas participou do projeto SAP na serraria lá do catumbí ele aliciou o jovem Tupinambá para ser programador abap. Na época o jovem Tupinambá dava acabamento nas peças de madeira e se encantou com a possibilidade e com os desafios de um trabalho onde se usa menos as mãos e mais a cabeça, mas isso é outra história. Voltando ao protagonista desta história, Jarbas é um programador veterano, um cara a moda antiga. Sua ascensão a programador abap sênior foi rápida. Corretor de imóveis por formação Jarbas deixou o sonho de ser um rico negociador de imóveis após a grande crise imobiliária de 1970. Depois da derrocada de seu sonho original Jarbas viveu alguns anos de biscates e serviços temporários até ser recrutado por um grande programa de caça talentos de uma grande consultoria. Concluiu os treinamentos iniciais com louvou e foi imediatamente contratado como abap Junior e em menos e 3 anos já figurava como um dos grandes, um mata leão, um desempata foda, um desempata jogo ou qualquer outro jargão que esses reconhecidos profissionais recebem.
Entre idas e vindas essas duas protuberantes figuras se encontraram em vários projetos e em várias empresas. A cada encontro era uma aula para Tupinambá que analisava atentamente o código a postura de seu tutor. Mais de uma década se passou e agora eles estão compartilhando o mesmo ambiente de trabalho novamente só que em uma situação diferente Tupinambá estava crescido e tinha acumulado mais experiências de que qualquer outro abap brasileiro. A célula abap, nisso incluo o próprio ECC, não suporta duas estrelas de magnitude tão grande fora da Alemanha. Após o go-live do projeto Tupinambá naturalmente superou o seu mestre e acendeu a líder da equipe de abap. Para Jarbas as glorias foram maiores. Ele se tornou Lider de TR, pós uma atuação brilhante que colocou o modulo para rodas após duras penas.
Agora Jarbas era funcional. Estava fora da programação, entretanto você pode tirar o homem da programação, mas não pode tirar a programação de um homem. Jarbas fazia questão de projetar cada detalhe dos programas que iriam rodar embaixo do guarda-chuva de seu módulo. Para isso implantou um rigoroso método de code-review. O método era tão primoroso que 90% das requests eram barradas por não atender o workbook ou o sap best pratices e algumas vezes até por briguinhas de egos entre o Jarbas e seu discípulo. Por mais que Tupinambá fosse aluno de Jarbas ele desenvolveu um estilo de programação totalmente diferente. Enquanto Jarbas era um programador metódico e disciplinado Tupinambá fazia uma programação mais efetiva abrindo mão de certos rigores técnicos para alçar seus objetivos. Essa diferença com o tempo trouxe certas rusgas à relação dos dois, mas isso é assunto para outra hora.
Certo dia Charles basis da companhia soa o alarme. O ambiente produtivo estava instável, filas de processamento paradas, chamados de lentidão chegando de todos os lados, e usuários invadindo a sala de T.I. cobrando providencias. No meio desse clima desolador ações começaram a ser tomadas. Enquanto Charles vasculhava o ambiente em busca da grande chave que estava travando as engrenagens do SAP, fui solicitando pela gerencia a integrar essa investigação. Ajudei analisando o cache de processamento do SQL server. Prontamente gerei uma lista com alguns problemas e encaminhei para Charles. Os dois primeiros itens dessa lista eram acessos a base feito por programas de TR. Mal entreguei a lista para Charles veio Jarbas me esclarecer e me explicar que a lentidão era causada por uma quantidades exacerbante de JOINS que tinham os selects. Segue a transcrição resumida do dialogo:
- Olá Haff.
- Olá Jarbas. Tudo bem?
- Tudo. Você analisou uns selects de TR?
- Sim, sim. Já passei a análise para o Charles ele falou contigo?
-Falou sim, mas está tudo certo lá. O problema é que os selects tem 4 joins cada e você sabe né?
Nessa altura já um pouco confuso.
-Sei o que Jarbas?
- O Oracle suporta 4 joins, mas o SQL é no máximo 2.
- Jarbas, o número de Joins não é o problema dos selects. Outra coisa o SQL não possui limite de joins e se bem feito não causam lentidão.
-Éhh Haff. Mas minha experiência diz que é isso. Isso acontecia direto na Bunge.
Eu posso muito bem contrapor argumentos técnicos, mas não pude fazer nada contra essa falácia lógica e só tive a opção de encerar o diálogo.
- OK Jarbas.
Algumas horas se passaram até que Charles localizou o JOB responsável pelos selects e notou algo muito interessante o programa 2 segundos após ser executado consumia 10Gb de memória do application server. De posse de dados e fatos Charles confronta Jarbas. Charles chama Jarbas até seu gabinete onde embate técnico de alto nível acontece. Segue a transcrição:
-Jarbas que porra de job é esse que consome 10 GB de memória.
-Tá tudo certo já falei com o Haff deve ser alguma coisa do ambiente.
-Coisa do ambiente o caralho
Jarbas tenta interromenper Charles que sobe em 2 pontos o tom da voz.
-Jarbas eu estou te explicando fica quieto e escuta. Isso não tem relação com o ambiente. Pega o caralho desses programas e revisa.
-Eu não fiz esses programas
-Não quero saber quem fez eu quero que a porra desse JOB pare de foder com o meu ambiente.
-Charles você não sabe conversar eu venho aqui para agente resolver o problema e você vem com essa falta de respeito.
-Falta de respeito é um programa que com some 10 Gb para processar um arquivo de retorno.
Nesse ponto a discussão estava demasiadamente acalorada e Jarbas usa de sua senioridade para terminar com a discussão. Ele sai do gabinete de Charles emburrado e pisando duro e vai para a sala da alta gerencia de T.I. O que foi conversado entre Jarbas e Hammilton, gerente do departamento não foi revelado. Jarbas deixar a sala da gerencia. Instantes depois Tupinambá é convocado para revisar os programas de TR que estavam deteriorando a performance do ambiente.
Quando Jarbas soube que o Tupinambá estava analisando o código foi falar com ele:
-Oi Tupi, quanto ao programa. Ele está bem feito, bem documentado. Deve ser o sql que se perde nos joins.
-Fiii estou analisando aqui. Está uma bosta esse seu programa
-Esse programa não é meu.
-Como não Fiiii, um perform para cada select, select asterisco em todo lugar?
-Não é meu não Tupi.
-Deu para mentir agora Jarbas. Olha aqui no log de modificação. “Criador por JHUTT”. Quem é JHUTT. Mas fica tranquilo fiii. Achei o problema os for all entries estão usando tudo internal table vazias estão vindo todos os documentos para memória.
Então Jarbas termina com a discussão em uma frase.
-Computing in memory. Esse programa já está em hanna-style.


quinta-feira, 27 de outubro de 2016

Dicas ABAP de um programador: MODIFY

Caros amigos iniciaremos nesse veículo mais uma serie de posts. Esses se voltam para boas práticas de programação.
De todas minhas críticas a linguagem ABAP o comando MODIFY não é a pior, mas foi a que me causou mais transtornos e isso será tema de outro post. 
O MODIFY é um comando usado para inserir ou modificar dados no banco de dados. Ok tudo bem nada mais comum do que se inserir e se alterar dados num banco de dados. Porém o que há de nefasto nesse comando é que ele literalmente insere ou modifica dados no banco de dados. A grosso modo quando o inocente ABAPer executa o comando MODIFY o SAP tenta modificar os dados com o comando SQL NATIVO UPDATE se o comando não afetar nenhuma linha é executado o comando SQL NATIVO INSERT para a linha ser inserida WTF. Por que diabos eu vou escrever um código que não sabe se está inserindo ou alterando uma linha. Outro agravante é que o SAP tenta atualizar todas as colunas da tabela interna no banco de dados o que geralmente não é necessário. 
Isto posto não usem o comando MODIFY de forma alguma. Deem preferência para escreverem códigos que atualizem os dados com o comando UPDATE e insiram dados com comando INSERT.

Bons códigos a todos.

quarta-feira, 19 de outubro de 2016

DUMP

Durante toda implantação SAP a mão de obra do profissional ABAP é muito requisitada, porém é no go live ela atinge sua maior cotação. Por outro lado, a gestão tem que usar esse precioso recurso de forma otimizada e garantir que esses bravos profissionais estarão onde precisam estar.
Durante o gerenciamento de crise em WM, fruto de um go live atabalhoado, surge uma consultora SD pedindo para o Dr. Garcia, gerente do projeto e médico de plantão, um ABAP para ajudá-la com um problema, cujo qual achava ser um DUMP nas rotinas de recebimento de pedidos. Dr. Garcia, vendo a gravidade da situação, destaca Jarbas d'Rãti, o seu mais experimente ABAP. 
Jarbas é um ABAP Sênior com mais de 30 anos de experiência em ABAP e conhecedor do lado negro da linguagem ABAP. Jarbas após seu destacamento abandonou seu posto na contenção da crise e foi prontamente ajudar a colega de trabalho. Após 45 min Jarbas volta. Dr. Garcia pergunta:
- E aí Jarbão o que era a parada?
Jarbas responde:
- Então Garcia é DUMP mesmo...
Dr. Garcia continua:
- Resolvido?
Jarbas explica.
- Não. Isso é preciso ver com o ABAPer que fez o programa. Apenas analisei a transação ST22 para ver se era realmente DUMP. É uma analise muito complexa.

Integração – Parte I DLL

Nessa série de posts iremos abordar as formas de integração do SAP com o mundo exterior. O SAP possui várias formas de se integrar com outros sistemas e hardwares. Durante meu primeiro projeto SAP tínhamos que executar a integração de uma balança de pesagem de caminhão. A balança era um hardware de interface muito simples unidirecional de comunicação serial e para integração com o antigo ERP havíamos desenvolvido uma DLL que simplificava o trabalho. A dll foi batizada de Peso.dll. A alta gestão do projeto vendo esse imenso DELTA escalou nada mais nada menos que Mestre Toyol, líder ABAP do projeto, chefe e mentor intelectual de Isaias Tupinambá. Após expormos a problemática para o Toyol. Ele virá seguro de si e diz:
- O SAP não invoca DLL.
Então pergunto para Toyol quais são as alternativas. Toyol abre o Google no seu navegar e faz a pergunta certa para o problema “How Connect SAP Peso.dll” o Google prontamente responde:
Your search - How Connect SAP Peso.dll - did not match any documents.
Toyol exclama:
Que burro!
Refazendo a consulta: “How Connect SAP Weight.dll” E o Google responde novamente:
Your search - How Connect SAP Weight.dll - did not match any documents.

Uma dll pode ser ligada ao programa chamador em tempo de compilação ou em tempo de execução, porem o SAP por motivos óbvios não pode ter uma DLL externa ligada em tempo de compilação e também não implementa a ligação em tempo de execução. Porém o SAP está atualizado as mais modernas tecnologias e sua interface (SAPGui) para o sistema operacional Windows pode se conectar a objetos COM (Component Object Model). O COM é uma tecnologia desenvolvida pela Microsoft em 1993 que entre outras coisas define um padrão binário para sediar implementações de objetos em arquivos .DLL e .EXE.
Para integrar o SAP a balança de caminhões desenvolvemos um COM para fazer a conexão via serial com a balança e retornar para o SAP o peso. Um exemplo pode ser visto no link []. Com o COM pronto é necessário registrar o objeto na transação SOLE.


Agora é só invocar o método com o comando CALL METHOD dessa forma:
*You open an EXCEL file using the ‘Open’ method.

INCLUDE OLE2INCL.
DATA  EXCEL    TYPE OLE2_OBJECT. 
DATA  WORKBOOK  TYPE OLE2_OBJECT.
CREATE OBJECT EXCEL 'Excel.Application'.
CALL METHOD OF EXCEL 'WORKBOOKS' = WORKBOOK.
CALL METHOD OF WORKBOOK 'Open' EXPORTING #1 = 'C:\EX1.XLS'.

Estamos publicando essa página para a próxima vez que o Toyol pesquisar o Google não o decepcionar.

Seria engraçado se não fosse desesperador.


Resultado de imagem para ABAP jokes