Roteiro de Treinamento

De FuturaWiki
Edição feita às 09h24min de 11 de outubro de 2016 por Jonalm (Discussão | contribs)

(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
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

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.


Exercícios:

  1. Criação de cadastro simples. Ex: Unidade.
  2. Criação de cadastro mestre/detalhe. Ex: Grupo e Subgrupo
  3. Criação de uma tela para excluir apenas as unidades selecionadas.

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.

EX

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

EX

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

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 DE PEDIDO DE VENDAS--------------------------------*/

- pk

- cliente

- status (Aberto, Baixado, Faturado, Cancelado)

- Empresa

- Nro do pedido (Sequencial)

- Soma total dos produtos

- Total final da venda

- Desconto

- Acrescimo

- Mostrar percentual de desconto sem gravar na base de dados

- Mostrar percentual de acrescimo sem gravar na base de dados

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



/*---------------------TABELA DE PEDIDO ITEM DE VENDAS--------------------------------*/

- pk

- 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 a cima. 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