Manual de aprendizado para Padwans
Índice
- 1 REGRA NÚMERO UM: NUNCA RODAR SCRIPT SEM PEDIR PARA OS SUPERIORES
- 2 Estudo do Futura Server
- 3 Padronização e nomenclaturas da programação
- 4 TBasePesquisa, TbaseSistema e TBaseSelecao
- 5 Como iniciar um cadastro com valor padrão
- 6 Como validar um campo
- 7 6. Eventos OnGetText / OnSetText
- 8 Evento OnChange=
- 9 LookUp
- 10 Soma de valores no mestre pelo item (mestre/detalhe)
- 11 Relatório Simples
- 12 Relatório com agrupamento
- 13 Exercicio final
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
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:
- Criação de cadastro simples. Ex: Unidade.
- Criação de cadastro mestre/detalhe. Ex: Grupo e Subgrupo
- 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