[firebase-br] Master Detalhe

Danilo Gomes danrgomes em gmail.com
Seg Nov 5 08:50:27 -03 2007


Ola tudo bem ....

Ve se ajuda ....

Contas a receber é a mestre com  varios joins

Dependentes é a detalhe



CREATE PROCEDURE LISTA_ADIMPLENTES (
    PDTI DATE,
    PDTF DATE)
RETURNS (
    CD_CLIENTE INTEGER,
    NUMERO INTEGER,
    FILIAL INTEGER,
    NUM_DOC VARCHAR(14),
    EMISSAO DATE,
    VENCTO DATE,
    PAGTO DATE,
    VALOR NUMERIC(15,2),
    VALOR_PAGO NUMERIC(15,2),
    BAIXA DATE,
    BOLETO NUMERIC(12,1),
    PARCELA INTEGER,
    TIPO VARCHAR(1),
    NOME VARCHAR(60),
    CIDADE VARCHAR(30),
    REPRESENTANTE VARCHAR(20),
    DEPENDENTES VARCHAR(500))
AS
DECLARE VARIABLE DEP VARCHAR(60);
DECLARE VARIABLE DEPS VARCHAR(500);
DECLARE VARIABLE PCD_CLIENTE INTEGER;
DECLARE VARIABLE PFILIAL INTEGER;
DECLARE VARIABLE CONTA INTEGER;
DECLARE VARIABLE CD_CLIDEP INTEGER;
DECLARE VARIABLE JAPASSOU VARCHAR(1);
begin
DEP = '';
DEPS = '';
CD_CLIDEP = 0;
JAPASSOU = 'N';
for
  SELECT
       t16.cd_cliente,
       T16.numero,
       T16.filial,
       T16.num_doc,
       T16.emissao,
       T16.vencimento,
       T16.pagto,
       T16.valor,
       T16.valor_pago,
       T16.baixa,
       T16.nbloq,
       T16.parcela,
       t16.tipo,
       T01.razao,
       T01.cidade,
       T21.representante,
       t16.cd_cliente,
       T16.filial

FROM t16_contas_receber T16
LEFT JOIN t01_clientes T01 ON (T01.cd_cliente = T16.cd_cliente and
t01.filial = t16.filial)
LEFT JOIN t21_venda_plano T21 ON (T16.pedido_numero = T21.cd_venda AND
T16.pedido_filial = T21.filial)
WHERE T16.ativo = 'A' AND T16.valor_pago IS NOT NULL AND t16.vencimento >
:pDTi and t16.vencimento < :pDTf
ORDER BY T01.razao
INTO
    :PCD_CLIENTE,
    :NUMERO ,
    :PFILIAL ,
    :NUM_DOC,
    :EMISSAO,
    :VENCTO,
    :PAGTO,
    :VALOR,
    :VALOR_PAGO,
    :BAIXA ,
    :BOLETO,
    :PARCELA,
    :TIPO,
    :NOME,
    :CIDADE,
    :REPRESENTANTE,
    :CD_CLIENTE,
    :FILIAL
DO
 BEGIN
  FOR SELECT
  (T0101.NOME),
  COALESCE(count(T0101.NOME),0),
  (T0101.CD_CLIENTE)
  FROM T0101_DEPENDENTES T0101
  WHERE ((T0101.CD_CLIENTE = :PCD_CLIENTE) AND (T0101.FILIAL =  :PFILIAL)
AND (T0101.CD_DEPENDENTE >0))
  GROUP BY 1,3
  INTO
    :DEP,
    :CONTA,
    :CD_CLIDEP
  DO
  BEGIN
    if ((DEP IS NULL)or (dep = '') ) then
      BEGIN
       DEP = '';
       DEPS = '';
       CONTA = 0;
       DEPENDENTES = '';
      END
    if ((DEP <> '' ) or (DEP IS NOT NULL)) then
     BEGIN
           IF ((DEPS IS NOT NULL) or (DEPS <> '')) THEN
            BEGIN
              DEPS= DEPS  || ' - ' || DEP;
             /* DEPENDENTES = DEPS;*/
              DEP = '';
            END
           if ((DEPS is NULL) or (DEPS = ''))  then
            BEGIN
              DEPS = DEP;
              DEP = '';

            END
     END
  DEP = '';
  CONTA = 0;
  CD_CLIENTE = :PCD_CLIENTE;
  FILIAL = :PFILIAL;

  END
  DEP = '';
  DEPENDENTES = DEPS;
  DEPS = '';
  PCD_CLIENTE =0;
  PFILIAL =0;
  CONTA = 0;
  suspend;
 END
  DEP = '';
  DEPS = '';
  CONTA = 0;
end


Em 02/11/07, Jose Luiz de Medeiros <medeiros_infor em yahoo.com.br> escreveu:
>
> Colegas..
>
>
>
> Nos meus sistemas sempre faço o uso de Stored Procedure para Inserir,
> Alterar e Excluir um arquivo numa tabela. Mas em Mestre detalhe :
> VENDA/ITEM
> VENDA. Faço via código no Delphi, Alguém teria uma rotina ou uma stored
> procedure para fazer essas operações via DB?
>
>
>
> Grato:
>
>
>
> Jose Luiz de Medeiros
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista