[firebase-br] Ajuda SP

Josauro S.J. josauro em casasoft.inf.br
Sex Abr 15 11:29:49 -03 2005


Michelle segue uma procedure que faz algo parecido com o que voce quer, apartir dessa voce pode pegar ideias para o seu sistema, (esta é especifica para a estrutura que montei para nosso sistema financeiro.)

CREATE PROCEDURE SP_RELATORIO_CENTRO_CUSTO (
    CONCILIADO CHAR(1),
    CONTA_INICIAL VARCHAR(13),
    CONTA_FINAL VARCHAR(13),
    DATA_INICIAL DATE,
    DATA_FINAL DATE,
    DATA_COMPETENCIA_INICIAL DATE,
    DATA_COMPETENCIA_FINAL DATE)
RETURNS (
    TOTAL_CREDITO NUMERIC(18,2),
    TOTAL_DEBITO NUMERIC(18,2),
    TOTAL NUMERIC(18,2),
    SINTETICO_ANALITICO CHAR(1),
    TITULO VARCHAR(40),
    CONTA VARCHAR(13))
AS
DECLARE VARIABLE OPERACAO SMALLINT;
DECLARE VARIABLE VALOR NUMERIC(18,2);
DECLARE VARIABLE DATA_COMPENSACAO DATE;
DECLARE VARIABLE CENTRO_CUSTO NUMERIC(18,0);
DECLARE VARIABLE CONTA_CENTRO_CUSTO VARCHAR(13);
DECLARE VARIABLE MVV_CODIGO NUMERIC(18,0);
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE LAN_CODIGO NUMERIC(18,0);
DECLARE VARIABLE CCS_CODIGO NUMERIC(18,0);
begin
  /* Procedure Text */
  FOR
    select c.ccs_conta,
           c.ccs_titulo,
           c.ccs_sintetico_analitico,
           c.ccs_codigo
           from centro_custo c
    where (c.ccs_conta >= :CONTA_INICIAL AND
           c.ccs_conta <= :CONTA_FINAL) OR
          (:CONTA_INICIAL = '' AND
           :CONTA_FINAL   = '')
    order by c.ccs_conta
    INTO :CONTA,:TITULO,:SINTETICO_ANALITICO,:CCS_CODIGO
  DO BEGIN
    TOTAL = 0;
    TOTAL_DEBITO = 0;
    TOTAL_CREDITO = 0;
    if (SINTETICO_ANALITICO = 'A')
    then BEGIN
      FOR
        SELECT L.LCS_VALOR,
               L.LCS_OPERACAO,
               L.lcs_MOVIMENTO_VALOR,
               L.lcs_LANCAMENTO
        FROM VW_lancamento_classes L
        WHERE L.centro_custo LIKE (:CONTA||'%') and
              ((L.centro_custo >= :CONTA_INICIAL AND
                L.centro_custo <= :CONTA_FINAL) OR
               (:CONTA_INICIAL = '' AND
               :CONTA_FINAL   = ''))
        INTO VALOR, :OPERACAO, :MVV_CODIGO, :LAN_CODIGO
      DO BEGIN
        SELECT MVV_DATA_COMPENSACAO, MVV_DATA_VENCIMENTO FROM MOVIMENTO_VALOR
        WHERE MVV_CODIGO = :MVV_CODIGO
        INTO :DATA_COMPENSACAO, :DATA;

/*        SELECT LAN_DATA FROM LANCAMENTO
        WHERE LAN_CODIGO = :LAN_CODIGO
        INTO :DATA;*/

        if (((CONCILIADO = 'T') OR
             ((CONCILIADO = 'S') AND (DATA_COMPENSACAO IS NOT NULL) AND (DATA_COMPENSACAO >= DATA_INICIAL) AND (DATA_COMPENSACAO <= DATA_FINAL)) OR
             ((CONCILIADO = 'N') AND (DATA_COMPENSACAO IS NULL))) and
            ((DATA >= DATA_COMPETENCIA_INICIAL) AND (DATA <= DATA_COMPETENCIA_FINAL)))
        then begin
          TOTAL = TOTAL + (VALOR*OPERACAO);
          if (OPERACAO = -1)
          then TOTAL_DEBITO = TOTAL_DEBITO + (VALOR*OPERACAO);
          ELSE
          if (OPERACAO = 1)
          then TOTAL_CREDITO = TOTAL_CREDITO + (VALOR*OPERACAO);
        end
      END
    END
    ELSE BEGIN
      FOR
        SELECT LCS_VALOR, LCS_OPERACAO, LCS_MOVIMENTO_VALOR, LCS_CENTRO_CUSTO, LCS_LANCAMENTO
        FROM lancamento_classes
        WHERE LCS_CENTRO_CUSTO = :CCS_CODIGO
        INTO :VALOR,:OPERACAO,:MVV_CODIGO,:CENTRO_CUSTO, :LAN_CODIGO
      DO BEGIN
        SELECT MVV_DATA_COMPENSACAO, MVV_DATA_VENCIMENTO FROM MOVIMENTO_VALOR
        WHERE MVV_CODIGO = :MVV_CODIGO
        INTO :DATA_COMPENSACAO, :DATA;

        SELECT CCS_CONTA FROM CENTRO_CUSTO
        WHERE CCS_CODIGO = :CENTRO_CUSTO
        INTO :CONTA_CENTRO_CUSTO;

/*        SELECT LAN_DATA FROM LANCAMENTO
        WHERE LAN_CODIGO = :LAN_CODIGO
        INTO :DATA;*/

        if (((CONCILIADO = 'T') OR
             ((CONCILIADO = 'S') AND (DATA_COMPENSACAO IS NOT NULL) AND (DATA_COMPENSACAO >= DATA_INICIAL) AND (DATA_COMPENSACAO <= DATA_FINAL)) OR
             ((CONCILIADO = 'N') AND (DATA_COMPENSACAO IS NULL))) AND
            (((CONTA_INICIAL = '') AND (CONTA_FINAL = '')) OR
             ((CONTA_CENTRO_CUSTO >= CONTA_INICIAL) AND (CONTA_CENTRO_CUSTO <= CONTA_FINAL))) AND
            ((DATA >= DATA_COMPETENCIA_INICIAL) AND (DATA <= DATA_COMPETENCIA_FINAL)))
        then begin
          TOTAL = TOTAL + (OPERACAO*VALOR);
          if (OPERACAO = -1)
          then TOTAL_DEBITO = TOTAL_DEBITO + (OPERACAO*VALOR);
          ELSE
          if (OPERACAO = 1)
          then TOTAL_CREDITO = TOTAL_CREDITO + (OPERACAO*VALOR);
        end
      END
    END
    if ((TOTAL <> 0) OR
        (TOTAL_DEBITO <> 0) OR
        (TOTAL_CREDITO <> 0))
    then suspend;
  END
end


Josauro S.J.
Diretor
josauro em casasoft.inf.br
-------------- Próxima Parte ----------
(Este email foi verificado contra a presença de vírus, antes de ser enviado, pelo nosso sistema de FireWall, entre em contato com a CasaSoft (casasoft em casasoft.inf.br) e instale um em sua Empresa livre se de intrusos e mantenha seus sistemas e clientes livres de vírus.)


Mais detalhes sobre a lista de discussão lista