Apostila Oficial Progress Datasul Versao 2
Short Description
....
Description
Curso de Progress
1|Página
Copyright 2011 – ALX Consultoria e Treinamentos
Todos os direitos reservados para o autor desta obra.
Toda ou qualquer parte desta publicação não poderá ser reproduzida ou transmitida por qualquer meio, seja este eletrônico, mecânico, de fotocópia, de gravação ou outros sem prévia autorização.
Progress, Appbuilder, Openedge são Marcas Registradas da Progress – Software Corporation EUA Datasul EMS é Marca Registrada da Totvs Corporation Algumas partes deste Tutorial foram retiradas do tutorial Dominando o Progress escrito por Marcio Brener Costa
Curso de Progress
2|Página
INDICE INTRODUÇÃO AO PROGRESS ........................................... .................................................................. ............................ .....5 5 Instalando o Progress .......................................... ................................................................. ........................................... .................... 5 Tipos de Arquivos do Progress ............................................. .................................................................... .......................... ... 10 Conhecendo o Editor ............................................ ................................................................... ......................................... .................. 10 Conhecendo o Dicionário de dados ........................................... ................................................................. ...................... 11 Conhecendo o Administrador de Banco de Dados.............................................. Dados.............................................. 11 Conhecendo o APPBuilder ............................. .................................................... .............................................. .......................... ... 12 Conhecendo o Compilador Progress ....................................... ............................................................. ......................... ... 13 BANCO DE DADOS ............................................ ................................................................... ......................................... ..................13 13 Como criar um Banco de Dados............................................ ................................................................... .......................... ... 13 Como conectar um Banco de Dados .......................................... ................................................................ ...................... 14 Criando Tabelas Campos e Indices ................................................... ...................................................14 14 Como criar uma Tabela ........................................... ................................................................... .............................. ...... 15 Tipo de Campos .......................................... ................................................................. ......................................... .................. 16 Como criar Campos ......................................... ............................................................... ..................................... ............... 16 Como criar Indices .......................................... ................................................................. ..................................... .............. 18 O DATASUL EMS ........................................... .................................................................. ............................................. ...................... 20 Conhecendo o Datasul EMS ......................................... ............................................................... .................................. ............ 20 Conhecendo a estrutura de Bancos de dados e tabelas datasul........................... 22 Como localizar um campo no Datasul EMS ............................................ ....................................................... ........... 22 COMANDOS PARA MANIPULAÇÃO DE DADOS ............................................ ............................................ 23 Display ........................................... .................................................................. ............................................. ..................................... ............... 23 Message .......................................... ................................................................. ............................................. ..................................... ............... 23 Def Var ........................................... .................................................................. ............................................. ..................................... ............... 24 For each ................................... ......................................................... ............................................ ............................................. ....................... 24 By ........................................... ................................................................. ............................................ ............................................. ....................... 25 Use Index ......................... ................................................ ............................................. ............................................ .............................. ........ 26 No-lock, Exclusive-Lock ............................................ ................................................................... ..................................... .............. 27 Operadores Lógicos ............................................. .................................................................... ......................................... .................. 27 Where .......................................... ................................................................ ............................................ ......................................... ................... 28 And e OR...................... OR............................................. ............................................. ............................................ .................................. ............ 28 Begins ............................................ ................................................................... ............................................. ..................................... ............... 30 Matches .......................................... ................................................................. ............................................. ..................................... ............... 31 Contains.......................................... ................................................................. ............................................. ..................................... ............... 31 If............................................. If................................................................... ............................................ ............................................. ....................... 32 Else ............................................. ................................................................... ............................................ ......................................... ................... 33 Find First ......................................... ............................................................... ............................................. ...................................... ............... 34 Find Last ............................................. ................................................................... ............................................ .................................. ............ 35 If Avail / If not Avail ........................................ .............................................................. ............................................. ....................... 35 Curso de Progress
3|Página
Assign ......................................................................................................... 36 Then do ...................................................................................................... 37 Update ........................................................................................................ 37 Create ........................................................................................................ 38 Repeat ........................................................................................................ 39 Delete ......................................................................................................... 39 Output ........................................................................................................ 40 Put ............................................................................................................. 41 Abrindo Arquivo TXT automaticamente............................................................ 42 Gerando um arquivo do tipo CSV e abrindo no Excel ......................................... 42 Break / First-Of / Last-Of .............................................................................. 43 For each com each (relacionando tabelas) ...................................................... 45 For each com find (relacionando tabelas) ....................................................... 46 For each com For each (relacionando tabelas) ................................................. 47 PROGRESS GRAFICO .................................................................................. 49 Como criar um Programa Grafico .................................................................... 49 Como criar um botão .................................................................................... 49 Como criar um fillin ...................................................................................... 50 Como criar um text....................................................................................... 50 Como criar uma Imagem ............................................................................... 51 Criando uma Tela para chamada de um Relatório ............................................. 53 Adicionando Acompanhamento no Relatório ..................................................... 57 Adicionando Zoom no Relatório ...................................................................... 58 Criando Relatórios em Excel (template) .......................................................... 59 Varios comandos para formatação Progress x excel ......................................... 62
Curso de Progress
4|Página
INTRODUÇÃO AO PROGRESS Instalando o Progress Clique no ícone SETUP.EXE que se encontra na pasta de instalação do Openedge Progress.
Uma tela de Inicio de instalação do Openedge para Windows será apresentada, para fazer a instalação serão necessárias as licença(s). Clique no botão Next para continuar a instalação
Digite os números de Serie e os códigos de Controle nos respectivos campos e clique em Accept para adicionar na lista de produtos a serem instalados, após concluir clique em Next para prosseguir.
Curso de Progress
5|Página
Leia os termos de Licenciamento e clique em Yes para concordar e prosseguir com a instalação.
Selecione os diretórios de instalação e de trabalho onde serão instalados os programas (recomendamos manter a sugestão do programa de instalação)
Na tela de seleção de componentes a serem instalados clique em Next e mantenha a opção Complete assinalada.
Curso de Progress
6|Página
Desmarque todas as opções em tela e clique em Next para prosseguir
Selecione a Pasta que sera adicionada no seu menu de programas (recomendamos manter a sugestão do programa de Instalação) e clique em Next para prosseguir.
Selecione os idiomas adicionais a serem instalados (recomendamos não selecionar nenhum outro idioma e manter somente o idioma Portugues – Brasilian selecionado) e clique em Next para prosseguir.
Curso de Progress
7|Página
Clique na caixa de seleção Number Format e selecione a opção (period, comma) para que o formato numérico padrão brasileiro seja configurado e clique em Next para prosseguir.
Mantenha a sugestão e clique em Next para prosseguir.
Mantenha a sugestão e clique em Next para prosseguir.
Curso de Progress
8|Página
A instalação esta pronta para iniciar a copia dos arquivos para o seu computador, clique em Next para prosseguir.
Pronto a instalação foi concluída e o Progress esta pronto para ser utilizado.
Após o término da instalação os seguintes programas serão apresentados em seu menu iniciar.
Curso de Progress
9|Página
Tipos de Extensão dos Arquivos do Progress
.p (programa do tipo caractere escrito geralmente no Editor Progress) .w (programa do tipo gráfico escrito geralmente no AppBuilder do Progress) .r (programa compilado pelo Progress)
Conhecendo o Editor (Programa Client no menu) Aplicativo em Progress 4GL para escrita do código fonte, execução de procedures, debuger, compilação e procedimentos por meio de código.
Curso de Progress
10 | P á g i n a
Conhecendo o Dicionário de dados Aplicativo desenvolvido em Progress 4GL para administração e manutenção dos bancos de dados. Com ele você pode: Criar, conectar e alterar definições de bancos de dados; Visualizar relatórios de estruturas de tabelas, campos, índices; Definir segurança dos dados, salvar definições e conteúdo dos dados, editar parâmetros, etc.
Conhecendo o Administrador de Banco de Dados Aplicativo desenvolvido em Progress 4GL para administração e manutenção dos bancos de dados. Com ele você pode: Criar, conectar e alterar definições de bancos de dados; Visualizar relatórios de estruturas de tabelas, campos, índices;
Curso de Progress
11 | P á g i n a
Definir segurança dos dados, salvar definições e conteúdo dos dados, editar parâmetros, etc.
Conhecendo o APPBuilder O User Inteface Builder é um utilitário desenvolvido em Progress 4GL para edição rápida e gráfica de programas orientados a objeto.
Curso de Progress
12 | P á g i n a
Conhecendo o Compilador Progress Como o próprio nome diz é um aplicativo para compilação de procedures (programas). Ele possibilita compilar um diretório ou uma árvore de diretórios, especificar arquivos iniciados por uma subpalavra ou apenas extensão, etc.
BANCO DE DADOS Como criar um Banco de Dados Uma das maneiras de se criar um banco de dados é utilizando o programa Data Administration clique no menu Database na opção Create, então informe a localização e o nome do novo banco de dados a ser criado.
Curso de Progress
13 | P á g i n a
Após a criação do banco de dados, é sugerida a conexão com o banco recém criado.
Como conectar um Banco de Dados Ao abrir o Data Dictionary o mesmo irá sugerir que um banco de dados seja conectado, selecione a opção Connect to na Existing Database.
Selecione o banco de dados desejado utilizando o botão Browse e clique em Ok para iniciar o Dicionario com o banco conectado.
CRIANDO TABELAS CAMPOS E INDICES Para modelagem de dados é utilizado o aplicativo Data Dictionary, que pode ser selecionado no menu de programas.
Curso de Progress
14 | P á g i n a
Como criar uma Tabela Selecione o banco de dados escolhido na caixa Databases, em seguida clique no botão Create Table...
A imagem abaixo mostra a janela de propriedades da tabela no Data Dictionary.
Table Name: Define o nome da tabela a ser criada. Dump File: Informa o nome do arquivo de DUMP para exportação das definições e dos dados da tabela. Label: Define um nome de até 30 caracteres quaisquer para exibição de informações de avisos ou erros para a tabela em tempo de execução do aplicativo. Description: Texto descritivo para informações ou anotações a respeito da tabela.
Curso de Progress
15 | P á g i n a
Tipo de Campos A seguir demonstramos os tipos de campos disponíveis ao criar um campo de uma tabela, os campos mais utilizados são Character, Date, Decimal, Integer e Logical.
Como criar Campos Selecione no quadro Tables a tabela onde deseja criar o campo e clique no botão Create Field...
Curso de Progress
16 | P á g i n a
A imagem abaixo mostra as propriedades para a criação de um campo.
Field Name: Nome do campo com até 32 caracteres alfanuméricos, sem acentos ou sinais inválidos. Data Type: Define o tipo de dado do campo em: INTEGER, DECIMAL, CHARACTER, LOGICAL, DATE, RAW ou RECID.
Importante: Após o campo ser criado o Tipo de Dado não poderá ser alterado, como também não poderá ser removido caso exista algum índice da tabela a que pertença.
Format: Define um formato ou máscara de acordo com o tipo de dado para entrada e visualização do campo. Exemplos: ->>>,>>9.99 (DECIMAL) 999 (INTEGER) 99/99/9999 (DATE) Masculino/Feminino (LOGICAL yes/no) Label: Define um texto informativo a ser exibido com o campo, tanto para apresentação em coluna, lateral e também em informações como regras de índices e outros. Column Label: Define um texto informativo para apresentação quando em coluna. Initial Value: Atribui um valor inicial para o campo após o registro ser criado. Order: Define ama ordem do campo dentro da tabela. Por padrão esta ordem é incrementada de 10 em 10 e não pode repetir, mas pode ser alterada e conter qualquer intervalo de número inteiro. Decimals: Define o número de casas decimais num limite de 10 e mínimo de 0 para dados do tipo DECIMAL
Curso de Progress
17 | P á g i n a
Description: Texto descritivo ou informativo para o campo. Help Text: Informa um texto de Ajuda ou Informação sobre o campo para ser exibido na área de status da aplicação quando este estiver sendo editado. Mandatory: Define o preenchimento de um campo como obrigatório. Case-Sensitive: Informa que um campo tipo CHARACTER fará distinção entre letras maiúsculas e minúsculas se utilizado em um índice ou para uma comparação. Extent: Define o campo como um array de n elementos, nomendo-os como: CAMPO[n elemento] Importante: Esta propriedade do campo não poderá ser alterada após o campo criado!
Como criar Indices Um índice de banco de dados funciona como um índice de um livro. Para procurar por um assunto qualquer em um livro, esse assunto pode ser localizado no índice e depois, com base nas páginas fornecidas pelo índice, localizado diretamente no livro. O índice não contem o assunto todo, apenas referencias (números de pagina) desse assunto. Sem um índice, para que um assunto fosse localizado, a procura deve ser feita na tabela inteira. Um índice tem como objetivos a rápida recuperação de registros, classificação automática de registros, processamento rápido de relacionamentos de tabelas, evitar registros com chaves duplicadas, procura de palavras em um campo texto. Selecione o Icone Indexes para ativar o quadro Indexes e clique no botão Create Index...
Curso de Progress
18 | P á g i n a
A imagem abaixo mostra as propriedades para a criação de um Índice.
A criação, bem como a manutenção de índices em Progress é totalmente implificada. Ao contrário de outros bancos de dados como MS-SQL Server, por xemplo, você não precisa especificar diversos parâmetros e atributos como taxa de crescimento, organização física, e outros apenas atributos básicos. Description: Texto descritivo ou informativo para o índice Primary: Define que o índice será o padrão utilizado para procuras ou ordenação da tabela. Pode haver apenas um índice primário para a tabela, e esse índice também não pode ser excluído. Para excluir um índice primário você deve definir qual outro índice será primário antes de efetuar a exclusão. Active: Define o índice como Ativo ou Inativo. Caso o índice esteja inativo ele não será atualizado automaticamente, como também não poderá ser utilizado para pesquisa ou ordenação. Unique: Informa que não será aceita duplicação de valores no índice.
Caso você defina um campo tipo CHARACTER como case-sensitive e crie um índice único para este campo, ele aceitará valores duplicados, ainda que não idênticos, exemplo: Maria/maria, Joao/joao,etc Lembre-se que o índice único é sempre a Chave Primária (Primary Key) para o relacionamento entre tabelas.
Word Index: Define um índice para campo do tipo CHARACTER organizado por palavras contidas em cada registro.
Este índice consome bastante espaços em disco, como também onera bastante a performance do banco, sendo aconselhado apenas se realmente não houver uma outra solução.
Curso de Progress
19 | P á g i n a
Abbreviated: Cria um índice abreviado para campo tipo CHARACTER utilizando apenas algumas palavras ou caracteres iniciais do conteúdo do campo. Ascending ou Desceding: Define a ordem para um campo dentro do índice. Como padrão inicial todos os campos são definidos como ascendentes.
O DATASUL EMS Conhecendo o Datasul EMS A Imagem abaixo demonstra a tela inicial do ERP Datasul EMS.
A imagem abaixo demonstra o sistema de menus do ERP separando os diversos assuntos em Módulos
Curso de Progress
20 | P á g i n a
A imagem a seguir demonstra que cada Módulo possui diversas tarefas/submenus que se referem ao assunto escolhido.
A imagem abaixo demonstra o menu de um dos módulos, onde podemos encontrar um padrão que é utilizado para todos os módulos do sistema.
Por exemplo em Opções, podemos encontrar a funçao Executar Programa, que podemos utilizar para abrir o Editor do Progress digitando _edit.p e clicando em executar.
Curso de Progress
21 | P á g i n a
Conhecendo a estrutura de Bancos de dados e tabelas Datasul A imagem a seguir demonstra o Data Dictionary com os bancos de dados do ERP conectados, existem algumas formas de instalação dos bancos por este motivo eles podem ser distribuídos (vários bancos), unificados (apenas um único banco com todas as tabelas) e ainda separados entre bando de cadastros e movimentos, porém de todas as maneiras as tabelas e campos são os mesmos.
Como localizar um campo no Datasul EMS A imagem a seguir demonstra como podemos identificar um campo dentro de um cadastro do ERP par poder utiliza-lo em uma consulta, relatório, etc... Clique no botão incluir no navegador padrão da janela, clique com o mouse ou direcione o cursor até o campo que deseja obter a informação e pressione as teclas CTRL+ALT+H. Será apresentada uma janela onde poderemos observar os nomes de banco de dados, tabela, campo, tipo de campo e seu respectivo formato.
Curso de Progress
22 | P á g i n a
COMANDOS PARA MANIPULAÇÃO DE DADOS Display O comando DISPLAY é utilizado para mostrar em tela ou em arquivo quando selecionado uma informação determinada por um laço ou pelo próprio comando. Exemplo: DISPLAY "Usando comando Display".
Resultado:
Message
O Comando MESSAGE envia uma mensagem para a tela. Exemplo: MESSAGE "Teste de Mensagem" VIEW-AS ALERT-BOX.
Curso de Progress
23 | P á g i n a
Resultado:
Def Var Define uma variável cujo valor estará disponível dentro de uma procedure, pode ser utilizado para guardar uma informação, acumular valores, contar registros, etc.... Exemplo: DEF VAR teste AS CHAR FORMAT “x(40)” NO-UNDO.
AS Tipo
Indica o Tipo de Variável a ser definida. Os tipos são CHARACTER, DATE, DECIMAL, HANDLE, INTEGER, LOGICAL, MEMPTR, RAW, RECID, ROWID e WIDGETHANDLE.
For each Lê um registro a cada interação do bloco e copia os dados do banco para o buffer de registro, e do buffer de registro para o buffer de tela. Exemplo: FOR EACH emitente. DISP emitente.cod-emitente emitente.nome-abrev. END.
Curso de Progress
24 | P á g i n a
Resultado:
By Usa-se a opção BY para classificação de registros por um campo não indexado. Default : ordenação ascendente Exemplo: FOR EACH emitente BY emitente.cod-emitente DESCENDING. DISP emitente.cod-emitente emitente.nome-abrev. END.
Curso de Progress
25 | P á g i n a
Resultado:
Use Index A opção USE-INDEX permite você escolher qualquer índice definido, para selecionar registros. Exemplo: FOR EACH emitente USE-INDEX nome. DISP emitente.cod-emitente emitente.nome-abrev. END.
Curso de Progress
26 | P á g i n a
Resultado:
No-lock, Share-lock, Exclusive-Lock Quando vários usuários podem acessar um banco de dados simultaneamente, pode existir um certo momento em que dois usuários tentem acessar o mesmo registro. O Progress utiliza locks de registros para administrar a concorrência. No-Lock: Lock somente de leitura de registros Share-lock: Lock para leitura, atualização e exclusao de registros Exclusive-lock: Lock para atualização ou exclusão de registros Por padrão se o tipo de lock não for especificado o Progress utiliza o Share-lock
Operadores Lógicos = >= = 10 AND emitente.cod-emitente 7 NO-LOCK NO-ERROR. NO-ERROR. IF AVAIL cond-pagto THEN MESSAGE "Encontrei o Registro" VIEW-AS ALERT-BOX. ALERT-BOX. IF NOT AVAIL cond-pagto THEN MESSAGE "Eu nao encontrei o Registro" VIEW-AS ALERT-BOX. ALERT-BOX.
Atendendo a condição
Não atendendo a condição FIND FIRST cond-pagto WHERE cond-pagto.cod-cond-pag cond-pagto.cod-cond-pag > 1600 NO-LOCK NO-ERROR. NO-ERROR. IF AVAIL cond-pagto THEN MESSAGE "Encontrei o Registro" VIEW-AS ALERT-BOX. ALERT-BOX. IF NOT AVAIL cond-pagto THEN MESSAGE "Eu nao encontrei o Registro" VIEW-AS ALERT-BOX. ALERT-BOX.
Curso de Progress
35 | P á g i n a
Resultado: Atendendo a condição especificada no FIND
Não atendendo a condição especificada no FIND
Assign Atualiza e atribui valores aos dados para variáveis ou registros. Exemplo: DEF VAR auxiliar AS auxiliar AS INT. INT. ASSIGN auxiliar ASSIGN auxiliar = 120 120.. MESSAGE "Valor MESSAGE "Valor da Variavel: " auxiliar VIEW-AS ALERT-BOX. ALERT-BOX.
Resultado:
Curso de Progress
36 | P á g i n a
Then do Individualiza um grupo de comandos dentro de um bloco simples. Exemplo: DEF VAR auxiliar AS CHAR FORMAT "x(20)". ASSIGN auxiliar = "Branco". IF auxiliar = "Branco" THEN DO: MESSAGE "O valor da Variavel é Branco" SKIP "Vou atualizar para Vermelho" VIEW-AS ALERT-BOX. ASSIGN auxiliar = "Vermelho". MESSAGE "O valor da Variavel agora é" SKIP auxiliar VIEW-AS ALERT-BOX. END.
Resultado:
Update Executa as ações para que um registro seja atualizado em tela. Exemplo: DEF VAR nome AS CHAR FORMAT "x(20)". DEF VAR idade AS INT. UPDATE nome idade. MESSAGE "Nome: " nome + " - " + "Idade: " idade VIEW-AS ALERT-BOX.
Curso de Progress
37 | P á g i n a
Resultado: O Cursor estará disponível no campo Nome para que possa inserir a informação, tecle TAB para ir para o próximo campo e ENTER para finalizar.
Após a inserção das informações sera exibida a mensagem com os valores digitados.
Create
Cria um novo registro no banco. Exemplo: CREATE regiao. UPDATE regiao.nome-ab-reg regiao.nome-regiao.
Resultado:
Curso de Progress
38 | P á g i n a
Repeat Laço (repetição) automático. Continua a interagir até encontrar um END-ERROR ou outra condição de término definida pelo usuário. Exemplo: REPEAT: CREATE regiao. UPDATE regiao.nome-ab-reg regiao.nome-regiao. END.
Resultado:
Delete Elimina um registro ou uma seleção de registros. Exemplo: FOR EACH emitente WHERE emitente.nome-abrev = "LG". DELETE emitente. END.
Curso de Progress
39 | P á g i n a
Resultado: Todos os registros que atenderem a condição especificada serão apagados do banco de dados, é importante ressaltar que os registros apagados não poderão ser recuperados, portanto o uso do delete deve ser restrito e com extrema cautela.
Output
Habilita a saída dos dados para um determinado arquivo, seja txt, csv, ou qualquer outro especificado, utilizando um arquivo temporário. Exemplo: OUTPUT TO c:\temp\teste.txt NO-CONVERT. FOR EACH emitente USE-INDEX nome. DISP emitente.cod-emitente emitente.nome-abrev. END. OUTPUT CLOSE.
Resultado:
Curso de Progress
40 | P á g i n a
Put Habilita a saída dos dados para um determinado arquivo, seja txt, csv, ou qualquer outro especificado, utilizando um arquivo temporário, porém é possível especificar a posição exata onde a informação do registro deve ser posicionada no arquivo, geralmente utilizado para relatórios e exportações de dados. Exemplo: OUTPUT TO c:\temp\curso\teste.txt NO-CONVERT. PUT " RELATORIO CURSO DE PROGRESS "----------------------------------------------------------------------------------------" AT 1 SKIP.
" AT 1 SKIP
FOR EACH emitente USE-INDEX nome. PUT emitente.cod-emitente AT 1 emitente.nome-abrev AT 20 SKIP. END. PUT SKIP(2). PUT " FIM DO RELATORIO". OUTPUT CLOSE.
Resultado:
Curso de Progress
41 | P á g i n a
Abrindo Arquivo TXT automaticamente Permite abrir o arquivo gerado temporariamente com as informações para que o usuário possa visualizar ou imprimir. Exemplo: DEF VAR c-arquivo AS char. ASSIGN c-arquivo = "c:\temp\curso\teste.txt". OS-COMMAND NO-WAIT VALUE("notepad " + c-arquivo).
Resultado: O arquivo especificado sera aberto utilizando o programa notepad do Windows.
Gerando um arquivo do tipo CSV e abrindo no Excel Criar um arquivo utilizando PUT do tipo CSV e abri-lo utilizando o Excel. Exemplo: DEF VAR c-arquivo AS char. ASSIGN c-arquivo = "c:\temp\curso\teste.csv". OUTPUT TO VALUE(c-arquivo) NO-CONVERT. FOR EACH emitente WHERE emitente.cod-emitente >= 26 AND emitente.cod-emitente = 03/01/2010 AND nota-fiscal.dt-emis-nota = 03/01/2010 AND nota-fiscal.dt-emis-nota = 03/01/2010 AND nota-fiscal.dt-emis-nota = 03/01/2010 AND nota-fiscal.dt-emis-nota = date(f-dt-inicial:SCREEN-VALUE) AND nota-fiscal.dt-emis-nota = date(f-dt-inicial:SCREEN-VALUE) AND nota-fiscal.dt-emis-nota modelo) Fechando o Excel excelappl:quit(). Usar apenas quando quiser fechar o excel, como por exemplo após uma impressão. Se quiser que o arquivo fique aberto para consulta ou para salvá-lo manualmente, não utilizar esse comando. Esse comando fecha a planilha excel mas não libera o handle da aplicação, vide nota abaixo. Liberando o Handle ao final da execução (muito importante, inserir esse comando sempre ao final do programa, pois mesmo se o Excel é fechado pelo usuário, a handle fica na memória.) RELEASE OBJECT excelappl NO-ERROR. RELEASE OBJECT chWorksheet NO-ERROR. Repetir o Release para todas as variáveis com-handle. Selecionar pastas excelappl:worksheets:ITEM(1):SELECT. O número relacionado ao ITEM é a pasta que deseja selecionar Adicionar pastas
Curso de Progress
61 | P á g i n a
excelappl:sheets:ADD. Quando o comando acima é executado, a nova planilha criada passa a ser a corrente. Caso queira inserir informações em outras planilhas, é necessário selecionar a planilha desejada conforme tópico acima. Copiar pastas excelappl:sheets:item("Plan 1"):activate. excelappl:Sheets("Plan 1"):Copy(excelappl:Sheets(1)). "Plan 1" é o nome da pasta a ser copiada. (geralmente o excel sugere "Plan 1"). Se for diferente, basta substituir. Sheets(1) é o lugar onde a pasta será copiada. 1 é a primeira pasta, caso queira inserir no final, criar uma variável de controle. Renomear pastas excelappl:worksheets:ITEM(i-item):SELECT. excelappl:worksheets:ITEM(i-item):NAME = "XYZ". excelappl:worksheets:ITEM(i-item):NAME = TRIM(item.it-codigo). Não esquecer de selecionar a pasta primeiro. A variável i-item é a pasta a ser renomeada, que pode receber uma constante ou o valor de uma variável lembrando que não podem ser utilizados caracteres especiais como /, *, [, ]. Sugiro criar uma variável e substituir esses caracteres: ASSIGN c-sheet = REPLACE(c-sheet,"/","_"). ASSIGN c-sheet = REPLACE(c-sheet,"\","_"). ASSIGN c-sheet = REPLACE(c-sheet,"[","("). ASSIGN c-sheet = REPLACE(c-sheet,"]",")"). ASSIGN c-sheet = REPLACE(c-sheet,"*","x"). ASSIGN c-sheet = REPLACE(c-sheet,":","."). ASSIGN c-sheet = REPLACE(c-sheet,"?","|"). excelappl:worksheets:ITEM(i-item):SELECT. excelappl:worksheets:ITEM(i-item):NAME = c-sheet. Visualizar arquivo Excel excelappl:VISIBLE = FALSE. excelappl:VISIBLE = TRUE. Se True, o Excel é aberto e montado para visualização do usuário. Recomendável deixar false durante a execução do programa e no final repetir o comando, porém com TRUE. Isso deixa o programa mais rápido e evita um problema que pode acontecer caso o usuário selecione uma célula enquanto o progress monta o arquivo. Ocultar/mostrar linhas de grade
Curso de Progress
62 | P á g i n a
excelappl:ActiveWindow:DisplayGridlines = False. (ou true) obs.: não confundir linhas do arquivo com impressão de linhas de grade. Para Impressão, vide configuração de páginas. Zoom do arquivo (visualização) excelappl:ActiveWindow:Zoom = 65. /* 65 é o percentual desejado */ Configurações da página (para impressão) Obs.: alterar as configurações somente quando necessário, se não informado, o arquivo utiliza as configurações padrão do Excel. Orientação da página chWorkSheet:PageSetup:Orientation = 1. /* Portrait (retrato) */ chWorkSheet:PageSetup:Orientation = 2. /* Landscape (paisagem) */ Zoom da página (Impressão) chWorkSheet:PageSetup:Zoom = 75. /* 75 é o percentual desejado */ Não confundir com o zoom do arquivo, esse zoom é o ajuste para X % do tamanho normal na configuração da página Ajustar página por X de Altura e Y de Largura (Impressão) chWorkSheet:PageSetup:Zoom = FALSE. /* a zoom tem que ser desativado para funcionar */ chWorkSheet:PageSetup:FitToPagesWide = 1. chWorkSheet:PageSetup:FitToPagesTall = 1000. Tipo/tamanho do Papel chWorkSheet: PageSetup:PaperSize = “tipo do papel desejado”.
Qualidade de impressão chWorkSheet: PageSetup:PrintQuality = 600. Número da primeira página chWorkSheet: PageSetup:FirstPageNumber = 3. Margens Obs.: a medida é em “inches”, é necessário converter para centímetros. Exemplo : 15 = 0.5 cm chWorkSheet:PageSetup:LeftMargin = 15. /* Margem esquerda */
Curso de Progress
63 | P á g i n a
chWorkSheet:PageSetup:RightMargin = 15. /* Margem direita */ chWorkSheet:PageSetup:TopMargin = 15. /* Margem superior */ chWorkSheet:PageSetup:BottomMargin = 15. /* Margem inferior */ chWorkSheet:PageSetup:HeaderMargin = 0. /* Margem cabeçalho */ chWorkSheet:PageSetup:FooterMargin = 0. /* Margem rodapé */ Centralizar página chWorkSheet:PageSetup:CenterHorizontally = True. (ou False) chWorkSheet:PageSetup:CenterVertically = True. (ou False) Cabeçalho e rodapé chWorkSheet:PageSetup:CenterHeader = “Titulo do Relatorio”. /* cabeçalho */ /* rodapé */ chWorkSheet:PageSetup:LeftFooter = "OBS.: " + FILL("_",60) + CHR(10) + FILL("_",66) + CHR(10) + CHR(10) + "____________________" + CHR(10) + " ASS. GESTOR". chWorkSheet:PageSetup:CenterFooter = CHR(10) + CHR(10) + "_____ / _____ / ________" + CHR(10) + “Data do Visto". chWorkSheet:PageSetup:RightFooter = CHR(10) + CHR(10) + "PAGINA: " + "&P/&N". Área de Impressão chWorkSheet:PageSetup:PrintArea = "$A$1:$J$45". /* marca a área de impressão da célula A1 até a J45 Imprimir títulos chWorkSheet:PageSetup:printTitleRows = "$1:$7". /* repete o range de linhas de 1 a 7 na impressão de todas as páginas */ chWorkSheet:PageSetup:printTitleColumns = " $A:$B". /* repete o range de colunas de A a B na impressão de todas as páginas */ Imprimir Linhas de Grade chWorkSheet:PageSetup:PrintGridlines = False. Ou True Obs.: esse comando funciona apenas para impressão. Para visualizar linhas de grade no arquivo, vide “Ocultar/mostrar linhas de grade” Imprimir Preto e Branco chWorkSheet:PageSetup:BlackAndWhite = False. Ou True Imprimir Qualidade Rascunho
Curso de Progress
64 | P á g i n a
chWorkSheet:PageSetup:Draft = False. Ou True Inserindo informações e configurando células Inserir informação em uma célula (comando + usado) excelappl:range("A1"):VALUE = “Item”.
excelappl:range("B1"):VALUE = item.it-codigo. Controlar células por variáveis excelappl:range("A" + STRING(i-linha, "999999") ):VALUE = item.it-codigo. excelappl:range("P" + STRING(i-linha, "99999999")):VALUE = d-valor-total - d-valadto. excelappl:range("A" + STRING(i-linha, "9999 9999")):VALUE = “codigo “ + string(emitente.cod-emitente). Obs.: cada célula recebe apenas um tipo de dado. Ou é caracter, ou inteiro, ou decimal, e assim por diante. Caso queira colocar uma string + um valor, é necessário tranformar o valor em string como no último exemplo. As colunas também podem ser controladas por variáveis, uma forma fácil de fazer isso é criar uma variável extent e controlar as colunas por números. DEF VAR i-coluna AS INTEGER NO-UNDO. DEF VAR c-coluna AS CHAR EXTENT 256 NO-UNDO INITIAL ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U"," V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","A M","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ","BA","BB"," BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR"," BS","BT","BU","BV","BW","BX","BY","BZ","CA","CB","CC","CD","CE","CF","CG","CH", "CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX" ,"CY","CZ","DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","D N","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ","EA","EB","EC" ,"ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES"," ET","EU","EV","EW","EX","EY","EZ","FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ"," GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP ","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ","HA","HB","HC","HD","HE", "HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU ","HV","HW","HX","HY","HZ","IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL" ,"IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV"]. O número máximo de colunas é 256. Assign i-coluna = 5. /* corresponde a coluna E */
Curso de Progress
65 | P á g i n a
excelappl:range(STRING(c-coluna[i-coluna]) + STRING(i-linha, "99999999")):VALUE = item.desc-item. Com isso é também possível controlar as colunas por números. Inserir Cálculo / Fórmula excelappl:range("B20"):VALUE = "=SUM(B2:B19)". excelappl:range("B" + STRING(i-linha, "999999")):VALUE = "=SUM(B" + STRING(i-linha-aux, "999999") + ":B" + STRING(i-linha - 2, "999999") + ")". excelappl:range("B" + STRING(i-linha, "999999"):FormulaR1C1 = "=SUM(R[-" + string(i-conta) + "]C:R[-1]C)". Obs.: comando SUM é o somatório, se precisar de outras fórmulas, vide nome no excel O cálculo também pode ser manual:
excelappl:range("B" + STRING(i-linha, "999999")):VALUE = "=B12+C12+E12". Manipulação de números (Configurar Separador Decimal e Separador de milhar) excelappl:DecimalSeparator = ",". excelappl:ThousandsSeparator = ".". excelappl:UseSystemSeparators = FALSE. Muito útil quando o relatório pode ser gerado em Excel instalado em Português e Inglês (dependendo do usuário). Essa opção funciona apenas no Office 2003 ou posterior, os outros não possuem essa opção que fica em Ferramentas / Opções / Internacional.
Dependendo da linguagem, os números saem distorcidos. Segue abaixo dica para correção: DEF VAR c-DecimalSeparator AS CHAR DEF VAR c-ThousandsSeparator AS CHAR DEF VAR l-UseSystemSeparators AS LOGICAL
NO-UNDO. NO-UNDO. NO-UNDO.
No começo do programa. ASSIGN c-DecimalSeparator = excelappl:DecimalSeparator c-ThousandsSeparator = excelappl:ThousandsSeparator l-UseSystemSeparators = excelappl:UseSystemSeparators. excelappl:DecimalSeparator = ",". excelappl:ThousandsSeparator = ".". excelappl:UseSystemSeparators = FALSE. /* imprimir valores desejados aqui */
Curso de Progress
66 | P á g i n a
No final do programa. excelappl:DecimalSeparator = c-DecimalSeparator. excelappl:ThousandsSeparator = c-ThousandsSeparator. excelappl:UseSystemSeparators = l-UseSystemSeparators. Trocando formato da célula excelappl:range("B1"):numberformat = "#.##0". excelappl:range("B1"):numberformat = "#.##0,00". excelappl:range("B1"):numberformat = "@". /* texto */ IMPORTANTE: Colocar os formatos antes dos valores nas células, principalmente campos texto "@" Verificar outros formatos do excel como data, hora, etc (exatamente como aparece na macro). Alterando tamanho da coluna excelappl:COLUMNS("A:A"):ColumnWidth = 15.00. /* 1 coluna */ excelappl:COLUMNS("B:J"):ColumnWidth = 12.00. /* N colunas */ ou excelappl:COLUMNS("B:J"):SELECT. excelappl:SELECTION:ColumnWidth = 12.00. Alterando tamanho da linha excelappl:Rows("1:1"):RowHeight = 20.5. /* 1 linha */ excelappl:Rows("1:15"):RowHeight = 20.5. /* N linhas Inserindo Linhas excelappl:range("15:15"):INSERT() ou excelappl:range(string(i-linha, "9999") + ":" + string(i-linha, "9999")):INSERT(). Mesclar células excelappl:range("A1:J10):SELECT. excelappl:SELECTION:merge. OBS.: Selecionar o range primeiro e fazer o merge depois Ou fazer direto. excelappl:range("A" + STRING(i-linha) + ":D" + STRING(i-linha)):Merge. excelappl:range("A" + STRING(i-linha) + ":D" + STRING(i-linha + 10)):Merge. “Desmesclar” células
Curso de Progress
67 | P á g i n a
excelappl:range("B" + STRING(i-linha, "999999")):SELECT. excelappl:SELECTION:UNMERGE. Reduzir tamanho da letra automaticamente para caber na célula excelappl:range("A" + STRING(i-linha, "99999999")):ShrinkToFit = TRUE. Quebrar texto automaticamente para caber na célula excelappl:range("A" + STRING(i-linha, "99999999")): WrapText = TRUE. Orientação do Texto dentro da célula excelappl:range("A" + STRING(i-linha, "99999999")): Orientation = 0. /* horizontal */ excelappl:range("A" + STRING(i-linha, "99999999")): Orientation = 90. /* vertical */ O valor varia de -90 a 90 (graus) Alinhamento do valor dentro da célula excelappl:range("A1"):HorizontalAlignment = 3. 3 é o código do alinhamento (centralizado, por exemplo). Caso queira outro, trocar o número para alinhar a direita, esquerda, etc. Para horizontal, os códigos são: HorizontalAlignment = 1. /* Geral */ HorizontalAlignment = 2. /* Esquerda (recuo) */ HorizontalAlignment = 3. /* Centralizado */ HorizontalAlignment = 4. /* Direita (recuo) */ HorizontalAlignment = 5. /* Preencher */ HorizontalAlignment = 6. /* Justificar */ HorizontalAlignment = 7. /* Centralizar Seleção */ Para vertical, os códigos são: VerticalAlignment = 1 /* Superior */ VerticalAlignment = 2 /* Centralizado */ VerticalAlignment = 3 /* Inferior */ VerticalAlignment = 4 /* Justificado */ VerticalAlignment = 5 /* Distribuído */ Alinhamento de um range de células excelappl:COLUMNS("F:O"):SELECT. excelappl:SELECTION:HorizontalAlignment = 3. Ou
Curso de Progress
68 | P á g i n a
excelappl:range("A" + STRING(i-linha) + ":D" + STRING(ilinha)):HorizontalAlignment = 3. Selecionar células 1 célula
excelappl:range("A1"):SELECT. N células
excelappl:COLUMNS("F:O"):SELECT. ou excelappl:ROWS("2:15"):SELECT. ou excelappl:range("A" + STRING(i-linha) + ":D" + STRING(i-linha)): SELECT. Trocar Fonte excelappl:range("A1"):FONT:NAME = "nome-dafonte". excelappl:range("A1"):FONT:BOLD = TRUE. /* negrito */ excelappl:range("A1"):FONT:ITALIC = TRUE. excelappl:range("A1"):FONT:UNDERLINE = TRUE. /* Sublinhado */ excelappl:range("A1"):FONT:SIZE = 12. excelappl:range("A1"):Style = "comma" /* style = aplica um tipo de fonte na célula. excelappl:range("A1"):font:colorindex = 2. /* vide tabela de cores abaixo */ obs.: O range pode ser substituído por controle de variáveis como exemplo abaixo: excelappl:range(STRING(c-coluna[1]) + STRING(i-linha, "99999999") + ":" + STRING(c-coluna[4]) + STRING((i-linha + 5), "99999999")):FONT:size = 12. Trocar cor da célula excelappl:range("A1"):interior:colorindex = 10. /* 10 é o código da cor. */ Tabela de cores Vide tabela de cores mais usadas (precisando de outra cor, tem que testar): 01 preto 02 branco 03 vermelho 04 verde limão 05 azul 06 amarelo 07 rosa 08 azul claro 09 marron 10 verde abacate 11 azul marinho
Curso de Progress
69 | P á g i n a
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 34 44 45 46
terra margenta verde cinza claro cinza azul marinho claro roxo amarelo claro azul claro cor de uva vermelho claro azul celeste roxo claro azul marinho rosa amarelo azul azul clarinho laranja claro laranja meio claro laranja escuro
O valor máximo é 55. Padrões (Sombreamento de célula) excelappl:range("P" + STRING(i-linha)):interior:Pattern = 9. 9 é um dos padrões, verificar os outros no Excel. Congelar painéis excelappl:range("A" + STRING(i-linha, "99999999")):SELECT. /* precisa selecionar as células primeiro */ excelappl:ActiveWindow:FreezePanes = True. Autofiltro excelappl:range("A" + STRING(i-linha, "99999999")):SELECT. /* precisa selecionar as células primeiro */ excelappl:range("A" + STRING(i-linha, "99999999")):autofilter(,,,). Autoajuste de células excelappl:Cells:SELECT. /* precisa selecionar todas primeiro */ excelappl:Cells:EntireColumn:AutoFit. Esse comando simula a ação de clicar no quadrado superior esquerdo entre as linhas e colunas (SELECT) e dar um duplo clique em uma das divisões de células para autoajuste (AUTOFIT)
Curso de Progress
70 | P á g i n a
Inserir Bordas - Borda ao redor de uma seleção excelappl:range("A6:A8"):borderaround(1,,48). excelappl:range("A14:B18"):borderaround(1,3,1). Onde (1,3,1) segue a seguinte regra: 1 – Estilo da Linha (LineStyle) 3 – Grossura da linha (Weight) 1 – Cor da linha (ColorIndex) - Bordas individuais excelappl:Range("b10:d10"):Borders(8):LineStyle = 12. excelappl:Range("d10:d20"):Borders(2):LineStyle = 10. excelappl:Range("b20:d20"):Borders(4):LineStyle = 12. excelappl:Range("b10:b20"):Borders(1):LineStyle = 12. excelappl:Range("A" + string(i-linha)):Borders(8):Weight = 3. excelappl:Range("A" + string(i-linha)):Borders(2):Weight = 2. excelappl:Range("A" + string(i-linha)):Borders(4):Weight = 2. excelappl:Range("A" + string(i-linha)):Borders(1):Weight = 3. Obs.: varia de 1 a 4 excelappl:Range("b10:d10"):Borders(8):ColorIndex = 1. excelappl:Range("d10:d20"):Borders(2):ColorIndex = 1. excelappl:Range("b20:d20"):Borders(4):ColorIndex = 2. excelappl:Range("b10:b20"):Borders(1):ColorIndex = 2. Código para Borders 01 coluna esquerda 02 coluna direita 03 linha inferior 04 linha inferior 05 descendo direita 06 subindo direita 07 nada 08 linha superior Inserir Figura, Desenho chworkSheet:Pictures:Insert("C:\temp\windows.jpg"):Select Quebra de Página Para inserir uma quebrar pagina no Excel.
Curso de Progress
71 | P á g i n a
1a forma: chWorksheet:HPageBreaks:Add(chWorksheet:Range("A45")). /* Horizontal */ chWorksheet:VPageBreaks:Add(chWorksheet:Range("L1")). /* Vertical */ obs.: não é necessário utilizar os dois, pode-se usar apenas um de acordo com a necessidade. Lembrando que a quebra pode ser em uma célula variável, nesse caso fica assim: chWorkSheet:HPageBreaks:Add(chWorksheet:Range("A" + STRING(i-linha))). /* onde i-linha é a variável de controle */ 2a forma: chBreakLine = chWorkSheet:Rows(STRING(i-linha)). /* Horizontal */ chBreakLine = chWorkSheet:COLUMNS("20"). /* Vertical */ chWorkSheet:HPageBreaks:Add(chBreakLine). IMPORTANTE: A quebra de página não funciona se os tamanhos de altura e largura da página forem especificados como modelo abaixo: chWorkSheet:PageSetup:Zoom = FALSE. chWorkSheet:PageSetup:FitToPagesWide = 1. chWorkSheet:PageSetup:FitToPagesTall = 10. PARA FUNCIONAR, O ZOOM NÃO PODE ESTAR DESABILITADO. chWorkSheet:PageSetup:Zoom = 100. /* PODE SER OUTRO VALOR, 70 POR EXEMPLO */ Manipulação do arquivo Mostrar mensagens de Alerta (confirmação para salvar ou imprimir arquivos) excelappl:APPLICATION:DisplayAlerts = FALSE. (ou TRUE) Esse comando é importante para controlar as mensagens do Excel. Por exemplo, para imprimir ou salvar um arquivo onde você não queira que aparece as mensagens de confirmação, basta deixar o parâmetro como FALSE. Sugiro colocar sempre. Salvar arquivos excelappl:Workbooks:Item(1):SaveAs("c:\temp\teste.xls",,,,,,). Cada vírgula representa um parâmetro: Os parâmetros do SaveAs são: 1 – Nome do arquivo
Curso de Progress
72 | P á g i n a
2 – Formato do arquivo (opcional) 3 – Senha (opcional) 4 – Senha para Escrita (opcional) 5 – Somente leitura (True or false) (opcional) 6 – Criar Backup (True or false) (opcional) Obs.: é comum usar apenas o Nome do arquivo conforme exemplo acima. Visualizar a impressão excelappl:VISIBLE = TRUE. /* para funcionar a planilha tem que estar visível */ excelappl:ActiveWindow:SelectedSheets:PrintPreview. Imprimir arquivos excelappl:ActiveWindow:SelectedSheets:Printout. Ou passando parâmetros: Excelappl:ActiveWindow:SelectedSheets:PrintOut(1,true) Onde: Copies:=1, Collate:=True Verificar outros parâmetros do Excel caso necessário. Obs.: para a impressão, sugiro deixar a planilha com “visible” = false e
DisplayAlerts = False conforme modelo abaixo e sempre selecionar as planilhas a serem impressas antes de executar o comando. excelappl:worksheets:ITEM(1):SELECT. /* selecionar a(s) planilha(s) a ser(em) impressa(s) */ excelappl:VISIBLE = FALSE. excelappl:ActiveWindow:SelectedSheets:Printout. excelappl:APPLICATION:DISPLAYALERTS = FALSE. Obs2.: Imprime a planilha na impressora padrão do Windows. Nota Importante: Verificar se a versão do Excel utilizada possui o comando desejado. Por exemplo, a configuração de campo para Separador Decimal não existe no Excel 2000, portanto o comando não vai funcionar.
Dica muito importante: Todos os comandos podem ser obtidos através do próprio Excel através de Macro.
Curso de Progress
73 | P á g i n a
View more...
Comments