-
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.