Roteiro de Treinamento

De FuturaWiki
Ir para: navegação, pesquisa

REGRA NÚMERO UM: NUNCA RODAR SCRIPT SEM PEDIR PARA OS SUPERIORES

Como regra interna da futura, NINGUEM PODE RODAR SCRIPT sem solicitação de seus superiores, de forma alguma!!!!!!!

Estudo do Futura Server

  • Verificar as funcionalidades do sistema observando principalmente os padrões e funcionamento do mesmo.
  • Telas importantes para consulta:
    • Menu: Cadastro -> Estoque -> Unidade
    • Menu: Cadastro -> Cadastro -> Clientes
    • Menu: Vendas -> Pedido de vendas

Padronização e nomenclaturas da programação

Programação - Regras

REGRA NÚMERO DOIS: NUNCA USAR NÚMEROS MÁGICOS

Como regra interna da futura, NUNCA use "números mágicos" no código, de forma alguma!!!!!!!

Use sempre o tipo criado, juntamente com a função Ord();

TBasePesquisa, TbaseSistema e TBaseSelecao

TBasePesquisa: Classe responsavel pelas consultas no sistema, é utilizada para fazer herança.

TBaseSistema : Classe responsavel pelos cadastros no sistema, é utilizado para fazer herança.

TBaseSelecao : Classe responsavel pelos cadastros no sistema, onde é possivel fazer a marcação de registros selecionados, é utilizado para fazer herança.


Como iniciar um cadastro com valor padrão

Para iniciar um cadastro com valor padrão, utilizamos um evento do DataSet chamado "OnNewRecord".

Toda vez que é iniciado a inclusão de um registro, conseguimos fazer algumas definições e jogar valores padrão em nossos campos.

EX

procedure TCad_BaseLegal.DataSetNewRecord(DataSet: TDataSet);
begin
  Campo('UF_ORIGEM').Value  := 'SP';
end;

Como validar um campo

Devemos validar um campo antes que esse registro seja enviado para o banco de dados. Para isso usamos um evento do DataSet chamado "BeforePost".

EX

procedure TCad_BaseLegal.DataSetBeforePost(DataSet: TDataSet);
begin
   if not TPF_DataBase.FieldValid(Campo('DESCRICAO')) then
       raise TExceptionValidacao.Create('Preencha o campo descrição!');
end; 

6. Eventos OnGetText / OnSetText

Os eventos OnGetText e OnSetText são muito utilizados quando temos um DbComboBox.

Com esses eventos conseguimos mostrar no DbComboBox uma descrição, enquanto ao enviar ao banco de dados ele armazena outros valor.

  • OnGetText: Quando pegamos a informação contida no banco, conseguimos transformar em descrição.
  • OnSetText: Através da descrição informada no DbComboBox conseguimos transformar em valor para armazenar no banco

Quando fazemos um DbComboBox por Ex, armazenamos no banco de dados como Smallint, mais para facilitar para o cliente, mostramos a descrição do valor. Obs: Utilizamos Array de constante para armazenar os valore.

EX

OnGetText

if (Sender.FieldName = 'DESTINO')Then 
  Text := cBaseLegalDestino[TBaseLegalDestino(Sender.AsInteger)];   

Se o campo que está sendo acionado for o campo "DESTINO", então acessamos a contante "cBaseLegalDestino" e pegamos a posição em que o valor correto está através do valor que está informado no campo então utilizamos "Sender.AsInteger".

OnSetText

if (Sender.FieldName = 'DESTINO') Then
  for X := Ord(Low(TBaseLegalDestino)) to Ord(High(TBaseLegalDestino)) do
    if (Text = cBaseLegalDestino[TBaseLegalDestino(X)])then
    begin
      Sender.Value := cBaseLegalDestino[TBaseLegalDestino(X)];
      Break;
    end; 

Se o campo que estiver sendo acionado for o campo "DESTINO" então percorremos a constante onde está armazenando a descrição para ver qual está selecionado, assim conseguimos saber qual o valor correto a informar na hora de enviar ao banco de dados.

Evento OnChange=

Evento acionado toda vez que é setado o valor para um determinado campo do DataSet.

EX

if Sender.FieldName ='DATA_EMISSAO' Then 
  Campo('DATA_SAIDA_ENTRADA').Value := Campo('DATA_EMISSAO').Value;

Toda vez que setar um valor na data de emissão, o dataset chamará o evento.

O codigo acima, representa que ao setar um valor para a data de emissão, a data de saída/entrada receberá o mesmo valor que foi setado na data de emissão.

LookUp

Utilizado para trazer informações de outras tabelas quando estamos utilizando um objeto para cadastro.

Exemplo

AddLookup('CADASTRO', 'ID', 'FANTASIA', 'FK_EMPRESA', 'Lkp_Empresa',  ftString, 50, 'CHK_EMPRESA = S');

Comparação do campo "ID" da tabela CADASTRO com "FK_EMPRESA" da tabela PEDIDO para fazer a pesquisa e trazer o nome fantasia.

Parâmetros no exemplo

  • CADASTRO  : Tabela onde vai pesquisar o resultado.
  • ID  : campo da tabela passada como cadastro onde vai fazer a comparação
  • FANTASIA  : Campo que vai puxar o resultado
  • FK_EMPRESA  : Campo de comparação.
  • Lkp_Empresa  : Nome do campo que retorna. pode ser acessado para consultar o valor.
  • ftString  : Tipo de retorno.
  • 50  : Tamanho máximo do retorno.
  • 'CHK_EMPRESA = S'  : Filtros para retorno.

Soma de valores no mestre pelo item (mestre/detalhe)

Utilizando o conceito de mestre/detalhe no sistema, conseguimos acessar o MESTRE pelo DETALHE.

Muito utilizado em telas como o PEDIDO DE VENDA, onde temos

  • MESTRE : PEDIDO
  • DETALHE: PEDIDO_ITEM

Temos a necessidade de somar no campo TOTAL_PRODUTOS, a soma do valor total de cada item.

Para isso usamos o evento "DtSetCalcReg" do DataSet.

Como definição, passamos o mestre como owner (dono) do detalhe. isso é importante para sabermos qual classe acessamos para passar os valores

Exemplo

TMestre(Self.Owner).Campo('TOTAL_PRODUTOS').AsFloat := TMestre(Self.Owner).Campo('TOTAL_PRODUTOS').AsFloat +(Self.Campo('VALOR_UNITARIO').AsFloat *  Self.Campo('QUANTIDADE').AsFloat);



Exercícios

  1. Criação de cadastro simples. Ex: Tabela de Preço.
  2. Criação de cadastro mestre/detalhe. Ex: Grupo e Subgrupo, Cadastro e Cadastro_Endereço
  3. Criação de uma tela para excluir apenas as unidades selecionadas.
  4. Criação dos testes unitários e de integração dos cadastros e funções feitos nos itens anterioes.


Relatório Simples

Exercício: Monte um relatório simples utilizando o ReportBuilder.

Traga todos os produtos com pelo menos 5 campos, e seu valor da tabela de preço que deverá ser informada para trazer o valor correto.

Relatório com agrupamento

Exercício: Monte um relatório de agrupamento. Traga todas as vendas do sistema agrupado por cliente.

Exercicio final

Tabela VENDA_PEDIDO

- id (chave primaria)

- cliente

- status (Aberto, Baixado, Faturado, Cancelado)

- Empresa

- Nro do pedido (Sequencial)

- Soma total dos produtos

- Total final da venda

- Desconto

- Acrescimo

- Data de cadastro

- Data de faturamento

- Tipo de pedido (consta na tabela TIPO_PEDIDO, só deve aceitar tipo de pedido do tipo venda)

- Motivo de cancelamento (Apresentar quando for cancelar um pedido)

Obs: Mostrar percentual de desconto e de acréscimo sem gravar na base de dados

Tabela VENDA_ITEM

- id

- ligação com produto (Quando abrir tela de pesquisa F5, apresentar a tela com descrição e referencia do produto apenas)

- ligação com tabela de preço

- ligação com codigo de barras do produto quando o usuário utilizar

- valor unitário

- quantidade

- Sequencia

- Valor do ICMS (Deixar o usuário informar manualmente)


  • Criar uma tela de pedido de venda com os campos e funções acima. Crie funções para baixa de pedido.
  • Crie 1 modelo de relatório de pedido de vendas e só possibilite ele ser acessado quando o pedido estiver baixado, caso ele clique em imprimir, coloca o pedido para faturado.
  • Crie os testes unitários e de integração.

Impressões Dinâmicas

(Usar um Gerenciador Interno de teste)

1 - Criar um modelo de impressão de pedido de venda dinâmico baseado no modelo fixo 115, porem com as seguintes alterações:

Dados do Cliente/Pedido:

- Adicionar campo Tabela de Preço;

Dados dos produtos:

- Aumentar tamanho da fonte do campo "Descrição" dos produtos;

- Retirar os campos de IPI%, NCM e ST;

- Trocar Referência pelo campo Código de Barras;


2 - Criar um modelo de impressão de pedido de venda dinâmico, baseado no relatorio: Relatorios > Cadastro > Estoque > Produto (Tipo: Lista), porem com as seguintes alterações:

- Retirar campos: Código de Barras, Peso Bruto, Peso Liquido, Estoque Saldo, Estoque Minimo, Estoque Maximo

- Incluir campos: Cor, Tamanho, Especificação

- Ordenar por Descrição