Ferramentas
Este livro está destinado a orientar na instalação ou configuração das ferramentas utilizadas para o processo de desenvolvimento e ferramentas internas do sistema.
- Beyond Compare
- Tortoise SVN
- TMS Component
- Controle Bases FireBird
- [BETA] - GExperts
- Monitor Tortoise SVN
- Atualização do FastReport
- Relatório rave
- Adição de campos no Data View do Rave Reports
- Novo método - Adição de campos no Data View do Rave Reports
- Adição de campos na interface gráfica do Rave
- Commit de alterações no relatório
- Procedimentos Frequentes
- Instalação e atualização do Acbr para a SuperSoft
- Adicionar clique direito do mouse nos botões laterais do sistema
- Instalar/Reinstalar PK_Todos
Beyond Compare
Aqui encontrará como instalar, configurar e usar esta ferramenta
Instalação
Beyond Compare é um utilitário que combina funções de comparação de diretório e comparação de arquivos.
Em anexo nesta página há o instalador do programa e a "licença", baixe e extraia.
Execute o BCompare-x64.msi
Não abra o Beyond Compare
Abra a pasta Crack e execute como Administrador o arquivo keygen.exe e aperte em Patch
Encontre o BCompare.exe, geralmente estará na pasta C:\Program Files\Beyond Compare 4 após isso irá aparecer a mensagem indicando que deu certo.
Configuração (Recomendado)
Abra o Beyond Compare e clique em Folder Compare
Na tela que se abre, vá na aba Comparison e deixe-a conforme a imagem a baixo para melhor desempenho
Caso a busca ainda estiver lenda, se atentar se está selecionado para trazer apenas as diferenças.
Menu View poderá deixar da seguinte forma para ter alguns recursos a mais como mostrar os espaços e quebras de linha, facilita para indentação.
Uso da ferramenta
Para comparar duas pastas, clique com o botão direito do mouse em cima da primeira e selecione Select Left Folder for Compare, na pasta que será comparada, apertar botão direito do mouse e selecionar Compare to "[Aqui estará nome da primeira pasta]", veja o exemplo:
O resultado desde exemplo será:
Para passar as alterações de um para outro, pode ser feito clicando na seta amarela e passando um grupo de alterações, ou se quiser passar apenas uma linha do grupo de alterações, clique no numero da linha e após na seta azul como mostra os exemplos a baixo:
Grupo de alterações:
Antes:
Depois:
Uma linha do grupo de alterações:
Clique no numero da linha para aparecer a seta azul:
Após clicar na seta azul:
Tortoise SVN
Por se tratar de uma ferramenta de ampla utilidade no dia a dia, foi criado um livro para os comandos básicos que se encontram disponíveis no livro "SVN - Básico" dentro das prateleiras Processos Qualidade e Processos Desenvolvimento.
Instalação
Poderá baixa-lo na Página Oficial se atentando ao sistema operacional, no meu caso irei no mais atual e 64-bit.
No Wizard que abrir, poderá ir clicando em Next até o final e clicar em Install
Após o processo terminar, apertar em Finish.
Pronto, está instalado.
Configuração
Pré-Requisito
Beyond Compare 4 instalado, se não estiver, veja Aqui como fazer.
Em uma tela qualquer como a Área de Trabalho ou Windows Explorer, clique com botão direito do mouse, TortoiseSVN -> Settings
Navegue até Diff Viewer e deixe ela como a imagem abaixo:
Em Diff Viewer -> Merge Tool e deixe ela como a imagem abaixo:
Após isso clique em Aplicar e depois OK.
Pode acontecer de em alguns momentos pedir a suas credencias em uma tela como esta:
Basta preencher com seu usuário e senha, e prosseguir.
Por se tratar de uma ferramenta muito utilizada no dia-a-dia do desenvolvimento e da qualidade, existe um livro onde são explicados os comandos básicos do SVN e suas utilidades, você pode acessar o livro clicando aqui.
TMS Component
- Fazer Update na pasta C:\Componentes\Terceiros.
- Acessar C:\Componentes\Terceiros\TMS Component Pack 9.0.2.0
- Localizar o arquivo "tmsdXE10group.groupproj"
- Abri-lo pelo Delphi
- Botão direito no arquivo ".bpl" que se encontra na lateral direita do Delphi (dependendo qual Layout estiver usando)
- Faça o Build conforme a imagem disponível abaixo (Item 1)
- Ao finalizar o item 1, fazer o item 2
- Ao finalizar o Item 2, aparecerá uma mensagem, clicar em OK.
- Menu File -> Close All vai pedir para salvar, aperte em Não
- Se já estiver usando a library padrão, não será necessário adicionar o trecho a baixo, caso contrário Adicione a sua Library:
$(CodigoTerceiros)\TMS Component Pack 9.0.2.0
$(RotinasComuns)\NovoGerador
Controle Bases FireBird
O Controle Bases FireBird é usado para fazer trocas de bases
Controle Bases FireBird
-
Liberar acesso de Escrita no arquivo "databases.conf"
• Para Firebird 32 bits acessar o arquivo
"C:\Arquivos de Programas (x86)\Firebird\Firebird_3_0\databases.conf"
• Para Firebird 64 bits acessar o arquivo
"C:\Arquivos de Programas\Firebird\Firebird_3_0\databases.conf"
• Botão direito do mouse > Propriedades > Aba Segurança > Editar.
• Selecionar o seu usuário e Permitir todos os itens.
- Acessar o “Controle Bases FireBird.exe”
• Localizado em "\\ss\qualidade\FERRAMENTAS\Controle Bases FireBird\"
• Colocar o sistema em um diretório com permissão, pode ser em “C:\SuperSoft\Tabelas\”.
• Cadastrar diretório que as bases “*.FDB” estão localizadas.
• Ativar uma base, para ativar, click na check da coluna Ativo ou Botão direito do mouse Ativar Base ou Barra de espaço.
- Alterar a configuração de conexão do sistema SuperSoft (Após ter ativado uma base).
• No caminho do Banco de Dados colocar “SUPERSOFT” e Salvar.
- Alterar a configuração de conexão no IBExpert
[BETA] - GExperts
GExperts é uma ferramenta de auxílio ao desenvolvedor, voltada a atalhos que facilitam a localização de componentes e funções, além de outras utilidades.
Instalação e configurações
GExperts é uma ferramenta de auxílio ao desenvolvedor, voltada a atalhos que facilitam a localização de componentes e funções, além de outras utilidades.
Instalação
A versão utilizada, será a do Delphi 10.2 Tokyo.
Antes de começar a instalação deve-se fechar o Delphi.
Execute o GExperts_10.2.exe.
A instalação é bem simples, sendo necessário apenas dar next, install e finish.
Feito isso, ao abrir o Delphi, o menu já estará disponível na IDE
Configurações
Atualmente, utilizamos o comunicador Miranda NG, que utiliza atalhos com teclas iguais ao GExperts. Como o comunicador tem prioridade, as teclas de atalho poderão acionar o Miranda, impedindo que alguns atalhos do GExperts sejam utilizados. Fica a critério do desenvolvedor decidir quais atalhos irá mudar.
No Miranda NG:
Caso não utilize nenhum dos atalhos, eles poderão ser desabilitados para não ocorrerem conflitos.
No Delphi - GExperts:
As teclas de atalho das funções que serão apresentadas na página atalhos poderão ser alteradas através desse menu de acordo com a necessidade do desenvolvedor.
Atalhos
Os atalhos que serão apresentados a seguir são padrões do GExperts. Caso necessário, eles poderão ser alterados a critério do desenvolvedor de acordo com seus respectivos nomes.
A ferramenta oferece vários atalhos ao desenvolvedor, facilitando a localização de componentes, métodos, palavras-chave, e mais algumas utilidades.
Dentre eles, os de mais destaque são:
Adição de uses (Ctrl + Shift + A) - Delphi
Esse é um atalho próprio do Delphi, mas tem grande valia e poderá ser utilizado ao adicionar um método do sistema a uma unit que não tenha sua use declarada. O atalho irá buscar e apresentar a use necessária para a utilização do mesmo.
Exemplo:
Durante uma implementação, o método do sistema "TProcuraRegistro" foi adicionado à uma unit que ainda não tem informação sobre sua função, ficando sublinhado em vermelho. Para adicionar sua use, basta utilizar as teclas de atalho, selecionar a unit e confirmar.
Por padrão, as uses podem ser adicionadas em "Implementation". Caso ocorra algum erro, passá-la para "Interface".
Modo de edição sincronizada (Ctrl + Shift + J) - Delphi
Mais um atalho nativo do Delphi, será muito útil na hora de refatorar trechos de código, podendo mudar nomes de métodos, propriedades e variáveis dentro do código selecionado
Exemplo:
O trecho apresentado se encontra fora dos padrões de código, sendo necessário refatora-lo.
Selecione o trecho de código desejado, e utilize o atalho para que o código fique selecionado da seguinte forma:
Após isso, basta reescrever a palavra desejada, e as demais palavras em comum dentro do trecho selecionado serão alteradas.
Procedure List (Ctrl + G)
Esse atalho é utilizado para visualizar todos os métodos vigentes na unit, dando mais agilidade na hora de encontrar o método desejado.
Grep Search (Shift + Alt + S)
Esse atalho faz uma busca em determinado local, procurando pela palavra-chave digitada, sendo muito útil para pesquisas.
Em "Files", o alcance da pesquisa pode ser alterado. Na maior parte das vezes, a opção "All files in project" será suficiente.
Caso queira fazer uma pesquisa mais centrada, utilizar a opção "Directories". Em "Directory Search", selecionar o caminho da pasta que será utilizada na pesquisa.
Find Component Reference (Ctrl + Shift + F)
Esse atalho pesquisará no formulário da unit o componente selecionado e, caso encontre, mostrará sua localização.
Exemplo:
Localizando o componente "DBE_CLIENTESCODREG" no formulário de Clientes
Ao utilizar o atalho, o formulário será aberto selecionando o componente marcado.
Identifier Reference (Ctrl + Alt + Setas cima/baixo)
Esse atalho serve para localizar o próximo local onde aparece a palavra selecionada. Útil para acompanhar atribuições de variáveis.
Observação:
Em algumas máquinas, esse atalho rotacionará a tela, sendo necessário altera-lo através do menu "Configuration..." visto anteriormente.
Move to Matching Delimiter (Ctrl + Alt + Seta direita)
Encontrará o delimitador correspondente. Útil na hora de encontrar o end de um begin, o finally de um try, ou até mesmo para selecionar os parênteses do método externo.
Exemplo:
Localizando o end de um begin
Posicionar o mouse no begin e utilizar o atalho
A marcação será redirecionada até a linha em que se encontra o end.
Locate matching delimiter (Ctrl + Alt + Seta esquerda)
Seleciona todo o código que está dentro do delimitador selecionado. Útil ao adicionar uma nova condição, onde é necessário mover o código dois espaços a frente.
Exemplo:
Adicionando uma nova condição ao código
Posicionar o mouse no delimitador end adicionado e utilizar o atalho
Assim, todo o código poderá ser facilmente reposicionado, principalmente ao se tratar de trechos maiores.
Set tab order
Esse atalho, por padrão, não vem configurado.
Adicionar teclas de atalho. Recomendação: Ctrl + Shift + T
Apesar de pouco comum, convencionalmente poderá ser necessário adicionar componentes e alterar o "tab order" dos mesmos.
Com esse atalho, os componentes podem ser organizados apenas arrastando-os, não sendo necessário alterar as propriedades de cada um.
Monitor Tortoise SVN
Ferramenta monitora as alterações (Commits) em projetos no SVN de sua preferencia.
Configuração e Uso
Tortoise Monitor, é ferramenta para acompanhar as alterações em projetos de seu interesse.
Pré-requisito:
- Ter instalado o Tortoise SVN
- Ter conhecimento sobre SVN
Para iniciar, localize em sua máquina o arquivo TortoiseProc.exe que deve estar dentro da pasta de instalação do Tortoise, no meu caso está em : C:\Arquivos de Programas\TortoiseSVN\bin.
Execute ele e verá a seguinte tela:
Primeiro vá na opção 4, deixe conforme exemplo a baixo: (o 10 pode mudar para quantos minutos quiser)
Agora, vamos na opção 1 e começar cadastrar os projetos que queremos:
Name: Coloque o nome que preferir indicar.
Path or URL: Endereço do projeto
Username e Password: Suas credenciais de rede, caso perceba que algo não está dando certo, tente colocar seu Username com todas letras minusculas.
Clique em OK, ficará algo parecido com:
Faça esse mesmo processo com os projetos que tiver interesse, se errar pode usar a opção 2 para editar, e caso não quiser mais, poderá utilizar a opção 3.
Segue exemplo de como fica o acompanhamento:
Atualização do FastReport
Capitulo destinado a atualização no SVN e processo que cada um fará local.
Atualização no ambiente de trabalho
Resumo do processo
Será feito quando houver em nosso repositório, alguma atualização desse componente.
Etapas do processo
- Atualizar a pasta Componentes\Terceiros
- Instalar nova versão do FastReport
- Alterar a Library padrão local caso haja alteração.
- Instalar os pacotes da nova versão.
Ponto inicial do processo
- Atualizar a pasta Componentes\Terceiros
Ponto final do processo
- Instalar os pacotes da nova versão.
Resultado esperado
- Com FastReport atualizado, deverá aparecer novos componentes ou novas possibilidades de acordo com cada atualização (exemplo: integração com novo tipo de bancos).
Instalação
Desinstalar o FastReport antigo
Com Delphi aberto
Aperte em OK.
Instalando a nova versão
Com Delphi fechado
- Acessar a pasta Componentes\Terceiros\FastReport
- Altere o nome da pasta LibD25 para algo diferente, exemplo LibD25 Antiga
- Executar como Administrador Recompile.exe
- Deixar conforme a imagem a baixo se atentando ao campos em destaque, e apertar em "Compile"
Após concluído o processo, pode fechar a janela.
Com Delphi aberto
- Se aparecer erro ao abrir, clique em No.
- Alterar sua Library para a atualizada disponível na Wiki
- Instalar os pacotes, para isso(faça duas vezes esse procedimento):
Para verificar se deu certo, na paleta de componentes, busque por frx e veja a versão e as paletas criadas, caso não apareça, feche e abre novamente o Delphi:
Se tudo tiver dado certo, pode excluir a pasta que renomeou no começo do processo, que nesse caso chamamos de LibD25 Antiga.
Pronto.
Relatório rave
Manipulação de relatórios utilizando rave
Adição de campos no Data View do Rave Reports
Neste capítulo será abordado todo o processo para a adição ou remoção de campos no Data View de um relatório RAVE
Passo 1: Localizar os componentes no formulário
Primeiramente, será necessário localizar o formulário que contém o relatório RvProject que será alterado (normalmente, estará localizado na tela de impressão do relatório). Após localizar o componente rave, será necessário localizar os componentes FDQuery que terão as querys responsáveis por carregar as informações do banco de dados que serão usadas no relatório.
Para localizar os FDQuerys do relatório, clique no componente RvDataSetConnection e verifique o componente apontado na propriedade "DataSet".
Utilize "F11" para acessar as propriedades dos componentes.
Alguns componentes podem estar "escondidos". Ajuste o tamanho do formulário, se necessário.
No exemplo acima, a query pode ser localizada através do caminho RVC_RELAT > CDS_RELAT > DSP_RELAT > QRELAT
Obs.: Guarde o nome do componente que está ligado ao DataSet do RvDataSetConnection, ele será usado posteriormente.
Em alguns casos, a query poderá estar ligada diretamente ao RvDataSetConnection.
Passo 2: Localizar, no código fonte, a montagem da query
Após localizar os TFDquerys, vimos que as querys que alimentam esse relatório são: QRelat e QEmpresa. Descoberto o nome das querys, busca-las dentro do código (utilizando Ctrl + F, por exemplo).
Adicionar ou remover os campos necessários no SELECT referente à query que será utilizada no relatório. Nesse exemplo, o campo "DeducoesServicoes" será incluído ao relatório.
Obs.: Podem existir mais lugares onde a query é montada. Alterar todos os trechos que forem necessários.
Passo 3: Incluir e configurar uma nova FDQuery e um FDConnection ao formulário
Para incluirmos o novo campo ao relatório, será necessário adicionar novos componentes FDQuery e FDConnection ao formulário (caso a lista de componentes não esteja aberta, pode ser encontrada através do menu View > Tool Windows > Tool Palette). Na propriedade "Connection" da nova FDQuery, atribua o novo FDConnection.
No novo FDConnection, realizar as seguintes configurações:
O parâmetro "Database" deve receber o caminho em que a base de dados .FDB está localizada.
Passo 4: Extrair do código a query-alvo completa
Localize o fim da montagem da query no código e adicione um breakpoint uma linha abaixo do fim da montagem. Execute o sistema até que chegue ao breakpoint adicionado e execute a função "MostraParams(NomeDaQuery)". Uma tela com a query será aberta no sistema.
IMPORTANTE: Por garantia, a query gerada deverá ter todos os campos do SELECT, sendo assim, os trechos de DLL deverão ser incluídos.
Copie todo o texto da query gerada, checando até o fim com Ctrl + End para que não fique trechos para trás.
Passo 5: Configurar a nova FDQuery utilizando a query extraída
No formulário, dar duplo clique na FDQuery para que o editor seja aberto. Cole a query copiada anteriormente na caixa "SQL Command" e clique em executar. Os campos gerados pela SQL deverão aparecer na aba "RecordSet". Verifique se todos os campos (inclusive o seu) foram gerados. Checado os campos, clique em "OK".
Com a FDQuery configurada, clique no componente "RvDataSetConnection" referente à query que está sendo trabalhada, e atribua na propriedade "DataSet" a nova FDQuery.
Passo 6: Incluir novo(s) campo(s) no Data View do Rave
Execute o sistema novamente até o breakpoint adicionado no passo 4. Com duplo clique no componente RvProject, abra o Rave Reports. No menu File > Open > Selecione o arquivo .rav do relatório-alvo na pasta do seu branch > Abrir. No menu lateral, localizar o View referente à query que está sendo trabalhada > Clique direito > Refresh.
CUIDADO: Caso alguma mensagem de aviso apareça na tela, consultar um dev antes de realizar o refresh para que nenhum campo seja apagado.
Após realizar o refresh, o novo campo deverá estar localizado dentro do componente view. Salve o relatório (Ctrl + S) e Interrompa novamente a execução do sistema.
Passo 7: Configurar os componentes para a inclusão do(s) novo(s) campos no relatório
No formulário, clique no componente RvDataSetConnection que foi utilizado para adição do(s) campo(s), e na propriedade "DataSet" atribua o componente que estava sendo usado antes.
Na propriedade "ProjectFile" do componente RvProject, atribua o caminho do relatório que foi aberto anteriormente no Rave. Dê um duplo clique no dlg da propriedade "StoreRAV", clique em "Load" para que as alterações sejam carregadas, depois "Close".
Abra o RvProject e cheque se o(s) novo(s) campo(s) está(ão) no Data View após carregar as informações. Feito isso, os novos componentes adicionados podem ser excluídos do formulário.
Novo método - Adição de campos no Data View do Rave Reports
Neste capítulo será abordado todo o processo para a adição ou remoção de campos no Data View de um relatório RAVE
Alterações do novo método encontram-se a partir do Passo 3
Passo 1: Localizar os componentes no formulário
Primeiramente, será necessário localizar o formulário que contém o relatório RvProject que será alterado (normalmente, estará localizado na tela de impressão do relatório). Após localizar o componente rave, será necessário localizar os componentes FDQuery que terão as querys responsáveis por carregar as informações do banco de dados que serão usadas no relatório.
Para localizar os FDQuerys do relatório, clique no componente RvDataSetConnection e verifique o componente apontado na propriedade "DataSet".
Utilize "F11" para acessar as propriedades dos componentes.
Alguns componentes podem estar "escondidos". Ajuste o tamanho do formulário, se necessário.
No exemplo acima, a query pode ser localizada através do caminho RVC_RELAT > CDS_RELAT > DSP_RELAT > QRELAT
Obs.: Guarde o nome do componente que está ligado ao DataSet do RvDataSetConnection, ele será usado posteriormente.
Em alguns casos, a query poderá estar ligada diretamente ao RvDataSetConnection.
Passo 2: Localizar, no código fonte, a montagem da query
Após localizar os TFDquerys, vimos que as querys que alimentam esse relatório são: QRelat e QEmpresa. Descoberto o nome das querys, busca-las dentro do código (utilizando Ctrl + F, por exemplo).
Adicionar ou remover os campos necessários no SELECT referente à query que será utilizada no relatório. Nesse exemplo, o campo "DeducoesServicoes" será incluído ao relatório.
Obs.: Podem existir mais lugares onde a query é montada. Alterar todos os trechos que forem necessários.
Passo 3: Incluir e configurar uma nova FDQuery, um FDConnection e um RvDataSetConnection ao formulário
Para incluirmos o novo campo ao relatório, será necessário adicionar novos componentes FDQuery, FDConnection (este copiaremos da unit (DMCONEXOES.pas) e um RvDataSetConnection ao formulário (caso a lista de componentes não esteja aberta, pode ser encontrada através do menu View > Tool Windows > Tool Palette).
Na propriedade "Connection" da nova FDQuery, atribua o CO_Principal.
Na propriedade "DataSet" do RvDataSetConnection1, atribua a nova FDQuery.
No novo CO_Principal, realize as alterações necessárias para apontar para o banco de dados conectado:
O parâmetro "Database" deve receber o caminho em que a base de dados .FDB está localizada.
Na propriedade "Active" da nova FDQuery, atribua True.
Passo 4: Monte a cláusula com os novos campos
Diferente do método anterior, neste é necessário adicionar apenas os campos desejados, podendo ser utilizado até mesmo CAST.
No formulário, dar duplo clique na FDQuery para que o editor seja aberto. Coloque a cláusula para gerar os campos desejados, clique em execute e verifique se trouxe os campos corretos, exemplo:
Passo 5: Adicionar a nova FDQuery temporariamente no relatório
Com duplo clique no componente RvProject, abrirá o Rave Reports. No menu File > Open > Selecione o arquivo .rav do relatório-alvo na pasta do seu branch > Abrir.
Vá em File > New Data Object. Selecione Direct Data View , clique em Next>
Caso apareçam Warnings, aperte ok em todos
Selecione o novo RvDataSetConnection1 na lista que aparecerá e aperte em Finish.
Nesse momento na lista de Data View Dictionary terá um novo objeto contendo somente os campos que deseja adicionar:
Passo 6: Mover novo(s) campo(s) do novo Data View para o Data View desejado
Com botão SHIFT selecione todos os campos, agora com botão CTRL pressionado, arraste para dentro do Data View desejado
Após mover, os campos poderão estar estranho como a imagem a seguir, basta clicar fora da região que normalizará:
Renomeie os novos Fields conforme o desejado/padrão.
Muito importante seguir corretamente os passos abaixo para não perder o trabalho feito.
Salve o relatório (Ctrl + S) e feche o Rave Report.
Apague os três componentes criados no passo 3,
Abra novamente o Rave Report clicando no RvProject.
Selecione o Data View criado no passo 5 e apague-o.
Salve o relatório (Ctrl + S) e feche o Rave Report.
Passo 7: Carregando as alterações para o dfm
Na propriedade "ProjectFile" do componente RvProject, atribua o caminho do relatório que foi aberto anteriormente no Rave caso não esteja. Dê um duplo clique no dlg da propriedade "StoreRAV", clique em "Load" para que as alterações sejam carregadas, depois "Close".
Abra o RvProject e cheque se o(s) novo(s) campo(s) está(ão) no Data View após carregar as informações.
Adição de campos na interface gráfica do Rave
Para realizar esse processo, é necessário ter os campos adicionados no Data View do relatório.
Nota: Cada relatório tem sua própria construção, o relatório usado nessa página servirá como exemplo.
Para que o campo adicionado no Data View seja exibido no relatório, será necessário adicioná-lo em suas respectivas regiões.
No exemplo a seguir, o campo "DeducoesServicos" será integrado ao relatório.
Localizar as regiões do relatório
Abra o Rave Reports e selecione o arquivo .rav que será alterado através do menu File > Open (caso o relatório já esteja aberto, não é necessário realizar esse passo).
O campo deverá ser adicionado em cada banda que for necessário. Nesse exemplo, o campo "DeducoesServicos" será adicionado nas bandas "bSubCabecalho" e "dbItens".
Adicionar componentes nas regiões
Expanda a banda e veja qual componente está sendo usado para os demais campos.
Nesse exemplo, o componente utilizado é um Memo component.
Ao adicionar o componente, o mesmo também deverá ser encontrado no menu lateral.
Configurar propriedades dos componentes
Mude as propriedades do componente de acordo com os demais.
A propriedade "FontMirror" receberá a família de componentes que ele pertence.
A propriedade "Name" receberá o nome do componente.
É vital que todos os componentes adicionados tenham o prefixo referente à sua região (nesse caso, "ttlt") e que tenha o mesmo nome (DeducoesServicos) em todas as outras regiões para que funcione corretamente.
Na propriedade "Text" é possível alterar o nome do campo que será exibido no relatório.
Campos Data
Na inserção de campos Data, clique em "..." no dlg > Selecione o Data View do campo (DV_Relat) > Selecione o Data Field do campo (DEDUCOESSERVICOS) > Insert Field > o campo deverá aparecer no Data Text > Ok.
Preencha as demais propriedades de acordo com outros componentes
Repare que apesar do prefixo ser diferente "dtlt", o nome do campo continua o mesmo "DeducoesServicos".
Após ter adicionado os campos necessários, salve o relatório.
Carregar alterações no relatório
No formulário (Delphi), dê F11 no componente RvProject e na propriedade "StoreRav" realize o load.
Após realizar o load, execute o sistema e abra o relatório. O novo campo já poderá ser visualizado.
Como mudar o nome do campo no 'Seleciona Campos' e o número de casas decimais exibidas no relatório
Caso o relatório utilize um "Seleciona Campos", o nome do campo que será exibido pode ser alterado através da propriedade "FullName" do campo no Data View do Rave. A propriedade "DisplayFormat" pode ser usada para definir o número de casas que serão exibidas no relatório.
Commit de alterações no relatório
Como realizar o commit do dfm das alterações feitas no Rave
Não esquecer de realizar o load das alterações do relatório no RvProject antes de commitar
As alterações realizadas no relatório ficarão no arquivo .dfm e no arquivo .rav
O arquivo .pas terá apenas as alterações realizadas no código.
No arquivo .dfm, deverá ser realizado apenas o commit do "RaveBlobNew", com exceção da situação que o "ProjectFile" não existe ou está desatualizado, conforme a imagem Exceção. Caso não haja alterações propositais no dfm, o restante pode ser revertido.
Imagem Exceção:
O arquivo .rav e .pas podem ser commitados normalmente
Procedimentos Frequentes
Pendente melhorar
Criar um novo Documento
Um documento seria algo que envolve um Cadastro, Manutenção, DataModule e opcionalmente uma Pesquisa.
Ex.:
Clientes
Produtos
Documentos Fiscais (NFe, NFSe..)
Etc.
Para exemplo, usaremos a criação através da DLL, e como base o caso do Mantis 47332 onde cliente solicita a configuração de um CFOP específico por usuário.
O motivo de não ser feito direto na tela de usuários é o fato de ser customizado.
Não existe apenas uma forma de fazer, então o registrado aqui é uma sugestão.
Após fazer a cópia do trunk para uma pasta dentro do seu branch, navegue até a pasta Sistemas, copie o diretório, dê um copy to na dll em FireDac Skin ("Custom" + Sigla do módulo + Cliente), conforme as imagens abaixo:
Baixa seu código inteiro para darmos continuidade ao trabalho conforme modelo em Local
É muito importante entender bem o precisa ser feito, para desenhar a tela e as tabelas da melhor forma.
Também é importante lembrar que formulários novos são feitos através de herança, então no caso de dúvida pergunte.
Planejamento desde caso:
Nomenclatura: Como será uma informação (Centro de Custos) padrão para usuário e futuramente podem vir a acrescentar novos campos, pensamos em algo no sentido de "Padrões do Usuário", isso reflete no nome das telas e da tabela nova.
Com nome definido, inicie desenhando os campos necessários para atender o cadastro, neste caso usuário já é cadastrado, falta informar o Centro de Custos para ele.
Dica: Olhe alguns exemplos já existentes, isso ajudará muito.
Tela de Inclusão/Edição/Visualização
Crie herdando de "TFORM_EDIT" ou "TFORM_EDI1T", o que muda é o sentido da barra de ferramentas (Vertical ou Horizontal).
A propriedade Name do formulário costuma seguir alguns padrões, neste exemplo "FORM_" + Nome da tabela + "_EDIT".
A propriedade Caption do formulário, neste caso como se trata apenas do Centro de Custos, então chamaremos de "Centro de Custos por Usuário"
Baseado na tela de Usuários já existentes, puxamos algumas informações em ReadOnly apenas para usuário ter certeza que é o usuário correto que escolheu, e o campo que iremos cadastrar, a princípio a tela está:
Com a primeira tela feita, fica mais fácil de desenhar a tabela, que para este caso será "PadroesUsuarios":
Criar tabela:
Em alguns casos a criação estará na uit uCriaTabDll.pas dentro do fonte da DLL, em outro caso estará dentro de DllSource.pas. Caso não tenha em nenhuma das duas, então crie a uCriaTabDll.pas
A principio será necessário apenas a procedure "RegistraTabelas" e a function "Cria" + Nome da Tabela.
A procedure "RegistraTabelas" será para adicionar uma descrição da tabela nova dentro da tabela "Sistemas". Já a function ""Cria" + Nome da Tabela, é usada para adicionar na tabela "IntegRef" que por sua vez é responsável por simular as chaves estrangeiras do nosso banco.
Os métodos ficaram mais ou menos assim:
function "Cria"+ Nome da Tabela (no caso, CriaPadroesUsuarios):
Nessa function estamos criando a tabela desejada no banco por linhas de código.
Passamos na "LAuxilar.FieldDefs.Add" os seguintes parâmetros:
('Nome do campo', Tipo do campo, Tamanho de caracteres do campo, True se for uma PK);
Anotações importantes:
- O tipo do campo deve ser adicionado como "ft" + tipo do valor. Exemplo (Varchar no banco-> ftString);
- O ultimo parâmetro, tem um valor default de "False", sendo assim, caso não seja passado, o campo não sera uma PK;
procedure RegistraTabelas:
Nessa procedure, estamos fazendo o vinculo das chaves primarias (PK) e chaves estrangeiras (FK) do banco por linhas de código.
Passamos na "LMatVal" os seguintes valores:
(tabela pai, tipo da checagem que será feita, tabela filha, chaves primarias na tabela pai, chaves estrangeiras da tabela filha, se vai ser eliminado da tabela pai, se vai ser eliminada da tabela filha e a sigla do sistema)
*Lembrando que para a criação da tabela seja efetuada é necessário que o sistema ao ser aberto passe pela tela de atualizações, ou seja, é necessário mudar no banco, na tabela "Global" + sigla do módulo para versões anteriores *
Explicando o DLG nos Edits:
Basicamente o componente dlg tem algumas propriedades específicas, elas são:
-TabelaPesq:
Seleciona a tabela que o dlg do edit vai buscar os dados, por exemplo: usuários;
-CampoPesq:
Deve ser inserido um campo da tabela selecionada no TabelaPesq para efetuar a busca no banco, por exemplo: NomeLog;
-DataSource:
Deve ser passado o DataModule.DataSource, por exemplo: DM_PADROESUSUARIOS.DS_MANUT;
-DataField:
O campo que será buscado no DataSource selecionado, por exemplo: NomeLog;
Exemplos do caso 0047322:
Componente TKWRCriterios
o componente Critérios tem uma propriedade chamada "Criterios", ao dar dois cliques nele, se deparamos com a seguinte tela:
Ao clicarmos no único botão disponível, criamos um novo critério, ele será adicionado com índice 0 e com um nome padrão:
Ao clicar no item adicionado, na aba "Object Inspector" irão aparecer as propriedades daquele item, iremos alterar algumas delas, sendo elas as seguintes:
Na propriedade Campo iremos adicionar o campo da tabela nova que criamos;
Na propriedade Chave iremos deixar marcado caso o campo seja uma PK e iremos desmarcar caso não seja;
Na propriedade Descrição é o título de onde os dados daquele campo vão ser inseridos;
Na propriedade Tabela vai ser inserido o nome da tabela que criamos;
Exemplo
No componente critérios do caso 0047332, as propiedades alteradas ficaram dessa maneira:
Devemos lembrar de adicionar também as chaves estrangeiras que estarão na nossa nova tabela, no exemplo citado, sendo os itens Usuarios.Nome e CenCust.Custo;
Podemos ver de maneira mais exemplificada como o critérios funciona realizando o debug do código, vamos lembrar que até o momento nenhuma query de SQL foi feita, porem ao usarmos o "MostraParams" no nosso DataModule com a QManut por exemplo:
iremos obter esse resultado ao voltar para o sistema:
resumindo, o próprio componente ao ser configurado, monta essa query.
Evento OnSelect do Dlg:
Podemos utilizar a criação do Evento OnSelect do Dlg para escrever trechos que possam ser úteis na tela, por exemplo:
Nesse trecho estamos fazendo uma validação para verificar se o usuário selecionado já tem um centro de custo vinculado a ele naquela empresa. Caso ele não tenha, trazemos não só o Campo NomeLog para o Field, mas trazemos também o campo nome(que seria o nome completo) para o Edit de nome do usuário. Exemplificando na tela do sistema:
Ao clicar no Dlg do Edit
Nos deparamos com a tela de usuários:
Ao clicar em um usuário, ele já puxa o campo nome para o Edit:
A mesma coisa acontece com o centro de custo:
Ao clicarmos em um centro de custo, ele puxa para a tela, tanto o centro de custo escolhido, como a descrição do mesmo:
Validações:
É importante lembrar que mesmo já esteja funcional, devemos validar algumas informações, como o botão gravar, o botão fechar, validar se o usuário selecionado já tem um centro de custo cadastrado. Para essas validações, podemos usar eventos, como o FormClose, OnClick, OnSelect entre outros, Por exemplo:
Aqui vemos que ao tentar selecionar um usuário que já tinha centro de custo cadastrado, então o sistema deve dar um alerta e impedir que eu continue o processo.
Algumas functions/procedures que podem ajudar nesse passo de validações, são por exemplo:
TVerificaCampos.Verificar();
Ela basicamente verificaquais campos do DataModule foram alterados, sendo passados como parâmetros o DataModule em si e uma variável para os campos alterados, declarada no "private" do tipo Variant, da seguinte forma:
DataModule.DataSource.DataSet.Modified;
Faz a verificação se houve alteração nos campos do DataModule
TExisteRegistro.Verificar()
A função TExisteRegistro, faz a verificação se já existe um registro em uma tabela específica com campos específicos passados por parâmetros, sendo 4 ao total, os parâmetros que são passados os seguintes:
- Tabela que vai buscar;
-Os campos que serão verificados;
-Os conteúdos que serão buscados
-O tipo primitivo dos dados
Ficando no código dessa maneira:
DataModule.Gravar()
É inserido no BT_GRAVA da tela, basicamente salva no banco o que foi adicionado no DataModule, pode ser utilizado dentro de um try para facilitar a manipulação:
Tela de manutenção
A tela pai FORM_BROWSE já vem com os botões criados por herança porem as funções de cada botão devem ser adicionadas manualmente, pois diversas funções usam o DataModule individual do documento, sendo assim, os botões não fazem nada quando criados.
Três desses botões (Novo, Edita e Visualiza), utilizam linhas de código praticamente iguais:
Eles tem o mesmo código, pois abrem o mesmo formulário, a única mudança é em um dos parâmetros, mudando o Modo, usado da unit uAberturaTipo e a partir disso fazer as mudanças necessárias no Evento OnCreate da tela de cadastro, deixando informações em ReadOnly ou deixando todas com a propriedade Enabled como "False" para que o usuário apenas visualize as informações (AtVisualiza).
O botão de Excluir, é necessário muito cuidado pois muitas validações devem ser feitas antes de um registro ser excluído, como por exemplo, no caso da tela "Usuários", não é possível permitir que o SUPERVISOR seja excluído, então essa validação é usada:
Botão "Avançar" da tela de manutenção:
Para fazermos o botão de selecionar próximo na tela de manutenção funcionar, não é necessário montar uma query específica para isso, o próprio componente "CRITERIOS" faz isso para nós.
inicialmente temos que declarar a unit de manutenção no DataModule.
Após isso devemos clicar no componente "CRITERIOS" do DataModule e fazer algumas alterações na propriedade Criterios.
a tela que será aberta já foi documentada aqui porem vamos alterar algumas propriedades que não foram citadas ainda.
Primeiramente vamos selecionar o campo que queremos fazer a busca, no nosso exemplo, O PadroesUsuarios.NomeLog.
Agora vamos nos atentar as propriedades "Inicio" e "Fim"
Clicando na seta no fim do campo, serão exibidos todos os componentes da unit que foi declarada e a partir desse ponto, temos apenas que ligar o inicio e o fim ao mesmo componente.
e após isso, ao clicar no botão Avançar, na tela de manutenção, ele já faz a pesquisa sozinho com base nos componentes ligados ao componente que foi relacionado ao campo, não necessitando a montagem de uma query só pra isso.
Após fazer esses passos, a unit de manutenção, pode ser retirada das declarações de uses do DataModule.
Criar ou editar tabela
No sistema:
Se for específica do módulo, unit CriaTabEsp.pas, caso contrário só CriaTab.pas pois é global; Acha a procedure que monta a tabela, exemplo "CriaOrcam" e faz a edição.
Se for específica do módulo, unit "uMatrizAlt" + Sigla do módulo Verifica no final um exemplo, copie e adapte para sua alteração.
Unit "uAtualizaCampoNulo" + Sigla do módulo; Verifica no final um exemplo, copie e adapte para sua alteração.
Em DLL:
DLL nova ou que não tenha nenhuma criação de tabela ainda:
Por questão de estrutura sugiro copiar uma "uCriaTabDLL" de alguma DLL que já existe
Criar uma function respeitando a assinatura "Cria" + NomeTabela
Na implementação da function, é a mesma estrutura de criação de tabela nativa do sistema
Com o nome da function já decidido, adicionar no .dpr para que seja chamado, exemplo " CriaConfDll Name 'CriaConfDll' "
Em DLLSource, dentro da function "RegistraTabelas":
- AtualizaTabelaSistemas: colocar conforme a estrutura do "TProcuraRegistro"
- AtualizaTabelaIntegRef: Caso necessário aumentar o tamanho do array, preencher ele conforme a estrutura de "chave primaria" e "chave estrangeira"
Criar nova DLL
Uma DLL é um arquivo utilizado para a criação de Customizações
Neste exemplo utilizaremos a criação de uma DLL para a empresa Matricer, e como base o caso do Mantis 47207
Criação da DLL
Após fazer a cópia do trunk para uma pasta dentro do seu branch, navegue até a pasta Sistemas, copie o diretório, depois vá até "outros/DLLs/Dlls Vazias" e dê um copy to na dll do módulo que deseja utilizar, conforme as imagens abaixo:
Posteriormente vá até o local onde está sua DLL vazia e renomeie ela de acordo com o padrão:
"Custom" + Sigla do Módulo + Nome do Cliente
Baixe seu código inteiro para darmos continuidade ao trabalho conforme modelo em Local.
Modificações para o funcionamento da DLL
Na pasta da Custom haverá um arquivo chamado DllSource.pas. Nele será preciso declarar o nome do Processo da DLL que será utilizado na função ExisteProcesso.
Exemplo de utilização da função ExisteProcesso:
Ao adicionar em "const ProcessoDestaDLL", é necessário colocar um "|" (pipe) e depois o nome do Processo da DLL em letras maiúsculas
Também é necessário ir na pasta project e no arquivo (Custom + Sigla do Módulo).dpr e inserir o nome da DLL que aparecerá no canto inferior direito da tela do Módulo.
Subindo a DLL para a pasta de DLLs
Após realizar as alterações na DLL, é necessário subir ele para a pasta EmFireDac Skin.
Existem duas maneiras de realizar este processo.
Método 1:
Vá até a pasta EmFireDac Skin (outros/DLLs/EmFireDac Skin) e copie o caminho dela.
Depois vá até onde está localizada sua pasta da Custom e de um Copy To dela para dentro da pasta EmFireDac Skin.
Método 2:
Primeiramente realize o Checkout da pasta EmFireDac Skin para a sua máquina local.
Posteriormente copie a sua pasta da Custom para dentro da pasta EmFireDac Skin.
Dê um Add na sua pasta da Custom.
Por fim, realize o Commit para a pasta EmFireDac Skin.
Executando sistema com a DLL
Para executar o sistema, deverá mudar as configurações em 'Project > Options'. Alterar as seguintes configurações:
Após configurar, realizar o build e executar.
Instalação e atualização do Acbr para a SuperSoft
A pasta ACBr foi criada em nosso repositório para evitar quebras quando houver grandes atualizações. Também para ter documentado e versionado os ajustes que fazemos para atender nossa demanda, geralmente envolvendo provedores de NFSe.
https://wiki.supersoft.com.br/svn/desenvolvimento/outros/ACBr
Quando houver necessidade de alterar registro relativo a cidades, devem ser alterados os seguintes arquivos “ACBrNFSeXServicos.ini” dentro de “Componentes\ACBr\Fontes\ACBrDFe\ACBrNFSeX” e "Cidades.ini" dentro do local "ACBr/Exemplos/ACBrDFe/ACBrNFSe/ArqINI", executando o
“Compila_RES.BAT.bat “, e commitar os arquivos “ACBrNFSeXServicos.ini”, “ACBrNFSeXServicos.res” e "Cidades.ini" com as alterações.
No commit não esquecer de apontar qual caso gerou essa necessidade e o que foi alterado.
A nova ferramenta que seria essa versão “X”, não necessita de um arquivo com as cidades junto com a pasta de instalação, o
arquivo “.res” ao gerar o exe já faz isso.
Em alguns casos não se faz necessário reinstalar o ACBr, mas em situações que é necessário utilizar o "ACBrInstall_Trunk2.exe" e se atentar a seguintes opções que devem ficar desmarcadas:
Forma simples de atualizar nosso ACBr:
Baixar original de svn://svn.code.sf.net/p/acbr/code/trunk2 .
Passar as alterações nossas para lá. *
Substituir o arquivo oculto ".svn" da pasta original da ACBr, pelo ".svn" nosso.
Commitar conferindo o endereço destino e se nossas alterações não foram retiradas.
*Temos atualmente alterações nossas nas Units:
/ACBr/Exemplos/ACBrDFe/ACBrNFSe/ArqINI/Cidades.ini
/ACBr/Fontes/ACBrDFe/ACBrNFSe/PCNNFSe/pnfsNFSeG.pas
/ACBr/Fontes/ACBrDFe/ACBrNFSe/PCNNFSe/pnfsNFSeW_CONAM.pas
Adicionar clique direito do mouse nos botões laterais do sistema
Esse guia tem o intuito de mostrar os processos para a adição de um PopUpMenu de cadastro e manutenção nos botões laterais.
Alterações feitas na unit FormPri:
Na procedure AdicionarBotao, foi adicionado um PopupMenu que recebe 'nil' ao ser criado, para que não quebre os botões que não receberem o PopUp. Segue o exemplo do que foi feito:
Na procedure AdicionarBotao, a linha que cria o botão nas laterais recebe a propriedade de um PopupMenu e foi adicionado na chamada da procedure, o parâmetro do PopUpMenu.
Os passos até agora, não precisam ser refeitos, pois a FormPri é uma tela pai, logo, as outras telas herdam dela. Foi apresentado apenas para informação do que foi feito.
Na unit Princip:
Na procedure CriarBotoes, logo abaixo da declaração dos ícones usados nas laterais, é necessário criar uma função que vai receber o MenuItem do cadastro e da manutenção e vai retornar um PopUpMenu.
Nessa função é feita a criação dinâmica tanto do PopUp como dos itens dele para que não sejam valores fixos e sim, de acordo com o clique do mouse.
A seguir está um exemplo de como a função pode ser feita:
Ainda no Princip, devemos passar como parâmetro da procedure AdiconarBotao, a nossa função criada no passo anterior e dentro dos parâmetros da nossa função, passar o MenuItem do cadastro e da manutenção do botão específico.
A seguir, está uma demonstração de como deve ser adicionado os parâmetros na função AdicionarBotao, para que os botões, assim que criados, possam chamar o PopUp do cadastro e da manutenção dele mesmo.
Lembrando que essa implementação não vai quebrar as outras telas que não utilizarem a melhoria pois foi feita de maneira dinâmica, então não implementa-la é uma opção, porém por ser uma melhoria interna, é interessante utiliza-la.
Instalar/Reinstalar PK_Todos
Requisitos:
Variável de ambiente deve estar como "C;\Codigo Fonte".
Pasta "C;\Codigo Fonte" estar atualizada.
Acessar "C:\Codigo Fonte\Componentes Instalados\SS\Fontes\PK_Todos.dpk", abrir com Delphi.
Caso esteja instalado, fazer o Uninstall.
Para instalar, faça a sequencia Build -> Compile -> Install.
Volte a variável de ambiente ao original.
Feche o Delphi sem salvar as alterações.