[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