Skip to main content

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:

1.png

2.png

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

3.png

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

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

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: 

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:

(usuarios)usuários;

-CampoPesq:

Deve ser inserido um campo da tabela selecionada no TabelaPesq para efetuar a busca no banco, por exemplo:

(NomeLog)NomeLog;

-DataSource:

Deve ser passado o DataModule.DataSource, por exemplo:

(DM_PADROESUSUARIOS.DS_MANUT)DS_MANUT;

-DataField:

O campo que será buscado no DataSource selecionado, por exemplo: NomeLog;

(NomeLog)

 

Exemplos do caso 0047322:

image-1666811653806.png                   image-1666811687964.png