abap para bw

30
ABAP para Consultores de BW O objetivo deste curso é complementar o profissional de BW com o conhecimento da linguagem ABAP, bem como dar uma visão generalista dos principais processos do R/3. Eu, como “ex-consultor” de ABAP, vejo a grande dificuldade em outros consultores que não são originários de ABAP, em resolver questões relativamente simples, ou até mesmo proporem soluções mais complexas do que a que poderia ser dada. Outro tema importante do curso será a visão básica de alguns processos do R/3, que também é uma grande barreira para o consultor de BW. No mundo SAP o conhecimento é verticalizado, por exemplo, um especialista no processo de vendas só conhece o seu módulo, quando muito sabe um pouco da parte contábil ou outro processo que interaja com o seu, tendo grande dificuldades em solicitar novos desenvolvimentos ou mesmo ampliações ao standard do produto. Já o desevolvedor ABAP conhece especificamente a linguagem, fazendo por muitas vezes o papel investigativo de como o produto funciona e complementando o funcional. Esta forma de trabalho funciona de certa forma bem para os projetos de ambientes transacionais, até porque o mercado (clientes e consultorias) já sabe dos perfis dos profissionais e os projetos já contemplam ambos profissionais, funcionais e programadores ABAP. Entretanto, nos projetos de BW, geralmente o consultor está “sozinho”, tendo que desenvolver a solução desde a parte da extração dos dados, passando pela modelagem, até efetivamente o desenvolvimento das queries e apresentação Excel ou Web., ou seja, o consultor deve ser um pouco funcional, um pouco DBA, às vezes conhecer um pouco de VBA e se bobear ser um pouco Web designer. Acredito que esta estratégia tenha sido feita para diminuição dos custos do projeto, de qualquer forma, é cada vez mais a realidade, e os profissionais devem se adequar a ela se quiserem se sobressair aos demais, em especial, nos momentos de mercado menos aquecido. Quando nos deparamos com o BPS, verificamos uma exigência maior ainda de conhecimentos de programação, além de uma visão generalista do sistema, em especial na implantação de projetos de orçamento, onde todos os processos da Corporação são abordados. O que pretendo no curso não é ensinar ABAP, mas demonstrar a sua importância e quem sabe fazer com que você goste de programar. Espero que ao final do curso ou mesmo daqui a algum tempo, você possa falar como eu: “Eu adoro ABAP”.

Upload: mara-ferraz

Post on 05-Sep-2015

95 views

Category:

Documents


7 download

DESCRIPTION

Abap Para Bw

TRANSCRIPT

  • ABAP para Consultores de BW O objetivo deste curso complementar o profissional de BW com o conhecimento da linguagem ABAP, bem como dar uma viso generalista dos principais processos do R/3.

    Eu, como ex-consultor de ABAP, vejo a grande dificuldade em outros consultores que no so originrios de ABAP, em resolver questes relativamente simples, ou at mesmo proporem solues mais complexas do que a que poderia ser dada.

    Outro tema importante do curso ser a viso bsica de alguns processos do R/3,

    que tambm uma grande barreira para o consultor de BW.

    No mundo SAP o conhecimento verticalizado, por exemplo, um especialista no processo de vendas s conhece o seu mdulo, quando muito sabe um pouco da parte contbil ou outro processo que interaja com o seu, tendo grande dificuldades em solicitar novos desenvolvimentos ou mesmo ampliaes ao standard do produto. J o desevolvedor ABAP conhece especificamente a linguagem, fazendo por muitas vezes o papel investigativo de como o produto funciona e complementando o funcional. Esta forma de trabalho funciona de certa forma bem para os projetos de ambientes transacionais, at porque o mercado (clientes e consultorias) j sabe dos perfis dos profissionais e os projetos j contemplam ambos profissionais, funcionais e programadores ABAP.

    Entretanto, nos projetos de BW, geralmente o consultor est sozinho, tendo que desenvolver a soluo desde a parte da extrao dos dados, passando pela modelagem, at efetivamente o desenvolvimento das queries e apresentao Excel ou Web., ou seja, o consultor deve ser um pouco funcional, um pouco DBA, s vezes conhecer um pouco de VBA e se bobear ser um pouco Web designer.

    Acredito que esta estratgia tenha sido feita para diminuio dos custos do

    projeto, de qualquer forma, cada vez mais a realidade, e os profissionais devem se adequar a ela se quiserem se sobressair aos demais, em especial, nos momentos de mercado menos aquecido.

    Quando nos deparamos com o BPS, verificamos uma exigncia maior ainda de

    conhecimentos de programao, alm de uma viso generalista do sistema, em especial na implantao de projetos de oramento, onde todos os processos da Corporao so abordados. O que pretendo no curso no ensinar ABAP, mas demonstrar a sua importncia e quem sabe fazer com que voc goste de programar. Espero que ao final do curso ou mesmo daqui a algum tempo, voc possa falar como eu: Eu adoro ABAP.

  • 1. A linguagem ABAP O ABAP uma linguagem proprietria da SAP que est enraizada em todas as suas ferramentas, seja o seu carro chefe o R/3, bem como os novos aplicativos, BW, CRM, APO, etc., portanto, muito difcil imaginar que o ABAP seja substitudo pelo JAVA, por exemplo, como muitos apregoavam. Como veremos mais adiante o ABAP d muitas vantagens aos desenvolvedores no ambiente SAP, sendo tambm um dos motivos da sua longevidade e continuidade certa. Por exemplo, para se fazer um relatrio simples basta colocarmos os campos de critrios de seleo, selecionar os dados de uma ou mais tabelas e formatarmos uma estrutra de sada para uma funo ALV. Em que pese, como consultores de BW, s utilizarmos o ABAP em alguns pontos especficos, tais como exits, regra de trasnsformaes, etc, importante conhecermos o ambiente ABAP como um todo, at porque ampliando nossos conhecimentos poderemos propor solues que passem por um desenvolvimento anterior a fim de facilitar as coisas no BW. Antes de iniciarmos a programar um pouquinho, tomem nota de alguns detalhes da sintaxe:

    - Toda instruo deve terminar com ponto(.) - Comentrios so escritos com asterisco(*) no incio da linha ou com aspas() no

    meio da instruo - As strings devem estar entre apstrofes(). - Um comando pode ser continuado com dois pontos(:). Exemplo:

    DATA: dia type d, mes(2) type n.

    Ao longo do curso estaremos vendo comandos e sintaxes da linguagem.

    1.1. Tipos de programas

    Para cada necessidade dentro do sistema deve-se escolher um tipo de programa especfico, por exemplo, se queremos desenvolver um programa que far um clculo qualquer e atualize dados em uma tabela devemos escolher um programa executvel, j se queremos um programa onde o usurio entre com dados, tendo uma interface bem amigvel, deve-se escolher o Module Pool.

    Vejamos quais as principais opes disponveis...

    1.1.1. Programa Executvel (Report)

    Um programa executvel, mais popularmente chamado de Report, sem dvida o campeo de vendas nos ambientes transacionais, pois usado na elaborao de relatrios, que quase sempre representa boa parte dos GAPs do produto standard, alm permitir a execuo em background, podendo-se escalonar periodicamente a sua execuo.

  • Para se criar um Report podemos utilizar a transao SE38 ou a SE80.

    Transao SE38. Um programa no standard deve iniciar com Y ou Z. Clique no boto Criar

  • O Editor ABAP. Agora com o programador... e com o help (tecla F1) que o salvador da ptria dos programadores que no lembram sintaxe dos comandos.

    Um Report deve estar estruturado em eventos: INITIALIZATION : normalmente usado para preenchimento inicial de parmetros. START-OF-SELECTION: pode estar implcito, sendo a parte do cdigo que executada aps o preenchimento de parmetros, se houver. END-OF-SELECTION: Opcional para indicar a finalizao do programa, normalmente os programadores fazem no prprio evento anterior.

    Para no ficar to terico, vamos desenvolver nosso primeiro programa. Especificao 1:

    Saudar ao usurio com Bom dia, Boa tarde ou Boa Noite, conforme horrio do sistema. Codificao 1 Especificao 2: Saudar da mesma forma que na verso anterior, porm podendo-se modificar a hora do sistema. Codificao 2 Especificao 3:

  • Sofisticar para saudar a um cliente especfico. A tabela de clientes encontra-se na tabela KNA1. Campo para saudao NAME1. Codificao 3 Especificao 4: Idem a especificao anterior, porm deve-se permitir saudar a um conjunto de clientes. Codificao 4

    1.1.2. Include

    Um include apenas um pedao de cdigo dentro de um programa principal, podendo ser aproveitado em mais de um programa. Abordaremos esta questo no tpico Importncia da modularizao.

    1.1.3. Grupo de Funes

    Um Grupo de Funes, como o prprio nome sugere, serve para agrupar funes. As funes so executadas (chamadas) por um programa principal, recebendo deste dados de entrada e devolvendo dados de sada.

    Para se criar um Grupo de Funes utiliza-se a transao SE80, e as funes

    podem ser administradas na SE37.

    SE80

  • Um grupo de funes composto por um programa bsico, que leva o prefixo

    SAPL mais o nome dado na criao, um include com o sufixo TOP para declarao de variveis globais com o sufixo UXX que conter(o) a(s) funo(es)

    Duplo- Click

  • Uma configurao importante dentro da funo o Tipo de processo. Com a opo Modulo de acesso remoto, temos a famosa RFC (Remote Function Call), que pode ser chamada por outro ambiente, por exemplo, posso do BW atravs de um programa principal fazer uma chamada a uma funo que esteja no R/3.

    As demais abas completam a configurao da funo:

    Importao: recebe os dados do programa chamador. Esportao: retorna os dados ao programa chamador Modif: recebe os parmetros como entrada podendo ter os valores alterados durante a execuo da funo. Tabelas: da mesma forma que a aba anterior para variveis que contem mais de um registro, as chamadas tabelas internas. Excees: Possibilita o retorno de um tio de erro. Texto fonte: Editor para codificao ABAP. Fazendo um exemplo prtico: Dada uma data qualquer, retornar o dia til mais prximo de acordo com um calendrio especfico. Obs. A funo standard BKK_CHECK_HOLIDAY retorna se uma data dia til ou no. Codificao 5

    Funes que tem o prefixo BAPI so RFCs desenvolvidas pela SAP para permitir que se faa o input de dados nas transaes standard.

  • 1.1.4. Pool de mdulos (Module Pool)

    O Module Pool permite ao desenvolvedor fazer o desenho de telas mais elaboradas para o usurio. basicamente um container de telas, onde cada tela tem os seus componentes e a lgica de processamento.

    A maioria das transaes standard so feitas atravs deste tipo de programa, sendo importante entender o seu funcionamento, em especial, quando queremos investigar o que o standard est fzendo.

    A grande desvantagem que ele s executado de forma on-line, no permitindo, portanto, o escalonamento peridico ou mesmo eventual.

  • Acesso ao desenho grfico da tela

  • Voltando na lgica de Processamento, temos:

    Componentes de tela

  • Como vemos h dois eventos apenas no Module Pool, o BEFORE OUTPUT que executado antes da tela ser exibida e o AFTER INPUT que executado sempre que o usurio aciona um comando na tela (clica num boto, tecla Enter, etc).

    1.1.5. Classes

    A orientao a objeto algo mais recente dentro do SAP e talvez por isto muitos desenvolvedores acostumados programao convencional no a utilizem, entretanto, a sua utilizao por parte da prpria SAP cada vez maior. Um exemplo o CRM que praticamente todo construdo com orientao a objetos.

    Atravs do Class Builder (SE24) podemos administrar as classes. O comando CREATE OBJECT instancia um objeto dentro de um programa.

    1.2. Ampliaes do standard

    Sem dvida o grande sucesso do SAP se d pela possibilidade de adequar os programas standard s necessidades do cliente, so as famosas User-exits. Elas so uma vlvula de escape no processo padro, possibilitando atravs da programao especfica fazer pequenas alteraes no processo ou at mesmo mudar completamente o rumo da operao.

    Ns de BW j convivemos bastante com as user-exits, em especial, na extrao de dados, onde quase sempre um datasource standard tem que ser ampliado, ou ainda na execuo das queries, onde quase sempre temos as variveis de exits.

    Uma ampliao nada mais que uma chamada do programa standard para um cdigo do cliente, podendo este ser um mdulo de funo, um simples include ou uma BADI (SE19) para as classes.

    1.3. Importncia da modularizao

    Muitos programadores no se preocupam com a modularizao do cdigo, escrevendo os famosos linguies, onde s o prprio programador, e s vezes nem ele mesmo, entende a lgica utilizada.

    A principal vantagem de escrever um programa modular a clareza do cdigo, ou seja, importante enxergar de maneira macro o que o programa est fazendo. Outra vantagem, sem dvida, o reaproveitamento de cdigo.

    Possibilidades: Chamada a subrotina: Comando Perform, utilizado mais especificamente para um nico programa. O comando FORM determina o incio de uma subrotina, devend terminar com o ENDFORM. Chamada a funes: CALL FUNCTION, utilizado para aproveitamento por diversos programas. Chamada a outros programas: Comando Submit, utilizado quando o programa

    executado de maneira independente, mas tambm pode fazer parte de um processo maior.

  • 1.4. Tipos de dados, variveis e constantes

    Variveis esto para um programa de computador como a memria est para o nosso crebro. Elas devem ter um nome, o que d ao programa uma posio de memria e um tipo de dado definido (character, numrico, data, etc.). J as constantes so declaradas nos programas normlmente para dar mais clareza ao cdigo.

    1.4.1. Tipos de dados predefinidos

    Type Length Standard length Description

    b 1 Byte 1 byte integer (internal)

    c 1 to 65,535 characters 1 character Text field

    cursor as i as i Database cursor

    d 8 characters Date field

    f 8 bytes Floating point number

    i 4 bytes 4 byte integer

    n 1 to 65,535 characters 1 character Numeric text

    p 1 to 16 bytes 8 bytes Packed number

    string variable Text string

    s 2 bytes 2 byte integer (internal)

    t 6 characters Time field

    x 1 to 65,535 bytes 1 byte Byte field

    xstring variable Byte string

    Declaramos uma varivel com a instruo DATA e as constantes com a instruo

    CONSTANTS, definindo o seu tipo com a instruo TYPE. Podemos ainda definir o tamanho e nmero de casas decimais quando apropriado. Exemplos: Data v_valor type p length 5 decimals 2.

    Data v_char type c length 5. ou Data v_char(5). Data v_cont type i. Data v_dia type d.

    Constants c_pais(2) type c VALUE 'BR'.

    Obs.: Se nenhum tipo for declarado a varivel ser do TYPE C e se nenhum tamanho for definido ter 1 posio.

    Outra forma de declarar uma varivel usando LIKE invs de TYPE. A instruo LIKE faz referncia a uma outra varivel, ou definio do dicionrio de dados, fazendo com que indiretamente a varivel assuma o tipo da referncia. Exemplo: Data v_dia type d.

  • Data v_dia2 like v_dia. Data v_mat like mara-matnr. Ou Data v_mat type mara-matnr.

    A diferena que com a definio TYPE estamos definindo um novo tipo para o programa, como os que j existem pr-definidamente.

    Uma vez declarada a varivel podemos utiliza-la nos programas modificando o seu valor (por isso o termo varivel) ou resgatando o seu valor da memria.

    Exemplo: *Atribudo valor v_dia = SY-DATUM. v_cal = 10 * 50. Write: v_dia resgatando da memria Call function Z_CALC Exporting input = v_calc resgatando da memria Importing output = v_calc. atribuindo valor

    1.4.2. Estruturas, referncia a estruturas do DDIC

    As estruturas servem para facilitar a vida do programador, pois com um nico nome de varivel temos um subconjunto de nomes. Exemplo: Exemplos: * Criando um novo tipo de estrutura types: begin of type_cliente, Codigo(10) type n, Nome(30) type c,

    Endereco(35) type c, Cidade(20) type c, UF(2) type c, end of type_cliente. * Declarando a varivel Data e_cliente type type_cliente.

    * Somente declarando uma varivel estruturada Data: begin of e_cliente,

    Codigo(10) type n, Nome(30) type c, Endereco(35) type c, Cidade(20) type c, UF(2) type c, end of e_cliente. * Fazendo referncia ao DDIC Data: e_cliente type kna1.

  • * Fazendo referncia ao DDIC para utilizao nos comandos SQL Tables: KNA1.

    1.4.3. Tabelas internas

    Uma tabela interna nada mais que uma varivel que tem a possibilidade de ter registros. A definio simples, porm com a possibilidade de registros temos uma serie de comandos diferenciados para incluir, alterar, modificar e acessar o registro(ndice) desejado. A questo do acesso importante pra se levar em conta o tipo de tabela interna que se quer ter, podemos ter os seguintes tipos: STANDARD TABLE: pode ter os registro ordenados quando necessrio, atravs do comando SORT, por um conjunto de chaves qualquer. SORTED TABLE: Est sempre ordenda por uma chave definida na declarao HASHED TABLE: Utiliza o algortimo mais rpido de busca. Exemplos para declarao types tstand type STANDARD table of kna1. types tsort type SORTED table of kna1 with unique key KUNNR. types thash type HASHED table of kna1 with unique key KUNNR.

    data istand type tstand. data isort type tsort.

    data ihash type thash.

    Outra opo mais simples, porm o help diz ser obsoleta usar a instruo OCCURS. data istand like kna1 OCCURS 0.

    Aps o OCCURS deve-se passar o tamanho inicial de registros, isto implica na questo de alocao de memria. A forma no obsoleta utilizar o comando INITIAL SIZE n. Outro ponto importante na definio de uma tabela interna se ela possui ou no um Cabealho(Header). Se no houver Header definido a tabela interna depender de uma outra varivel para manuteno dos seus registros. A nos perguntamos, qual o motivo de criar uma varivel sem Header? Bem, esta uma pergunta a ser feito para algum desenvolvedor da SAP, pois para mim no faz muito sentido, s dando mais trabalho na programao, entretanto temos que saber deste detalhe, pois boa parte das User-exits recebem parmetros com declaraes definidas pela SAP e em muitos caso as tabelas internas no possuem Header. Para declarar um Header para a tabela interna s acrescentar a instruo WITH HEADER LINE.

    Vejamos as sintaxes para manuteno dos dados de uma tabela interna, considerando ou no o Header.

  • Incluindo registros, sem Header: Data: e_cli type kna1. e_cli-kunnr = 10. APPEND itab FROM e_cli.

    Com header o comando FROM fica implcito: icli-kunnr = 10. APPEND icli.

    modify iCLI index 1. "Modificando com header modify iCLI index 1 FROM eCLI. "Modificando sem o header delete istand index 1. "A eliminao identica

    J a leitura se d principalmente com o comando READ TABLE, devendo o programador se preocupar com a questo de performance para tabelas com uma quantidade grande de registros. Para STANDARD TABLES com muitos registros o programador deve sempre ordenar a tabela e acessar com READ TABLE usando a instruo adicional BINARY SEARCH. Exemplo: SORT iCli BY kunnr. READ TABLE iCli WITH KEY kunnr = 10 BINARY SEARCH.

    Outro comando de leitura para tabelas internas o LOOP AT. Veremos este comando com mais detalhes adiante no tpico Programando.

    1.4.4. Field-Symbols

    Declarar um Field-Symbol significa possibilitar que este assuma o posicionamente de memria de uma varivel em tempo de execuo. Tambm veremos mais adinate em nosso Cases um exemplo mais signifativo. Por hora, vamos ver um exemplo simples. Field-Symbols type c. parameters: l_campo(10) type c.

    ASSIGN (l_campo) to .

    1.4.5. Abrangncia de variveis e constantes

    Conforme comentado anteriormente, uma varivel tem um endereo de memria dentro de um programa e a sua abrangncia se d conforme o ponto de declarao, por exemplo, se declaro uma varivel dentro de uma Function esta s ser acessada dentro da funo (varivel local), se declaro no include TOP (varivel global) todas as funes do grupo de funo a acessam. Por isso normalmente os programadores padronizam o nome

  • das variveis de forma, a saber, se uma varivel local (prefixo l_) ou global (prefixo g_).

    O recomendado utilizar varivel local invs da global pela facilidade em depurao quando necessrio. Fica mais difcil saber onde uma varivel global foi modificada.

    A declarao STATICS faz com que o valor da varivel local se mantenha aps o

    trmino da funo ou sub-rotina.

    2. Dicionrio de Dados O Dicionrio de Dados contm toda a definio de dados (meta-dados) do sistema,

    sendo que no caso especfico das tabelas os dados propriamente ditos so armazenados no banco de dados.

    A administrao do Dicionrio de Dados feita pela transao SE11.

    Vamos nos ater a apenas alguns tipos do Dicionrio, mais relevantes para o BW.

    2.1. Tabelas Como j mencionado uma Tabela responsvel pelo armazenamento dos dados no

    Banco de Dados. H trs tipos possveis: Tabelas Transparentes, Tabelas Pool e Tabelas Cluster, sendo que as duas ltimas so muito raras dentro do sistema.

  • Uma Tabela composta de campos, onde cada campo deve ter ao menos um

    nome e um tipo de dado que pode ser fornecido diretamente (tipo incorporado) ou por um elemento de dados..

    Toda Tabela deve ter um ou mais campos marcados como Chave Primria que indica ao sistema um acesso nico.

    As tabelas com dependncia de mandante (Client-dependent) so as que tem como primeiro campo o tipo de dado CLNT. Veremos esta questo quando falarmos do comando SELECT.

    Na aba Caractertica podemos ver dados da ltima modificao, classe de

    desenvolvimento e idioma original.

    Se quisermos alm de verificar a ltima alterao verificar um log completo de modificae podems verificar as verses.

  • Classes de Entrega:

    A Tabela de aplicao (dados mestre e de movimento) C Tab.customizing, atualizao s por cliente, s/import.SAP L Tabela p/arquivo de dados temporrios entregue vazia G Tab.customizing, protegida contra UPD SAP, s permitido INS E Tabela de controle, SAP e cliente tm reas chave prprias S Tabela sistema, s atualizao SAP, alterao = modificao W Tabela sistema, contedo transportvel por objs.TR prprios

    As mais comuns so a A e a C, sendo que esta ltima solicita uma request de

    transporte para os dados quando utilizamos as formas de atualizao atravs de trsaes de manuteno de tabela (SM30). Data Browser/atualiz. viso tabs: Indica se a atualizao pode ser feita pelas transaes SE16 e SM30 ou somente atravs de programa ABAP por mei dos comandos SQL.

  • Nesta parte cada campo pode conter uma tabela de verificao. Este tipo de

    restrio somente feito no momento da tela, ou seja, se em ABAP fizermos um comando SQL para insero ou modificao de um registro a tabela de verificao no respeitada. Por isso a recomendao da SAP para nunca inserirmos dados diretamente em tabelas standard, devendo sempre nos casos de automatizao de um processo utilizar uma BADI ou, se no houver, criar um programa de Batch-input.

    Os campos com tipo QUAN ou CURR, sempre pedem um campo de uma tabela

    como referncia para uma unidade de medida. Isto bastante importante quando vamos construir um datasource de uma tabela ou viso de banco de dados, pois se a referncia da unidade de medida no stiver no datasource a sua criao no possvel.

  • Os ndices permitem um acesso mais rpido aos dados.

    2.2. Vises As vises de Banco de Dados so definies lgicas de uma ou mais tabelas.

    A primeira tabela na esquerda a principal do acesso. O tipo de relacionamento numa

    viso de banco de dados o Inner Join, ou seja ao menos um registro da tabela relacionada deve existir para trazer tambm o registro da principal. O tipo de relacionamento LEFT JOIN s possvel no ABAP.

  • Aqui temos a definio de campos da viso.

    Nesta tela podemos ainda definir condies de restrio pra os dads da tabela.

    2.3. Estruturas As estruturas so muito utilizadas nos programas ABAP, sendo muito comum objetos

    de telas estarem referenciados a campos de estrutura do DDIC. Este caso o maior problema quando tentamos rastrer um campo numa transao

    standard, pois quando clicamos no F1 e o campo aponta para uma tabela transparente muito provvel que o campo venha da tabela, j como a estrutura no contm dados outros mtodos de rastreamento devem ser buscados.

    Forma de criar uma estrutura.

  • Uma estrutura pode ser aproveitada em uma tabela ou outra estrutura atravs de um Include ou Append.

    Include

    Append

    A diferena que podemos incluir uma estrutura Z ou Y em uma tabela standard como Append.

    2.4. Elementos de Dados Os elementos de dados podem conter um Domnio ou um tipo incorporado,

    tambm podem ter uma definio para uma Ajuda de pesquisa (F4), os textos que so levados para os programas de atuializao e exibio de tabelas (SM30 e SE16).

    Um domnio contem tambm a documentao do campo. Quando teclamos F1 e uma documentao dada e porque foi gravada no Elemento de Dados.

  • 2.5. Domnios Um Domnio contm o Tipo de Dados, uma rotina de converso opcional e um

    intervalo de valores tambm opcional.

  • Quando damos um duplo-clique na rotina de converso nos mostrada as funes que fazem a converso entre o que o usurio v na tela (input) e o que gravado no banco de dados (output).

    O intervalo de valores pode ser definido por uma tabela ou includo manualmente nos

    valores individuais.

    2.6. Gerao de programa para atualizar tabelas (SM30)

    Atravs deste recurso podemos facilemente gerar um programa que se faa a manuteno dos dados de uma tabela.

  • 3. Programando

    3.1. O comando SELECT - Performance Sem dvida um tpico muito importante para ns de BW que desenvolvemos

    extratores, seja genricos ou ampliaes, o comando SELECT. Quando se trata de um extrator genrico de mdulo de funo a necessidade ler uma

    ou mais tabelas de banco de dados, trabalhar estes dados e retornar para o extrator. Da mesma forma numa ampliao de extrator nos baseamos em uma tabela interna

    que fornecida na exit e selecionamos outros dados atravs da fonte passada. Parei aqui....

    o Formas do comando SELECT Performance

    1. Select single 2. Select / End Select 3. Utilizando Join 4. FOR ALL ENTRIES 5. Utilizando cursor

    o Comandos de desvio e operadores lgicos 1. Desvios Condicionais

    1. IF/ELSE/ENDIF 2. CASE/ENDCASE 3. ON CHANGE

    2. Loops 1. DO/ENDDO 2. WHILE/ENDWHILE 3. CHECK/CONTINUE/EXIT 4. LOOP AT

    3. Operadores lgicos 1. Operadores relacionais 2. Comparadores em strings 3. BETWEEN 4. IS INITIAL 5. Selees em ranges

    o Variveis de sistema 1. Retorno de operaes SY-SUBRC, SY-DBCNT, SY-TABIX, SY-

    INDEX 2. Data e Hora do sistema 3. Dados do sistema

    o Trabalhando com strings e datas

  • 1. Strings 1. OFFSET 2. CONCATENATE 3. SPLIT 4. SHIFT 5. CONDENSE 6. REPLACE 7. FIND/SEARCH

    2. Datas 1. Clculos Dias e Segundos 2. Avanos em meses ou anos

    4. Utilizao no BW Cases o Ampliando Datasources o Criando Datasources genricos o Transformao no BW o Parmetros em infopackage o Variveis BEX de Exit de Cliente o Key-Figure e Caractersticas virtuais

    5. Desbravando o R/3 o Encontrando campos no R/3: Debug, Trace.

    1. Estratgias de Debug 2. Traces para SQL 3. Traces de autorizao

    o Principais tabelas de cada mdulo e transaes.

    1. SD 2. MM 3. PP/PM/QM 4. FI 5. CO 6. HR 7. Transaes de administrao

    o Dicas 1. Modificando dados em tabelas sem opo de atualizao 2. Problemas de autorizao.. 3. Ambiente travado para modificaes 4. Debug em background

  • APPEND

    Codificao 1. data: l_hora_sis like sy-uzeit. l_hora_sis = sy-uzeit. IF l_hora_sis between '060000' and '115959'. write ' Bom dia!'. ELSEIF l_hora_sis between '120000' and '175959'. write ' Boa tarde!'. ELSE. write ' Boa noite!'. ENDIF.

    Codificao 2. parameters: p_hora like sy-uzeit. INITIALIZATION. p_hora = sy-uzeit.

    START-OF-SELECTION. IF p_hora between '060000' and '115959'.

    write ' Bom dia!'. ELSEIF p_hora between '120000' and '175959'. write ' Boa tarde!'. ELSE. write ' Boa noite!'. ENDIF.

    Codificao 3. data: l_name like kna1-name1. parameters: p_kunnr like kna1-kunnr obligatory.

    parameters: p_hora like sy-uzeit. INITIALIZATION. p_hora = sy-uzeit. START-OF-SELECTION. select single name1 into l_name from kna1 where kunnr = p_kunnr. IF p_hora between '060000' and '115959'. write: ' Bom dia!', l_name. ELSEIF p_hora between '120000' and '175959'. write: ' Boa tarde!', l_name. ELSE. write: ' Boa noite!', l_name.

  • ENDIF.

    Codificao 4. tables: kna1. data: l_name like kna1-name1. select-options: s_kunnr for kna1-kunnr obligatory. parameters: p_hora like sy-uzeit. INITIALIZATION. p_hora = sy-uzeit. START-OF-SELECTION. select name1 into l_name from kna1 where kunnr in s_kunnr. IF p_hora between '060000' and '115959'. write: ' Bom dia!', l_name. ELSEIF p_hora between '120000' and '175959'. write: ' Boa tarde!', l_name. ELSE. write: ' Boa noite!', l_name. ENDIF. SKIP. endselect. if sy-subrc 0. write: 'Nenhum cliente selecionado.'. endif.

    Codificao 5 *"---------------------------------------------------------------------- *"*"Interface local: *" IMPORTING *" REFERENCE(I_DATE) TYPE D *" REFERENCE(I_CALENDAR) LIKE TFACT-IDENT *" EXPORTING *" REFERENCE(E_WORK_DATE) TYPE D *"---------------------------------------------------------------------- data: l_no_workingday. e_work_date = i_date. do. call function 'BKK_CHECK_HOLIDAY' exporting

    i_date = e_work_date i_calendar1 = i_calendar * I_CALENDAR2 =

  • importing e_x_no_workingday = l_no_workingday * E_X_IS_HOLIDAY = exceptions not_found = 1 calendar_error = 2 others = 3. if sy-subrc 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. if l_no_workingday = 'X'. e_work_date = e_work_date + 1. else. exit. endif. enddo. endfunction.