Você está na página 1de 64

Apostila Curso Noes Bsicas Progress Caracter

Setembro/2002

Noes Bsicas em Progress Caracter

1.BANCO DE DADOS PROGRESS..................................................................................................5 1.1.Criando um Banco .................................................................................................................5 1.2.Entrando no Editor..................................................................................................................6 1.3.Saindo do Editor......................................................................................................................6 1.4.Saindo Temporariamente do Editor.......................................................................................6 1.5.Retornando para o Editor.......................................................................................................6 1.6.Teclas de Funes do Editor.................................................................................................6 1.7.Smbolos Especiais / Operadores / Funes........................................................................7 1.8.Conceitos de Banco de Dados Relacional............................................................................7 1.9.Componentes Lgicos............................................................................................................8 1.10.Componentes Fsicos...........................................................................................................8 1.11.Dicionrio de Dados..............................................................................................................9 2.VARIVEIS...................................................................................................................................10 2.1.Tipos e Formatos..................................................................................................................10 2.2.Definio................................................................................................................................10 2.3.Compartilhamento.................................................................................................................10 2.4.Parmetros............................................................................................................................11 3.COMANDOS BSICOS / INCLUDES / ZOOM..............................................................................12 3.1.RUN........................................................................................................................................12 3.2.ASSIGN...................................................................................................................................13 3.3.INPUT.....................................................................................................................................13 3.4.DISPLAY.................................................................................................................................13 3.5.PROMPT-FOR........................................................................................................................13 3.6.UPDATE.................................................................................................................................13 3.7.IF ... THEN ... ELSE...........................................................................................................13 3.8.DO: ... END. .........................................................................................................................13 3.9.CASE .....................................................................................................................................14 3.10.MESSAGE ...........................................................................................................................15 end..............................................................................................................................................16 3.11.NEXT....................................................................................................................................16 3.12.LEAVE .................................................................................................................................16 3.13.UNDO ...................................................................................................................................16 3.14.RETRY..................................................................................................................................16 3.15.RETURN ..............................................................................................................................17 3.16.Includes................................................................................................................................17 3.17.Zoom....................................................................................................................................17 4.FRAMES.......................................................................................................................................17

Noes Bsicas em Progress Caracter

4.1.Single.....................................................................................................................................17 4.2.Down......................................................................................................................................18 4.3.Flashing.................................................................................................................................18 4.4.Declarao VIEW / PAUSE / HIDE / CLEAR.........................................................................18 4.5.Caractersticas Frames.........................................................................................................20 4.6.CENTERED............................................................................................................................20 4.7.COLUMN.................................................................................................................................20 4.8.DOWN.....................................................................................................................................20 4.9.NO-BOX..................................................................................................................................20 4.10.NO-LABELS.........................................................................................................................20 4.11.OVERLAY.............................................................................................................................20 4.12.PAGE-BOTTOM...................................................................................................................20 4.13.PAGE-TOP...........................................................................................................................20 4.14.ROW.....................................................................................................................................21 4.15.SIDE-LABELS......................................................................................................................21 4.16.TITLE....................................................................................................................................21 4.17.WITH.....................................................................................................................................21 4.18.Caractersticas Campos.....................................................................................................21 4.19.AT.........................................................................................................................................21 4.20.COLON.................................................................................................................................21 4.21.COLUMN-LABEL..................................................................................................................21 4.22.FORMAT...............................................................................................................................21 4.23.LABEL..................................................................................................................................21 4.24.LIKE......................................................................................................................................21 4.25.NO-LABEL............................................................................................................................22 4.26.SPACE..................................................................................................................................22 5.BLOCOS.......................................................................................................................................22 5.1.Tipos de Blocos.....................................................................................................................22 5.2.Blocos com Capacidade de Repetio................................................................................23 6.LENDO E MOSTRANDO OS REGISTROS..................................................................................23 6.1.Declarao FOR EACH.........................................................................................................23 6.2.Clusula WITH.......................................................................................................................24 6.3.Opo COLUMN....................................................................................................................24 6.4.Clusula WHERE / OF...........................................................................................................24 6.5.Declarao FIND....................................................................................................................25 6.6.Clusula EXCEPT..................................................................................................................26 6.7.Clusula NO-ERROR / AVAILABLE......................................................................................26 6.8.Clusula BY...........................................................................................................................26

Noes Bsicas em Progress Caracter

6.9.Clusula USE-INDEX.............................................................................................................27 6.10.Clusula BEGINS.................................................................................................................27 6.11.Clusula MATCHES.............................................................................................................27 6.12.BUFFERS.............................................................................................................................28 6.13.TEMP-TABLE.......................................................................................................................29 7.ALOCANDO OS REGISTROS......................................................................................................30 7.1.Tipos de Bloqueio.................................................................................................................30 8.CRIANDO OS REGISTROS..........................................................................................................30 8.1.Declarao PROMPT-FOR....................................................................................................30 8.2.Declarao FIND....................................................................................................................31 8.3.Declarao CREATE.............................................................................................................31 8.4.Declarao ASSIGN..............................................................................................................31 8.5.Declarao INPUT.................................................................................................................31 8.6.Declarao UPDATE.............................................................................................................32 8.7.Declarao REPEAT.............................................................................................................32 9.MODIFICANDO OS REGISTROS.................................................................................................33 9.1.Declarao PROMPT-FOR....................................................................................................33 9.2.Declarao FIND....................................................................................................................34 9.3.Declarao ASSIGN..............................................................................................................34 9.4.Declarao INPUT.................................................................................................................34 9.5.Declarao UPDATE.............................................................................................................34 9.6.Declarao REPEAT.............................................................................................................35 10.ELIMINADO OS REGISTROS....................................................................................................35 10.1.Declarao PROMPT-FOR..................................................................................................35 10.2.Declarao FIND..................................................................................................................36 10.3.Declarao DELETE............................................................................................................36 11.TRANSAO..............................................................................................................................37 12.GERANDO RELATRIO............................................................................................................38 12.1.Redirecionando a Sada....................................................................................................38 12.2.Mltiplos Canais de Sada..................................................................................................39 12.3.Controles de Quebra...........................................................................................................41 12.4.Cabealhos e Rodaps.......................................................................................................42 13.ENTRADA E SADA DE DADOS................................................................................................43 14.QUERY / BROWSE / SELECTION-LIST....................................................................................45 14.1.Query / Browse....................................................................................................................45 14.2.Selection-List.......................................................................................................................46 15.EXERCCIOS..............................................................................................................................47

Noes Bsicas em Progress Caracter Pr-requisitos Conhecimento Bsico de Lgica de Programao Apresentao

Este treinamento tem por finalidade relembrar alguns pontos de lgica dos operadores matemticos apresentar os comandos da linguagem progress mais usados, nvel caracter objetivando o desenvolvimento de relatrios, consultas e atualizaes atravs do banco de dados progress.

1. BANCO DE DADOS PROGRESS


1.1. Criando um Banco

Noes Bsicas em Progress Caracter Vazio (UNIX) prodb banco1 empty Vazio (DOS) MENU Iniciar Programas Progress Desktop Cpia (UNIX) prodb banco1 demo sports Cpia (DOS) MENU Iniciar Programas Progress Desktop 1.2. Entrando no Editor UNIX pro d dmy banco1 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) (monousuario)

1.6. Teclas de Funes do Editor F1 Run F3 Menu F5 Abrir arquivo F6 Salvar arquivo

Noes Bsicas em Progress Caracter F8 Limpar tela F9 Abrir linha F10 Eliminar linha 1.7. Smbolos Especiais / Operadores / Funes Smbolos Especiais: /* ... */ .(ponto) : (dois pontos) ? (O texto entre o smbolo comentrio) (Identifica o fim de um comando. Delimita o nome do banco de dados, nome da tabela) (Identifica final de um comando de bloco) (Identifica um valor desconhecido)

Operadores Lgicos: EQ LT LE GT GE NE NOT AND OR ou ou ou ou ou ou = < <= > >= <> (Igual) (Menor) (Menor ou Igual) (Maior) (Maior ou Igual) (Diferente) (Negao) (E) (OU)

Operadores Numricos: / * + _ Funes: STRING(valor) (Converte outro tipo de dado em caracter) LENGTH(caracter) (Retorna o nmero de caracteres ou bytes de um string) CAPS(caracter) (Converte um string em letra maisculas) SUBSTRING (campo, posio, tamanho) (Retorna parte de uma string) DATE(ms,dia,ano) (Converte um string em data) TODAY (Retorna a data do sistema) 1.8. Conceitos de Banco de Dados Relacional Utiliza-se um banco de dados para armazenar e recuperar informaes. Ele fornece uma maneira fcil de consultar e analisar um variedade de dados. Um banco de dados consiste de duas ou mais tabelas, fornece relacionamento ou ligaes entre os registros entre as tabelas. (Diviso) (Multiplicao) (Soma) (Subtrao)

Noes Bsicas em Progress Caracter Existem trs tipos de relacionamentos: Um-para-um CLIENTE Um-para-vrios CLIENTE < ---------- > > PEDIDO < ---------- > ENDEREO DE ENTREGA

Vrios-para-vrios PEDIDO << ----------- >> ITEM

As informaes so armazenadas em registros. Os registros so compostos de campos. As tabelas possuem um ou mais ndices. 1.9. Componentes Lgicos Os componentes lgicos de um banco de dados PROGRESS so: Banco de Dados um depsito central onde armazenamos os dados. Tabela um grupo de informaes relacionadas entre si. Campo um pedao de informao. Registro uma coleo 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. 1.10. Componentes Fsicos Arquivos do banco de dados: - Arquivo.DB (Database-Banco de Dados) Arquivo principal do banco de dados. Nele so armazenados a estrutura das tabelas e os dados. Arquivo.BI(Before-Image-Imagem Anterior)

Noes Bsicas em Progress Caracter

Nele so armazenados cpias de registros antes de sua alterao. a partir deste arquivo que o PROGRESS efetua a restaurao da base de dados no caso de problemas. - Arquivo.LG(Log de Evento) Nele so armazenados o histrico de inicializao e encerramento de sees do banco de dados e informaes importantes relacionadas aos eventos ocorridos com ele. - Arquivo.LK (Lock) Identifica como o banco est sendo utilizado. 1.11. Dicionrio de Dados O dicionrio de dados mantm os componentes do banco de dados. Sua utilizao: criar, modificar e eliminar tabelas, campos e ndices e efetuar administrao do banco de dados.

Noes Bsicas em Progress Caracter

10

2. VARIVEIS
uma rea temporria de armazenamento de informao, a qual poder ser alterada durante a execuo do programa no qual foi definida. Uma varivel utilizada para auxiliar no clculo de expresses, cpias de dados ou dados complementares. Para trabalhar com variveis preciso definir e atribuir um valor a ela. 2.1. Tipos e Formatos Tipo Varivel Character Integer Decimal Date Logical Recid 2.2. Definio Exemplos:
define variable nm-usuario-aux define variable cd-usuario-aux define variable dt-emissao-aux define var cd-modalidade-aux define var lg-atualiza-aux define var ds-obs-aux as character format x(40) no-undo. as integer format 99999 no-undo. as date format 99/99/9999 initial today no-undo. like modalid.cd-modalidade no-undo. as logical format Sim/No no-undo. as character format x(20) extent 3 no-undo.

Formato inicial x(8) ->,>>>,>>9 ->>,>>9.99 mm/dd/aa yes/no >>>>>>9

Valor inicial brancos 0 0 ? no ?

Descrio Letras, nmeros e caracteres especiais Nmeros inteiros Nmeros decimais Se refere a uma data Possui dois valores, O primeiro verdadeiro E o outro falso Endereo de um registro

Exemplo abcdefgh 1.230 1.230,37 02/08/00 no 5549861

2.3. Compartilhamento Inicialmente um buffer de varivel 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. Variveis SHARED Quando uma varivel 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 SHARED - Cria buffer auxiliar - Utiliza um buffer auxiliar criado anteriormente

Exemplos: /* FONTE - prog02-01.p */


define variable lg-altera as logical format "Sim/Nao" no-undo.

Noes Bsicas em Progress Caracter


define new shared variable cd-modalidade-aux like modalid.cd-modalidade assign lg-altera = no. message "Deseja alterar modalidade?" update lg-altera. if lg-altera then 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 !!! ". no-undo.

11

/* FONTE - prog02-02.p */
define shared variable cd-modalidade-aux like modalid.cd-modalidade no-undo.

find modalid where modalid.cd-modalidade = cd-modalidade-aux exclusive-lock no-error. if available modalid then update modalid.ds-modalidade modalid.in-tipo-pessoa.

2.4. Parmetros Outra forma de trocar informaes entre programas atravs da utilizao de parmetros. Os parmetros podem ser passados e retornados pelo programa chamador. Eles devem ser passados atravs do comando RUN na mesma sequncia em que so recebidos e o formato das variveis deve ser iguais. INPUT OUTPUT INPUT-OUTPUT - programa chamador passa valor ao chamado - programa chamador recebe valor do chamado - programa chamador passa e recebe valor do chamado

Exemplos: Programa Chamador /* FONTE - prog02-03.p */


define variable lg-altera as logical format "Sim/Nao" no-undo.

Noes Bsicas em Progress Caracter


define variable cd-modalidade-aux like modalid.cd-modalidade no-undo. assign lg-altera = no. message "Deseja alterar modalidade?" update lg-altera. if lg-altera then 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 !!! ".

12

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-aux exclusive-lock no-error. if available modalid then update modalid.ds-modalidade modalid.in-tipo-pessoa.

3. COMANDOS BSICOS / INCLUDES / ZOOM


3.1. RUN

Noes Bsicas em Progress Caracter

13

Executa um programa progress a partir de outro programa. Quando a execuo do programa termina ele retorna do ponto onde foi chamado. 3.2. ASSIGN Move informaes 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 informaes movendo-as do buffer de registro para o buffer de tela. 3.5. PROMPT-FOR Recebe as informaes do usurio mantendo-as na tela. 3.6. UPDATE Utilizada para mostrar informaes ao usurio, permitindo modific-la e transferindo-a para o buffer de registro. 3.7. IF ... THEN ... ELSE Permite a tomada de deciso dependendo de uma condio se verdadeira ou falsa. if <condio> then <ao para expresso verdadeira> . else <ao para expresso falsa> . Exemplo:
define variable cd-modalidade-aux as integer initial 20. if cd-modalidade-aux = 20 then message Modalidade e igual a 20. else message Modalidade nao e igual a 20. ou if cd-modalidade-aux = 50 then message Modalidade e igual a 50. else message Modalidade nao e igual a 50. (condio verdadeira)

(condio falsa)

3.8. DO: ... END. As clusulas then e else executam apenas o primeiro comando aps elas. Para que execute vrios comandos necessrio usar o comando do: ... end.

Noes Bsicas em Progress Caracter if <condio> then do: <aes para expresso verdadeira> . end. else do: <aes para expresso falsa> . end. Exemplo:
define variable cd-modalidade-aux as integer initial 20. if cd-modalidade-aux = 20 then do: (condio verdadeira) message Modalidade e igual a 20. display Modalidade igual a cd-modalidade-aux. end. else message Modalidade nao e igual a 20.

14

3.9. CASE Permite executar aes diferenciadas dependendo do valor de uma expresso. Neste caso tambm pode ser utilizado a clusula DO: ... END. case <expresso> : when <valor ou varivel> then <ao para quando valor for verdadeiro> . when <valor ou varivel> then < ao para quando valor for verdadeiro>. otherwise <ao para quando valor no atender nenhuma opo> . end case.

Exemplo:
def var lg-opcao as log format "Inclui/Modifica" message "Informe a funcao" update lg-opcao. case lg-opcao: when yes then do: message "Funcao Inclui" view-as alert-box title " Atencao !!! ". no-undo.

Noes Bsicas em Progress Caracter


end. when no then 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.

15

3.10.

MESSAGE Utilizado para enviar mensagens ao usurio. A mensagem pode ser mostrada de duas formas, ou no rodap da pgina ou em caixa de alerta no centro do vdeo. Tipo de alerta: message - Aparece somente a mensagem. question - Aparece a mensagem com figura contendo ponto de interrogao. information - Aparece a mensagem com figura contendo ponto de esclamao. error - Aparece a mensagem com figura contendo um X em vermelho. warning - Aparece a mensagem com figura contendo um ponto de exclamao em amarelo, significando que um alerta apenas. message <mensagem> . - Ir mostrar no rodap da pgina. message <mensagem> view-as alert-box <tipo de alerta> title <descrio do ttulo do alerta>. Exemplos:
for each modalid no-lock: if modalid.cd-modalidade = 1 then message Modalidade Particular com descrio 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 descrio modalid.ds-modalidade view-as alert-box title Atencao !!! . else display modalid.cd-modalidade modalid.ds-modalidade.

Noes Bsicas em Progress Caracter


end.

16

3.11.

NEXT Vai imediatamente para o comando END do bloco e inicia uma nova interao. 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 aps o END deste bloco. Exemplo:
define variable ix-vezes as integer. repeat: ix-vezes = ix-vezes + 1. if ix-vezes = 100 then 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 alteraes executadas na interao corrente, ou seja, dentro do bloco corrente.

3.14.

RETRY Vai imediatamente para o END do bloco e executa a mesma interao.

Exemplo: /* FONTE prog03-01.p */


repeat: prompt-for modalid.cd-modalidade. find modalid where modalid.cd-modalidade = input modalid.cd-modalidade no-lock no-error. if not available modalid then do: message Modalidade no cadastrada.

Noes Bsicas em Progress Caracter


undo,retry. end. display modalid.ds-modalidade. end.

17

3.15.

RETURN Encerra a procedure onde esto sendo executados os comandos, ou seja, se a procedure o prprio programa, sai do programa retornando ao ponto que o chamou. Se for um internal procedure sai da internal procedure e volta para o ponto aps 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 = 2 then return. end.

3.16.

Includes Arquivos/blocos com a extenso (.i) ou (.f) pode ser utilizado em vrios pontos do programa para no duplicar blocos.

3.17.

Zoom Programa que disponibiliza contedo da tabela .

4. FRAMES
uma rea de exibio de dados onde o PROGRESS utiliza para conversar com o usurio. 4.1. Single Um frame single mostra somente um registro por vez na interface de sada. Exemplo:

Noes Bsicas em Progress Caracter


find modalid where modalid.cd-modalidade = 01 no-lock no-error. if available modalid then display modalid.cd-modalidade modalid.ds-modalidade.

18

4.2. Down Um frame down mostra mais de um registro por vez na interface de sada. Exemplo:
for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade. end.

4.3. Flashing Este fenmeno ocorre quando o PROGRESS define um frame down, a qual no salta para a prxima linha pelo fato do escopo do frame no pertencer a um bloco que gera repetio. Neste caso todos os registros so colocados na mesma linha, ficando visvel 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. Declarao VIEW / PAUSE / HIDE / CLEAR VIEW usada para mostrar um frame, Exemplo:
form pla-sau.cd-modalidade label Modalidade pla-sau.cd-plano label Plano with side-labels frame f-plano. view frame f-plano. at 1 at 7

Noes Bsicas em Progress Caracter PAUSE

19

Faz uma parada na execuo dos comandos. Pode ser determinado o nmero 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" pla-sau.cd-plano label "Plano" with side-labels frame f-plano. view frame f-plano. pause. hide frame f-plano. at 1 at 6

CLEAR Limpa os campos do frame.

Exemplo: /* FONTE - prog04-02.p */


form pla-sau.cd-modalidade label "Modalidade" pla-sau.cd-plano label "Plano" with side-labels frame f-plano. 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-sau then display pla-sau.cd-modalidade pla-sau.cd-plano at 1 at 6

Noes Bsicas em Progress Caracter


with frame f-plano. pause. clear frame f-plano.

20

4.5. Caractersticas Frames Podemos especificar as caractersticas dos frames para algumas declaraes. As caractersticas se aplicam ao frame como um todo, e no apenas para a declarao especificada. 4.6. CENTERED Centraliza o frame na interface com o usurio. 4.7. COLUMN 1 Column Especifica em quantas colunas sero 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 No utilizar o nome do campo. 4.11. OVERLAY Quando um frame sobrepor o outro no apaga o frame sopreposto. 4.12. PAGE-BOTTOM utilizado na definio do frame para o rodap para relatrio. 4.13. PAGE-TOP utilizado na definio do frame para o cabealho para relatrio.

Noes Bsicas em Progress Caracter 4.14. ROW Especifica a linha na qual o frame deve iniciar. 4.15. SIDE-LABELS Faz com que o label aparea ao lado esquerdo do campo. 4.16. TITLE Coloca um ttulo em um frame. 4.17. WITH

21

A clusula WITH tem por objetivo nomear um frame para que possa ser utilizado em qualquer parte do programa. 4.18. Caractersticas Campos Critrios de validao e mensagens de ajuda podem ser especificados no dicionrio de dados que podem ser alterados. 4.19. AT At 2 O campo, a partir do label, deve comear 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 sero mostrados abaixo do nome do campo. 4.22. FORMAT Atribui um formato ao campo. 4.23. LABEL Atribui um label ao campo. 4.24. LIKE Na definio de varivel pode definir um formato especfico ou utilizar a definio do dicionrio de dados.

Noes Bsicas em Progress Caracter 4.25. NO-LABEL No mostra o label do campo/varivel. 4.26. SPACE

22

Na definio de frames o default(padro) de espaos entre as variveis um, com o comando SPACE podemos especificar um nmero de espaos.

5. BLOCOS
5.1. Tipos de Blocos Procedure Este bloco refere-se a todo o programa. Internal Procedure Este bloco refere-se a uma procedure especifica. DO: ... END. Este bloco tem como objetivo agrupar comandos. REPEAT: ... END. Bloco de repetio com objetivo de executar interaes.

Noes Bsicas em Progress Caracter FOR EACH: ... END.

23

Bloco de repetio com objetivo de executar interaes com leitura de registros no banco de dados. 5.2. Blocos com Capacidade de Repetio REPEAT Executa interaes at que um comando de desvio seja executado. FOR EACH Executa interaes baseado na leitura de registros as base de dados.

6. LENDO E MOSTRANDO OS REGISTROS


6.1. Declarao FOR EACH um lao de repetio onde executa a leitura de uma tabela do banco de dados. Exemplo:
for each modalid no-lock: display modalid. end.

Mmoria

Banco Dados Buffer Registro Buffer Tela

Usurio

O comando for each disponibiliza os dados, a cada interao 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.

Noes Bsicas em Progress Caracter

24

Este bloco, onde modalid o nome da tabela do banco de dados, l todos os registros pelo ndice primrio e mostra na tela quantos forem possveis por vez. Os campos so mostrados na ordem definida no dicionrio de dados. Um procedimento no pode manipular dados de um banco de dados sem que eles tenham sido movidos para o buffer de memria. O usurio no 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 memria. Observe que apenas um registro por vez de cada tabela estar disponvel para seu trabalho. Se for necessrio trabalhar simultaneamente com vrios registros de uma tabel deveremos utilizar buffers auxiliares. * Buffer de Tela So buffers abstratos que armazenam informaes de input/output (entrada/sada) com o usurio. A entrada e/ou sada de dados podem acontecer atravs de vdeo, impressora, teclado, mouse ou qualquer outro dispositivo de comunicao com o usurio. 6.2. Clusula WITH Nomeia um frame para que ele possa ser utilizado em qualquer parte do programa. Aps o comando WITH pode ser informada as caractersticas do frame. 6.3. Opo COLUMN a formatao da tela de sada, os registros so 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. Clusula WHERE / OF WHERE

Noes Bsicas em Progress Caracter

25

utilizada para especificar o critrio de seleo de registros nos comandos de leitura. Na comparao de campos do tipo caracter, o PROGRESS no distingue maisculas das minsculas. 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 declaraes de leitura. Para utilizar necessrio 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 varivel.

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. Declarao FIND Executa a leitura de um registro especfico 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 prximo registro aps a ltima leitura.


find prev modalid no-lock. display modalid.

Noes Bsicas em Progress Caracter Retorna o registro anterior aps a ltima leitura.
find modalid where modalid.cd-modalidade = 01 no-lock. display modalid.

26

Retorna o registro da modalidade 01. Se no existir registros cadastrados ou a condio de seleo localizar mais de um registro, ento a busca falha. Exemplo:
find if then else modalid where modalid.cd-modalidade = 01 no-lock no-error. avail modalid display modalid. display Modalidade no cadastrada.

Retorna o registro da modalidade 01 ou a informao que o registro no esta cadastrado.

6.6. Clusula EXCEPT Possibilita a consulta(DISPLAY) ou atualizao(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. Clusula NO-ERROR / AVAILABLE Utilizada na leitura de um registro nico para que a condio do erro possa ser testada em tempo de programao. A condio de erro pode ser testada pelo comando AVAILABLE. Condies: 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 no Cadastrada view-as alert-box title Atencao !!! .

6.8. Clusula BY Permite efetuar a classificao na leitura de registros, somente pode ser utilizada por comandos com capacidade de ler vrios registros.

Noes Bsicas em Progress Caracter 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.

27

6.9. Clusula USE-INDEX O PROGRESS utiliza o ndice primrio definido para a tabela ou aquele que tiver maior performance para o critrio de seleo definido. A clusula 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.

Clusula BEGINS Comando que permite recuperar strings que comeam com determinado string, no diferencia maisculo de minsculo. Exemplo:
define variable ds-modalidade-aux 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.

Clusula MATCHES Comando que permite recuperar strings onde somente parte da string foi informada. Exemplo:
for each modalid

Noes Bsicas em Progress Caracter


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.

28

6.12.

BUFFERS O PROGRESS trabalha com um buffer de registro por tabela do banco de dados, porm podemos trabalhar com mais de um registro ativo por vez, definindo buffers de trabalho.

for each
modalid

primeiro buffer segundo buffer

for each Banco dados

b-modalid

O buffer de trabalho se comporta da mesma forma que buffers de registro. Sua diferena que ela fica armazenado em um arquivo temporrio do sistema existente somente em tempo de execuo. 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 usuario.cd-titular b-usuario.nm-usuario format "x(25)" format "x(25)"

Noes Bsicas em Progress Caracter


with down frame f-usuario. down with frame f-usuario. end.

29

6.13.

TEMP-TABLE So tabelas temporrias (gravadas em disco) que podem ser criadas para armazenar dados durante a execuo 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 and usuario.nr-proposta no-lock: = 1 = 1

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.

Noes Bsicas em Progress Caracter


down with frame f-t-usuario. end.

30

7. ALOCANDO OS REGISTROS
7.1. Tipos de Bloqueio NO-LOCK Acesso para leitura. SHARED-LOCK Acesso para leitura, permitindo alterao. EXCLUSIVE-LOCK Acesso para alterao.

8. CRIANDO OS REGISTROS
8.1. Declarao PROMPT-FOR O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela. Campo da Tabela No faz nenhuma alterao no banco de dados, pois interage apenas com a tela. Exemplo:
prompt-for modalid.tipoclin.cd-tipo-clinica.

Varivel Recebe a entrada mantendo-a na tela. Exemplo:


def var cd-tipo-clinica-aux like tipoclin.cd-tipo-clinica no-undo.

Noes Bsicas em Progress Caracter


prompt-for cd-tipo-clinica-aux.

31

8.2. Declarao FIND Aps a entrada de um campo ou varivel deve-se executar a leitura na tabela para localizar ou no o registro. Caso exista o registro cadastrado, enviar mensagem de Dados j Cadastrados, caso contrrio pode-se seguir a incluso 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. Declarao CREATE Aps 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 memria, onde o valor dos campos ser inicializado pelo PROGRESS.

Exemplo:
create tipoclin.

8.4. Declarao ASSIGN Aps 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. Declarao 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 contedo em letras maisculas. Exemplo:
assign tipoclin.ds-tipo-clinica

Noes Bsicas em Progress Caracter


= caps(input frame f-tipoclin tipoclin.ds-tipo-clinica).

32

8.6. Declarao UPDATE A declarao UPDATE executa os comandos de display + prompt-for + assign permitindo com isso mostrar o contedo, dar entrada e atribuir o valor de entrada para o campo. Pode ser utilizado para incluso ou alterao do registro. Para a incluso ser mostrado o initial do campo (valor inicial do campo definido no banco) para a alterao ser mostrado o contedo gravado para o campo. Exemplos: Incluso registro na tabela de modalidades.
create modalid. update modalid.

Alterao do campo descrio da modalidade para a modalidade cdigo 01.


find modalid where modalid.cd-modalidade = 01 exclusive-lock no-error. if avail modalid then update modalid.ds-modalidade.

8.7. Declarao REPEAT Bloco de repetio dos comandos internos do bloco.

Exemplo: Incluindo vrios registros na tabela tipoclin (Tipo de Clinica) /* FONTE - prog08-01.p */
def frame f-tipoclin tipoclin.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 tipoclin then 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

Noes Bsicas em Progress Caracter


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.

33

Exemplo:

INSERT
UPDATE

SET
DELETE
CREATE DISPLAY PROMPTFOR ASSIGN FIND FOR EACH RELEASE

9. MODIFICANDO OS REGISTROS
9.1. Declarao PROMPT-FOR O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela. Campo da Tabela No faz nenhuma alterao no banco de dados, pois interage apenas com a tela. Exemplo:
prompt-for tipoclin.cd-tipo-clinica.

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

Noes Bsicas em Progress Caracter 9.2. Declarao FIND

34

Aps a entrada de um campo ou varivel deve-se executar a leitura na tabela para localizar ou no o registro. Caso no exista o registro cadastrado, enviar mensagem de Dados nao Cadastrados, caso contrrio pode-se seguir a alterao 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 no 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. Declarao ASSIGN Aps 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).

9.4. Declarao 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 contedo em letras maisculas. Exemplo:
assign tipoclin.ds-tipo-clinica = caps(input frame f-tipoclin tipoclin.ds-tipo-clinica).

9.5. Declarao UPDATE A declarao UPDATE executa os comandos de display + prompt-for + assign permitindo com isso mostrar o contedo, dar entrada e atribuir o valor de entrada para o campo. Pode ser utilizado para incluso ou alterao do registro. Para a incluso ser mostrado o initial do campo (valor inicial do campo definido no banco) para a alterao ser mostrado o contedo gravado para o campo. Exemplos: Incluso registro na tabela de modalidades.
create modalid. update modalid.

Noes Bsicas em Progress Caracter Alterao do campo descrio da modalidade para a modalidade cdigo 01.
find modalid where modalid.cd-modalidade = 01 exclusive-lock no-error. if avail modalid then update modalid.ds-modalidade.

35

9.6. Declarao REPEAT Bloco de repetio dos comandos internos do bloco. Exemplo: Alterando vrios registros na tabela tipoclin (Tipo de Clinica) /* FONTE - prog09-01.p */
def frame f-tipoclin tipoclin.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 tipoclin then do: 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
Declarao PROMPT-FOR O comando PROMPT-FOR solicita uma entrada e coloca no buffer de tela. Campo da Tabela No faz nenhuma alterao no banco de dados, pois interage apenas com a tela.

10.1.

Noes Bsicas em Progress Caracter Exemplo:


prompt-for tipoclin.cd-tipo-clinica.

36

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

10.2.

Declarao FIND Aps a entrada de um campo ou varivel deve-se executar a leitura na tabela para localizar ou no o registro. Caso no exista o registro cadastrado, enviar mensagem de Dados nao Cadastrados, caso contrrio pode-se seguir a excluso com mensagem de confirmao. 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 no cadastrados view-as alert-box title Atencao !!! . 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.

Declarao 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 no cadastrado view-as alert-box title Atencao !!! .

Noes Bsicas em Progress Caracter

37

11.

TRANSAO
Transao uma unidade de trabalho completa, uma interao do bloco mais externo que contiver declaraes 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 opo EXCLUSIVE-LOCK. Exemplo:
repeat: create tipoclin. update tipoclin. end.

No exemplo acima cada interao do bloco REPEAT uma transao.


do transaction: repeat: create tipoclin. update tipoclin. end. end.

No exemplo acima a incluso ser para todos os tipos de clinicas ou nenhum.

Noes Bsicas em Progress Caracter

38

12.

GERANDO RELATRIO
O PROGRESS tem como default (padro) direcionar a sada de um procedimento para o terminal, mas pode-se manipular a sada para impressora, arquivo ou para o terminal.

12.1.

Redirecionando a Sada Declarao OUTPUT TO Manipula a sada de um procedimento. Declarao OUTPUT TO TERMINAL. Sada direcionada para o terminal. Exemplo:
output to terminal. for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade. end.

Declarao OUTPUT TO spool/modalid.lst. Sada direcionada para o um determinado diretrio 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.

Declarao OUTPUT TO PRINTER Sada direcionada para a impressora. Exemplo:


output to printer. for each modalid no-lock: display modalid.cd-modalidade modalid.ds-modalidade. end.

Declarao OUTPUT CLOSE

Noes Bsicas em Progress Caracter

39

Encerra um direcionamento de sada, voltando para o default (padro) terminal. Deve ser usado quando for manipulada a sada. 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.

Clusula APPEND Acompanha o comando OUTPUT TO, porm no deixa limpar os dados do arquivo. Exemplo: /* FONTE - prog12-02 */
output to spool/modalid.lst. for each modalid no-lock: 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 nmero de linhas do relatrio. PAGE Fora a quebra de pgina. 12.2. Mltiplos Canais de Sada Uma vez redirecionada a sada, a mesma permanece assim at que o procedimento termine, seja encontrada uma declarao OUTPUT CLOSE ou outra declarao OUTPUT TO para outra sada. STREAM o mtodo atravs do qual o PROGRESS permite a utilizao de vrios canais de sada. Podem ser utilizados at 5 canais, para trabalhar com

Noes Bsicas em Progress Caracter

40

STREAM precisamos: definir o canal, abrir o canal atravs do comando OUTPUT TO. Exemplo: /* FONTE - prog12-03 */
define stream s-relatorio. define stream s-erros. define frame f-relatorio ti-pl-sa.cd-modalidade modalid.ds-modalidade ti-pl-sa.cd-plano pla-sau.nm-plano-reduz ti-pl-sa.cd-tipo-plano ti-pl-sa.nm-tipo-plano-reduz with down. define frame f-erros ti-pl-sa.cd-modalidade modalid.ds-modalidade ti-pl-sa.cd-plano pla-sau.nm-plano-reduz ti-pl-sa.cd-tipo-plano ti-pl-sa.nm-tipo-plano-reduz with down. column-label "Cod" column-label "Modalidade" column-label "Cod" column-label "Plano" column-label "Cod" column-label "Tipo Plano"

column-label "Cod" column-label "Modalidade" column-label "Cod" column-label "Plano" column-label "Cod" column-label "Tipo Plano"

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-modalidade no-lock no-error. if avail modalid then 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-sau then display stream s-relatorio pla-sau.nm-plano-reduz

Noes Bsicas em Progress Caracter


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.

41

12.3.

Controles de Quebra A clusula BREAK BY deve ser utilizada para definir a categoria das quebras. Controle de Grupo As seguintes funes podem ser utilizadas para controle das quebras: FIRST-OF LAST-OF - Primeiro Registro - 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.

Noes Bsicas em Progress Caracter 12.4. Cabealhos e Rodaps FORM HEADER

42

Define o cabealho e o rodap de um frame, onde contenham uma data, um ttulo ou nmero da pgina. PAGE-BOTTON utilizado na definio do frame para o rodap. Exemplo:
def var ds-rodape as char format x(80) assign ds-rodape = + + + + ds-rodape = initial no-undo. "DZset SOLUCOES & SISTEMAS" " - " "ESTRUTURA PRODUTO" " - " Prog1 Versao 1 fill("-", 80 - length(ds-rodape)) + ds-rodape.

form header ds-rodape format "x(80)" with no-labels no-box page-bottom frame f-rodape. view frame f-rodape.

Este frame somente ser ativado com o comando VIEW. PAGE-TOP utilizado na definio do frame para o cabealho. 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 nmero de linhas do relatrio. PAGE-NUMBER

Noes Bsicas em Progress Caracter Retorna o nmero da pgina corrente do relatrio.

43

13.

ENTRADA E SADA DE DADOS


Importando Dados Declarao INPUT FROM Exemplo: /* FONTE - prog13-01.p */
def def def def def def var var var var var var c-dados cd-modalidade-aux nr-ter-adesao-aux cd-usuario-aux nm-usuario-aux dt-nascimento-aux as char format "x(61)" like usuario.cd-modalidade like usuario.nr-ter-adesao like usuario.cd-usuario like usuario.nm-usuario like usuario.dt-nascimento no-undo. no-undo. no-undo. no-undo. no-undo. no-undo.

input from spool/benef.txt. repeat: import unformatted c-dados. assign cd-modalidade-aux nr-ter-adesao-aux cd-usuario-aux nm-usuario-aux assign dt-nascimento-aux = = = = int(substring(c-dados,1,2)) int(substring(c-dados,3,6)) int(substring(c-dados,9,5)) substring(c-dados,14,40).

= 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"

Noes Bsicas em Progress Caracter


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

44

Exportando Dados PUT Exemplo: /* FONTE - prog13-02.p */


def var cd-modalidade-aux def var nr-ter-adesao-aux like usuario.cd-modalidade like usuario.nr-ter-adesao no-undo. 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"

Noes Bsicas em Progress Caracter


usuario.nr-ter-adesao usuario.cd-usuario usuario.nm-usuario usuario.dt-nascimento skip. end. output close. format format format format "999999" "99999" "x(40)" "99999999"

45

/* Arquivo Gerado */ 0100140000001CARLOS A C CHINEN 0100140000002VANIA C M CHINEN 0100140000003CAIO C MARTINS CHINEN 0100140000004YURI C MARTINS CHINEN 15/12/1963 13/10/1972 14/02/1996 27/06/1997

14.

QUERY / BROWSE / SELECTION-LIST


Query / Browse Podemos utilizar um browse aps: 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-usuario disp 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-usuario do: hide frame f-usuario no-pause. end. on return of browse b-usuario do: 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.

14.1.

Noes Bsicas em Progress Caracter


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.

46

14.2.

Selection-List Apresenta ao usurio uma lista de opes. Exemplo: /* FONTE prog14-02.p */


def var lista-tipo-rela def var in-tipo-rela-aux def var ds-tipo-rela-aux def var mostra-tipo-rela as char as integer format "99" as char format "x(09)" no-undo. no-undo. no-undo.

as char view-as selection-list inner-chars 13 inner-lines 02 no-undo.

def frame f-tipo-rela mostra-tipo-rela label "Tipo de Relatorio" with row 13 column 14 overlay title " PARAMETRO ". assign lista-tipo-rela in-tipo-rela-aux ds-tipo-rela-aux = + = = "01 RESUMIDO," "02 DETALHADO" 01 "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 = 01 then 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.

Noes Bsicas em Progress Caracter Elemento INNER-CHARS

47

Depois da palavra chave INNER-CHARS especifique o nmero 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 apaream na lista.

15.

EXERCCIOS
1 Escreva um programa que mostre o cdigo, descrio de todas as modalidades do tipo pessoa jurdica. 2 Modifique o programa anterior de modo que mostre todas as modalidade ignorando a modalidade de cdigo 01. 3 Escreva um programa que solicite o cdigo da modalidade e mostre a descrio 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 cdigo da modalidade e descrio e cdigo do plano e nome. 6 Escreva um programa que mostre todas as modalidades em ordem do campo descrio. 7 Escreva um programa que receba o cdigo da modalidade e altera a descrio em um lao de repetio. 8 Escreva um programa de adicione tipos de clinica em um banco de dados. 9 Escreva um programa que mostre o total de usurios na modalidade 02 proposta 01. 10 Escreva um programa com sada 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.

Noes Bsicas em Progress Caracter

48

11 Escreva um programa que utilize dois arquivos de sada, um para o relatrio e outro para os erros que mostre os beneficirios responsveis 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 importao dos dados do cadastro de usurios com movimento de alterao para os campos do endereo: usuario.en-rua usuario.en-cidade usuario.en.bairro usuario.en-uf usuario.en-cep 13 Escreva um programa para exportao dos dados do cadastro de unidades com os seguintes campos: unimed.cd-unimed unimed.nm-unimed unimed.cd-tipo-unimed unimed.lg-repassar. 14 Escreva um browse que mostre os usurios 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 servio (notaserv) de um termo de adeso com os seguintes campos da nota: notaserv.mm-referencia notaserv.aa-referencia notaserv.nr-fatura notaserv.dt-vencimento notaserv.vl-total e com as seguintes PFs: F4 Retorna F8 - 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.

Noes Bsicas em Progress Caracter O evento para F8 (clear)

49

Exemplo Completo de Manuteno de uma Tabela padro Dzset A Dzset reserva o direito de a qualquer momento alterar o padro 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 * * 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] tb-regua[2] tb-regua[3] tb-regua[4] tb-regua[5] tb-regua[6] tb-regua[7] tb-regua[8] tb-regua[9] with no-labels attr frame f-regua. format format format format format format format format format row 21 "x(7)" "x(8)" "x(6)" "x(6)" "x(8)" "x(7)" "x(5)" "x(9)" "x(3)" no-box overlay centered

Noes Bsicas em Progress Caracter


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

50

Noes Bsicas em Progress Caracter


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

51

Noes Bsicas em Progress Caracter


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

52

/* FONTE dz0110a .f */
form tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica tipoclin.dt-atualizacao with side-labels 1 down row 8 colon 30 skip(1) colon 30 skip(1) colon 30 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.

Noes Bsicas em Progress Caracter


{curso/dz0110a.f} /* ------------------------------------------------------------------------- */ {hdp/hdvrcab1.i} assign nm-cab-usuario nm-tp-prog nm-prog c-versao = = = = "" " Inclui" "DZ/0111A" "D.00.000".

53

/* ------------------------------------------------------------------------- */ {hdp/hdrodlin.i} {hdp/hdcablin.i} /*---------------------------------------------------------------------------*/ repeat on error undo, retry with frame f-tela: /* ---------------------------------------------------------------------- */ {hdp/hdtitulo.i 1 1}. clear frame f-tela. 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 create tipoclin. assign tipoclin.cd-userid tipoclin.dt-atualizacao tipoclin.cd-tipo-clinica tipoclin.ds-tipo-clinica = = = = with frame f-tela.

userid ("mgadm") today input tipoclin.cd-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 *

Noes Bsicas em Progress Caracter


* 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 nm-prog c-versao = = = = "" "Modifica" "DZ/0112A" "D.00.000".

54

/* ------------------------------------------------------------------------- */ {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")

Noes Bsicas em Progress Caracter


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.

55

/* 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 * *-----------------------------------------------------------------------------* * 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 nm-prog c-versao = = = = "" "Elimina" "DZ/0113A" "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

Noes Bsicas em Progress Caracter


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

56

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

Noes Bsicas em Progress Caracter


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} assign nm-cab-usuario nm-tp-prog nm-prog c-versao = = = = "" "Lista". "DZ/0114A". "D.00.000".

57

/* ------------------------------------------------------------------------- */ {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-tipoclin do: 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.

Noes Bsicas em Progress Caracter


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

58

/* 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 nm-cab-usuario nm-prog c-versao = fill(" ",80). = "Listagem dos Tipos de Clinica". = "DZ/0115A". = "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.

Noes Bsicas em Progress Caracter


def var ds-cabecalho def var tb-regua as char format "x(30)" init "" no-undo. as char extent 4 init [ "Arquivo", "Selecao", "Impressao","Fim" ] no-undo.

59

/*----------------------------------------------------- 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 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 cd-tipo-clin-fim = 0 = 99.

/* ------------------------------------------------------------------------- */ {hdp/hdtitrel.i}. find first paramecp no-lock no-error. if avail paramecp then do:

Noes Bsicas em Progress Caracter

60

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

Noes Bsicas em Progress Caracter


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: hide all no-pause. leave. end. end.

61

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

Noes Bsicas em Progress Caracter


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 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-tipoclin do: 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-tipoclin do: 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:

62

Noes Bsicas em Progress Caracter


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

63

Fontes: dz0110a .p dz0110a .f dz0111a .p dz0112a .p dz0113a .p dz0114a .p dz0115a .p dz0110a .i dz0116a .p - Manuteno do Tipo de Clinica - Form da tela - Inclui do Tipo de Clinica - Modifica do Tipo de Clinica - Elimina do Tipo de Clinica - Lista do Tipo de Clinica - Relatrio do Tipo de Clinica - Incluide Zoom do Tipo de Clinica - Zoom do Tipo de Clinica

Includes Padronizados: hd9000.i - Verifica permisso do programa

Noes Bsicas em Progress Caracter hdcablin.i hdrodlin.i hdvrcab0.i hdvrcab1.i hdtitulo.i hdvarrel.i hdvararq.i hdtitrel.i hdpedarq.i hdmonarq.i hdclosed.i - Definio linha do cabealho - Definio linha do rodap - Definio variveis do cabealho - Definio variveis do cabealho - Definio do ttulo do programa - Definio variveis para relatrio - Definio variveis para arquivo - Definio tela do relatrio - Solicita o nome do arquivo de sada - Abertura do arquivo de sada - Fechamento do arquivo de sada

64