# Ferramentas

# Beyond Compare

Aqui encontrará como instalar, configurar e usar esta ferramenta

# Instalação

<p class="callout info">Beyond Compare é um utilitário que combina funções de comparação de diretório e comparação de arquivos.</p>

Em anexo nesta página há o instalador do programa e a "licença", baixe e extraia.

[![37.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/37.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/37.png)

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

[![38.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/38.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/38.png)

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.

[![39.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/39.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/39.png)

# Configuração (Recomendado)

Abra o Beyond Compare e clique em **Folder Compare**

[![40.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/40.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/40.png)

Após clique no Menu **Session -&gt; Session Settings...**

**[![41.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/41.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/41.png)**

Na tela que se abre, vá na aba **Comparison** e deixe-a conforme a imagem a baixo para melhor desempenho

[![42.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/42.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/42.png)

Caso a busca ainda estiver lenda, se atentar se está selecionado para trazer apenas as diferenças.

[![43.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/43.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/43.png)

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.

[![44.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/44.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/44.png)

Menu **Tools -&gt; Options** algumas opções para facilitar o trabalho, isso faz aparecer uma linha na vertical na coluna **130**, assim facilita ao revisar códigos.

[![45.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/45.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/45.png)

Menu **Tools -&gt; File Formats** aba **Misc** poderá deixar da seguinte forma para que quando apertar **TAB** ele acrescente dois espaços

[![46.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/46.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/46.png)

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

[![19.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/19.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/19.png)

O resultado desde exemplo será:

[![20.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/20.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/20.png)

Poderá navegar pelas pastas e encontrar arquivos alterados, dando um duplo clique verá as alterações de um arquivo para o outro como mostra o exemplo a seguir:

[![21.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/21.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/21.png)

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:

[![22.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/22.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/22.png)

Depois:

[![23.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/23.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/23.png)

**Uma linha do grupo de alterações:**

Clique no numero da linha para aparecer a seta azul:

[![24.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/24.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/24.png)

Após clicar na seta azul:

[![25.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/25.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/25.png)

# 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 <span style="text-decoration: underline;">[Página Oficial](https://tortoisesvn.net/downloads.html)</span> se atentando ao sistema operacional, no meu caso irei no mais atual e 64-bit.

[![28.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/28.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/28.png)

No Wizard que abrir, poderá ir clicando em **Next** até o final e clicar em **Install**

[![29.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/29.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/29.png)

Após o processo terminar, apertar em Finish.

Pronto, está instalado.

# Configuração

<p class="callout warning">Pré-Requisito  
Beyond Compare 4 instalado, se não estiver, veja <span style="text-decoration: underline;">[Aqui](https://wiki.supersoft.com.br/books/beta-ferramentas/page/beyond-compare)</span> como fazer.</p>

Em uma tela qualquer como a Área de Trabalho ou Windows Explorer, clique com botão direito do mouse, **TortoiseSVN -&gt; Settings**

Navegue até **Diff Viewer** e deixe ela como a imagem abaixo:

[![31.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/31.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/31.png)

Em **Diff Viewer -&gt; Merge Tool** e deixe ela como a imagem abaixo:

[![32.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/32.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/32.png)

Após isso clique em Aplicar e depois OK.

<p class="callout info">Pode acontecer de em alguns momentos pedir a suas credencias em uma tela como esta:</p>

[![33.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/33.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/33.png)

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 [<span style="text-decoration: underline;">aqui.</span>](https://wiki.supersoft.com.br/books/svn-basico)

# TMS Component

- Fazer [<span style="text-decoration: underline;">Update</span>](https://wiki.supersoft.com.br/books/svn-basico/page/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

[![15.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-01/scaled-1680-/15.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-01/15.png)

- Ao finalizar o Item 2, aparecerá uma mensagem, clicar em OK.
- Menu **File -&gt; Close All** vai pedir para salvar, aperte em **Não**
- Se já estiver usando a [<span style="text-decoration: underline;">library padrão</span>](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/library-padrao), não será necessário adicionar o trecho a baixo, caso contrário <span style="text-decoration: underline;">[Adicione](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/adicionareditar-library)</span> a sua **Library:**

```Pascal
$(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"

[![image-1624637981670.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624637981670.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624637981670.png)

 • Botão direito do mouse &gt; Propriedades &gt; Aba Segurança &gt; Editar.  
 • Selecionar o seu usuário e Permitir todos os itens.

[![image-1624638024093.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638024093.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638024093.png)

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

[![image-1624638067758.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638067758.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638067758.png)

• Cadastrar diretório que as bases “\*.FDB” estão localizadas.

[![image-1624638093221.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638093221.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638093221.png)

[![image-1624638099808.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638099808.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638099808.png)

[![image-1624638114164.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638114164.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638114164.png)

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

[![image-1624638206934.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638206934.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638206934.png)

 • No caminho do Banco de Dados colocar “SUPERSOFT” e Salvar.

[![image-1624638231845.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624638231845.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624638231845.png)

- Alterar a configuração de conexão no IBExpert

[![image-1624645245896.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/image-1624645245896.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/image-1624645245896.png)

# [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

<p class="callout info">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.</p>

#### 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 <span style="text-decoration: underline;">[GExperts\_10.2.exe](https://wiki.supersoft.com.br/attachments/29)</span>.

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

[![image-1613062949654.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613062949654.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613062949654.png)

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

[![image-1613063622856.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613063622856.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613063622856.png)[![image-1613064051599.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613064051599.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613064051599.png)

Caso não utilize nenhum dos atalhos, eles poderão ser desabilitados para não ocorrerem conflitos.

##### No Delphi - GExperts:

[![image-1613064281901.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613064281901.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613064281901.png)

As teclas de atalho das funções que serão apresentadas na página [<span style="text-decoration: underline;">atalhos</span>](https://wiki.supersoft.com.br/books/beta-ferramentas/page/atalhos) poderão ser alteradas através desse menu de acordo com a necessidade do desenvolvedor.

# Atalhos

<p class="callout info">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. </p>

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:

[![image-1613066583139.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613066583139.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613066583139.png)

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.

[![image-1613066718207.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613066718207.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613066718207.png)

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:

[![image-1616423109037.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/scaled-1680-/image-1616423109037.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/image-1616423109037.png)

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:

[![image-1616423279898.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/scaled-1680-/image-1616423279898.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/image-1616423279898.png)

Após isso, basta reescrever a palavra desejada, e as demais palavras em comum dentro do trecho selecionado serão alteradas.

[![image-1616423594120.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/scaled-1680-/image-1616423594120.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-03/image-1616423594120.png)

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

[![image-1613067516943.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613067516943.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613067516943.png)

#### Grep Search (Shift + Alt + S)

Esse atalho faz uma busca em determinado local, procurando pela palavra-chave digitada, sendo muito útil para pesquisas.

[![image-1613069029400.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613069029400.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613069029400.png)

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

[![image-1613070194935.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613070194935.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613070194935.png)

[![image-1613070220279.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613070220279.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613070220279.png)

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

[![image-1613072117781.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613072117781.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613072117781.png)

Posicionar o mouse no *begin* e utilizar o atalho

[![image-1613072178026.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613072178026.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613072178026.png)

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

[![image-1613073129252.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613073129252.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613073129252.png)

[![image-1613073250916.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613073250916.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613073250916.png)

Posicionar o mouse no delimitador *end* adicionado e utilizar o atalho

[![image-1613073379980.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613073379980.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613073379980.png)

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.

Acessar menu "configuration..." visto na página anterior

[![image-1613073659710.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613073659710.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613073659710.png)

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.

[![image-1613073870703.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/scaled-1680-/image-1613073870703.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-02/image-1613073870703.png)

# Monitor Tortoise SVN

Ferramenta monitora as alterações (Commits) em projetos no SVN de sua preferencia.

# Configuração e Uso

<p class="callout info">Tortoise Monitor, é ferramenta para acompanhar as alterações em projetos de seu interesse.</p>

##### Pré-requisito:

\- Ter instalado o <span style="text-decoration: underline;">[Tortoise SVN](https://wiki.supersoft.com.br/books/beta-ferramentas/chapter/tortoise-svn)  
  
</span>- 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.**

[![59.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/59.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/59.png)

Execute ele e verá a seguinte tela:

[![60.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/60.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/60.png)

Primeiro vá na opção 4, deixe conforme exemplo a baixo: (o 10 pode mudar para quantos minutos quiser)

[![61.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/61.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/61.png)

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:

[![63.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/63.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/63.png)

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:

[![64.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/64.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/64.png)

# 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

\- <span style="text-decoration: underline;">[Instalar nova versão do FastReport](https://wiki.supersoft.com.br/books/beta-ferramentas/page/instalacao-38b)</span>

\- <span style="text-decoration: underline;">[Alterar a Library padrão](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/adicionareditar-library)</span> 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

<p class="callout warning">Com Delphi aberto</p>

Menu Component -&gt; Install Packages -&gt; Localize e remova os itens abaixo:

[![67.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/67.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/67.png)

Aperte em OK.

#### Instalando a nova versão

<p class="callout warning">Com Delphi fechado</p>

\- Acessar a pasta **Componentes\\Terceiros\\FastReport**

\- Altere o nome da pasta ***LibD25*** para algo diferente, exemplo ***LibD25 Antiga***

\- Executar como **Administrador** ***Recompile.exe***

[![68.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/68.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/68.png)

\- Deixar conforme a imagem a baixo se atentando ao campos em destaque, e apertar em **"Compile"**

**[![661.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/661.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/661.png)**

Após concluído o processo, pode fechar a janela.

<p class="callout warning">Com Delphi aberto</p>

\- Se aparecer erro ao abrir, clique em ***No.***

\- <span style="text-decoration: underline;">[Alterar sua Library](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/adicionareditar-library)</span> para a atualizada disponível na Wiki

\- Instalar os pacotes, para isso(faça duas vezes esse procedimento):

- Menu Component -&gt; Install Packages -&gt; Botão Add
- Navegar até a LibD25 dentro de Componentes\\Terceiros\\FastReport
- Selecionar todos arquivos ".bpl" e apertar em Abrir
- Irá aparecer várias mensagens de erro, pode apertar OK em todas.
- Feche a janela.

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:

[![69.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/69.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/69.png)

Se tudo tiver dado certo, pode excluir a pasta que renomeou no começo do processo, que nesse caso chamamos de ***LibD25 Antiga.***

Pronto.

# Desconsiderar - excluir página

<p class="callout info">Novo método a partir do ponto 2</p>

#### 1. Desinstalar o FastReport antigo

<p class="callout warning">Com Delphi aberto</p>

Menu Component -&gt; Install Packages -&gt; Localize e remova os itens abaixo:

[![67.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/67.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/67.png)

Aperte em OK.

#### Instalando a nova versão

<p class="callout warning">Com Delphi fechado</p>

\- Acessar a pasta **Componentes\\Terceiros\\FastReport**

\- Altere o nome da pasta ***LibD25*** para algo diferente, exemplo ***LibD25 Antiga***

\- Executar como **Administrador** ***Recompile.exe***

[![68.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/68.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/68.png)

\- Deixar conforme a imagem a baixo se atentando ao campos em destaque, e apertar em **"Compile"**

**[![661.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/scaled-1680-/661.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-04/661.png)**

Após concluído o processo, pode fechar a janela.

<p class="callout warning">Com Delphi aberto</p>

\- Se aparecer erro ao abrir, clique em ***No.***

\- <span style="text-decoration: underline;">[Alterar sua Library](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/adicionareditar-library)</span> para a atualizada disponível na Wiki

## 2. Instalar os pacotes

Para realizar o procedimento:

- Menu Component -&gt;

 Instalar os pacotes, para isso (faça duas vezes esse procedimento):

- Menu Component -&gt; Install Packages -&gt; Botão Add
- Navegar até a LibD25 dentro de Componentes\\Terceiros\\FastReport
- Selecionar todos arquivos ".bpl" e apertar em Abrir
- Irá aparecer várias mensagens de erro, pode apertar OK em todas.
- Feche a janela.

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:

[![69.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/scaled-1680-/69.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-06/69.png)

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

<p class="callout info">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*</p>

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

<p class="callout info">Utilize "F11" para acessar as propriedades dos componentes.</p>

<p class="callout info align-left">Alguns componentes podem estar "escondidos". Ajuste o tamanho do formulário, se necessário.</p>

[![image-1622049529709.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622049529709.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622049529709.png)

<p class="callout info">No exemplo acima, a *query* pode ser localizada através do caminho RVC\_RELAT &gt; CDS\_RELAT &gt; DSP\_RELAT &gt; QRELAT</p>

<p class="callout warning">Obs.: Guarde o nome do componente que está ligado ao *DataSet* do *RvDataSetConnection*, ele será usado posteriormente.</p>

[![image-1622049640256.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622049640256.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622049640256.png)

<p class="callout info">Em alguns casos, a *query* poderá estar ligada diretamente ao *RvDataSetConnection*.</p>

#####  

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

[![image-1622051469729.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622051469729.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622051469729.png)

<p class="callout warning">Obs.: Podem existir mais lugares onde a *query* é montada. Alterar todos os trechos que forem necessários.</p>

#####  

##### 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* &gt; *Tool Windows* &gt; *Tool Palette*). Na propriedade "*Connection*" da nova *FDQuery*, atribua o novo *FDConnection*.

[![image-1622050347673.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622050347673.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622050347673.png)

 No novo *FDConnection*, realizar as seguintes configurações:

[![image-1622050579269.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622050579269.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622050579269.png)

<p class="callout info">O parâmetro "*Database*" deve receber o caminho em que a base de dados .FDB está localizada.</p>

#####  

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

<p class="callout danger">IMPORTANTE: Por garantia, a *query* gerada deverá ter todos os campos do *SELECT*, sendo assim, os trechos de DLL deverão ser incluídos.</p>

[![image-1622052160887.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622052160887.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622052160887.png)

[![image-1622052366197.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622052366197.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622052366197.png)

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

[![image-1622052739889.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622052739889.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622052739889.png)

Com a *FDQuery* configurada, clique no componente "*RvDataSetConnection*" referente à *query* que está sendo trabalhada, e atribua na propriedade "*DataSet*" a nova *FDQuery*.

[![image-1622053072383.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622053072383.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622053072383.png)

#####  

##### 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* &gt; *Open* &gt; Selecione o arquivo .rav do relatório-alvo na pasta do seu *branch* &gt; Abrir. No menu lateral, localizar o View referente à *query* que está sendo trabalhada &gt; Clique direito &gt; *Refresh*.

[![image-1622054363567.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622054363567.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622054363567.png)

<p class="callout danger">CUIDADO: Caso alguma mensagem de aviso apareça na tela, consultar um dev antes de realizar o *refresh* para que nenhum campo seja apagado.</p>

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.

[![image-1622054545273.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622054545273.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622054545273.png)

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

[![image-1622125321870.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622125321870.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622125321870.png)

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

[![image-1622125390531.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622125390531.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622125390531.png)

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

<p class="callout info">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*</p>

<p class="callout success">Alterações do novo método encontram-se a partir do Passo 3</p>

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

<p class="callout info">Utilize "F11" para acessar as propriedades dos componentes.</p>

<p class="callout info align-left">Alguns componentes podem estar "escondidos". Ajuste o tamanho do formulário, se necessário.</p>

[![image-1622049529709.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622049529709.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622049529709.png)

<p class="callout info">No exemplo acima, a *query* pode ser localizada através do caminho RVC\_RELAT &gt; CDS\_RELAT &gt; DSP\_RELAT &gt; QRELAT</p>

<p class="callout warning">Obs.: Guarde o nome do componente que está ligado ao *DataSet* do *RvDataSetConnection*, ele será usado posteriormente.</p>

[![image-1622049640256.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622049640256.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622049640256.png)

<p class="callout info">Em alguns casos, a *query* poderá estar ligada diretamente ao *RvDataSetConnection*.</p>


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

[![image-1622051469729.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622051469729.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622051469729.png)

<p class="callout warning">Obs.: Podem existir mais lugares onde a *query* é montada. Alterar todos os trechos que forem necessários.</p>


##### 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* &gt; *Tool Windows* &gt; *Tool Palette*).

[![componentes.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/componentes.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/componentes.png)

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:

[![coprincipal.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/coprincipal.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/coprincipal.png)

<p class="callout info">O parâmetro "*Database*" deve receber o caminho em que a base de dados .FDB está localizada.</p>

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:

[![retornoBusca.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/retornobusca.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/retornobusca.png)


##### Passo 5: Adicionar a nova *FDQuery* temporariamente no relatório

Com duplo clique no componente *RvProject, abrirá o Rave Reports. No menu File &gt; Open &gt; Selecione o arquivo .rav do relatório-alvo na pasta do seu branch &gt; Abrir.*

Vá em *File &gt; New Data Object.* Selecione *Direct Data View* , clique em *Next&gt;*

[![NewDataObject.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/newdataobject.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/newdataobject.png)

<p class="callout info">Caso apareçam Warnings, aperte ok em todos</p>

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:

[![DataView.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/dataview.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/dataview.png)

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

[![movendo.jpg](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/movendo.jpg)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/movendo.jpg)

Após mover, os campos poderão estar estranho como a imagem a seguir, basta clicar fora da região que normalizará:

[![campos.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/scaled-1680-/campos.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-04/campos.png)

Renomeie os novos Fields conforme o desejado/padrão.

<p class="callout danger">Muito importante seguir corretamente os passos abaixo para não perder o trabalho feito.</p>

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

[![image-1622125390531.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622125390531.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622125390531.png)

<p class="callout success">Abra o *RvProject* e cheque se o(s) novo(s) campo(s) está(ão) no *Data View* após carregar as informações. </p>

# Adição de campos na interface gráfica do Rave

<p class="callout info">Para realizar esse processo, é necessário ter os campos adicionados no *Data View* do relatório.</p>

<p class="callout info">Nota: Cada relatório tem sua própria construção, o relatório usado nessa página servirá como exemplo. </p>

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.

[![image-1622134887074.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622134887074.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622134887074.png)

####  

#### Localizar as regiões do relatório

Abra o *Rave Reports* e selecione o arquivo .rav que será alterado através do menu *File* &gt; *Open* (caso o relatório já esteja aberto, não é necessário realizar esse passo).

No menu lateral, expanda o componente *Report Library* e seus respectivos filhos até encontrar os *DataBand Components.* Cada um desses componentes, será responsável por uma região do relatório, identificada por nome.

[![image-1622135604877.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622135604877.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622135604877.png)

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.

[![image-1622136079385.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622136079385.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622136079385.png)

Nesse exemplo, o componente utilizado é um *Memo component.*

Através do menu de componentes, selecione o componente que será usado e coloque-o em sua respectiva banda.

[![image-1622136469625.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622136469625.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622136469625.png)

<p class="callout info">Ao adicionar o componente, o mesmo também deverá ser encontrado no menu lateral.</p>

####  

#### Configurar propriedades dos componentes 

Mude as propriedades do componente de acordo com os demais.

[![image-1622140162106.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622140162106.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622140162106.png)

A propriedade "*FontMirror*" receberá a família de componentes que ele pertence.

A propriedade "*Name*" receberá o nome do componente.

<p class="callout warning">É 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. </p>

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 &gt; Selecione o *Data View* do campo (DV\_Relat) &gt; Selecione o *Data Field* do campo (DEDUCOESSERVICOS) &gt; *Insert Field* &gt; o campo deverá aparecer no *Data Text* &gt; Ok.

[![image-1622139003451.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622139003451.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622139003451.png)

Preencha as demais propriedades de acordo com outros componentes

[![image-1622139257698.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622139257698.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622139257698.png)

<p class="callout info">Repare que apesar do prefixo ser diferente "dtlt", o nome do campo continua o mesmo "DeducoesServicos".</p>

<p class="callout success">Após ter adicionado os campos necessários, salve o relatório.</p>

####  

#### Carregar alterações no relatório

No formulário (Delphi), dê F11 no componente *RvProject* e na propriedade "*StoreRav*" realize o *load*.

[![image-1622139599469.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622139599469.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622139599469.png)

Após realizar o *load*, execute o sistema e abra o relatório. O novo campo já poderá ser visualizado.

[![image-1622140605116.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622140605116.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622140605116.png)

####  

#### Como mudar o nome do campo no 'Seleciona Campos' e o número de casas decimais exibidas no relatório 

<p class="callout info">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.</p>

[![image-1622140713425.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622140713425.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622140713425.png)

[![image-1622140853734.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622140853734.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622140853734.png)

# Commit de alterações no relatório

<p class="callout info">Como realizar o *commit* do dfm das alterações feitas no *Rave* </p>

<p class="callout warning">Não esquecer de realizar o *load* das alterações do relatório no *RvProject* antes de commitar </p>

As alterações realizadas no **relatório** ficarão no arquivo .dfm e no arquivo .rav

[![image-1622144455965.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622144455965.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622144455965.png)

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 <span style="text-decoration: underline;">*[Exceção](https://wiki.supersoft.com.br/link/232#bkmrk-imagem-exce%E3%A7%E3%A3o%3A)*</span>. Caso não haja alterações **propositais** no dfm, o restante pode ser revertido.

[![image-1622144651788.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622144651788.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622144651788.png)

[![image-1622144747969.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/image-1622144747969.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/image-1622144747969.png)

Imagem *Exceção:*

[![66.png](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/scaled-1680-/66.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2021-05/66.png)

O arquivo .rav e .pas podem ser commitados normalmente

# Procedimentos Frequentes

Pendente melhorar

# Criar um novo Documento

<p class="callout info">Um documento seria algo que envolve um Cadastro, Manutenção, DataModule e opcionalmente uma Pesquisa.  
  
Ex.:  
Clientes  
Produtos  
Documentos Fiscais (NFe, NFSe..)  
Etc.</p>

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.

<p class="callout info">O motivo de não ser feito direto na tela de usuários é o fato de ser customizado.</p>

<p class="callout warning">Não existe apenas **uma** forma de fazer, então o registrado aqui é uma **sugestão.**</p>

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:

[![1.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/1.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/1.png)

[![2.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/2.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/2.png)

Baixa seu código inteiro para darmos continuidade ao trabalho conforme modelo em [Local](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/local-698)

<p class="callout warning">É 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.</p>

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

<p class="callout success">Dica: Olhe alguns exemplos já existentes, isso ajudará muito.</p>

##### 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á:

[![3.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/3.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/3.png)

Com a primeira tela feita, fica mais fácil de desenhar a tabela, que para este caso será "PadroesUsuarios":

[![4.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/4.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/4.png)

##### 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):

[![image-1666808455191.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666808455191.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666808455191.png)

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-&gt; 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: 

[![image-1666808277228.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666808277228.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666808277228.png)

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:

[![image-1666811653806.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666811653806.png) ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666811653806.png)[![image-1666811687964.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666811687964.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666811687964.png)[ ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666811653806.png)

##### Componente TKWRCriterios

o componente Critérios tem uma propriedade chamada "Criterios", ao dar dois cliques nele, se deparamos com a seguinte tela:

[![image-1666812697371.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666812697371.png)  ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666812697371.png)

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:

[![image-1666813084641.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666813084641.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666813084641.png)

Ao clicar no item adicionado, na aba "Object Inspector" irão aparecer as propriedades daquele item, iremos alterar algumas delas, sendo elas as seguintes:

[![image-1666813486423.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666813486423.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666813486423.png)

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:

[![image-1666814058421.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666814058421.png) ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666814058421.png)[![image-1666814151185.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666814151185.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666814151185.png)[ ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666814058421.png)

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:

[![image-1666868761074.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666868761074.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666868761074.png)

iremos obter esse resultado ao voltar para o sistema:

[![image-1666868934303.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666868934303.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666868934303.png)

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:

[![image-1666869196119.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666869196119.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666869196119.png)

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:

[![image-1666869610498.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666869610498.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666869610498.png)

Ao clicar em um usuário, ele já puxa o campo nome para o Edit:[![image-1666869655947.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666869655947.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666869655947.png)

A mesma coisa acontece com o centro de custo:

[![image-1666869717195.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666869717195.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666869717195.png)

Ao clicarmos em um centro de custo, ele puxa para a tela, tanto o centro de custo escolhido, como a descrição do mesmo:

[![image-1666869771450.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666869771450.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666869771450.png)

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

[ ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666811653806.png)

[![image-1666871182647.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666871182647.png) ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666871182647.png)[![image-1666871221340.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666871221340.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666871221340.png)

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();

[![image-1666871904221.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666871904221.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666871904221.png)

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:[![image-1666872062988.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666872062988.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666872062988.png)

##### DataModule.DataSource.DataSet.Modified;

Faz a verificação se houve alteração nos campos do DataModule

[![image-1666872644069.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666872644069.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666872644069.png)

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

[![image-1666873816785.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666873816785.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666873816785.png)

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

[![image-1666874201692.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666874201692.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666874201692.png)

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

[![image-1666956215506.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666956215506.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666956215506.png)

Três desses botões (**Novo**, **Edita** e **Visualiza**), utilizam linhas de código praticamente iguais:[![image-1666956696867.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666956696867.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666956696867.png)

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:

[![image-1666957414238.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/scaled-1680-/image-1666957414238.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-10/image-1666957414238.png)

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

[![image-1667307605582.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1667307605582.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1667307605582.png)

Após isso devemos clicar no componente "CRITERIOS" do DataModule e fazer algumas alterações na propriedade Criterios.

[![image-1667307713543.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1667307713543.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1667307713543.png)

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

[![image-1667308024563.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1667308024563.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1667308024563.png)

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.

[![image-1667308325432.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1667308325432.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1667308325432.png)

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 <span class="hljs-keyword">for</span> específica <span class="hljs-keyword">do</span> módulo, unit CriaTabEsp.pas, caso contrário só CriaTab.pas pois é global; Acha a procedure que monta a tabela, exemplo <span class="hljs-string">"CriaOrcam"</span> e faz a edição.

Se <span class="hljs-keyword">for</span> específica <span class="hljs-keyword">do</span> módulo, unit <span class="hljs-string">"uMatrizAlt"</span> + Sigla <span class="hljs-keyword">do</span> módulo Verifica no <span class="hljs-keyword">final</span> um exemplo, copie e adapte para sua alteração.

Unit <span class="hljs-string">"uAtualizaCampoNulo"</span> + Sigla <span class="hljs-keyword">do</span> módulo; Verifica no <span class="hljs-keyword">final</span> 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

<p class="callout info">Uma DLL é um arquivo utilizado para a criação de Customizações</p>

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:

  
[![image-1669820132059.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669820132059.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669820132059.png)

[![teladllvaziafontegrande.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/teladllvaziafontegrande.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/teladllvaziafontegrande.png)

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

[![image-1669825865020.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669825865020.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669825865020.png)

Baixe seu código inteiro para darmos continuidade ao trabalho conforme modelo em [Local](https://wiki.supersoft.com.br/books/organizacao-e-dinamica-de-casos/page/local-698).

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

[![image-1669827736790.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669827736790.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669827736790.png)

[![image-1669827757254.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669827757254.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669827757254.png)

[![image-1669827876791.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669827876791.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669827876791.png)

Exemplo de utilização da função **ExisteProcesso**:

[![image-1669826128967.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669826128967.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669826128967.png)

<p class="callout warning">Ao adicionar em **"const ProcessoDestaDLL"**, é necessário colocar um **"|" (pipe)** e depois o nome do Processo da DLL em **letras maiúsculas**</p>

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.

[![image-1669827639023.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669827639023.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669827639023.png)

[![image-1669826269892.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669826269892.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669826269892.png)

[![image-1669828093596.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/scaled-1680-/image-1669828093596.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-11/image-1669828093596.png)

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

[![image-1669904134666.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904134666.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904134666.png)

Depois vá até onde está localizada sua pasta da Custom e de um [Copy To](https://wiki.supersoft.com.br/books/svn-basico/page/copy-to) dela para dentro da pasta **EmFireDac Skin.**

[![image-1669904407842.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904407842.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904407842.png)

### **Método 2:**

Primeiramente realize o [Checkout](https://wiki.supersoft.com.br/books/svn-basico/page/checkout) da pasta **EmFireDac Skin** para a sua máquina local.

[![image-1669904584039.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904584039.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904584039.png)

Posteriormente copie a sua pasta da **Custom** para dentro da pasta **EmFireDac Skin**.

[![image-1669904663665.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904663665.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904663665.png)

[![image-1669904722795.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904722795.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904722795.png)

Dê um **Add** na sua pasta da **Custom.**

[![image-1669904770617.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904770617.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904770617.png)

[![image-1669904786111.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904786111.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904786111.png)

Por fim, realize o [Commit](https://wiki.supersoft.com.br/books/svn-basico/page/commit) para a pasta **EmFireDac Skin**.

[![image-1669904910049.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904910049.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904910049.png)

[![image-1669904930043.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/scaled-1680-/image-1669904930043.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-12/image-1669904930043.png)

## **Executando sistema com a DLL**

Para executar o sistema, deverá mudar as configurações em 'Project &gt; Options'. Alterar as seguintes configurações:

[![image.png](https://wiki.supersoft.com.br/uploads/images/gallery/2024-12/scaled-1680-/image.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2024-12/image.png)

[![image.png](https://wiki.supersoft.com.br/uploads/images/gallery/2024-12/scaled-1680-/PGrimage.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2024-12/PGrimage.png)

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://svn.supersoft.com.br/svn/desenvolvimento/outros/ACBr](https://svn.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.

[![AtualizaCidades.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/scaled-1680-/atualizacidades.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/atualizacidades.png)

[![AtualizaCidadesINI.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/scaled-1680-/atualizacidadesini.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/atualizacidadesini.png)

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:

[![DesmarcaCapicom.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/scaled-1680-/desmarcacapicom.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/desmarcacapicom.png)

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.

[![SvnOculto.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/scaled-1680-/svnoculto.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-07/svnoculto.png)

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

[![exemplo sem menu.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/uTcexemplo-sem-menu.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/uTcexemplo-sem-menu.png)[ ](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/Cn4resultado-final-melhoria.png)[![resultado final melhoria.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/X7Dresultado-final-melhoria.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/X7Dresultado-final-melhoria.png)

#### **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:

**[![assinatura procedure AdicionarBotao.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/assinatura-procedure-adicionarbotao.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/assinatura-procedure-adicionarbotao.png)**

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.

**[![procedue AdicionarBotao.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/procedue-adicionarbotao.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/procedue-adicionarbotao.png)**

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

**[![função CriarPopupMenu.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/funcao-criarpopupmenu.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/funcao-criarpopupmenu.png)**

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.

[![chamada da função CriarPopupMenu.png](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/scaled-1680-/chamada-da-funcao-criarpopupmenu.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2022-09/chamada-da-funcao-criarpopupmenu.png)

##### <span style="color: #000000;">**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** <span style="font-size: 19.6px;">**utiliza-la**</span>**.**</span>

# Instalar/Reinstalar PK_Todos

#### Requisitos:

Variável de ambiente deve estar como "C;\\Codigo Fonte".

[![image-1685964372645.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/scaled-1680-/image-1685964372645.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/image-1685964372645.png)

  
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.

[![image-1685964247961.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/scaled-1680-/image-1685964247961.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/image-1685964247961.png)

Para instalar, faça a sequencia Build -&gt; Compile -&gt; Install.

Volte a variável de ambiente ao original.

[![image-1685964417139.png](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/scaled-1680-/image-1685964417139.png)](https://wiki.supersoft.com.br/uploads/images/gallery/2023-06/image-1685964417139.png)

Feche o Delphi sem salvar as alterações.