ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Multiple rows in singleton select {Resolvido}

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Set 22, 2014 3:43 pm    Assunto: Multiple rows in singleton select {Resolvido} Responder com Citação

Pessoal estou com problema nesta trigger firebird 1.5 e não consigo resolver

O erro Multiple rows in singleton select

Código:
CREATE OR ALTER TRIGGER VENDAS_PAGAMENTO_BI FOR VENDAS_PAGAMENTO
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE QUITACAO_PROGRAMADA VARCHAR(3);
  DECLARE VARIABLE CENTRO_CUSTOS VARCHAR(38);
  DECLARE VARIABLE CENTRO_CUSTOS_REDUZIDO INTEGER;
  DECLARE VARIABLE CODIGO_CONTA_CORRENTE INTEGER;
  DECLARE VARIABLE DESCRICAO VARCHAR(70);
  DECLARE VARIABLE FINALIZADORA VARCHAR(20);
  DECLARE VARIABLE BLOQUEAR_PAGAMENTO VARCHAR(3);
  DECLARE VARIABLE CODIGO_USUARIO INTEGER;
  DECLARE VARIABLE DINHEIRO_SISTEMA Decimal(18,2);
  DECLARE VARIABLE LANCA_TAXA_CONTA VARCHAR(3);
  DECLARE VARIABLE TAXA_CENTRO_CUSTOS VARCHAR(38);
  DECLARE VARIABLE TAXA_CENTRO_CUSTOS_REDUZIDO INTEGER;
  DECLARE VARIABLE TAXA_TIPO_CONTA VARCHAR(1);
  DECLARE VARIABLE TAXA FLOAT;
  DECLARE VARIABLE NOME_CLIENTE VARCHAR(150);
  DECLARE VARIABLE CODIGO_TEMP INTEGER;
  DECLARE VARIABLE COD_CLIENTE INTEGER;

BEGIN

  /* Recupera informações da forma de pagamento */
  SELECT DESCRICAO,
         BLOQUEAR_PAGAMENTO,
         CENTRO_CUSTOS,
         CENTRO_CUSTOS_REDUZIDO,
         CONTA_CORRENTE,
         FINALIZADORA,
         QUITACAO_PROGRAMADA,
         LANCA_TAXA_CONTA,
         TAXA_CENTRO_CUSTOS,
         TAXA_CENTRO_CUSTOS_REDUZIDO,
         TAXA_TIPO_CONTA,
         TAXA_ADMINISTRATIVA
    FROM FORMAS_PAGAMENTO
   WHERE CODIGO = NEW.FORMA_PAGAMENTO
    INTO :DESCRICAO,
         :BLOQUEAR_PAGAMENTO,
         :CENTRO_CUSTOS,
         :CENTRO_CUSTOS_REDUZIDO,
         :CODIGO_CONTA_CORRENTE,
         :FINALIZADORA,
         :QUITACAO_PROGRAMADA,
         :LANCA_TAXA_CONTA,
         :TAXA_CENTRO_CUSTOS,
         :TAXA_CENTRO_CUSTOS_REDUZIDO,
         :TAXA_TIPO_CONTA,
         :TAXA;

  IF ( QUITACAO_PROGRAMADA IS NULL ) THEN
    QUITACAO_PROGRAMADA = 'Não';

  /* Realiza o lançamento no Contas a Receber */
  UPDATE VENDAS_PAGAMENTO
     SET BLOQUEIA_PAGAMENTO = :BLOQUEAR_PAGAMENTO
   WHERE CODIGO = NEW.CODIGO AND
         CODIGO_PAGAMENTO = NEW.CODIGO_PAGAMENTO;

  SELECT ( CAST( C.CODIGO AS VARCHAR(10) ) || ' - ' || C.NOME  ),
         C.CODIGO
    FROM CLIENTES C, VENDAS V
   WHERE V.CODIGO_CLIENTE = C.CODIGO AND
         V.CODIGO = NEW.CODIGO
    INTO :NOME_CLIENTE,
         :COD_CLIENTE;

  /* o Tamanho deve ser no máximo 49, por isto se usa ajusta nome */
  NOME_CLIENTE = udf_ajustanome( NOME_CLIENTE, 49 );

  /* cria a conta caso haja uma taxa administrativa */
  IF ((TAXA_CENTRO_CUSTOS is not NULL) and (LANCA_TAXA_CONTA = 'Sim')) THEN
  BEGIN

    CODIGO_TEMP = GEN_ID( GEN_CODIGO_CONTAS, 1 );
    INSERT INTO CONTAS
    ( CODIGO,
      LANCAMENTO,
      DESCRICAO,
      CENTRO_CUSTOS,
      CENTRO_CUSTOS_REDUZIDO,
      CONTA_CORRENTE,
      VALOR,
      TIPO_CONTA,
      DATA_VENCIMENTO,
      DATA_QUITACAO,
      TIPO,
      FINALIZADORA,
      QUITACAO_PROGRAMADA,
      PROVENIENTE,
      VENDAS )
    VALUES
      ( :CODIGO_TEMP,
        CURRENT_TIMESTAMP,
        'Taxa Administrativa da Venda ' || NEW.CODIGO,
        :TAXA_CENTRO_CUSTOS,
        :TAXA_CENTRO_CUSTOS_REDUZIDO,
        :CODIGO_CONTA_CORRENTE,
        NEW.VALOR_PARCELA * (:TAXA / 100),
        :TAXA_TIPO_CONTA,
        NEW.DATA_VENCIMENTO,
        NEW.DATA_QUITACAO,
        NEW.TIPO,
        :FINALIZADORA,
        :QUITACAO_PROGRAMADA,
        :NOME_CLIENTE,
        NEW.CODIGO );

    UPDATE VENDAS_PAGAMENTO
       SET CONTA_TAXA_ADMINISTRATIVA = :CODIGO_TEMP
     WHERE CODIGO = NEW.CODIGO AND
           CODIGO_PAGAMENTO = NEW.CODIGO_PAGAMENTO;
  END


  /* Realiza a insercao no contas, somente em caso de venda. */
  INSERT INTO CONTAS
  ( CODIGO,
    LANCAMENTO,
    CENTRO_CUSTOS,
    CENTRO_CUSTOS_REDUZIDO,
    CONTA_CORRENTE,
    N_DOCUMENTO,
    NOME_CONTA_BANCO,
    NOME_BANCO,
    VALOR,
    TIPO_CONTA,
    DATA_VENCIMENTO,
    DATA_QUITACAO,
    DESCRICAO,
    VENDAS,
    VENDAS_PAGAMENTO,
    CODIGO_CLIENTE,
    TIPO,
    FINALIZADORA,
    QUITACAO_PROGRAMADA,
    PROVENIENTE,
    CODIGO_CONTA_TAXA
     )
  VALUES
    ( GEN_ID( GEN_CODIGO_CONTAS, 1 ),
      NEW.DATA_LANCAMENTO,
      :CENTRO_CUSTOS,
      :CENTRO_CUSTOS_REDUZIDO,
      :CODIGO_CONTA_CORRENTE,
      NEW.N_DOCUMENTO,
      NEW.NOME_CONTA_BANCO,
      NEW.NOME_BANCO,
      NEW.VALOR_PARCELA,
      '+',
      NEW.DATA_VENCIMENTO,
      NEW.DATA_QUITACAO,
      :DESCRICAO,
      NEW.CODIGO,
      NEW.CODIGO_PAGAMENTO,
      :COD_CLIENTE,
      NEW.TIPO,
      :FINALIZADORA,
      :QUITACAO_PROGRAMADA,
      :NOME_CLIENTE,
      :CODIGO_TEMP
      );

  IF (NEW.TIPO IS NULL) THEN
  BEGIN

    /* Realiza o Movimento de Caixa. Esse é o único local aonde se faz a
       movimentação diretamente na tabela CAIXA. Essa movimentação é apenas
       para a FINALIZADORA Dinheiro, pois as outras FINALIZADORAS são totalizadas
       calculando os registros da tabela VENDAS_PAGAMENTO. */
    SELECT CODIGO_USUARIO
      FROM VENDAS
     WHERE CODIGO = NEW.CODIGO
      INTO :CODIGO_USUARIO;

     SELECT DINHEIRO_SISTEMA
      FROM CAIXA
     WHERE CODIGO_USUARIO = :CODIGO_USUARIO AND
           ABERTO = 'Sim'
      INTO :DINHEIRO_SISTEMA;

    IF ( ( NEW.NUMERO_PARCELA IN (0, 1) ) AND ( FINALIZADORA = 'Dinheiro' ) ) THEN
    BEGIN
      DINHEIRO_SISTEMA = DINHEIRO_SISTEMA + NEW.VALOR_TOTAL;
      UPDATE CAIXA
         SET DINHEIRO_SISTEMA = :DINHEIRO_SISTEMA
       WHERE CODIGO_USUARIO = :CODIGO_USUARIO AND
             ABERTO = 'Sim';
    END

  END

END


Alguém tem alguma dica de como resolver?

Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Ter Set 23, 2014 10:29 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Set 23, 2014 10:28 am    Assunto: Responder com Citação

Resolvi fazendo um database compare entre dois bancos no ibexpert, não seio o que aconteceu, mais resolveu.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB