curso nocoes basicas progress

81
Apostila Curso Noções Básicas

Upload: yurifranzoni

Post on 09-Aug-2015

382 views

Category:

Documents


72 download

DESCRIPTION

Curso Nocoes Basicas Progress

TRANSCRIPT

Page 1: Curso Nocoes Basicas Progress

ApostilaCurso Noções Básicas

Progress Caracter

Setembro/2002

Page 2: Curso Nocoes Basicas Progress

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

Page 3: Curso Nocoes Basicas Progress

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

Page 4: Curso Nocoes Basicas Progress

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

Page 5: Curso Nocoes Basicas Progress

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

Page 6: Curso Nocoes Basicas Progress

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

Page 7: Curso Nocoes Basicas Progress

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

Page 8: Curso Nocoes Basicas Progress

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

Page 9: Curso Nocoes Basicas Progress

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

Page 10: Curso Nocoes Basicas Progress

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

Page 11: Curso Nocoes Basicas Progress

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

Page 12: Curso Nocoes Basicas Progress

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

Page 13: Curso Nocoes Basicas Progress

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

Page 14: Curso Nocoes Basicas Progress

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

Page 15: Curso Nocoes Basicas Progress

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

Page 16: Curso Nocoes Basicas Progress

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

Page 17: Curso Nocoes Basicas Progress

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

Page 18: Curso Nocoes Basicas Progress

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

Page 19: Curso Nocoes Basicas Progress

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

Page 20: Curso Nocoes Basicas Progress

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

Page 21: Curso Nocoes Basicas Progress

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

Page 22: Curso Nocoes Basicas Progress

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

Page 23: Curso Nocoes Basicas Progress

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

Page 24: Curso Nocoes Basicas Progress

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

Page 25: Curso Nocoes Basicas Progress

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

Page 26: Curso Nocoes Basicas Progress

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

Page 27: Curso Nocoes Basicas Progress

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

Page 28: Curso Nocoes Basicas Progress

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

Page 29: Curso Nocoes Basicas Progress

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

Page 30: Curso Nocoes Basicas Progress

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

Page 31: Curso Nocoes Basicas Progress

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

Page 32: Curso Nocoes Basicas Progress

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

Page 33: Curso Nocoes Basicas Progress

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

Page 34: Curso Nocoes Basicas Progress

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

Page 35: Curso Nocoes Basicas Progress

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

Page 36: Curso Nocoes Basicas Progress

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

Page 37: Curso Nocoes Basicas Progress

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

Page 38: Curso Nocoes Basicas Progress

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

Page 39: Curso Nocoes Basicas Progress

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

Page 40: Curso Nocoes Basicas Progress

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

Page 41: Curso Nocoes Basicas Progress

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

Page 42: Curso Nocoes Basicas Progress

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

Page 43: Curso Nocoes Basicas Progress

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

Page 44: Curso Nocoes Basicas Progress

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

Page 45: Curso Nocoes Basicas Progress

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

Page 46: Curso Nocoes Basicas Progress

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

Page 47: Curso Nocoes Basicas Progress

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

Page 48: Curso Nocoes Basicas Progress

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

Page 49: Curso Nocoes Basicas Progress

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

Page 50: Curso Nocoes Basicas Progress

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

Page 51: Curso Nocoes Basicas Progress

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

Page 52: Curso Nocoes Basicas Progress

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

Page 53: Curso Nocoes Basicas Progress

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

Page 54: Curso Nocoes Basicas Progress

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

Page 55: Curso Nocoes Basicas Progress

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

Page 56: Curso Nocoes Basicas Progress

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

Page 57: Curso Nocoes Basicas Progress

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

Page 58: Curso Nocoes Basicas Progress

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

Page 59: Curso Nocoes Basicas Progress

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

Page 60: Curso Nocoes Basicas Progress

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

Page 61: Curso Nocoes Basicas Progress

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

Page 62: Curso Nocoes Basicas Progress

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

Page 63: Curso Nocoes Basicas Progress

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

Page 64: Curso Nocoes Basicas Progress

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

Page 65: Curso Nocoes Basicas Progress

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

Page 66: Curso Nocoes Basicas Progress

Noções Básicas em Progress Caracter 66