[firebase-br] Problema com um cursor dentro do outro e CONCATENACAO

Danilo Gomes danrgomes em gmail.com
Qua Out 24 17:32:49 -03 2007


Olá tudo bem ...

  Estou trabalhando com um cursor dentro do outro, pois tive problemas com o
mestre detalhe no FAST REPORT( não esta aparecendo todos os dados D5). Assim
resolvi criar este cursor concatendo os nomes dos dependentes. A ideia é a
seguinte:

     A primeira linha do cursor é carregada e depois com base no
cd_cliente e na filial ele pega os registros dos dependentes, ai a ideia é
vai no primeiro registro do dependente e atribui a variavel dependentes,
depois vai no segundo registro do dependentes e CONCATENA o segundo registro
com a variavel dependentes,
    Depois de lido todos os registros da tabela de dependetes(2º cursor) ele
da um SUSPEND e retorna a variavel dependentes (2º cursor) e todas as outra
do 1º cursor  e passa para o proximo registro do 1º cursor ...

    Problema ==> A variavel dependentes sai em branco .......

    Desde já agradeço pela atenção .... Danilo

   Eis o monstro


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(50);
declare variable DEPS VARCHAR(500);
declare variable PCD_CLIENTE INTEGER;
declare variable PFILIAL INTEGER;
declare variable CONTA INTEGER;
begin
CONTA = 1;
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
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
DO
 BEGIN
  FOR SELECT
  T0101.NOME
  FROM T0101_DEPENDENTES T0101
  WHERE ((T0101.CD_CLIENTE = :PCD_CLIENTE) AND (T0101.FILIAL =  :PFILIAL))
  INTO
    :DEP
  DO
  BEGIN

/*    aqui mora o problema   */


/*    if (DEP IS NOT NULL)  then*/
     BEGIN
           DEPS= COALESCE (DEPS  || '' || DEP, DEPS);
       /*    DEPS = DEPS  || '' || DEP;*/
           DEPENDENTES = DEPS;
           DEP = '';
/*           CONTA = CONTA + 1;*/
     END
/*     CONTA = CONTA + 1;*/



  END
  PCD_CLIENTE =0;
  PFILIAL =0;
  CONTA = 1;
  suspend;
 END

end



Mais detalhes sobre a lista de discussão lista