curso nocoes basicas progress
DESCRIPTION
Curso Nocoes Basicas ProgressTRANSCRIPT
ApostilaCurso Noções Básicas
Progress Caracter
Setembro/2002
Noções Básicas em Progress Caracter
1. BANCO DE DADOS PROGRESS...............................................................................................7
1.1. Criando um Banco..............................................................................................................7
1.2. Entrando no Editor..............................................................................................................7
1.3. Saindo do Editor..................................................................................................................7
1.4. Saindo Temporariamente do Editor...................................................................................7
1.5. Retornando para o Editor...................................................................................................7
1.6. Teclas de Funções do Editor.............................................................................................8
1.7. Símbolos Especiais / Operadores / Funções....................................................................8
1.8. Conceitos de Banco de Dados Relacional........................................................................9
1.9. Componentes Lógicos........................................................................................................9
1.10. Componentes Físicos.................................................................................................10
1.11. Dicionário de Dados...................................................................................................10
2. VARIÁVEIS...............................................................................................................................11
2.1. Tipos e Formatos..............................................................................................................11
2.2. Definição............................................................................................................................11
2.3. Compartilhamento.............................................................................................................11
2.4. Parâmetros........................................................................................................................12
3. COMANDOS BÁSICOS / INCLUDES / ZOOM.........................................................................14
3.1. RUN.....................................................................................................................................14
3.2. ASSIGN..............................................................................................................................14
3.3. INPUT.................................................................................................................................14
3.4. DISPLAY.............................................................................................................................14
3.5. PROMPT-FOR....................................................................................................................14
3.6. UPDATE..............................................................................................................................14
3.7. IF ... THEN ... ELSE.......................................................................................................14
3.8. DO: ... END.......................................................................................................................15
3.9. CASE..................................................................................................................................15
3.10. MESSAGE....................................................................................................................16
end.............................................................................................................................................. 17
3.11. NEXT............................................................................................................................17
3.12. LEAVE..........................................................................................................................17
3.13. UNDO...........................................................................................................................17
3.14. RETRY..........................................................................................................................17
3.15. RETURN.......................................................................................................................18
3.16. Includes.......................................................................................................................18
2
Noções Básicas em Progress Caracter
3.17. Zoom............................................................................................................................18
4. FRAMES....................................................................................................................................19
4.1. Single.................................................................................................................................19
4.2. Down..................................................................................................................................19
4.3. Flashing.............................................................................................................................19
4.4. Declaração VIEW / PAUSE / HIDE / CLEAR.....................................................................20
4.5. Características Frames.....................................................................................................21
4.6. CENTERED.........................................................................................................................21
4.7. COLUMN.............................................................................................................................21
4.8. DOWN.................................................................................................................................21
4.9. NO-BOX..............................................................................................................................21
4.10. NO-LABELS.................................................................................................................22
4.11. OVERLAY....................................................................................................................22
4.12. PAGE-BOTTOM...........................................................................................................22
4.13. PAGE-TOP...................................................................................................................22
4.14. ROW.............................................................................................................................22
4.15. SIDE-LABELS..............................................................................................................22
4.16. TITLE............................................................................................................................22
4.17. WITH.............................................................................................................................22
4.18. Características Campos.............................................................................................22
4.19. AT.................................................................................................................................22
4.20. COLON.........................................................................................................................22
4.21. COLUMN-LABEL.........................................................................................................23
4.22. FORMAT.......................................................................................................................23
4.23. LABEL..........................................................................................................................23
4.24. LIKE..............................................................................................................................23
4.25. NO-LABEL...................................................................................................................23
4.26. SPACE.........................................................................................................................23
5. BLOCOS...................................................................................................................................24
5.1. Tipos de Blocos.................................................................................................................24
5.2. Blocos com Capacidade de Repetição...........................................................................24
6. LENDO E MOSTRANDO OS REGISTROS..............................................................................25
6.1. Declaração FOR EACH.....................................................................................................25
6.2. Cláusula WITH...................................................................................................................26
6.3. Opção COLUMN................................................................................................................26
6.4. Cláusula WHERE / OF.......................................................................................................26
3
Noções Básicas em Progress Caracter
6.5. Declaração FIND................................................................................................................27
6.6. Cláusula EXCEPT..............................................................................................................28
6.7. Cláusula NO-ERROR / AVAILABLE.................................................................................28
6.8. Cláusula BY.......................................................................................................................28
6.9. Cláusula USE-INDEX.........................................................................................................28
6.10. Cláusula BEGINS........................................................................................................29
6.11. Cláusula MATCHES....................................................................................................29
6.12. BUFFERS.....................................................................................................................29
6.13. TEMP-TABLE...............................................................................................................30
7. ALOCANDO OS REGISTROS..................................................................................................32
7.1. Tipos de Bloqueio.............................................................................................................32
8. CRIANDO OS REGISTROS......................................................................................................32
8.1. Declaração PROMPT-FOR................................................................................................32
8.2. Declaração FIND................................................................................................................32
8.3. Declaração CREATE.........................................................................................................33
8.4. Declaração ASSIGN..........................................................................................................33
8.5. Declaração INPUT.............................................................................................................33
8.6. Declaração UPDATE.........................................................................................................33
8.7. Declaração REPEAT.........................................................................................................34
9. MODIFICANDO OS REGISTROS.............................................................................................35
9.1. Declaração PROMPT-FOR................................................................................................35
9.2. Declaração FIND................................................................................................................35
9.3. Declaração ASSIGN..........................................................................................................36
9.4. Declaração INPUT.............................................................................................................36
9.5. Declaração UPDATE.........................................................................................................36
9.6. Declaração REPEAT.........................................................................................................37
10. ELIMINADO OS REGISTROS...............................................................................................37
10.1. Declaração PROMPT-FOR..........................................................................................37
10.2. Declaração FIND.........................................................................................................38
10.3. Declaração DELETE...................................................................................................38
11. TRANSAÇÃO.........................................................................................................................39
12. GERANDO RELATÓRIO.......................................................................................................40
12.1. Redirecionando a Saída............................................................................................40
12.2. Múltiplos Canais de Saída..........................................................................................41
12.3. Controles de Quebra..................................................................................................43
12.4. Cabeçalhos e Rodapés..............................................................................................44
4
Noções Básicas em Progress Caracter
13. ENTRADA E SAÍDA DE DADOS...........................................................................................45
14. QUERY / BROWSE / SELECTION-LIST...............................................................................47
14.1. Query / Browse...........................................................................................................47
14.2. Selection-List..............................................................................................................48
15. EXERCÍCIOS.........................................................................................................................49
5
Noções Básicas em Progress Caracter
Pré-requisitos
Conhecimento Básico de Lógica de Programação
Apresentação
Este treinamento tem por finalidade relembrar alguns pontos de lógica dos operadores matemáticos apresentar os comandos da linguagem progress mais usados, à nível caracter objetivando o desenvolvimento de relatórios, consultas e atualizações através do banco de dados progress.
1. BANCO DE DADOS PROGRESS
6
Noções Básicas em Progress Caracter
1.1.Criando um Banco
Vazio (UNIX)
prodb banco1 empty
Vazio (DOS)
MENU IniciarProgramasProgressDesktop
Cópia (UNIX)
prodb banco1 demo sports
Cópia (DOS)
MENU IniciarProgramasProgressDesktop
1.2.Entrando no Editor
UNIX
pro –d dmy banco1 (monousuario)
1.3.Saindo do Editor
quit (tecla F1 – Ctrl x)
1.4.Saindo Temporariamente do Editor
unix (tecla F1 – Ctrl x)
1.5.Retornando para o Editor
exit (tecla ENTER)
1.6.Teclas de Funções do Editor
7
Noções Básicas em Progress Caracter
F1 – RunF3 – MenuF5 – Abrir arquivoF6 – Salvar arquivoF8 – Limpar telaF9 – Abrir linhaF10 – Eliminar linha
1.7.Símbolos Especiais / Operadores / Funções
Símbolos Especiais:
/* ... */ (O texto entre o símbolo é comentário).(ponto) (Identifica o fim de um comando. Delimita o nome do banco de dados, nome da tabela): (dois pontos) (Identifica final de um comando de bloco)? (Identifica um valor desconhecido)
Operadores Lógicos:
EQ ou = (Igual) LT ou < (Menor) LE ou <= (Menor ou Igual)
GT ou > (Maior)GE ou >= (Maior ou Igual)NE ou <> (Diferente)NOT (Negação)AND (E)OR (OU)
Operadores Numéricos:
/ (Divisão)* (Multiplicação)+ (Soma)_ (Subtração)
Funções:
STRING(valor) (Converte outro tipo de dado em caracter)LENGTH(caracter) (Retorna o número de caracteres ou bytes de um string)CAPS(caracter) (Converte um string em letra maiúsculas)SUBSTRING(campo, posição, tamanho) (Retorna parte de uma string)DATE(mês,dia,ano) (Converte um string em data)TODAY (Retorna a data do sistema)
8
Noções Básicas em Progress Caracter
1.8.Conceitos de Banco de Dados Relacional
Utiliza-se um banco de dados para armazenar e recuperar informações. Ele fornece uma maneira fácil de consultar e analisar um variedade de dados. Um banco de dados consiste de duas ou mais tabelas, fornece relacionamento ou ligações entre os registros entre as tabelas.
Existem três tipos de relacionamentos:
- Um-para-um
CLIENTE < ---------- > ENDEREÇO DE ENTREGA
- Um-para-vários
CLIENTE < ---------- > > PEDIDO
- Vários-para-vários
PEDIDO << ----------- >> ITEM
As informações são armazenadas em registros. Os registros são compostos de campos. As tabelas possuem um ou mais índices.
1.9.Componentes Lógicos
Os componentes lógicos de um banco de dados PROGRESS são:
- Banco de DadosÉ um depósito central onde armazenamos os dados.
- TabelaÉ um grupo de informações relacionadas entre si.
- CampoÉ um pedaço de informação.
- RegistroÉ uma coleção de campos individuais de uma “entidade”.
- ÍndiceÉ uma maneira eficiente de buscar um registro.
* Entidade
É um objeto ou evento, distintamente identificado e tratado com uma categoria definida, acerca da qual armazenamos dados.
9
Noções Básicas em Progress Caracter
1.10. Componentes Físicos
Arquivos do banco de dados:
- Arquivo.DB (Database-Banco de Dados)Arquivo principal do banco de dados. Nele são armazenados a estrutura das tabelas e os dados.
- Arquivo.BI(Before-Image-Imagem Anterior)Nele são armazenados cópias de registros antes de sua alteração. É a partir deste arquivo que o PROGRESS efetua a restauração da base de dados no caso de problemas.
- Arquivo.LG(Log de Evento)Nele são armazenados o histórico de inicialização e encerramento de seções do banco de dados e informações importantes relacionadas aos eventos ocorridos com ele.
- Arquivo.LK (Lock)Identifica como o banco está sendo utilizado.
1.11. Dicionário de Dados
O dicionário de dados mantém os componentes do banco de dados. Sua utilização: criar, modificar e eliminar tabelas, campos e índices e efetuar administração do banco de dados.
10
Noções Básicas em Progress Caracter
2. VARIÁVEIS
É uma área temporária de armazenamento de informação, a qual poderá ser alterada durante a execução do programa no qual foi definida. Uma variável é utilizada para auxiliar no cálculo de expressões, cópias de dados ou dados complementares. Para trabalhar com variáveis é preciso definir e atribuir um valor a ela.
2.1.Tipos e Formatos
Tipo Variável Formato inicial Valor inicial Descrição Exemplo
Character x(8) brancos Letras, números e abcdefgh caracteres especiais
Integer ->,>>>,>>9 0 Números inteiros 1.230Decimal ->>,>>9.99 0 Números decimais 1.230,37Date mm/dd/aa ? Se refere a uma data 02/08/00Logical yes/no no Possui dois valores, no
O primeiro verdadeiro E o outro falso
Recid >>>>>>9 ? Endereço de um registro 5549861
2.2.Definição
Exemplos:define variable nm-usuario-aux as character format “x(40)” no-undo.define variable cd-usuario-aux as integer format “99999” no-undo.define variable dt-emissao-aux as date format “99/99/9999” initial today no-undo. define var cd-modalidade-aux like modalid.cd-modalidade no-undo.define var lg-atualiza-aux as logical format “Sim/Não” no-undo.define var ds-obs-aux as character format “x(20)” extent 3 no-undo.
2.3.Compartilhamento
Inicialmente um buffer de variável é reconhecido somente pelo programa no qual ela foi definida. Para que ele possa ser reconhecido por outros programas ele deve ser definido como buffer compartilhado.
Variáveis SHARED
Quando uma variável é definida como SHARED, o buffer auxiliar criado poderá ser reconhecido pelo programa que o criou e por todos os programas acessados a partir dele.
NEW SHARED - Cria buffer auxiliarSHARED - Utiliza um buffer auxiliar criado anteriormente
Exemplos:/* FONTE - prog02-01.p */
11
Noções Básicas em Progress Caracter
define variable lg-altera as logical format "Sim/Nao" no-undo.define new shared variable cd-modalidade-aux like modalid.cd-modalidade no-undo.
assign lg-altera = no.message "Deseja alterar modalidade?" update lg-altera.
if lg-alterathen do: update cd-modalidade-aux.
run curso/prog02-02.p.
message "Modalidade alterada"view-as alert-box title " Atencao !!! ".
end.else message "Modalidade nao foi alterada"
view-as alert-box title " Atencao !!! ".
/* FONTE - prog02-02.p */
define shared variable cd-modalidade-aux like modalid.cd-modalidade no-undo.
find modalid where modalid.cd-modalidade = cd-modalidade-auxexclusive-lock no-error.
if available modalidthen update modalid.ds-modalidade
modalid.in-tipo-pessoa.
2.4.Parâmetros
Outra forma de trocar informações entre programas é através da utilização de parâmetros. Os parâmetros podem ser passados e retornados pelo programa chamador. Eles devem ser passados através do comando RUN na mesma sequência em que são recebidos e o formato das variáveis deve ser iguais.
INPUT - programa chamador passa valor ao chamadoOUTPUT - programa chamador recebe valor do chamadoINPUT-OUTPUT - programa chamador passa e recebe valor do chamado
Exemplos:Programa Chamador
12
Noções Básicas em Progress Caracter
/* FONTE - prog02-03.p */define variable lg-altera
as logical format "Sim/Nao" no-undo.define variable cd-modalidade-aux
like modalid.cd-modalidade no-undo.
assign lg-altera = no.message "Deseja alterar modalidade?" update lg-altera.
if lg-alterathen do: update cd-modalidade-aux.
run curso/prog02-04.p (input cd-modalidade-aux) .
message "Modalidade alterada"view-as alert-box title " Atencao !!! ".
end. else message "Modalidade nao foi alterada"
view-as alert-box title " Atencao !!! ".
Programa Chamado/* FONTE - prog02-04.p */define input parameter cd-modalidade-aux
like modalid.cd-modalidade no-undo.
find modalid where modalid.cd-modalidade = cd-modalidade-auxexclusive-lock no-error.
if available modalidthen update modalid.ds-modalidade
modalid.in-tipo-pessoa.
3. COMANDOS BÁSICOS / INCLUDES / ZOOM
13
Noções Básicas em Progress Caracter
3.1.RUN
Executa um programa progress a partir de outro programa. Quando a execução do programa termina ele retorna do ponto onde foi chamado.
3.2.ASSIGN
Move informações do buffer de tela para o buffer de registro ou do buffer de um registro para outro.
3.3. INPUT
Deve ser utilizado para recuperar o valor de um buffer de tela.
3.4.DISPLAY
Mostra as informações movendo-as do buffer de registro para o buffer de tela.
3.5.PROMPT-FOR
Recebe as informações do usuário mantendo-as na tela.
3.6.UPDATE
Utilizada para mostrar informações ao usuário, permitindo modificá-la e transferindo-a para o buffer de registro.
3.7. IF ... THEN ... ELSE
Permite a tomada de decisão dependendo de uma condição se verdadeira ou falsa.
if <condição> then <ação para expressão verdadeira> .else <ação para expressão falsa> .
Exemplo:define variable cd-modalidade-aux as integer initial 20.
if cd-modalidade-aux = 20then message “Modalidade e igual a 20”. (condição verdadeira)else message “Modalidade nao e igual a 20”.
ou
if cd-modalidade-aux = 50then message “Modalidade e igual a 50”.else message “Modalidade nao e igual a 50”. (condição falsa)
3.8.DO: ... END.
14
Noções Básicas em Progress Caracter
As cláusulas then e else executam apenas o primeiro comando após elas. Para que execute vários comandos é necessário usar o comando do: ... end.
if <condição>then do:
<ações para expressão verdadeira> . end.
else do:<ações para expressão falsa> .
end.
Exemplo: define variable cd-modalidade-aux as integer initial 20.
if cd-modalidade-aux = 20then do:
(condição verdadeira) message “Modalidade e igual a 20”.
display “Modalidade igual a “ cd-modalidade-aux. end.else message “Modalidade nao e igual a 20”.
3.9.CASE
Permite executar ações diferenciadas dependendo do valor de uma expressão. Neste caso também pode ser utilizado a cláusula DO: ... END.
case <expressão> :when <valor ou variável> then <ação para quando valor for verdadeiro> .when <valor ou variável>
then < ação para quando valor for verdadeiro>.otherwise <ação para quando valor não atender nenhuma opção> .
end case.
Exemplo: def var lg-opcao as log format "Inclui/Modifica" no-undo.
15
Noções Básicas em Progress Caracter
message "Informe a funcao" update lg-opcao.
case lg-opcao:when yesthen do:
message "Funcao Inclui" view-as alert-box title " Atencao !!! ". end.when nothen do:
message "Funcao Modifica" view-as alert-box title " Atencao !!! ". end.
otherwise do: message "Funcao invalida" view-as alert-box title " Atencao !!! ". end.
end case.
3.10. MESSAGE
Utilizado para enviar mensagens ao usuário. A mensagem pode ser mostrada de duas formas, ou no rodapé da página ou em caixa de alerta no centro do vídeo.
Tipo de alerta:message - Aparece somente a mensagem.question - Aparece a mensagem com figura contendo ponto de interrogação.information - Aparece a mensagem com figura contendo ponto de
esclamação. error - Aparece a mensagem com figura contendo um X em
vermelho.warning - Aparece a mensagem com figura contendo um ponto de
exclamação em amarelo, significando que é um alerta apenas.
message <mensagem> . - Irá mostrar no rodapé da página. message <mensagem> view-as alert-box <tipo de alerta>
title <descrição do título do alerta>.
Exemplos:for each modalid no-lock: if modalid.cd-modalidade = 1 then message “Modalidade Particular com descrição” modalid.ds-modalidade. else display modalid.cd-modalidade modalid.ds-modalidade.end.
for each modalid no-lock:if modalid.cd-modalidade = 1
then message “Modalidade Particular com descrição” modalid.ds-modalidade
16
Noções Básicas em Progress Caracter
view-as alert-box title “ Atencao !!! “. else display modalid.cd-modalidade
modalid.ds-modalidade.end.
3.11. NEXT
Vai imediatamente para o comando END do bloco e inicia uma nova interação.
Exemplo:for each modalid no-lock: if modalid.cd-modalidade <> 1 then next. display modalid.cd-modalidade
modalid.ds-modalidade.end.
3.12. LEAVE
Vai imediatamente para o END do bloco e continua executando o comando após o END deste bloco.
Exemplo:define variable ix-vezes as integer.
repeat: ix-vezes = ix-vezes + 1.
if ix-vezes = 100then leave. (este leave sai do repeat)
for each modalid where modalid.cd-modalidade = ix-vezes no-lock:
if modalid.ds-modalidade = “” then leave. (este leave sai do for each e continua no repeat)
end.end.
3.13. UNDO
Desfaz as alterações executadas na interação corrente, ou seja, dentro do bloco corrente.
3.14. RETRY
Vai imediatamente para o END do bloco e executa a mesma interação.
Exemplo:/* FONTE – prog03-01.p */repeat:
prompt-for modalid.cd-modalidade.find modalid where modalid.cd-modalidade
= input modalid.cd-modalidade
17
Noções Básicas em Progress Caracter
no-lock no-error.if not available modalidthen do:
message “Modalidade não cadastrada”. undo,retry.
end.display modalid.ds-modalidade.
end.
3.15. RETURN
Encerra a procedure onde estão sendo executados os comandos, ou seja, se a procedure é o próprio programa, sai do programa retornando ao ponto que o chamou. Se for um internal procedure sai da internal procedure e volta para o ponto após a chamada desta procedure.
Exemplo:/* FONTE - prog03-02.p */for each modalid no-lock: if modalid.cd-modalidade = 2 then run curso/prog03-03.p (input modalid.cd-modalidade).end.
/* FONTE - prog03-03.p */define input parameter cd-modalidade-par
like modalid.cd-modalidade.
for each pla-sau where pla-sau.cd-modalidade = cd-modalidade-par no-lock: display pla-sau.cd-modalidade
pla-sau.cd-plano pla-sau.nm-plano.
if pla-sau.cd-plano = 2then return.
end.
3.16. Includes
Arquivos/blocos com a extensão (.i) ou (.f) pode ser utilizado em vários pontos do programa para não duplicar blocos.
3.17. Zoom
Programa que disponibiliza conteúdo da tabela .
4. FRAMES
É uma área de exibição de dados onde o PROGRESS utiliza para conversar com o usuário.
18
Noções Básicas em Progress Caracter
4.1.Single
Um frame single mostra somente um registro por vez na interface de saída.
Exemplo:find modalid where modalid.cd-modalidade = 01
no-lock no-error.if available modalidthen display modalid.cd-modalidade
modalid.ds-modalidade.
4.2.Down
Um frame down mostra mais de um registro por vez na interface de saída.
Exemplo:for each modalid no-lock:
display modalid.cd-modalidade modalid.ds-modalidade.end.
4.3.Flashing
Este fenômeno ocorre quando o PROGRESS define um frame down, a qual não salta para a próxima linha pelo fato do escopo do frame não pertencer a um bloco que gera repetição. Neste caso todos os registros são colocados na mesma linha, ficando visível somente o último registro.
Exemplo:define variable ix-vezes as integer initial 1.
do ix-vezes = 1 to 10: assign ix-vezes = ix-vezes + 2. display ix-vezes. end.
Para resolver este problema deve-se usar o comando down.
define variable ix-vezes as integer initial 1. do ix-vezes = 1 to 10: assign ix-vezes = ix-vezes + 2. display ix-vezes with down. down. end.
4.4.Declaração VIEW / PAUSE / HIDE / CLEAR
VIEW
É usada para mostrar um frame,
19
Noções Básicas em Progress Caracter
Exemplo:form pla-sau.cd-modalidade label “Modalidade” at 1
pla-sau.cd-plano label “Plano” at 7 with side-labels frame f-plano.
view frame f-plano.
PAUSE
Faz uma parada na execução dos comandos. Pode ser determinado o número de segundos no qual será feita a parada.
Exemplos:for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade. pause.end.
for each modalid: display modalid.cd-modalidade modalid.ds-modalidade. pause(3).end.
HIDE
Apaga um frame.
Exemplo:/* FONTE - prog04-01.p */form pla-sau.cd-modalidade label "Modalidade" at 1 pla-sau.cd-plano label "Plano" at 6
with side-labels frame f-plano.
view frame f-plano.
pause.
hide frame f-plano.
CLEAR
Limpa os campos do frame.
Exemplo: /* FONTE - prog04-02.p */
form pla-sau.cd-modalidade label "Modalidade" at 1 pla-sau.cd-plano label "Plano" at 6
with side-labels frame f-plano.
20
Noções Básicas em Progress Caracter
view frame f-plano.
find pla-sau where pla-sau.cd-modalidade = 01 and pla-sau.cd-plano = 01
no-lock no-error.if available pla-sauthen display pla-sau.cd-modalidade
pla-sau.cd-plano with frame f-plano.
pause. clear frame f-plano.
4.5.Características Frames
Podemos especificar as características dos frames para algumas declarações. As características se aplicam ao frame como um todo, e não apenas para a declaração especificada.
4.6.CENTERED
Centraliza o frame na interface com o usuário.
4.7.COLUMN
1 Column
Especifica em quantas colunas serão mostrados os campos.
Column 2
Especifica a coluna na qual o frame inicia.
4.8.DOWN
Desce uma linha no frame.
1 Down
Especifica quantas linhas terá o frame.
4.9.NO-BOX
Retira a borda que delimita o frame.
4.10. NO-LABELS
Não utilizar o nome do campo.
4.11. OVERLAY
Quando um frame sobrepor o outro não apaga o frame sopreposto.
21
Noções Básicas em Progress Caracter
4.12. PAGE-BOTTOM
É utilizado na definição do frame para o rodapé para relatório.
4.13. PAGE-TOP
É utilizado na definição do frame para o cabeçalho para relatório.
4.14. ROW
Especifica a linha na qual o frame deve iniciar.
4.15. SIDE-LABELS
Faz com que o label apareça ao lado esquerdo do campo.
4.16. TITLE
Coloca um título em um frame.
4.17. WITH
A cláusula WITH tem por objetivo nomear um frame para que possa ser utilizado em qualquer parte do programa.
4.18. Características Campos
Critérios de validação e mensagens de ajuda podem ser especificados no dicionário de dados que podem ser alterados.
4.19. AT
At 2
O campo, a partir do label, deve começar na coluna especificada.
4.20. COLON
Colon 30
Alinha os dois pontos do label na coluna especificada.
4.21. COLUMN-LABEL
Formatar o frame em colunas, os dados serão mostrados abaixo do nome do campo.
4.22. FORMAT
22
Noções Básicas em Progress Caracter
Atribui um formato ao campo.
4.23. LABEL
Atribui um label ao campo.
4.24. LIKE
Na definição de variável pode definir um formato específico ou utilizar a definição do dicionário de dados.
4.25. NO-LABEL
Não mostra o label do campo/variável.
4.26. SPACE
Na definição de frames o default(padrão) de espaços entre as variáveis é um, com o comando SPACE podemos especificar um número de espaços.
5. BLOCOS
5.1.Tipos de Blocos
Procedure
Este bloco refere-se a todo o programa.
23
Noções Básicas em Progress Caracter
Internal Procedure
Este bloco refere-se a uma procedure especifica.
DO: ... END.
Este bloco tem como objetivo agrupar comandos.
REPEAT: ... END.
Bloco de repetição com objetivo de executar interações.
FOR EACH: ... END.
Bloco de repetição com objetivo de executar interações com leitura de registros no banco de dados.
5.2.Blocos com Capacidade de Repetição
REPEAT
Executa interações até que um comando de desvio seja executado.
FOR EACH
Executa interações baseado na leitura de registros as base de dados.
6. LENDO E MOSTRANDO OS REGISTROS
6.1.Declaração FOR EACH
É um laço de repetição onde executa a leitura de uma tabela do banco de dados.
Exemplo:
for each modalid no-lock: display modalid.end.
24
Noções Básicas em Progress Caracter
Mémoria
Banco Dados Buffer Registro Buffer Tela Usuário
O comando for each disponibiliza os dados, a cada interação do bloco lê um registro e o copia para o buffer de registro.
O comando display mostra e copia os dados do buffer de registro para o buffer de tela.
Este bloco, onde modalid é o nome da tabela do banco de dados, lê todos os registros pelo índice primário e mostra na tela quantos forem possíveis por vez. Os campos são mostrados na ordem definida no dicionário de dados.
Um procedimento não pode manipular dados de um banco de dados sem que eles tenham sido movidos para o buffer de memória.
O usuário não consegue interagir com os dados antes que eles tenham sido trazidos ao buffer de tela.
* Buffer de Registro
Para cada uma das tabelas existentes no banco de dados, o PROGRESS disponibiliza um área de buffer de registro. Ou seja cada tabela da base de dados tem um seu último registro lido em memória.
Observe que apenas um registro por vez de cada tabela estará disponível para seu trabalho. Se for necessário trabalhar simultaneamente com vários registros de uma tabel deveremos utilizar buffers auxiliares.
* Buffer de Tela
São buffers abstratos que armazenam informações de input/output (entrada/saída) com o usuário. A entrada e/ou saída de dados podem acontecer através de vídeo, impressora, teclado, mouse ou qualquer outro dispositivo de comunicação com o usuário.
6.2.Cláusula WITH
Nomeia um frame para que ele possa ser utilizado em qualquer parte do programa. Após o comando WITH pode ser informada as características do frame.
6.3.Opção COLUMN
25
Noções Básicas em Progress Caracter
É a formatação da tela de saída, os registros são mostrados em um arranjo uniforme, formatados em colunas e alinhados pelo ( : ) do label.
Exemplos:for each modalid no-lock: display modalid with 1 column.end.
for each modalid no-lock: display modalid with 2 column.end.
6.4.Cláusula WHERE / OF
WHERE
É utilizada para especificar o critério de seleção de registros nos comandos de leitura. Na comparação de campos do tipo caracter, o PROGRESS não distingue maiúsculas das minúsculas.
Exemplo:for each modalid where modalid.in-tipo-pessoa = “f” no-lock: display modalid.cd-modalidade modalid.ds-modalidade with 1 column.end.
OF
É uma forma abreviada de especificar o comando WHERE nas declarações de leitura. Para utilizar é necessário que os campos envolvidos devem ser índice único em pelo menos uma das tabelas; os campos em comum dever ter o mesmo nome e tipo de variável.
Exemplo:
for each modalid no-lock: for each pla-sau of modalid no-lock: display pla-sau.cd-modalidade modalid.ds-modalidade pla-sau.cd-plano pla-sau.nm-plano with frame f-plano. down with frame f-plano. end.
end.
6.5.Declaração FIND
26
Noções Básicas em Progress Caracter
Executa a leitura de um registro específico da tabela.
Exemplos:find first modalid no-lock. display modalid.
Retorna o primeiro registro da tabela.
find last modalid no-lock.display modalid.
Retorna o último registro da tabela.
find next modalid no-lock.display modalid.
Retorna o próximo registro após a última leitura.
find prev modalid no-lock.display modalid.
Retorna o registro anterior após a última leitura.
find modalid where modalid.cd-modalidade = 01 no-lock.display modalid.
Retorna o registro da modalidade 01.
Se não existir registros cadastrados ou a condição de seleção localizar mais de um registro, então a busca falha.
Exemplo:find modalid where modalid.cd-modalidade = 01 no-lock no-error.if avail modalidthen display modalid.else display “Modalidade não cadastrada”.
Retorna o registro da modalidade 01 ou a informação que o registro não esta cadastrado.
6.6.Cláusula EXCEPT
Possibilita a consulta(DISPLAY) ou atualização(UPDATE) de um registro de uma determinada tabela, excluindo os campos relacionados no comando EXCEPT .
Exemplo:for each modalid no-lock: display modalid except modalid.ds-observacao with frame f-modalid.end.
6.7.Cláusula NO-ERROR / AVAILABLE
Utilizada na leitura de um registro único para que a condição do erro possa ser testada em tempo de programação. A condição de erro pode ser testada pelo comando AVAILABLE.
27
Noções Básicas em Progress Caracter
Condições:AVAILABLE (verdadeiro)NOT AVAILABLE (falso)
Exemplo: find modalid where modalid.cd-modalidade = 01 no-lock no-error. if available modalid then display modalid. else message “Modalidade não Cadastrada” view-as alert-box title “ Atencao !!! “.
6.8.Cláusula BY
Permite efetuar a classificação na leitura de registros, somente pode ser utilizada por comandos com capacidade de ler vários registros.
Exemplo:/* FONTE - prog06-01.p */for each ti-pl-sa where ti-pl-sa.cd-modalidade = 1 no-lock
by ti-pl-sa.cd-plano by ti-pl-sa.cd-tipo-plano:
disp ti-pl-sa.cd-plano ti-pl-sa.cd-tipo-plano with down frame f-tipo-plano.down with frame f-tipo-plano.
end.
6.9.Cláusula USE-INDEX
O PROGRESS utiliza o índice primário definido para a tabela ou aquele que tiver maior performance para o critério de seleção definido. A cláusula USE-INDEX permite determinar o índice que deverá ser utilizado na leitura dos registros.
Exemplo:
for each modalid use-index modalid2 no-lock:
disp modalid.cd-modalidade modalid.ds-modalidade modalid.in-tipo-pessoa with frame f-modalid. down with frame f-modalid.end.
6.10. Cláusula BEGINS
Comando que permite recuperar strings que começam com determinado string, não diferencia maiúsculo de minúsculo.
Exemplo:define variable ds-modalidade-aux
28
Noções Básicas em Progress Caracter
as character label “Descricao”.
repeat: update ds-modalidade-aux with side-labels.
for each modalid where modalid.ds-modalidade begins ds-modalidade-aux no-lock:
display modalid.cd-modalidade modalid.ds-modalidade
with frame f-modalidade. down with frame f-modalidade.end.
end.
6.11. Cláusula MATCHES
Comando que permite recuperar strings onde somente parte da string foi informada.
Exemplo:for each modalid where modalid.ds-modalidade matches (“*basico*”) no-lock:
display modalid.cd-modalidade modalid.ds-modalidade
with down frame f-plano. down with frame f-plano.
end.
6.12. BUFFERS
O PROGRESS trabalha com um buffer de registro por tabela do banco de dados, porém podemos trabalhar com mais de um registro ativo por vez, definindo buffers de trabalho.
for each
primeiro buffer
for each segundo buffer
Banco dados
O buffer de trabalho se comporta da mesma forma que buffers de registro. Sua diferença é que ela fica armazenado em um arquivo temporário do sistema existente somente em tempo de execução.
29
b-modalid
modalid
Noções Básicas em Progress Caracter
Exemplo:/* FONTE - prog06-02.p */define buffer b-usuario for usuario.
for each usuario where usuario.cd-modalidade = 01 and usuario.nr-proposta = 01
no-lock:
find b-usuario where b-usuario.cd-modalidade = usuario.cd-modalidade and b-usuario.nr-proposta = usuario.nr-proposta and b-usuario.cd-usuario = usuario.cd-usuario
no-lock no-error. if not available b-usuario then next.
display usuario.cd-usuario usuario.nm-usuario format "x(25)"
usuario.cd-titularb-usuario.nm-usuario format "x(25)"with down frame f-usuario.
down with frame f-usuario. end.
6.13. TEMP-TABLE
São tabelas temporárias (gravadas em disco) que podem ser criadas para armazenar dados durante a execução do programa. Elas podem ser compartilhadas e podem ter índices.
Exemplo:/* FONTE - prog06-03.p */define temp-table t-usuario
field cd-usuario like usuario.cd-usuario field nm-usuario like usuario.nm-usuario field cd-titular like usuario.cd-titular field nm-titular like usuario.nm-usuario index t-usuario1 as unique cd-usuario.
define buffer b-usuario for usuario.
for each usuario where usuario.cd-modalidade = 1 and usuario.nr-proposta = 1
no-lock:
30
Noções Básicas em Progress Caracter
find b-usuario where b-usuario.cd-modalidade = usuario.cd-modalidade and b-usuario.nr-proposta = usuario.nr-proposta and b-usuario.cd-usuario = usuario.cd-usuario
no-lock no-error. if not available b-usuario then next.
create t-usuario.assign t-usuario.cd-usuario = usuario.cd-usuario t-usuario.nm-usuario = usuario.nm-usuario
t-usuario.cd-titular = usuario.cd-titular t-usuario.nm-titular = b-usuario.nm-usuario.
end.
for each t-usuario: disp t-usuario.cd-usuario
t-usuario.nm-usuario format "x(25)" t-usuario.cd-titular t-usuario.nm-titular format "x(25)"
with down frame f-t-usuario. down with frame f-t-usuario.end.
7. ALOCANDO OS REGISTROS
7.1.Tipos de Bloqueio
NO-LOCK
Acesso para leitura.
SHARED-LOCK
Acesso para leitura, permitindo alteração.
EXCLUSIVE-LOCK
Acesso para alteração.
31
Noções Básicas em Progress Caracter
8. CRIANDO OS REGISTROS
8.1.Declaração PROMPT-FOR
O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela.
Campo da Tabela
Não faz nenhuma alteração no banco de dados, pois interage apenas com a tela.
Exemplo:prompt-for modalid.tipoclin.cd-tipo-clinica.
Variável
Recebe a entrada mantendo-a na tela.
Exemplo:def var cd-tipo-clinica-aux like tipoclin.cd-tipo-clinica no-undo.
prompt-for cd-tipo-clinica-aux.
8.2.Declaração FIND
Após a entrada de um campo ou variável deve-se executar a leitura na tabela para localizar ou não o registro. Caso exista o registro cadastrado, enviar mensagem de “Dados já Cadastrados”, caso contrário pode-se seguir a inclusão dando entrada dos demais campos da tabela.
Exemplo: find tipoclin where tipoclin.cd-tipo-clin = input frame f-tipoclin tipoclin.cd-tipo-clin no-lock no-error. if available tipoclin then do: display tipoclin with frame f-tipoclin. message “Dados já cadastrados” view-as alert-box title “Atencao !!! “. end. else do: prompt-for tipoclin.ds-tipo-clinica with frame f-tipoclin. end.
8.3.Declaração CREATE
Após a entrada de todos os campos da tabela podemos executar o comando de CREATE, criando o registro na tabela. O referido comando cria um registro vazio no buffer de registro, na memória, onde o valor dos campos será inicializado pelo PROGRESS.
32
Noções Básicas em Progress Caracter
Exemplo: create tipoclin.
8.4.Declaração ASSIGN
Após a entrada dos campos devemos atribuir o valor da entrada para os campos.
Exemplo: create tipoclin. assign tipoclin.cd-tipo-clinica = input frame f-tipoclin tipoclin.cd-tipo-clinica.
8.5.Declaração INPUT
Para atribuir o valor da entrada para o campo devemos recuperar o valor da tela referenciando o frame.
Para campos de tipo caracter devemos utilizar o comando CAPS junto ao comando input para gravar o conteúdo em letras maiúsculas.
Exemplo: assign tipoclin.ds-tipo-clinica = caps(input frame f-tipoclin tipoclin.ds-tipo-clinica).
8.6.Declaração UPDATE
A declaração UPDATE executa os comandos de display + prompt-for + assign permitindo com isso mostrar o conteúdo, dar entrada e atribuir o valor de entrada para o campo. Pode ser utilizado para inclusão ou alteração do registro. Para a inclusão será mostrado o initial do campo (valor inicial do campo definido no banco) para a alteração será mostrado o conteúdo gravado para o campo.
Exemplos: Inclusão registro na tabela de modalidades.
create modalid. update modalid.
Alteração do campo descrição da modalidade para a modalidade código 01. find modalid where modalid.cd-modalidade = 01 exclusive-lock no-error. if avail modalid then update modalid.ds-modalidade.
8.7.Declaração REPEAT
Bloco de repetição dos comandos internos do bloco.
33
Noções Básicas em Progress Caracter
Exemplo: Incluindo vários registros na tabela tipoclin (Tipo de Clinica) /* FONTE - prog08-01.p */
def frame f-tipoclintipoclin.cd-tipo-clinica colon 30 skip(1)tipoclin.ds-tipo-clinica colon 30 skip(1)with side-labels 1 down row 9 no-box overlay.
repeat:prompt-for tipoclin.cd-tipo-clinica with frame f-tipoclin.
find tipoclin where tipoclin.cd-tipo-clin = input frame f-tipoclin tipoclin.cd-tipo-clin
no-lock no-error.if available tipoclinthen do:
display tipoclin.ds-tipo-clinica with frame f-tipoclin. message "Dados ja cadastrados"
view-as alert-box title "Atencao !!! ". end.
else do: prompt-for tipoclin.ds-tipo-clinica with frame f-tipoclin.
create tipoclin. assign tipoclin.cd-tipo-clinica
= input frame f-tipoclin tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica = caps(input frame f-tipoclin tipoclin.ds-tipo-clinica) tipoclin.dt-atualizacao = today tipoclin.cd-userid = userid("mgadm").
message "Dados Incluidos" view-as alert-box title " Atencao !!! ". end.
end.
Exemplo:
34
INSERT
UPDATE
SET
DELETE CREATE DISPLAYPROMPT-FOR
ASSIGN FIND FOR EACH RELEASE
Noções Básicas em Progress Caracter
9. MODIFICANDO OS REGISTROS
9.1.Declaração PROMPT-FOR
O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela.
Campo da Tabela
Não faz nenhuma alteração no banco de dados, pois interage apenas com a tela.
Exemplo:prompt-for tipoclin.cd-tipo-clinica.
Variável
Recebe a entrada mantendo-a na tela.
Exemplo:def var cd-tipo-clinica-aux like tipoclin.cd-tipo-clinica no-undo.
prompt-for cd-tipo-clinica-aux.
9.2.Declaração FIND
Após a entrada de um campo ou variável deve-se executar a leitura na tabela para localizar ou não o registro. Caso não exista o registro cadastrado, enviar mensagem de “Dados nao Cadastrados”, caso contrário pode-se seguir a alteração dando entrada dos demais campos da tabela.
Exemplo: find tipoclin where tipoclin.cd-tipo-clin = input frame f-tipoclin tipoclin.cd-tipo-clin exclusive-lock no-error. if not available tipoclin then do:
message “Dados não cadastrados” view-as alert-box title “Atencao !!! “. end. else do:
display tipoclin.ds-tipo-clinica with frame f-tipoclin. prompt-for tipoclin.ds-tipo-clinica with frame f-tipoclin.
end.
9.3.Declaração ASSIGN
Após a entrada dos campos devemos atribuir o valor da entrada para os campos.
Exemplo:assign tipoclin.ds-tipo-clinica = caps(input frame f-tipoclin tipoclin.ds-tipo-clinica).
35
Noções Básicas em Progress Caracter
9.4.Declaração INPUT
Para atribuir o valor da entrada para o campo devemos recuperar o valor da tela referenciando o frame.
Para campos de tipo caracter devemos utilizar o comando CAPS junto ao comando input para gravar o conteúdo em letras maiúsculas.
Exemplo: assign tipoclin.ds-tipo-clinica = caps(input frame f-tipoclin tipoclin.ds-tipo-clinica).
9.5.Declaração UPDATE
A declaração UPDATE executa os comandos de display + prompt-for + assign permitindo com isso mostrar o conteúdo, dar entrada e atribuir o valor de entrada para o campo. Pode ser utilizado para inclusão ou alteração do registro. Para a inclusão será mostrado o initial do campo (valor inicial do campo definido no banco) para a alteração será mostrado o conteúdo gravado para o campo.
Exemplos: Inclusão registro na tabela de modalidades.
create modalid. update modalid.
Alteração do campo descrição da modalidade para a modalidade código 01. find modalid where modalid.cd-modalidade = 01 exclusive-lock no-error. if avail modalid then update modalid.ds-modalidade.
9.6.Declaração REPEAT
Bloco de repetição dos comandos internos do bloco.
Exemplo: Alterando vários registros na tabela tipoclin (Tipo de Clinica) /* FONTE - prog09-01.p */
def frame f-tipoclintipoclin.cd-tipo-clinica colon 30 skip(1)tipoclin.ds-tipo-clinica colon 30 skip(1)with side-labels 1 down row 9 overlay.
repeat:prompt-for tipoclin.cd-tipo-clinica with frame f-tipoclin.
find tipoclin where tipoclin.cd-tipo-clin= input frame f-tipoclin tipoclin.cd-tipo-clin
exclusive-lock no-error.if not available tipoclinthen do:
36
Noções Básicas em Progress Caracter
message "Dados nao cadastrado" view-as alert-box title "Atencao !!!".
end.else do:
display tipoclin.ds-tipo-clinica with frame f-tipoclin.
prompt-for tipoclin.ds-tipo-clinica with frame f-tipoclin.
assign tipoclin.ds-tipo-clinica= caps(input frame f-tipoclin tipoclin.ds-tipo-clinica) tipoclin.dt-atualizacao= today tipoclin.cd-userid= userid("mgadm").
message "Dados Alterados" view-as alert-box title "Atencao !!! ".
end.end.
10. ELIMINADO OS REGISTROS
10.1. Declaração PROMPT-FOR
O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela.
Campo da TabelaNão faz nenhuma alteração no banco de dados, pois interage apenas com a tela.
Exemplo: prompt-for tipoclin.cd-tipo-clinica.
VariávelRecebe a entrada mantendo-a na tela.
Exemplo: def var cd-tipo-clinica-aux like tipoclin.cd-tipo-clinica no-undo.
prompt-for cd-tipo-clinica-aux.
10.2. Declaração FIND
Após a entrada de um campo ou variável deve-se executar a leitura na tabela para localizar ou não o registro. Caso não exista o registro cadastrado, enviar mensagem de “Dados nao Cadastrados”, caso contrário pode-se seguir a exclusão com mensagem de confirmação.
Exemplo: find tipoclin where tipoclin.cd-tipo-clin = input frame f-tipoclin tipoclin.cd-tipo-clin exclusive-lock no-error. if not available tipoclin then do:
message “Dados não cadastrados” view-as alert-box title “Atencao !!! “.
37
Noções Básicas em Progress Caracter
end. else do:
display tipoclin.ds-tipo-clinica with frame f-tipoclin. message “Confirma Exclusao” update lg-confirma.
if lg-confirma then do: delete tipoclin. message “Dados Eliminados” view-as alert-box title “ Atencao !!! “. end.
end.
10.3. Declaração DELETE
Permite excluir um registro do banco de dados.
Exemplo: find tipoclin where tipoclin.cd-tipo-clinica = 01 exclusive-lock no-error. if available tipoclin then do: delete tipoclin. message “Dados Eliminados” view-as alert-box title “ Atencao !!! “. end. else message “Tipo de Clinica não cadastrado” view-as alert-box title “ Atencao !!! “.
11. TRANSAÇÃO
Transação é uma unidade de trabalho completa, é uma interação do bloco mais externo que contiver declarações que alterem diretamente o banco de dados. Ou seja, o bloco deve ter comando que alterem o banco de dados ou leituras de registros com o opção EXCLUSIVE-LOCK.
Exemplo:repeat:
create tipoclin. update tipoclin. end.
No exemplo acima cada interação do bloco REPEAT é uma transação.
do transaction: repeat: create tipoclin. update tipoclin. end. end.
38
Noções Básicas em Progress Caracter
No exemplo acima a inclusão será para todos os tipos de clinicas ou nenhum.
12. GERANDO RELATÓRIO
O PROGRESS tem como default (padrão) direcionar a saída de um procedimento para o terminal, mas pode-se manipular a saída para impressora, arquivo ou para o terminal.
12.1. Redirecionando a Saída
Declaração OUTPUT TO
Manipula a saída de um procedimento.
Declaração OUTPUT TO TERMINAL.
Saída direcionada para o terminal.
Exemplo:output to terminal.for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade.
39
Noções Básicas em Progress Caracter
end.
Declaração OUTPUT TO spool/modalid.lst.
Saída direcionada para o um determinado diretório com o referido nome de arquivo.
Exemplo:/* FONTE - prog12-01.p */output to spool/modalid.lst.
for each modalid no-lock:display modalid.cd-modalidade
modalid.ds-modalidade.end.
Declaração OUTPUT TO PRINTER
Saída direcionada para a impressora.
Exemplo:output to printer.for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade.end.
Declaração OUTPUT CLOSE
Encerra um direcionamento de saída, voltando para o default (padrão) terminal. Deve ser usado quando for manipulada a saída.
Exemplo:output to spool/modalid.lst.for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade.end.
output close. display “Final do programa”.
Cláusula APPEND
Acompanha o comando OUTPUT TO, porém não deixa limpar os dados do arquivo.
Exemplo:/* FONTE - prog12-02 */output to spool/modalid.lst.
for each modalid no-lock:
40
Noções Básicas em Progress Caracter
display modalid.cd-modalidade modalid.ds-modalidade.
end.output close.
output to spool/modalid.lst append.for each modalid no-lock:
display modalid.cd-modalidade modalid.ds-modalidade.
end.output close.
PAGE-SIZE
Define o número de linhas do relatório.
PAGE
Força a quebra de página.
12.2. Múltiplos Canais de Saída
Uma vez redirecionada a saída, a mesma permanece assim até que o procedimento termine, seja encontrada uma declaração OUTPUT CLOSE ou outra declaração OUTPUT TO para outra saída.
STREAM
É o método através do qual o PROGRESS permite a utilização de vários canais de saída. Podem ser utilizados até 5 canais, para trabalhar com STREAM precisamos: definir o canal, abrir o canal através do comando OUTPUT TO.
Exemplo: /* FONTE - prog12-03 */
define stream s-relatorio.define stream s-erros.
define frame f-relatorioti-pl-sa.cd-modalidade column-label "Cod"modalid.ds-modalidade column-label "Modalidade"ti-pl-sa.cd-plano column-label "Cod"pla-sau.nm-plano-reduz column-label "Plano"ti-pl-sa.cd-tipo-plano column-label "Cod"ti-pl-sa.nm-tipo-plano-reduz column-label "Tipo Plano"with down.
define frame f-erros
ti-pl-sa.cd-modalidade column-label "Cod"modalid.ds-modalidade column-label "Modalidade"ti-pl-sa.cd-plano column-label "Cod"pla-sau.nm-plano-reduz column-label "Plano"ti-pl-sa.cd-tipo-plano column-label "Cod"ti-pl-sa.nm-tipo-plano-reduz column-label "Tipo Plano"with down.
41
Noções Básicas em Progress Caracter
output stream s-relatorio to spool/ti-pl-sa.lst.output stream s-erros to spool/ti-pl-sa.err.
for each ti-pl-sa no-lock:display stream s-relatorio
ti-pl-sa.cd-modalidade with frame f-relatorio.
find modalid where modalid.cd-modalidade = ti-pl-sa.cd-modalidadeno-lock no-error.
if avail modalidthen display stream s-relatorio
modalid.ds-modalidade with frame f-relatorio.
else do: display stream s-erros ti-pl-sa.cd-modalidade "ERRO" @ modalid.ds-modalidade with frame f-erros. down stream s-erros.
end.
display stream s-relatorio ti-pl-sa.cd-plano with frame f-relatorio.
find pla-sau where pla-sau.cd-modalidade = ti-pl-sa.cd-modalidade
and pla-sau.cd-plano = ti-pl-sa.cd-plano no-lock no-error.
if avail pla-sauthen display stream s-relatorio
pla-sau.nm-plano-reduz with frame f-relatorio.
else do: display stream s-erros ti-pl-sa.cd-plano
"ERRO" @ pla-sau.nm-plano-reduz with frame f-erros.
down stream s-erros. end.
display stream s-relatorio
ti-pl-sa.cd-tipo-plano ti-pl-sa.nm-tipo-plano-reduz with frame f-relatorio.
down stream s-relatorio with frame f-relatorio.end.
output stream s-relatorio close.output stream s-erros close.
12.3. Controles de Quebra
A cláusula BREAK BY deve ser utilizada para definir a categoria das quebras.
Controle de Grupo
42
Noções Básicas em Progress Caracter
As seguintes funções podem ser utilizadas para controle das quebras:
FIRST-OF - Primeiro RegistroLAST-OF - Último Registro
Exemplo:/* FONTE - prog12-04.p */def var tt-usuario as int format "99999" no-undo.
for each usuario where usuario.cd-modalidade = 1 and usuario.nr-proposta = 1 no-lock break by usuario.cd-grau-parentesco:
if first-of(usuario.cd-grau-parentesco) then display usuario.cd-grau-parentesco column-label "Grau"
with frame f-usuario.
assign tt-usuario = tt-usuario + 1.
disp usuario.cd-usuario usuario.nm-usuario with down with frame f-usuario.
if last-of(usuario.cd-grau-parentesco) then do:
disp tt-usuario column-label "Total" with frame f-usuario. assign tt-usuario = 0. end.
down with frame f-usuario. end.
12.4. Cabeçalhos e Rodapés
FORM HEADER
Define o cabeçalho e o rodapé de um frame, onde contenham uma data, um título ou número da página.
PAGE-BOTTON
É utilizado na definição do frame para o rodapé.
Exemplo:def var ds-rodape as char format “x(80)” initial “” no-undo.
assign ds-rodape = "DZset SOLUCOES & SISTEMAS" + " - " + "ESTRUTURA PRODUTO" + " - " + “Prog1 – Versao 1” ds-rodape = fill("-", 80 - length(ds-rodape)) + ds-rodape.
form header ds-rodape format "x(80)" with no-labels no-box page-bottom frame f-rodape.
43
Noções Básicas em Progress Caracter
view frame f-rodape.
Este frame somente será ativado com o comando VIEW.
PAGE-TOP
É utilizado na definição do frame para o cabeçalho.
Exemplo:form header fill("-", 80) format "x(80)" skip “Dzset” at 01 "Listagem de Modalidade" at 36 "Folha:" at 71 page-number at 77 format ">>>9" skip fill("-", 60) format "x(60)" today "-" string(time, "HH:MM:SS") skip(1) with no-labels width 80 no-box page-top frame f-cabecalho.
view frame f-cabecalho.
Este frame somente será ativado com o comando VIEW.
PAGE-SIZE
Define o número de linhas do relatório.
PAGE-NUMBER
Retorna o número da página corrente do relatório.
13. ENTRADA E SAÍDA DE DADOS
Importando Dados
Declaração INPUT FROM
Exemplo:/* FONTE - prog13-01.p */def var c-dados as char format "x(61)" no-undo.def var cd-modalidade-aux like usuario.cd-modalidade no-undo.def var nr-ter-adesao-aux like usuario.nr-ter-adesao no-undo.def var cd-usuario-aux like usuario.cd-usuario no-undo.def var nm-usuario-aux like usuario.nm-usuario no-undo.def var dt-nascimento-aux like usuario.dt-nascimento no-undo.
input from spool/benef.txt.
repeat:import unformatted c-dados.
assign cd-modalidade-aux = int(substring(c-dados,1,2))
44
Noções Básicas em Progress Caracter
nr-ter-adesao-aux = int(substring(c-dados,3,6)) cd-usuario-aux = int(substring(c-dados,9,5))
nm-usuario-aux = substring(c-dados,14,40). assign dt-nascimento-aux = date(int(substring(c-dados,56,2)), int(substring(c-dados,54,2)), int(substring(c-dados,58,4))) no-error.
if error-status:error then do: message "Data de Nascimento Invalida" "Mod" cd-modalidade-aux skip "Termo" nr-ter-adesao-aux skip "Benef" cd-usuario-aux skip "Data Nascimento" dt-nascimento-aux view-as alert-box title " Atencao !!! ". undo,retry. end.
if nm-usuario-aux = "" then do: message "Nome Beneficiario nao foi informado"
"Mod" cd-modalidade-aux skip "Termo" nr-ter-adesao-aux skip "Benef" cd-usuario-aux skip "Nome" nm-usuario-aux view-as alert-box title " Atencao !!! ". undo,retry. end. find first usuario where usuario.cd-modalidade = cd-modalidade-aux and usuario.nr-ter-adesao = nr-ter-adesao-aux and usuario.cd-usuario = cd-usuario-aux exclusive-lock no-error. if available usuario then do: assign usuario.nm-usuario = nm-usuario-aux usuario.dt-nascimento = dt-nascimento-aux. end. else do: message "Beneficiario nao Localizado" skip
45
Noções Básicas em Progress Caracter
"Mod" cd-modalidade-aux skip "Termo" nr-ter-adesao-aux skip "Benef" cd-usuario-aux view-as alert-box title " Atencao !!! ". undo,retry. end.
end.
Exportando Dados
PUT
Exemplo:/* FONTE - prog13-02.p */def var cd-modalidade-aux like usuario.cd-modalidade no-undo.def var nr-ter-adesao-aux like usuario.nr-ter-adesao no-undo.
update cd-modalidade-aux nr-ter-adesao-aux
with 1 column frame f-entrada.
output to spool/benef.txt.
for each usuario where usuario.cd-modalidade = cd-modalidade-aux and usuario.nr-ter-adesao = nr-ter-adesao-aux
no-lock: put usuario.cd-modalidade format "99"
usuario.nr-ter-adesao format "999999" usuario.cd-usuario format "99999" usuario.nm-usuario format "x(40)" usuario.dt-nascimento format "99999999"skip.
end.output close.
/* Arquivo Gerado */
0100140000001CARLOS A C CHINEN 15/12/19630100140000002VANIA C M CHINEN 13/10/1972
0100140000003CAIO C MARTINS CHINEN 14/02/1996 0100140000004YURI C MARTINS CHINEN 27/06/1997
14. QUERY / BROWSE / SELECTION-LIST
14.1. Query / Browse
Podemos utilizar um browse após:
46
Noções Básicas em Progress Caracter
Ter definido uma query.Ter definido o browse associado à query.Ter aberto a query.
Exemplo: /* FONTE – prog14-01.p */
define query q-usuario for usuario.
define browse b-usuario query q-usuariodisp usuario.cd-usuario
usuario.nm-usuario usuario.dt-nascimento with 5 down.
define frame f-usuario b-usuario at row 1 col 1
"ENTER-Grau F4-Retorna" at row 10 col 2 with title " BENEFICIARIOS "
at col 1 row 7.
on end-error of browse b-usuariodo: hide frame f-usuario no-pause.end.
on return of browse b-usuariodo: find gra-par where gra-par.cd-grau-parentesco
= usuario.cd-grau-parentesco no-lock no-error.
message string(usuario.cd-grau-parentesco,"99") gra-par.ds-grau-parentesco view-as alert-box title " GRAU DE PARENTESCO ".
end.
open query q-usuario for each usuario where usuario.cd-modalidade = 01
and usuario.nr-proposta = 01 no-lock.
update b-usuario with frame f-usuario.
14.2. Selection-List
Apresenta ao usuário uma lista de opções.
Exemplo: /* FONTE – prog14-02.p */
def var lista-tipo-rela as char no-undo.def var in-tipo-rela-aux as integer format "99" no-undo.def var ds-tipo-rela-aux as char format "x(09)" no-undo.
def var mostra-tipo-rela as char view-as selection-list inner-chars 13 inner-lines 02 no-undo.
47
Noções Básicas em Progress Caracter
def frame f-tipo-rela mostra-tipo-rela label "Tipo de Relatorio"
with row 13 column 14 overlay title " PARAMETRO ".
assign lista-tipo-rela = "01 RESUMIDO," + "02 DETALHADO"
in-tipo-rela-aux = 01 ds-tipo-rela-aux = "RESUMIDO".
do with frame f-tipo-rela:
pause(0).assign mostra-tipo-rela = string(in-tipo-rela-aux,"99")
+ " " + ds-tipo-rela-aux mostra-tipo-rela:list-items
= lista-tipo-rela.
update mostra-tipo-rela go-on("return").hide frame f-tipo-rela no-pause.
assign in-tipo-rela-aux = int(substring(mostra-tipo-rela,01,02)) ds-tipo-rela-aux = substring(mostra-tipo-rela,04,09).
end.
if in-tipo-rela-aux = 01then do:
message "Opcao para Relatorio Resumido"view-as alert-box title " Atencao !!! ".
end.else do:
message "Opcao para Relatorio Detalhado" view-as alert-box title " Atencao !!! ".
end.
Elemento INNER-CHARS
Depois da palavra chave INNER-CHARS especifique o número de caracteres que devem ser mostrados na largura da lista. Tipicamente, este valor é igual ao tamanho do maior elemento + 1.
Elemento INNER-LINES
Depois da palavra chave INNER-LINES especifique a quantidade de itens que quer que apareçam na lista.
15. EXERCÍCIOS
1 – Escreva um programa que mostre o código, descrição de todas as modalidades do tipo pessoa jurídica.
2 – Modifique o programa anterior de modo que mostre todas as modalidade ignorando a modalidade de código 01.
48
Noções Básicas em Progress Caracter
3 – Escreva um programa que solicite o código da modalidade e mostre a descrição e o tipo de pessoa.
4 – Escreva um programa que mostre a última modalidade do cadastro.
5 – Escreva um programa que mostre todos os planos de todas as modalidades, com os campos código da modalidade e descrição e código do plano e nome.
6 – Escreva um programa que mostre todas as modalidades em ordem do campo descrição.
7 – Escreva um programa que receba o código da modalidade e altera a descrição em um laço de repetição.
8 – Escreva um programa de adicione tipos de clinica em um banco de dados.
9 – Escreva um programa que mostre o total de usuários na modalidade 02 proposta 01.
10 – Escreva um programa com saída para arquivo que mostre as propostas de um determinado contratante. Listar os campos: contrat.cd-contratante contrat.nm-contratante
propost.cd-modalidade propost.nr-proposta propost.nr-ter-adesao ter-ade.mm-ult-fat ter-ade.aa-ult-fat.
11 – Escreva um programa que utilize dois arquivos de saída, um para o relatório e outro para os erros que mostre os beneficiários responsáveis de uma determinado proposta.Listar os campos: usuario.cd-modalidade usuario.nr-proposta usuario.nr-ter-adesao usuario.cd-usuario usuario.nm-usuario usuario.dt-nascimento.
12 – Escreva um programa para importação dos dados do cadastro de usuários com movimento de alteração para os campos do endereço: usuario.en-ruausuario.en-cidadeusuario.en.bairrousuario.en-ufusuario.en-cep
49
Noções Básicas em Progress Caracter
13 – Escreva um programa para exportação dos dados do cadastro de unidades com os seguintes campos:unimed.cd-unimedunimed.nm-unimedunimed.cd-tipo-unimedunimed.lg-repassar.
14 – Escreva um browse que mostre os usuários da modalidade 02 e proposta 02 com as seguintes PFs: F4 – Retorna F6 – Carteiras mostrando os campos: car-ide.cd-carteira-interira car-ide.nr-carteira
car-ide.dt-validade car-ide.cd-sit-carteira car-ide.dt-cancelamento O evento para F6 (put)
15 - Escreva um browse que mostre as notas de serviço (notaserv) de um termo de adesão com os seguintes campos da nota:notaserv.mm-referencianotaserv.aa-referencianotaserv.nr-faturanotaserv.dt-vencimentonotaserv.vl-totale com as seguintes PFs:
F4 – RetornaF8 - Eventos da Nota (fatueven) mostrando os campos: fatueven.cd-evento
evenfatu.ds-evento(fatueven) – entidade “FT” fatueven.qt-evento
fatueven.vl-evento fatueven.lg-deb-cred.
O evento para F8 (clear)
Exemplo Completo de Manutenção de uma Tabela padrão Dzset
A Dzset reserva o direito de a qualquer momento alterar o padrão ou includes utilizados nestes exemplos. Caso o cliente utilizar algum destes includes será de sua inteira responsabilidade.
/* FONTE – dz0110a .p */
/******************************************************************************* Programa .....: dz0110a.p ** Data .........: 11 de Setembro de 1999 ** Sistema ......: AC - Automacao de Consultorio ** Empresa ......: DZSET SOLUCOES E SISTEMAS ** Cliente ......: COOPERATIVAS MEDICAS *
50
Noções Básicas em Progress Caracter
* Programador ..: Rosalva Lorandi ** Objetivo .....: Manutencao do Tipo de Clinica **-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/
/* ------------------------------------------------------------- LIMPEZA --- */hide all no-pause.
/* ----------------------------------------------------------- PERMISSAO --- */{hdp/hd9000.i "dz0110a"}
/* ------------------------------------------------------ DEF. VARIAVEIS --- */def var c-opcao as char no-undo.
/* --------------------------------------------------------------- REGUA --- */def var tb-regua as char extent 9 initial ["Proximo", "Anterior", "Codigo", "Inclui", "Modifica", "Elimina", "Lista", "Relatorio", "Fim"] no-undo.
form tb-regua[1] format "x(7)" tb-regua[2] format "x(8)" tb-regua[3] format "x(6)" tb-regua[4] format "x(6)" tb-regua[5] format "x(8)" tb-regua[6] format "x(7)" tb-regua[7] format "x(5)" tb-regua[8] format "x(9)" tb-regua[9] format "x(3)" with no-labels attr row 21 no-box overlay centered frame f-regua.
/* -------------------------------------------------------------- FRAMES --- */def new shared frame f-tela.{curso/dz0110a.f}
/*------------------------------------------------------------ CABECALHO --- */{hdp/hdvrcab0.i}
/* ---------------------------------------------------------- ATRIBUICAO --- */assign nm-cab-usuario = "" nm-cabecalho = " Tipo de Clinica". c-versao = "D.00.000". nm-tp-prog = "Manutencao". nm-prog = "DZ/0110A".
/* -------------------------------------- LINHA DO RODAPE E DO CABECALHO --- */{hdp/hdrodlin.i}{hdp/hdcablin.i}
/*----------------------------------------------------- ZOOM TIPO CLINICA ---*/def new shared var cd-tipo-clin-z like tipoclin.cd-tipo-clinica no-undo.def new shared var cd-retorno as logical no-undo.
51
Noções Básicas em Progress Caracter
/*---------------------------------------------------------------------------*/repeat on error undo, retry with frame f-tela: pause 0.
/* ------------------------ PARAMETRO PARA LINHAS DO RODAPE/CABECALHO --- */ {hdp/hdtitulo.i 1 1} view frame f-tela.
disp tb-regua with overlay frame f-regua. choose field tb-regua auto-return with frame f-regua. assign c-opcao = frame-value.
case c-opcao: when "Fim" then do: hide all no-pause. leave. end. when "Proximo" or when "Anterior" then do: if c-opcao = "Proximo" then do: find next tipoclin no-lock no-error. if not avail tipoclin then do: bell. message "Busca apos fim do arquivo" view-as alert-box title " Atencao!!! ". undo, retry. end. end. else do: find prev tipoclin no-lock no-error. if not avail tipoclin then do: bell. message "Busca antes do inicio do arquivo" view-as alert-box title " Atencao!!! ". undo, retry. end. end. display tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao with frame f-tela.
end. when "Codigo" then do: clear frame f-tela. assign cd-tipo-clin-z = ?. prompt-for tipoclin.cd-tipo-clinica auto-return help "F5 para Zoom"
52
Noções Básicas em Progress Caracter
{curso/dz0110a.i} if cd-tipo-clin-z <> ? and cd-retorno then disp cd-tipo-clin-z @ tipoclin.cd-tipo-clinica with frame f-tela. cd-retorno = ?. end. find tipoclin where tipoclin.cd-tipo-clinica = input tipoclin.cd-tipo-clinica no-lock no-error. if avail tipoclin then display tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao with frame f-tela. else do: bell. message "Tipo de Clinica nao cadastrado" view-as alert-box title " Atencao !!! ". undo, retry. end. end. when "Inclui" then if search("curso/dz0111a.p") = ? and search("curso/dz0111a.r") = ? then run disp-erro. else do: hide message. run curso/dz0111a.p. end.
when "Modifica" then if search("curso/dz0112a.p") = ? and search("curso/dz0112a.r") = ? then run disp-erro. else do: hide message. run curso/dz0112a.p. end. when "Elimina" then if search("curso/dz0113a.p") = ? and search("curso/dz0113a.r") = ? then run disp-erro. else do: hide message. run curso/dz0113a.p. end. when "Lista" then if search("curso/dz0114a.p") = ? and search("curso/dz0114a.r") = ? then run disp-erro. else do: hide message. run curso/dz0114a.p. end. when "Relatorio"
53
Noções Básicas em Progress Caracter
then do: run curso/dz0115a.p. end. end case.end.
/* ----------------------------------------- DEFINICAO PROCEDURE INTERNA --- */PROCEDURE disp-erro: bell. message "Programa ainda nao disponivel" skip "Faca outra escolha" view-as alert-box title " Atencao!!! ".end procedure.
/* FONTE – dz0110a .f */
form tipoclin.cd-tipo-clinica colon 30 skip(1) tipoclin.ds-tipo-clinica colon 30 skip(1) tipoclin.dt-atualizacao colon 30 with side-labels 1 down row 8 no-box frame f-tela.
/* FONTE – dz0111a .p */
/******************************************************************************* Programa .....: dz0111a.p ** Data .........: 11 de Setembro 2000 ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVAS MEDICAS ** Sistema ......: AC - Automacao de Consultorio ** Programador ..: Rosalva Lorandi ** Objetivo .....: Cadastro de Tipos de Clinicas - Inclusao **-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/
/* ----------------------------------------------------------- FORM TELA --- */define shared frame f-tela.{curso/dz0110a.f}
/* ------------------------------------------------------------------------- */{hdp/hdvrcab1.i}
assign nm-cab-usuario = "" nm-tp-prog = " Inclui" nm-prog = "DZ/0111A" c-versao = "D.00.000".
/* ------------------------------------------------------------------------- */{hdp/hdrodlin.i}{hdp/hdcablin.i}
/*---------------------------------------------------------------------------*/repeat on error undo, retry with frame f-tela: /* ---------------------------------------------------------------------- */ {hdp/hdtitulo.i 1 1}. clear frame f-tela.
54
Noções Básicas em Progress Caracter
prompt-for tipoclin.cd-tipo-clinica auto-return. find tipoclin where tipoclin.cd-tipo-clinica = input tipoclin.cd-tipo-clinica no-lock no-error. if avail tipoclin then do: disp tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao. bell. message "Tipo de Clinica ja cadastrada" view-as alert-box title " Atencao!!!". undo, retry. end. disp today @ tipoclin.dt-atualizacao with frame f-tela.
prompt-for tipoclin.ds-tipo-clinica with frame f-tela.
create tipoclin. assign tipoclin.cd-userid = userid ("mgadm") tipoclin.dt-atualizacao = today tipoclin.cd-tipo-clinica = input tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica = caps(input tipoclin.ds-tipo-clinica).
message "Dados Incluidos" view-as alert-box title " Atencao!!! ".end.clear frame f-tela no-pause.hide message.
/* FONTE – dz0112a. p */
/******************************************************************************* Programa .....: dz0112a.p ** Data .........: 11 de Setembro de 2000 ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVA MEDICA ** Sistema ......: AC - Automacao de Consultorio ** Programador ..: Rosalva Lorandi ** Objetivo .....: Manutencao Cadastro de Tipos de Clinicas - Alteracao **-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/
/*----------------------------------------------------- ZOOM TIPO CLINICA ---*/def new shared var cd-tipo-clin-z like tipoclin.cd-tipo-clinica no-undo.def new shared var cd-retorno as logical no-undo.
/*---------------------------------------------------------------------------*/define shared frame f-tela.{curso/dz0110a.f}
/* ------------------------------------------------------------------------- */{hdp/hdvrcab1.i}
assign nm-cab-usuario = "" nm-tp-prog = "Modifica" nm-prog = "DZ/0112A"
55
Noções Básicas em Progress Caracter
c-versao = "D.00.000".
/* ------------------------------------------------------------------------- */{hdp/hdrodlin.i}{hdp/hdcablin.i}
/*---------------------------------------------------------------------------*/repeat on error undo, retry with frame f-tela:
/* ---------------------------------------------------------------------- */ {hdp/hdtitulo.i 1 1}
clear frame f-tela. assign cd-tipo-clin-z = ?. prompt-for tipoclin.cd-tipo-clinica auto-return help "F5 para Zoom" {curso/dz0110a.i} if cd-tipo-clin-z <> ? and cd-retorno then disp cd-tipo-clin-z @ tipoclin.cd-tipo-clinica with frame f-tela. cd-retorno = ?. end.
find tipoclin where tipoclin.cd-tipo-clinica = input tipoclin.cd-tipo-clinica exclusive-lock no-error. if not avail tipoclin then do: bell. message "Tipo de Clinica nao cadastrada" view-as alert-box title " Atencao!!! ". undo, retry. end. disp tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao with frame f-tela.
update tipoclin.ds-tipo-clinica with frame f-tela.
assign tipoclin.cd-userid = userid ("mgadm") tipoclin.dt-atualizacao = today tipoclin.ds-tipo-clinica = caps(input tipoclin.ds-tipo-clinica).
message "Dados Alterados" view-as alert-box title " Atencao!!! ". clear frame f-tela no-pause.end.clear frame f-tela no-pause.hide message.
/* FONTE – dz0113a .p */
/******************************************************************************* Programa .....: dz0113a.p ** Data .........: 11 de Setembro de 2000 ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVAS MEDICAS ** Sistema ......: AC - Automacao de Consultorio ** Programador ..: Rosalva Lorandi ** Objetivo .....: Cadastro de Tipos de Clinicas - Exclusao *
56
Noções Básicas em Progress Caracter
*-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/
/*-------------------------------------------- DEF VARS ZOOM TIPO CLINICA ---*/def new shared var cd-tipo-clin-z like tipoclin.cd-tipo-clinica no-undo.def new shared var cd-retorno as logical no-undo.
/*--------------------------------------------------- DEF VARS AUXILIARES ---*/def var lg-exclui as log format "Sim/Nao" no-undo.
/*---------------------------------------------------------------------------*/define shared frame f-tela.{curso/dz0110a.f}
/* ------------------------------------------------------------------------- */{hdp/hdvrcab1.i}
assign nm-cab-usuario = "" nm-tp-prog = "Elimina" nm-prog = "DZ/0113A" c-versao = "D.00.000".
/* ------------------------------------------------------------------------- */{hdp/hdrodlin.i}{hdp/hdcablin.i}
/*---------------------------------------------------------------------------*/repeat with frame f-tela:
/* ---------------------------------------------------------------------- */ {hdp/hdtitulo.i 1 1} assign cd-tipo-clin-z = ?. prompt-for tipoclin.cd-tipo-clinica auto-return help "F5 para Zoom" {curso/dz0110a.i} if cd-tipo-clin-z <> ? and cd-retorno then disp cd-tipo-clin-z @ tipoclin.cd-tipo-clinica with frame f-tela. cd-retorno = ?. end.
find tipoclin where tipoclin.cd-tipo-clinica = input tipoclin.cd-tipo-clinica exclusive-lock no-error.
if not avail tipoclin then do: message "Tipo de Clinica nao cadastrado" view-as alert-box title " Atencao!!! ". undo, retry. end.
disp tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao with frame f-tela.
lg-exclui = no. message "Confirma eliminacao? " update lg-exclui.
57
Noções Básicas em Progress Caracter
if lg-exclui then do: delete tipoclin. message "Tipo de Clinica eliminado" view-as alert-box title " Atencao!!! ". end. clear frame f-tela.end.clear frame f-tela no-pause.hide message.
/* FONTE – dz0114a .p */
/******************************************************************************* Programa .....: dz0114a.p ** Data .........: 11 de Stembro de 2000 ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVA MEDICA ** Sistema ......: AC - Automacao de Consultorio ** Programador ..: Rosalva Lorandi ** Objetivo .....: Lista Cadastro de Tipos de Clinicas **-----------------------------------------------------------------------------** VERSAO Data RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/
/*--------------------------------------------------- DEF VARS AUXILIARES ---*/def var cd-clinica-aux like clinicas.cd-clinica no-undo.def var ds-clinica-aux like clinicas.ds-clinica no-undo.def var cd-tipo-clinica-aux like clinicas.cd-tipo-clinica no-undo.def var in-classif as int no-undo.def var tb-opc as char extent 02 init ["1 - Por Codigo ", "2 - Por Nome "] no-undo.
/*------------------------------------------------------ DEF FRAMES FORMS ---*/form tb-opc[1] format "x(15)" skip tb-opc[2] format "x(15)" with overlay no-labels title "Selecao" row 17 column 60 frame f-tbopc.
form space(3) cd-clinica-aux no-label with no-label row 18 column 43 overlay title "Codigo Inicial" frame f-cd-cli.
form ds-clinica-aux no-label with no-label row 18 column 17 overlay title "Nome Inicial" frame f-ds-cli.
form space(4) cd-tipo-clinica-aux no-label with no-label row 18 column 45 overlay title "Tipo Inicial" frame f-tip-cli.
/*---------------------------------------------------- DEF PRE-CABECALHOS ---*/def shared frame f-tela.{curso/dz0110a.f}
/* ------------------------------------------------------------------------- */{hdp/hdvrcab1.i}
58
Noções Básicas em Progress Caracter
assign nm-cab-usuario = "" nm-tp-prog = "Lista". nm-prog = "DZ/0114A". c-versao = "D.00.000".
/* ------------------------------------------------------------------------- */{hdp/hdrodlin.i}{hdp/hdcablin.i}
/*---------------------------------------------------- DEF QUERYS BROWSES ---*/def query zoom-tipoclin for tipoclin.def browse browse-tipoclin query zoom-tipoclin no-lock disp tipoclin.cd-tipo-clin column-label "Tipo de Clinica" tipoclin.ds-tipo-clin column-label "Descricao" with 2 down no-box overlay size 42 by 17.
define frame f-tipoclin browse-tipoclin at row 1 col 1 with no-box overlay no-labels no-underline three-d centered row 3.
on end-error of browse-tipoclin in frame f-tipoclindo: hide frame f-tipoclin no-pause. leave.end.
do on error undo, retry on endkey undo, retry:
/* ---------------------------------------------------------------------- */ {hdp/hdtitulo.i 1 1}. if retry and keyfunction(lastkey) = "end-error" then do: hide frame f-tbopc no-pause. hide frame f-cd-cli no-pause. hide frame f-ds-cli no-pause. hide frame f-tip-cli no-pause. hide frame f-tipoclin no-pause. leave. end.
pause 0. disp tb-opc with frame f-tbopc. choose field tb-opc auto-return with frame f-tbopc. assign in-classif = frame-index. if in-classif = 1 then do: update cd-clinica-aux with frame f-cd-cli. hide frame f-tbopc no-pause. hide frame f-cd-cli.
open query zoom-tipoclin for each tipoclin where tipoclin.cd-tipo-clinica >= cd-clinica-aux no-lock. end. if in-classif = 2 then do:
59
Noções Básicas em Progress Caracter
update ds-clinica-aux with frame f-ds-cli. hide frame f-tbopc no-pause. hide frame f-ds-cli. open query zoom-tipoclin for each tipoclin where tipoclin.ds-tipo-clinica >= ds-clinica-aux no-lock. end. hide frame f-tela no-pause. update browse-tipoclin with frame f-tipoclin.end.
/* FONTE – dz0115a .p */
/******************************************************************************* Programa .....: dz0115a.p ** Data .........: 11 de Stembro de 2000 ** Sistema ......: AC - Automacao de Consultorio ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVAS MEDICAS ** Programador ..: Rosalva Lorandi ** Objetivo .....: Listagem dos Tipos de Clinicas **-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************/hide all no-pause.
/*---------------------------------------------------- DEF PRE-CABECALHOS ---*/{hdp/hdvarrel.i}
espacos = fill(" ",80).nm-cab-usuario = "Listagem dos Tipos de Clinica".nm-prog = "DZ/0115A".c-versao = "D.00.000".
/*--------------------------------------------------- DEF VARS AUXILIARES ---*/def var c-opcao as char no-undo.def var ds-rodape as char format "x(80)" init "" no-undo.def var cd-tipo-clin-ini like tipoclin.cd-tipo-clinica no-undo.def var cd-tipo-clin-fim like tipoclin.cd-tipo-clinica no-undo.def var ds-cabecalho as char format "x(30)" init "" no-undo.def var tb-regua as char extent 4 init [ "Arquivo", "Selecao", "Impressao","Fim" ] no-undo.
/*----------------------------------------------------- ZOOM TIPO CLINICA ---*/def new shared var cd-tipo-clin-z like tipoclin.cd-tipo-clinica no-undo.def new shared var cd-retorno as logical no-undo.
/*------------------------------------------------------ DEF FRAMES FORMS ---*/form tb-regua[1] format "x(7)" space (4) tb-regua[2] format "x(7)" space (4) tb-regua[3] format "x(9)" space (4) tb-regua[4] format "x(3)" with no-labels row 21 frame f-regua no-box centered.
form header fill("-", 80) format "x(80)" skip ds-cabecalho at 01 "Listagem dos Tipos de Clinica" at 33 "Folha:" at 71 page-number at 77 format ">>>9" skip
60
Noções Básicas em Progress Caracter
fill("-", 60) format "x(60)" today "-" string(time, "HH:MM:SS") skip(1) with no-labels no-box page-top frame f-cabecalho.
form cd-tipo-clin-ini label "Tipo de Clinica" colon 18 space(7) cd-tipo-clin-fim no-label header " Inicial Final " skip with overlay row 16 centered side-labels frame f-selecao title "Selecao".
form " Inicial Final" at 14 skip(1) " Tipo de Movimento:" at 14 cd-tipo-clin-ini at 34 cd-tipo-clin-fim at 42 header "*" + fill("-",18) format "x(19)" " Mapa da Selecao " fill("-",18) + "*" format "x(19)" skip with no-labels column 08 width 57 no-box attr-space frame f-capa.
form tipoclin.cd-tipo-clinica column-label "Tipo de Clinica" at 17 tipoclin.ds-tipo-clinica column-label "Descricao " at 36 with overlay width 80 no-box down frame f-dados.
form header ds-rodape format "x(80)" with no-labels no-box page-bottom frame f-rodape.
assign ds-rodape = "DZset SOLUCOES & SISTEMAS" + " - " + "AUTOMACAO DE CONSULTORIO" + " - " + nm-prog + " - " + c-versao ds-rodape = fill("-", 80 - length(ds-rodape)) + ds-rodape.
/*---------------------------------------------------------------------------*/{hdp/hdvararq.i "spool/" "TIPCLIN" "LST"}
assign cd-tipo-clin-ini = 0 cd-tipo-clin-fim = 99.
/* ------------------------------------------------------------------------- */{hdp/hdtitrel.i}.
find first paramecp no-lock no-error.if avail paramecpthen do: find unimed where unimed.cd-unimed = paramecp.cd-unimed no-lock no-error. if avail unimed then ds-cabecalho = unimed.nm-unimed-reduz. end.
repeat on endkey undo,retry: hide message no-pause. hide frame f-selecao no-pause. disp tb-regua with overlay frame f-regua. input clear. choose field tb-regua auto-return with frame f-regua. assign c-opcao = frame-value.
/*--- Quando c-opcao = "Arquivo" ---*/ {hdp/hdpedarq.i}
if c-opcao = "Selecao" then do with frame f-selecao: do on error undo, retry:
61
Noções Básicas em Progress Caracter
assign cd-tipo-clin-z = ?. update cd-tipo-clin-ini auto-return help "F5 para Zoom" {curso/dz0110a.i} if cd-tipo-clin-z <> ? and cd-retorno then disp cd-tipo-clin-z @ cd-tipo-clin-ini with frame f-selecao. cd-retorno = ?. end.
assign cd-tipo-clin-z = ?. update cd-tipo-clin-fim auto-return help "F5 para Zoom" {curso/dz0110a.i} if cd-tipo-clin-z <> ? and cd-retorno then disp cd-tipo-clin-z @ cd-tipo-clin-fim with frame f-selecao. cd-retorno = ?. end.
if cd-tipo-clin-fim < cd-tipo-clin-ini then do: message "Tipo de Clinica Final menor que inicial" view-as alert-box title " Atencao!!! ". undo, retry. end. end. end.
if c-opcao = "Impressao" then do: message "Processando...Aguarde!". {hdp/hdmonarq.i &page-size = 64}
view frame f-cabecalho. view frame f-rodape.
disp cd-tipo-clin-ini cd-tipo-clin-fim with frame f-capa. page.
for each tipoclin where tipoclin.cd-tipo-clinica >= cd-tipo-clin-ini and tipoclin.cd-tipo-clinica <= cd-tipo-clin-fim no-lock:
disp tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica with frame f-dados.
down with frame f-dados. end. /* ---------------------------------------------------------------- */ {hdp/hdclosed.i}. assign c-opcao = "Arquivo". disp tb-regua with frame f-regua. choose field tb-regua auto-return keys c-opcao with frame f-regua. end. if c-opcao = "Fim" then do:
62
Noções Básicas em Progress Caracter
hide all no-pause. leave. end.end.
/* FONTE – dz0110a. i */
editing: cd-retorno = no. readkey. if keyfunction(lastkey) = "get" then run dzp/dz0116a.p. else apply lastkey.
/* FONTE – dz0116a .p */
/******************************************************************************* Programa .....: dz0116a.p ** Data .........: 11 de Setembro de 2000 ** Empresa ......: DZSET SOLUCOES & SISTEMAS ** Cliente ......: COOPERATIVA MEDICA ** Sistema ......: AC - Automacao de Consultorio ** Programador ..: Rosalva Lorandi ** Objetivo .....: Funcao F5 que Lista os Tipos de Clinicas **-----------------------------------------------------------------------------** VERSAO DATA RESPONSAVEL MOTIVO ** D.00.000 11/09/2000 Rosalva Desenvolvimento *******************************************************************************//*--------------------------------------------------- DEF VARS AUXILIARES ---*/def shared var cd-retorno as log no-undo.def shared var cd-tipo-clin-z like tipoclin.cd-tipo-clinica no-undo.def var cd-tipo-clinica-ini like tipoclin.cd-tipo-clinica no-undo.def var ds-tipo-clinica-ini like tipoclin.ds-tipo-clinica no-undo.def var in-classif as int initial 1 no-undo.def var c-versao as char format "x(08)" no-undo.def var nm-prog as char format "x(08)" no-undo.def var tb-classif as char extent 2 init ["1 - Por Codigo ", "2 - Por Descricao"] no-undo.c-versao = "D.00.000".nm-prog = "DZ/0116A".
/*----------------------------------------------------- DEF QUERYS BROWSE ---*/def query zoom-tipoclin for tipoclin.def browse browse-tipoclin query zoom-tipoclin no-lock disp tipoclin.cd-tipo-clin column-label "Codigo" tipoclin.ds-tipo-clin column-label "Descricao" with overlay size 42 by 10.
/*------------------------------------------------------ DEF FRAMES FORMS ---*/def frame f-tipoclin browse-tipoclin at row 1 col 1 with overlay no-labels no-underline three-d title " Tipos de Clinicas - " + nm-prog + " - " + c-versao at col 21 row 6.
form tb-classif[1] format "x(17)" tb-classif[2] format "x(17)" with no-labels column 60 row 17 overlay
63
Noções Básicas em Progress Caracter
frame f-classif title "Classificacao".
form space(06) cd-tipo-clinica-ini with no-labels column 43 row 18 overlay frame f-cod-ini title "Codigo Inicial".
form space(01) ds-tipo-clinica-ini with no-labels column 30 row 18 overlay frame f-des-ini title "Descr. Inicial".
on return of browse-tipoclin in frame f-tipoclindo: assign cd-retorno = yes cd-tipo-clin-z = tipoclin.cd-tipo-clinica. hide frame f-tipoclin no-pause. leave.end.on end-error of browse-tipoclin in frame f-tipoclindo: hide frame f-tipoclin no-pause. leave.end.
/*--------------------------------------------------------------------------*/do on error undo, retry : if retry and keyfunction(lastkey) = "end-error" then do: hide frame f-classif no-pause. hide frame f-cod-ini no-pause. hide frame f-des-ini no-pause. hide frame f-tipoclin no-pause. leave. end. display tb-classif with frame f-classif. choose field tb-classif auto-return with frame f-classif. assign in-classif = frame-index.
case in-classif: when 1 then do: update cd-tipo-clinica-ini with frame f-cod-ini. hide frame f-cod-ini. hide frame f-classif no-pause. find first tipoclin where tipoclin.cd-tipo-clinica >= cd-tipo-clinica-ini no-lock no-error. If not avail tipoclin then do: bell. message "Nada encontrado a partir dos dados informados" view-as alert-box title " Atencao !!! ". return. end. end. when 2 then do: update ds-tipo-clinica-ini with frame f-des-ini. hide frame f-des-ini. hide frame f-classif no-pause. find first tipoclin where tipoclin.ds-tipo-clinica
64
Noções Básicas em Progress Caracter
>= ds-tipo-clinica-ini no-lock no-error. If not avail tipoclin then do: bell. message "Nada encontrado a partir dos dados informados" view-as alert-box title " Atencao !!! ". return. end. end. end case.
case in-classif: when 1 then open query zoom-tipoclin for each tipoclin where tipoclin.cd-tipo-clinica >= cd-tipo-clinica-ini. when 2 then open query zoom-tipoclin for each tipoclin where tipoclin.ds-tipo-clinica >= ds-tipo-clinica-ini. end case.
update browse-tipoclin go-on("return") with frame f-tipoclin.end.hide message no-pause.
Fontes:
dz0110a .p - Manutenção do Tipo de Clinicadz0110a .f - Form da teladz0111a .p - Inclui do Tipo de Clinicadz0112a .p - Modifica do Tipo de Clinicadz0113a .p - Elimina do Tipo de Clinicadz0114a .p - Lista do Tipo de Clinicadz0115a .p - Relatório do Tipo de Clinicadz0110a .i - Incluide Zoom do Tipo de Clinicadz0116a .p - Zoom do Tipo de Clinica
Includes Padronizados:
hd9000.i - Verifica permissão do programa
hdcablin.i - Definição linha do cabeçalhohdrodlin.i - Definição linha do rodapé
hdvrcab0.i - Definição variáveis do cabeçalhohdvrcab1.i - Definição variáveis do cabeçalho
hdtitulo.i - Definição do título do programa
hdvarrel.i - Definição variáveis para relatóriohdvararq.i - Definição variáveis para arquivohdtitrel.i - Definição tela do relatóriohdpedarq.i - Solicita o nome do arquivo de saídahdmonarq.i - Abertura do arquivo de saídahdclosed.i - Fechamento do arquivo de saída
65
Noções Básicas em Progress Caracter 66