Arquivo de fevereiro, 2014

Trabalhe como um desenvolvedor

Publicado: 23 de fevereiro de 2014 em Abap, C#, C/C++, Java, Python

can-stock-photo_csp11667034Em computação, um programador, desenvolvedor, coder ou engenheiro de software refere-se a alguém que faz programação de computadores e escreve software.

Um programador pode ser alguém que desenvolve ou faz manutenção de softwares em um grande sistema ou alguém que desenvolve software para uso em computadores pessoais.

Os desenvolvedores profissionais gastam menos de 10 por cento do seu tempo de trabalho escrevendo código, consomem cerca de 60 por cento do tempo de trabalho em um projeto,  na análise de problemas, concebendo soluções, documentando as decisões, depurando, mantendo ou melhorando o  código fonte.

Os 30 por cento restantes do tempo de um desenvolvedor é tomado por reuniões ou simplesmente desperdiçado (Às vezes, não há nenhuma diferença entre reuniões e tempo perdido.)

Se você estiver escrevendo um programa que é maior do que algumas linhas, então não é o bastante apenas sentar e começar a codificação. Você precisa dar três passos para tornar o seu programa o melhor possível.

Os 3 Ds –  Documentação, Design e Depuração

  1. Documentação: Certificar-se de que outras pessoas podem ler o seu programa.
  2. Design: Ter certeza que seu programa resolve o problema certo e está organizado para que seja eficiente e potencialmente reutilizável.
  3. Depuração: Certificar-se de que seu programa não tenha nenhum erro e que ele responda adequadamente quanto a entrada de dados errados.

Documentação

Documentação torna possível ler, usar e manter um programa:

  • Na programação, a documentação é toda a escrita associada ao seu programa que não seja um código.
  • Em uma linguagem de programação, legibilidade é uma virtude nobre.
  • Isso significa que seu código é parte da documentação também.
  • Escolher bons nomes faz parte da documentação!
  • LEMBRE-SE, programação, começa e termina com a documentação.
  • Comece por escrever o problema que o seu programa se destina a resolver.
  • Antes mesmo de começar a escrever o seu programa, é uma boa ideia escrever notas sobre o objetivo do programa.
  • Finja que você precisa explicá-lo para outra pessoa, e se você tem alguém para ler a notas, melhor.
  • Termine, certificando-se de que a documentação ainda corresponde ao programa.

Se você não escrever a documentação, você vai achar que é difícil usar ou manter o seu programa depois de passado seis meses (mesmo se você é a única pessoa que usa o programa).

Design

Projetar é realmente um atalho para duas partes interligadas de programação: análise e design.

O que você realmente quer?

Análise é o processo de determinar o problema que você está tentando resolver. É semelhante ao processo que um arquiteto faz você passar para remodelar a sua cozinha: “O que você realmente quer?”. Por exemplo, você pode querer escrever um programa para automatizar seus dados de backup. Essa é uma descrição geral, mas você precisa de uma lista mais específica das tarefas que você deseja que o programa realize, como:

  • Quantas vezes você quer fazer os backups?
  • Você quer fazer backup de todos os dados ou apenas dados alterados desde o último backup?
  • Quanto tempo você quer manter os backups?

Se você está remodelando sua cozinha, então este é o ponto onde o arquiteto elabora um projeto. O projeto não é a própria cozinha; é o plano que deve ser seguido para a construção da nova cozinha. se você está escrevendo um programa, você começa a construir o contorno do programa, que é semelhante a uma planta. Na verdade, as pessoas que se concentram na análise e concepção de programas são frequentemente chamados de arquitetos de software.

A Pseudo codificação de seus pensamentos

Uma maneira de projetar seu programa é criando um esboço do tipo, usando o que é chamado de pseudo-código. Você escreve um esboço do que o seu programa vai fazer, utilizando as estruturas que você vai precisar usar quando você escrever o programa (como definições de classe e função, as declarações), mas você não deve se preocupar com os detalhes de sintaxe necessárias para escrever código de trabalho.

Pseudo-código tende a assemelhar-se a programas reais, por isso leva menos esforço para converter pseudo-código em código funcionando. quando o processo de pseudo-codificação é concluída, os detalhes são fáceis de escrever.

Depuração

Um bug é um erro em um pedaço do software que faz com que ele funcione de forma inadequada ou retorne resultados incorretos.

Ensine a Velhos Bugs  Novos Truques:

O uso da palavra bug (pau em português) já era comum antes do software ser inventado, por exemplo, Thomas Edison usou em 1878 para descrever problemas com suas invenções. Algumas pessoas vão dizer-lhe, porém, que o termo deriva de um incidente no qual foi encontrado um inseto real que estava causando falhas dentro de um computador no início de 1947.

Embora um bug seja mais velho do que escrever programas, depuração tem sido uma parte inerente da escrita de programas desde que as pessoas começaram a escrever softwares. Um dos primeiros cientistas da computação, Maurice Wilkes, é conhecido por ter dito: “Eu me lembro do momento exato em que eu percebi que uma grande parte da minha vida a partir de então ia ser passar a encontrar erros em meus próprios programas.”.

Escrever um programa complexo é algo como a concepção de um edifício. O arquiteto restringe inclusão do tempo, dinheiro, bom gosto, e os limites estruturais dos materiais. Programação também requer um equilíbrio entre necessidades múltiplas, muitas vezes incluindo o tempo, o dinheiro, a solicitações de recursos de vários grupos de pessoas, e da disponibilidade de quantidades suficientes de cafeína.

Um exemplo de um bom trabalho é com bom humor, o pythonista Tim Peters contribuiu com  19 diretrizes para um bom código Python. Considerado a melhor destilação da filosofia da programação Python:

Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Plano é melhor que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o suficiente para quebrar as regras.
Embora praticidade vença a pureza.
Erros nunca devem passar em silêncio.
A menos que explicitamente silenciados.
Diante da ambiguidade, recuse a tentação de adivinhar.
Deve haver um – e preferencialmente só um – modo óbvio para fazer isso.
Apesar de que o caminho pode não ser óbvio à primeira vista, a menos que você seja holandês.
Agora é melhor do que nunca.
Embora nunca é muitas vezes melhor do que agora.
Se a implementação é difícil de explicar, é uma má ideia.
Se a implementação é fácil de explicar, pode ser uma boa ideia.
Namespaces são uma grande ideia – vamos fazer mais desses!

-Tim Peters

Versão original: http://www.python.org/doc/humor/#zen

Publicidade

Python é uma linguagem de programação completa, que contém a funcionalidade exigida por programadores para escrever todos os tipos de código, de fazer filmes até para a previsão do tempo. Python é uma linguagem relativamente moderna. É muito poderoso e contém uma biblioteca de funções capazes de muitas tarefas diversificadas. No entanto, nem tudo o que vai achar útil é incorporado Python.

Felizmente, há um grande número de pacotes adicionais que são escritos especificamente para computação científica. Estes pacotes são bibliotecas de comandos extras que acrescentam mais funcionalidades do que o Python possui por default.

O objetivo do Spyder é fornecer um ambiente que faz com que seja fácil de escrever, rodar e debugar códigos Python, além de instalar vários módulos científicos como: NumPy, Matplotlib e SciPy.

Sites:

http://www.numpy.org/
http://matplotlib.org/
http://www.scipy.org/

Spyder

Spyder (anteriormente conhecido como Pydee) é um ambiente de desenvolvimento interativo poderoso para a linguagem Python com edição avançada, teste interativo, depuração e recursos de introspecção.

O Spyder IDE também pode ser usado como uma biblioteca que fornece poderosos widgets relacionados do console para as suas aplicações baseadas em PyQt – por exemplo, pode ser usado para integrar um console de depuração diretamente no layout de sua interface gráfica.

Recursos:

  • Editor : Breakpoints, os pontos de interrupção e pontos de interrupção condicionais para usar com o depurador python (APO).
  • Console : Executar um script todo ou qualquer parte dele a partir do Editor
  • Explorador de variáveis : Ver as variáveis ​​locais, enquanto você está depurando
  • Inspetor de Objetos : Acesso rápido a documentação é uma obrigação para todos os programadores, seja para explorar novas bibliotecas ou se lembrar de como usar um pedaço de código
  • Project Manager : Gerenciar grandes projetos de programação com diversas facilidades.
  • Ajuda on-Line : Explorar documentação gerada dinamicamente de todos os módulos instalados
  • Pylint : Analise seu código-fonte para prever erros e sinais de má qualidade de codificação.
  • Preferencias – Configure Spyder como você deseja com uma grande variedade de preferências disponíveis.

Código Fonte: http://code.google.com/p/spyderlib/
MIT License: http://opensource.org/licenses/mit-license.php

Requisitos:

Sphinx é uma ferramenta que torna mais fácil criar documentação inteligente e bonita, escrita por Georg Brandl e licenciado sob a licença BSD.

Ela foi originalmente criada para a nova documentação do Python, e tem excelentes facilidades para a documentação dos projetos em Python.

Captura de tela de 2014-02-22 17_28_10

site: http://sphinx-doc.org/

Instalação Linux

Entre no Terminal e digite os comando abaixo:

  1. sudo apt-get install python-qt4 python-sphinx
  2. sudo apt-get install spyder

Configuração da IDE

Vamos criar uma configuração para que o Spyder rode os aplicativos Python direto no terminal do Linux, você poderá  interpretar scripts Python como na figura abaixo:

Captura de tela de 2014-02-22 17_18_32

Instruções:

  1. No menu View, Windows and Toolbars escolha Project Explorer.
  2. No menu Tools, Preference escolha: RUN e selecione Execute in a external System Terminal.
  3. No menu File, escolha New Project e coloque o seguinte nome: HelloWorldSpyder.
  4. Clique no novo projeto com o botão direito e escolha New Module e nomeie :hello.py.
  5. Digite o codigo abaixo e na barra de tarefas clique em RUN.

Exemplo:

Neste exemplo criamos o famoso aplicativo Hello World e utilizamos a IDE Spyder para Linux, interpretando o script Python com saída para o Terminal:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# hello.py

# Importa OS
import os
# Limpa a tela
os.system("clear")

print "Hello World Spider"

# Cria uma espera no terminal
raw_input()

Spyder – Biblioteca Cientifica

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# MatPlotLib Example
# Ciência.py

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def data_gen():
     t = data_gen.t
     cnt = 0
     while cnt < 1000:
         cnt+=1
         t += 0.05
         yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
data_gen.t = 0

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.set_ylim(-1.1, 1.1)
ax.set_xlim(0, 5)
ax.grid()
xdata, ydata = [], []
def run(data):
     # update the data
     t,y = data
     xdata.append(t)
     ydata.append(y)
     xmin, xmax = ax.get_xlim()

     if t >= xmax:
         ax.set_xlim(xmin, 2*xmax)
         ax.figure.canvas.draw()
     line.set_data(xdata, ydata)

     return line,

ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=10,     repeat=False)
plt.show()

Dicionários – Python – Linux

Publicado: 22 de fevereiro de 2014 em Python

Dicionários são encontrados às vezes em outras linguagens de programação como “memórias associativas” ou “matrizes associativas”. Diferentemente de sequências que são indexadas por uma série de números, os dicionários são indexados por chaves, que podem ser de qualquer tipo imutável; strings e os números podem ser sempre chaves.

Python - Coleções

Python – Coleções

O que os dicionários são

Um dicionário é:

  • Uma matriz associativa.
  • Um mapeamento de chaves para valores.
  • Um recipiente (coleta), que tem valor de chave pares.

Um dicionário tem os seguintes recursos:

  • Capacidade de interagir sobre chaves ou valores ou valor de chave pares.
  • Capacidade de adicionar valor de chave pares dinamicamente.

Sintaxe:

dicionario = {chave : valor}

Exemplo:

Neste exemplo criamos um dicionário em ordem alfabética com nome e e-mail de pessoas, usamos as funcionalidades de excluir, adicionar novos itens ao dicionário.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# dicionario.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Dicionario

dicionario = { "Camille" : "camille@devaberto.com", "Eduarda" : "eduarda@devaberto.com", "Rafaela" : "rafaela@devaberto.com", "Ricardo" : "ricardo@devaberto.com", "Isabela" : "isabela@devaberto.com"}
print colored ("Dicionario\n".center(70),"yellow")
print colored (dicionario,"blue") 
print ""

# Imprime Agenda
print colored ("Agenda\n".center(70),"yellow")

for key, val  in sorted(dicionario.items()):
    print colored(str(key).rjust(20), "blue"), colored(str(val).rjust(50),"green")

# Tamanho do dicionario
print len(dicionario), " entrada(s) no dicionario\n"

# Deleta e Insere uma chave

print colored("Excluido: " + str(dicionario["Isabela"]), "red")
del dicionario["Isabela"]

# Insere uma chave

dicionario["Samanta"] = "Samanta@devaberto.com"
print colored("Incluido no dicionario: " + str(dicionario["Samanta"]) + "\n", "cyan")

# Imprime Nova Agenda
print colored ("Nova Agenda\n".center(70),"yellow")

for key, val  in sorted(dicionario.items()):
    print colored(str(key).rjust(20), "blue"), colored(str(val).rjust(50),"green")

Tuples – tuplas – Python – Linux

Publicado: 22 de fevereiro de 2014 em Python

Em matemática, ciência da computação, linguística, e filosofia um TUPLE é uma lista ordenada de elementos. Na teoria dos conjuntos, um (ordenado) n-tuple é uma sequência (ou lista ordenada) de n elementos, onde n é um número inteiro não negativo.

Em linguagens de programação, tais como Python, um TUPLE (pronuncia TUH-pul) é um conjunto ordenado de valores. O separador para cada valor é uma vírgula. Os usos comuns para o TUPLE como um tipo de dados são:

  • A passagem de uma série de parâmetros a partir de um programa para outro.
  • A que representa um conjunto de atributos de valor em um banco de dados relacional.  Tuplas podem conter uma mistura de outros tipos de dados.

Uma tupla (em português)  é uma sequência de valores. Os valores podem ser de qualquer tipo, e eles são indexados por números inteiros, então nesse aspecto tuplas são muito parecidas com listas. A diferença importante é que as tuplas são imutáveis​​.

Sintaxe:

tuples = ( 0, “STRING”)

Exemplo:

Neste exemplo utilizamos uma tupla para passar parâmetros para exibir uma simples saída de tela.

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# tuplas.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Declara variave Tuples
# Tuples é otimo para enviar parametros

t =  (10,20,70,"blue","yellow","red","green","white","cyan")

# Monta saida de tela usando tuplas

print colored("Lista\n".center(t[2]), t[4])

print colored("codigo".rjust(t[0]), t[3]),   colored("Banda".rjust(t[1]), t[3]),  colored("Album".rjust(t[1]), t[3]),  colored("Vendas\n".rjust(t[1]), t[3])

print colored("14242".rjust(t[0]), t[7]),   colored("Metallica".rjust(t[1]), t[6]),  colored("Load".rjust(t[1]), t[8]),  colored("(0) Zero\n".rjust(t[1]), t[5])

print colored("14245".rjust(t[0]), t[7]),   colored("Metallica".rjust(t[1]), t[6]),  colored("Kill \'em All".rjust(t[1]), t[8]),  colored("5.000.000".rjust(t[1]), t[5])

Se um erro ocorrer dentro da clausula TRY então automaticamente o interpretador executa a instrução EXCEPT, existem vários outros parâmetros  de tratamento de exceções em Python.

Python - Try...Excpet...Raise

Python – Try…Except…Raise

A declaração RAISE permite ao programador forçar uma exceção especifica.

Sintaxe:

TRY:

instrução

EXCEPT:

instrução

Exemplo:

Neste exemplo simplesmente geramos duas exceções clássicas, a primeira é uma divisão por zero e a segunda onde forçamos um erro no qual nos definimos uma mensagem exclusiva.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# erros.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Tratamento de erros

numero1 = 5
numero2 = 0

# Tratamento de erros -  Divisões por 0 geram erro.

print colored("Erro numero 1: Não para a execução do programa\n".center(70), "yellow")

try:
   print  numero1 / numero2
except:
   print colored("Impossivel dividir por zero.","red", attrs=["reverse", "blink"])

# Criando um novo Erro

print colored("Erro numero 2: Para a execução do programa\n".center(70), "yellow")

try:
    raise NameError( colored("Este é o meu novo erro.\nErro em outra linha." , "red"))
except NameError:
    print colored("Erro gerado propositalmente\nErro linha 2.\nErro linha 3.", "red", attrs=["reverse","blink"])
    raise

I/O – Open, Read, Write, Seek – Python – Linux

Publicado: 21 de fevereiro de 2014 em Python

Python torna muito simples a tarefa de trabalhar com arquivos.

open () – retorna um objeto de arquivo, e é mais comumente usado com dois argumentos:

Sintaxe:

open (nome do arquivo, modo).

Modos de Arquivos

  • ‘r’ –  quando o arquivo só será lido.
  • ‘w’ –  para apenas escrever (um arquivo existente com o mesmo nome será apagado).
  • ‘a’  – abre o arquivo para anexar (append).
  • ‘r +’ –  abre o arquivo para leitura e escrita.
  • ‘b’ – anexado ao modo abre o arquivo em modo binário.

Instruções

read () – Para ler o conteúdo do arquivo.

seek () – Posiciona o cursor em um ponto do arquivo: seek (colunas, posição). A posição 0 é o  início do arquivo, 1 usa a posição do arquivo atual e 2 usa o final do arquivo como ponto de referência. Se a posição é omitida o padrão é 0.

readline () – Lê uma única linha do arquivo.

write (string) – Escreve o conteúdo da string para o arquivo, retornando o número de caracteres escritos.

close () – Para fechar o aquivo e liberar todos os recursos do sistema tomados pelo arquivo aberto.

Exemplo:

Neste exemplo você deve primeiro criar um arquivo texto no mesmo diretório de onde executa seu programa, para este exercício vamos abrir o arquivo, ler o arquivo, gravar uma linha no final do arquivo e fechar o arquivo:

Python

Arquivo #1 – texto.txt

Desenvolvimento Aberto

Topicos

Ler um texto
escrever um texto

Arquivo #2 – Código Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# arquivo.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

#Lê um texto

with open("texto.txt","r+") as arquivo:
      texto = arquivo.read()

print colored("Texto\n".center(70),"yellow")
print colored(texto,"blue")

print colored("Escreve Linha\n".center(70),"yellow")

# Escreve um arquivo
# Abre o arquivo
arquivo = open("texto.txt","r+")

# Posiciona no final do
arquivo. arquivo.seek(0,2)

# Escreve no Arquivo
arquivo.write("Adiciona uma Linha\n")

# Fecha um arquivo
arquivo.close()

# Lê o arquivo novamente
with open("texto.txt","r+") as arquivo:
      texto = arquivo.read()
print colored(texto,"green")

Se você quiser mais controle sobre a formatação de sua saída do que simplesmente imprimindo valores separados por espaços e também colorir os textos de saida no terminal do linux.

A função str () é utilizado para retornar representações de valores que são bastante legível.

A função repr () destina-se a gerar representações que podem ser lidos pelo interpretador  para os objetos que não têm uma representação específica para o consumo humano. O repr () de uma string adiciona aspas e barras invertidas.

o str.rjust(), que justifica a direita uma string em um campo de uma determinada largura, preenchendo-a com espaços à esquerda. Existem métodos semelhantes str.ljust () e str.center ().

() str.format, os colchetes e caracteres dentro deles (chamados de campos de formato) são substituídos com os objetos passados ​​para o método

O metodo str.zfill(), que preenche uma string numérica com zeros à esquerda.

Termcolor (modulo), proporciona formatação ANSII e permite a saída de cores no terminal, usando a função colored(). O modulo termcolor não vem instaldo por default  e precisa ser instalado.

Python - Termcolor

Python – Termcolor

Instalar o Modulo TermColor:

  1. Faça o download do arquivo: https://pypi.python.org/pypi/termcolor.
  2. Descompacte o arquivo e entre na pasta descompactada termcolor.
  3. Pelo terminal navegue a o diretorio descompactado.
  4. Digite: sudo python setup.py install.
  5. O modulo termcolor esta pronto para uso.

Exemplo:

Neste exemplo criamos duas Arrays e formatamos a saída de tela usando funções de tabulação e letras coloridas no terminal do Linux:

Python


#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Elegante.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Cria Arrays
bandas = ["Alice in Chains", "Nirvana",  "Stone Temple Pilots", "SoundGarden", "Pearl Jam", "Screaming Trees"]

baladas =['Down in a Hole', "Something in the way", "Creep", "Black Hole Sun", "Black", "Dollar Bill"]

#imprime a tela
print colored("Baladas Grunge:\n",'blue', attrs=['reverse','blink'])

print colored("Lista das baladas classicas do anos 90\n".center(70),"yellow")

print colored("{0:10s} {1:25s} {2:5s} {3:25s}".format("Cod:","Banda","","Musica"),"green")

print '\n'

# imprime Arrays
for i in range(len(bandas)):
     print repr(str(i).zfill(5)).rjust(5), repr(bandas[i]).rjust(25), repr('>>>').rjust(5), repr(baladas[i]).rjust(25)

num =  len(baladas)
print "\n", colored("Total de ","magenta"),colored(num,"blue"), colored( "  musicas listadas","red")

Open SQL – Select , Insert, Update e Delete – Abap

Publicado: 20 de fevereiro de 2014 em Abap

Open SQL consiste em um conjunto de instruções ABAP que executam operações no banco de dados do sistema central do R/3. Os resultados das operações e as mensagens de erro são independentes do sistema de base de dados em uso. O Open SQL fornece, assim, uma sintaxe e semântica uniforme para todos os sistemas de banco de dados suportados pela SAP. Programas ABAP que utilizam apenas instruções Open SQL funcionará em qualquer sistema R/3, independentemente do sistema de banco de dados em uso. Instruções Open SQL só podem trabalhar com tabelas de banco de dados que foram criados no Dicionário ABAP.

Open SQL: Definição

Insert

A instrução Open SQL serve para inserir dados em uma tabela de banco de dados. Ela permite que você insira uma ou mais linhas na tabela do banco de dados alvo. Você pode especificar o destino da tabela de banco de dados estática ou dinamicamente.

Mais informações: Insert

Select

É uma instrução Open SQL para leitura de dados a partir de uma ou várias tabelas de banco de dados em objetos de dados. A instrução SELECT lê um conjunto de resultados a partir das tabelas do banco de dados especificados na fonte, e atribui os dados do conjunto de resultados para os objetos de dados especificados no alvo. Você pode restringir o conjunto de resultados usando a adição WHERE.

Mais informações: Select

UPDATE

A instrução UPDATE permite a atualização dos valores das colunas selecionadas de linhas de uma tabela de banco de dados.

Mais informações: Update

DELETE FROM

Para excluir linhas de qualquer tabela use a instrução DELETE FROM. Você pode usar a chave da tabela para encontrar e apagar uma única linha, eliminar um conjunto de linhas que atendam a uma condição, ou encontrar e apagar entradas duplicadas. Se a tabela tem uma chave não-exclusiva e há entradas duplicadas, a primeira entrada é eliminada.

Mais informações: Delete

Exemplos:

Neste exemplo usamos duas tabelas do FLIGHT MODEL e inserimos e selecionamos dados aleatórios nas tabelas SCURX, SBUSPART, ressaltando que ainda não precisamos respeitar nenhuma chave estrangeira nas tabelas standards, mais tarde usaremos BAPIs para atualizar consistentemente estas tabelas.

Abap

*&---------------------------------------------------------------------*
*& Report  ZMOEDA
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Flight Model - Moeda - Select e Insert
*&---------------------------------------------------------------------*

REPORT  ZMOEDA.

* Define a Tabela

TABLES SCURX.
TABLES SBUSPART.

* Cria as Arrays para os campos

DATA matriz  TYPE SCURX.
DATA matriz2 TYPE SBUSPART.

* Insere dados na tabela

matriz-currkey = 1.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

matriz-currkey = 2.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

matriz-currkey = 3.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

* Seleciona dados da Tabela.

WRITE : / 'Tabela de Moedas', / .

SELECT * INTO matriz FROM SCURX.
  WRITE : / 'Chave da Moeda:', matriz-currkey, 'Decimais: ', matriz-currdec, /.
ENDSELECT.

* Insere dados na tabela SBUSPART

matriz2-mandant = '001'.
matriz2-buspartnum = 1.
matriz2-contact = 'Desenvolvimento Aberto'.
matriz2-contphono = '55 5555-55-55'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.

matriz2-mandant = '001'.
matriz2-buspartnum = 2.
matriz2-contact = 'GNU - Open Source'.
matriz2-contphono = '55 9999-99-99'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.

matriz2-mandant = '001'.
matriz2-buspartnum = 3.
matriz2-contact = 'SAP AG - Airlines'.
matriz2-contphono = '55 6666-66-66'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.
* Seleciona dados da tabela SBUSPART

WRITE : / 'Tabela de Linhas Aereas', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.

* Altera dados nas tabelas

UPDATE SBUSPART SET contact = 'Sem Contato cadasrado' WHERE buspartnum = 3.

WRITE : / 'Tabela de Linhas Aereas ALTERADA', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.

* Deleta dados da tabela

DELETE FROM SBUSPART WHERE buspartnum = 3.

WRITE : / 'Tabela de Linhas Aereas Deletada', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.

O FLIGHT MODEL (modelo de vôo) é a base de exemplos da documentação do NetWeaver  7- ABAP.

O modelo de vôo é baseado no modelo de dados BC_TRAVEL, que você pode visualizar em seu sistema usando o Modelador de Dados.

Para quem já tem uma certa intimidade com banco de dados irá notar de primeira que o Data Modeler é uma ferramenta DER de fazer inveja aos usuários  que utilizam as ferramentas default de diagrama do ORACLE e MSSQL Databases.

O DATA MODELER (Modelador de Dados) é uma ferramenta gráfica e parte da gama de ferramentas do Web Dynpro. Usado para modelar dados e fornecer suporte eficiente para uma série de tarefas de desenvolvimento centrais.

datamodeler

Atualmente não há nenhuma interface de usuário para testar os cenários da aplicação de dados de vôo, usaremos as tabelas do FLIGHT MODEL em nossos exemplos para aprender como funciona a interação com o banco de dados, seus comandos, funções,  BAPIs e outras funcionalidades.

Dados do Flight Model

O NetWeaver 7 proporciona um ambiente de desenvolvimento para aplicações SAP, e por padrão existem 3 mandantes criados automaticamente em um sistema SAP. Todas as configurações inicias e dados contidos nas tabelas de exemplos estão dentro do mandante 000, entretanto você precisa criar um mandante adequado para desenvolvimento, e você pode criar uma copia do mandante 001 que também é um mandante padrão. A SAP aconselha criar os mandantes 200 e 210 para os ambientes de desenvolvimento.

Você encontra instruções de como utilizar clientes nos links abaixo:

Entendendo os Mandantes.

Criando Clientes de Desenvolvimento.

Importar dados do Flight Model.

 

Modelo de Voo

A partir do modelo de dados do voo SAP, as tabelas a seguir são de interesse para esta aplicação: Scarr (companhias aéreas), SPFLI (horários de vôos), SFLIGHT (vôos), SBOOK (reservas de voos), SCUSTOM (clientes voo), SFLCONN (conexões de vôo) , SFLCONNPOS (segmentos de rota de conexões de vôo), SFLTRIP (viagens de vôo), SFLTRIPPOS (passageiros viagem voo) e SFLTRIPBOK (números de reserva para viagens de voo).

Existe uma tabela no Dicionário ABAP contendo os dados das entidades correspondentes (versões do tipo de entidade) para cada tipo de entidade.

As Tabelas mais importantes do modelo de vôo são:

  •  T000:Tabela Cliente
  •  SCURX: Moedas (chave: chave da moeda)
  •  SBUSPART: parceiro de negócios (chave: cliente, número de sócio)
  •  STRAVELAG: Agências de viagens (chave: cliente, número de viagens agência)
  •  SCUSTOM: Clientes (chave: cliente, número de cliente)
  •  Scarr: Carriers (chave: cliente, identificação do operador)
  •  SCOUNTER: balcões de vendas (chave: cliente, transportadora ID, número de balcão de vendas)
  •  SPFLI: Programação de vôo (chave: cliente, transportadora ID, número de conexão)
  • SFLIGHT: Voos (chave: cliente, transportadora ID, número de conexão, data do vôo)
  • SBOOK: reservas de voo (chave: cliente, transportadora ID, número de conexão, data de vôo, reserva de número, número de cliente)

Para Acessar o Data Modeler

  • Digite a transação SD11.
  • Em Modeling object, digite: BC_TRAVEL.
  • Clique no botão Display .
  • Quando exibido o modelo de dados, na barra de ferramentas clique em Graphics.

Para Acessar as Estruras das Tabelas

  • Digite a transação SE11.
  • Em Database Table, digite o nome de uma das tabelas do modelo, exemplo: SCUSTOM.
  • Clique no botão Display.

Para Acessar os Dados das Tabelas

  • Digite a transação SE16
  • Em Table Name, digite o nome de uma das tabelas do modelo, exemplo: SCUSTOM.
  • Na barra de ferramentas, clique no ícone Table Contents ou pressione F7.
  • Na tela de seleção escolha a pesquisa mais adequada e clique no ícone Execute ou pressione F8.

Relacionamento entre as Tabelas

Tabela SBUSPART contém todos os parceiros de negócios de uma transportadora. Um parceiro de negócios é identificado pelo seu número na tabela. Os dados da pessoa de contato para o parceiro de negócios também é armazenado.

Um parceiro de negócios pode ser uma agência de viagens ou um cliente (por exemplo, empresa que freqüentemente marca vôos diretamente com a operadora).

Dados diferentes são necessários para estes dois tipos de parceiros de negócios. Os dados de uma agência de viagens é armazenado em STRAVELAG e os dados para um cliente na tabela SCUSTOM . Existe , portanto, uma entrada com a mesma chave em qualquer STRAVELAG ou SCUSTOM para cada entrada na tabela SBUSPART .

Tabela Scarr contém os IDs e nomes dos portadores. Cada transportador tem um número de ligações . Essas conexões de vôo são armazenados na tabela SPFLI . Tabela SFLIGHT contém os dados do voo concretos para cada conexão. As reservas podem ser feitas para cada voo na tabela SFLIGHT. As reservas feitas para cada voo são inseridos na tabela SBOOK.

As operadoras têm balcões de venda em aeroportos. Estes balcões de venda são inseridos na tabela SCOUNTER.

O número de cliente ou o número de agência para a qual foi feita a reserva é armazenada na tabela SBOOK para cada reserva. Se o cliente marcar seu vôo diretamente no balcão , o número do contador também é inserido nos dados de reserva na tabela SBOOK.

Exercício:

Analise e entenda o  o modelo de dados no diagrama de dados (DATA MODELER), Analise e entenda a estrutura das tabelas e seus campos no Dicionário ABAP, o mandante 001 não contem dados inseridos nas tabelas.

Internal Tables – Abap

Publicado: 20 de fevereiro de 2014 em Abap

Citando a documentação oficial da SAP, “…tabelas internas cumprem a função de Arrays…”, porem possuem um certo upgrade na funcionalidade as tornando diferentes das tradicionais Arrays e Vetores de outras linguagens de programação, possuem uma interação com a sintaxe de comandos SQL,  onde podemos usar a tradicional clausula WHERE,  e também comandos SQL inteiros em sua tradicional sintaxe, exceto pelo comando UPDATE que não funciona com tabelas internas

Semelhante ao conceito de tabela nos bancos de dados, mas armazenadas na memória. Número de registros de acesso restrito somente pela capacidade do sistema. Útil para armazenar temporariamente os dados do banco de dados para processamento, preparação de dados para a saída, ou preparar dados para outro uso.

As tabelas internas fornecem um meio selecionar dados a partir de uma estrutura fixa e armazená-la na memória de trabalho em ABAP. Os dados são armazenados linha por linha na memória, e cada linha possui a mesma estrutura. Em ABAP, tabelas internas cumprem a função de matrizes. Uma vez que eles são objetos de dados dinâmicos, elas economizam do programador a tarefa de gerenciamento de memória dinâmica em seus programas. Você deve usar tabelas internas, sempre que você quiser processar um conjunto de dados com uma estrutura fixa dentro de um programa. Uma utilização particularmente importante para as tabelas internas é o armazenamento e formatação de dados a partir de uma tabela de base de dados dentro de um programa. Elas também são uma boa maneira de incluir estruturas de dados muito complicadas em um programa ABAP.

Os dados em uma tabela interna pode ser acessado através de pesquisa na tabela baseada em valores de coluna chave ou índices (números de linha).

As chaves podem ser exclusivas ou não-exclusivas. Buscando uma tabela interna com chaves não-exclusivas pode resultar em mais de 1 registro retornado por pesquisa.

mais informações: http://help.sap.com/SAPHELP_470/Helpdata/PT/fc/eb35de358411d1829f0000e829fbfe/content.htm

Tipos de tabelas internas:

  • Standard – Semelhante à tabela de DB (linha e chave de acesso)
  • Sorted – Dados ordenados sempre ordenados por chaves (linha e chave de acesso)
  • Hashed – Chaves deve ser exclusivas (somente chave de acesso)

Uma tabela Standard só pode ter chaves não únicas, tabelas hash só pode ter chaves únicas, e Sorted pode ter qualquer um.

Comandos:

Append:

Adiciona um objeto de dados no fim da tabela.

Informações adicionais: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb36c8358411d1829f0000e829fbfe/content.htm

Insert:

Na tabela Standard, mesmo que Append. Na tabela Sorted, insere com base na ordem de classificação. Na tabela hash, insere baseado no algoritmo de hash.

Informações adicionais: http://help.sap.com/saphelp_nw04s/helpdata/en/fc/eb3a6d358411d1829f0000e829fbfe/content.htm

Modify:

Muda uma linha da tabela.

Informações adicionais: http://help.sap.com/saphelp_45b/helpdata/en/34/8e72f96df74873e10000009b38f9b8/content.htm

Delete:

Exclui linha (s) com a condição correspondênte.

Informações adicionais: https://help.sap.com/saphelp_45b/helpdata/en/34/8e72fb6df74873e10000009b38f9b8/content.htm

Exemplos:

Neste exemplo herdamos uma tabela Standard do sistema, criamos uma matriz para manipular as linhas de dados (rows), e usamos os comandos básicos de manipulação de dados.

Abap

*&---------------------------------------------------------------------*
*& Report  ZTABELAINTERNA
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Tabelas Internas
*&---------------------------------------------------------------------*

REPORT  ZTABELAINTERNA.

* Tabela Scarr é uma tabela de informações de linhas aéreas
* Utilize SE11 para visualizar a tabela e tipo de dados no ABAP Dictionary.
* Criar uma tabela interna do mesmo tipo que Scarr:

DATA i_minhatabela TYPE STANDARD TABLE OF scarr.

* Criar uma estrutura que corresponda às colunas contidas na tabela interna
* Abap usa a variavel matriz como uma ARRAY:

DATA matriz LIKE LINE OF i_minhatabela.

* INSERT - Insere valores aos campos da tabela interna.

matriz-mandt        = '001'.
matriz-carrid       = '2002'.
matriz-carrname     = 'Dev. Aberto AirLine.'.
matriz-currcode     = 'Euro'.
matriz-url          = 'https://desenvolvimentoaberto.wordpress.com/'.
INSERT matriz INTO TABLE i_minhatabela.

* APPEND - adiciona valores aos campos da tabela interna.

APPEND INITIAL LINE TO i_minhatabela.
matriz-mandt        = '001'.
matriz-carrid       = '122'.
matriz-carrname     = 'Aviação DA airlines S/A.'.
matriz-currcode     = 'Real'.
matriz-url          = 'https://desenvolvimentoaberto.wordpress.com/'.
APPEND matriz TO i_minhatabela.

* Deleta matriz em branco, comente a linha abaixo para ver o espaço em branco

DELETE i_minhatabela WHERE mandt =''.

* MODIFY - modifica dados nas tabelas.

matriz-currcode = 'Euro'.
MODIFY i_minhatabela FROM matriz TRANSPORTING currcode  WHERE currcode = 'Real'.

* Escrever o conteúdo da tabela interna para a tela como uma lista
LOOP AT i_minhatabela INTO matriz.
    WRITE: / 'Mandante', matriz-mandt, / 'Id:', matriz-carrid, / 'Empresa Aerea:', matriz-carrname,
           / 'Código da moeda:', matriz-currcode, / 'Url da empresa:', matriz-url, / .
ENDLOOP.