[firebase-br] Estorno ***de loucos***

Mário Reis secretariadogeral em acra.pt
Sex Ago 22 14:27:03 -03 2008


Descupem mas cuidava que o código exemplo seria o suficiente. Como parece 
que não
deixo o caso concreto:
CREATE PROCEDURE NEW_PROCEDURE1( IN_DTINIC DATE,  IN_DTFIM DATE,  IN_DTPAG 
DATE,  IN_ID INTEGER)
AS
DECLARE VARIABLE WCOBRANCAS_ID INTEGER;
DECLARE VARIABLE WDT_COBRANCA DATE;
DECLARE VARIABLE WPROD_ID VARCHAR(3);
DECLARE VARIABLE WLINHA_ID SMALLINT;
DECLARE VARIABLE WCONTRATO_ID INTEGER;
DECLARE VARIABLE WNO_SOCUT_ID INTEGER;
DECLARE VARIABLE WANO VARCHAR(4);
DECLARE VARIABLE WMES CHAR(2);
DECLARE VARIABLE WDIA CHAR(2);
DECLARE VARIABLE WOPER_ID VARCHAR(2);
DECLARE VARIABLE WVLR_TOT_PAG NUMERIC(18, 2);
DECLARE VARIABLE WVLR_TOT_DISC NUMERIC(18, 2);
DECLARE VARIABLE WVLR_TOT_IVA NUMERIC(18, 2);
DECLARE VARIABLE WVLR_TOT_PAG1 NUMERIC(18, 2);
DECLARE VARIABLE WVLR_TOT_DISC1 NUMERIC(18, 2);
DECLARE VARIABLE WVLR_TOT_IVA1 NUMERIC(18, 2);
DECLARE VARIABLE WNR_DOC_ID BIGINT;
DECLARE VARIABLE WDT_PG_EFECTIVO DATE;
DECLARE VARIABLE WDT_VALOR DATE;
DECLARE VARIABLE WNIB CHAR(21);
DECLARE VARIABLE WSITUCONTA_ID VARCHAR(2);
DECLARE VARIABLE WSITUREGISTO_ID VARCHAR(1);
DECLARE VARIABLE WDOCOBS VARCHAR(10);
DECLARE VARIABLE WBANCO_ID SMALLINT;
DECLARE VARIABLE WSITUACAO_PG CHAR(1);
DECLARE VARIABLE WNO_OPERACAO_ID BIGINT;
DECLARE VARIABLE WOBS VARCHAR(15);
DECLARE VARIABLE WUSERID VARCHAR(10);
DECLARE VARIABLE WESTACAO VARCHAR(10);
DECLARE VARIABLE WDATA DATE;
DECLARE VARIABLE WHORA VARCHAR(8);
DECLARE VARIABLE WACCAO VARCHAR(3);
BEGIN
  /*     Procedure Body       */
  FOR SELECT COBRANCAS_ID, DT_COBRANCA, PROD_ID, LINHA_ID,
     CONTRATO_ID, NO_SOCUT_ID, ANO, MES, DIA, OPER_ID,
     VLR_TOT_PAG, VLR_TOT_DISC, VLR_TOT_IVA, NR_DOC_ID,
             DT_PG_EFECTIVO, DT_VALOR, NIB, SITUCONTA_ID,
             SITUREGISTO_ID, DOCOBS, BANCO_ID, SITUACAO_PG,
             NO_OPERACAO_ID, OBS, USERID, ESTACAO, DATA, HORA, ACCAO
            FROM COBRANCAS
   WHERE DT_COBRANCA BETWEEN :IN_DTINIC AND :IN_DTFIM
     AND DT_PG_EFECTIVO=:IN_DTPAG AND COBRANCAS_ID=:IN_ID
    INTO :WCOBRANCAS_ID, :WDT_COBRANCA, :WPROD_ID, :WLINHA_ID, 
:WCONTRATO_ID,
         :WNO_SOCUT_ID, :WANO, :WMES, :WDIA, :WOPER_ID,
         :WVLR_TOT_PAG, :WVLR_TOT_DISC, :WVLR_TOT_IVA, :WNR_DOC_ID,
         :WDT_PG_EFECTIVO, :WDT_VALOR, :WNIB, :WSITUCONTA_ID,
         :WSITUREGISTO_ID, :WDOCOBS, :WBANCO_ID, :WSITUACAO_PG,
         :WNO_OPERACAO_ID, :WOBS, :WUSERID, :WESTACAO, :WDATA, :WHORA, 
:WACCAO
  DO
   BEGIN

     /* Inicio do Extrono. Negativa                       */
     If (WVLR_TOT_PAG IS NOT NULL) THEN
      WVLR_TOT_PAG1=WVLR_TOT_PAG*-1;
     Else
      WVLR_TOT_PAG=NULL;
     If (WVLR_TOT_DISC IS NOT NULL) THEN
      WVLR_TOT_DISC1=WVLR_TOT_DISC*-1;
     Else
      WVLR_TOT_DISC1=NULL;
     If (WVLR_TOT_IVA IS NOT NULL) THEN
      WVLR_TOT_IVA1=WVLR_TOT_IVA*-1;
     Else
      WVLR_TOT_IVA1=NULL;
      /* 1.ª Linha:  Negativar a Operação                             */
      WACCAO='EST';
      INSERT INTO COBRANCAS(COBRANCAS_ID, DT_COBRANCA, PROD_ID, LINHA_ID,
     CONTRATO_ID, NO_SOCUT_ID, ANO, MES, DIA, OPER_ID,
     VLR_TOT_PAG, VLR_TOT_DISC, VLR_TOT_IVA, NR_DOC_ID,
             DT_PG_EFECTIVO, DT_VALOR, NIB, SITUCONTA_ID,
             SITUREGISTO_ID, DOCOBS, BANCO_ID, SITUACAO_PG,
             NO_OPERACAO_ID, OBS, USERID, ESTACAO, DATA, HORA, ACCAO)
     VALUES(:WCOBRANCAS_ID, :WDT_COBRANCA, :WPROD_ID, :WLINHA_ID, 
:WCONTRATO_ID,
           :WNO_SOCUT_ID, :WANO, :WMES, :WDIA, :WOPER_ID,
           :WVLR_TOT_PAG1, :WVLR_TOT_DISC1, :WVLR_TOT_IVA1, :WNR_DOC_ID,
           :WDT_PG_EFECTIVO, :WDT_VALOR, :WNIB, :WSITUCONTA_ID,
           :WSITUREGISTO_ID, :WDOCOBS, :WBANCO_ID, :WSITUACAO_PG,
           :WNO_OPERACAO_ID, :WOBS, :WUSERID, :WESTACAO, 
:WDATA,:WHORA,:WACCAO);

      /* 2.ª Linha:  Carregar a Débito a Dívida                       */
     WACCAO='INS';
      INSERT INTO COBRANCAS(COBRANCAS_ID, DT_COBRANCA, PROD_ID, LINHA_ID,
     CONTRATO_ID, NO_SOCUT_ID, ANO, MES, DIA, OPER_ID,
     VLR_TOT_PAG, VLR_TOT_DISC, VLR_TOT_IVA, NR_DOC_ID,
             DT_PG_EFECTIVO, DT_VALOR, NIB, SITUCONTA_ID,
             SITUREGISTO_ID, DOCOBS, BANCO_ID, SITUACAO_PG,
             NO_OPERACAO_ID, OBS, USERID, ESTACAO, DATA, HORA, ACCAO)
     VALUES(:WCOBRANCAS_ID, :WDT_COBRANCA, :WPROD_ID, :WLINHA_ID, 
:WCONTRATO_ID,
           :WNO_SOCUT_ID, :WANO, :WMES, :WDIA, :WOPER_ID,
           :WVLR_TOT_PAG, :WVLR_TOT_DISC, :WVLR_TOT_IVA, :WNR_DOC_ID,
           :WDT_PG_EFECTIVO, :WDT_VALOR, :WNIB, :WSITUCONTA_ID,
           :WSITUREGISTO_ID, :WDOCOBS, :WBANCO_ID, :WSITUACAO_PG,
           :WNO_OPERACAO_ID, :WOBS, :WUSERID, :WESTACAO, 
:WDATA,:WHORA,:WACCAO);


   END
  SUSPEND;
  WHEN ANY DO
  BEGIN
   EXECUTE PROCEDURE MSG_ERRO_NO(GDSCODE,'NEW_PROCEDURE1');
  END
END

"Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br> 
escreveu na mensagem news:677230655.20080821133119 em warmboot.com.br...
Eu ainda não consegui entender exatamente qual eh seu problema...
aparentemente vc reportou 2 mensagens de erro distintas.

A primeira diz que vc não pode inserir porque a tabela está em modo
readonly. Veja se te ajuda:

http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1154534295:6&page=ibp_60_ro_ext_fs

A segunda mensagem, "multiple rows in singleton select", indica que vc
tentou recuperar informações com um select que deveria retornar no
máximo uma linha, mas retornou mais. Não encontrei no código que vc
postou uma instrução que poderia causar esse erro, então acredito que
isso esteja sendo disparado em algum trigger associado a tabela, ou
então numa parte do código que vc não postou...

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br
Blog - http://blog.firebase.com.br

MR> Descobri o problema. Talvez o Cantú ou alguém do TeamB tenha uma solução
MR> para ele
MR> ... "Cannot insert because the file is readonly or is on a read only
MR> medium."}, /* 331, ext_readonly_err */ {335544652, "multiple rows in
MR> singleton select"} ...
MR> usando uma Tabela/imagem funcion mas é uma soluçâo que não me agrada 
mesmo
MR> nada já que temos de criar uma
MR> para cada UserId diferente ou uma c/+ 1campo UserId.de.Trabalho e o 
cuidado
MR> de Deletar os registos desse user
MR> cada vez que corre a procedure ,e depois, é sempre mais um ficheiro pois 
ao
MR> que julgo saber o FB2 ainda não possui
MR> Create Temp. É que não funciona!  Nem mesmo com Aliáses diferentes o 
erro é
MR> sempre o mesmo 335544652
MR> Mas decerteza que já alguém precisou fazer isto antes!?!?!?

MR> Quem conhecer uma solução que não passe por um ficheiro
MR> De qq forma Obrigado

MR> "Mário Reis" <secretariadogeral em acra.pt> escreveu 
na
MR> mensagem news:g8joqf$gjh$1 em ger.gmane.org...
>> Errado não estou a conseguir  embora me de erro apenas no 2.º insert
>> salta-me para When ANY Do ... End Nota desactivei todas a triggers etc..
>> Inclusive, criei agorinha mesmo um ficheiro imagem (trabalho) e nem nesse
>> ficheiro
>> (s/triggers sem indices sem NOT NULL) se  estou a conseguir inserir esses
>> registos
>> que coisa!' impressionante
>>
>> "Isael Faria Junior" <isael em stetika.com.br>
>> escreveu na mensagem
>> news:48AD5C9F.5000904 em stetika.com.br...
>> você so consegue rodar uma vez essa rotina ? ou Ela só executa para o
>> primeiro registro ?
>>
>> Mrio Reis escreveu:
>>> Bom dia,
>>>
>>> Estou há horas a tentar implementar o "Estorno de uma operação
>>> financeira"
>>> coisa que é termo conceptuais é muito simples. Temos uma ou várias 
>>> linhas
>>> com indicação de "pagas" por erro que afinal não estão e é preciso
>>> corrigir.
>>> O fisco exige e até por razões de transparencia da propria
>>> empresa/associação etc que se não se apaguem linhas mas, antes, que
>>> repitam
>>> as mesmas linhas cada uma com os Valores *-1 uma, e que a mesma se 
>>> repita
>>> c/sinal positivo mas agora sem por exemplo Data de pagamento, N.º de
>>> Recibo
>>> e N.ºOperação(controla todos os registos de uma transacção) e estou a
>>> fazer
>>> assim
>>>
>>> FOR SELECT  CB1.COBRANCA_ID, CB1.VALOR_PG, CB1.VALOR_IVA, 
>>> CB1.VALOR_DISC,
>>> CB1.DT_PG_EFECTIVO, CB1.NORECIBO, CB1.NOOPERACAO
>>> FROM COBRANCAS CB1
>>> WHERE CB1.DT_PG_EFECTIVO=:IN_DT_PG_EFT AND CB1.CLIENTE_ID=:IN_CLI_ID
>>> INTO :WCOBRANCA_ID, :WVLR_PG, :WVLR_IVA, :WVLR_DISC, :WDT_PG_EFECTIVO,
>>> :WNORECIBO,:NOOPERACAO
>>> DO
>>>  BEGIN
>>>    /*      1. NEGATIVAR VALORES */
>>>   WVLR_PG=WVLR_PG*-1;
>>>   WVLR_IVA=WVLR_IVA*-1;
>>>   WVLR_DISC=WVLR_DISC*-1;
>>>  /* 2.  NOTA: NO MESMO FICHEIRO */
>>>   /* 2.1 ---------------------------------------> INSERE UMA LINHA
>>> NEGATIVA
>>> */
>>>  INSERT INTO COBRANCAS
>>> (COBRANCA_ID, VALOR_PG, VALOR_IVA, VALOR_DISC, DT_PG_EFECTIVO,
>>> NORECIBO,NOOPERACAO)
>>>   VALUES(:WCOBRANCA_ID, :WVLR_PG, :WVLR_IVA, :WVLR_DISC,
>>> :WDT_PG_EFECTIVO,
>>> ORECIBO,:WNOOPERACAO);
>>>    /*     2.2 POSITIVAR VALORES DA MESMA LINHA E RE-INSERI-LOS*/
>>>    /* C/CONTROLOS DO PAGAMENTO A NULL INDICANDO O S/NÃO PAGAMENTO  */
>>>     WDT_PG_EFECTIVO=NULL;
>>>     WNORECIBO=NULL
>>>     WNOOPERACAO=NULL
>>>    WVLR_PG=WVLR_PG*-1;
>>>    WVLR_IVA=WVLR_IVA*-1;
>>>    WVLR_DISC=WVLR_DISC*-1;
>>>    /* NOTA: AINDA NO MESMO FICHEIRO */
>>>   /* 2.3------------------------------------------>INSERE UMA LINHA
>>> POSITIVA
>>> MAS, NÃO PAGA  */
>>>   INSERT INTO COBRANCAS
>>> (COBRANCA_ID, VALOR_PG, VALOR_IVA, VALOR_DISC, DT_PG_EFECTIVO,
>>> NORECIBO,NOOPERACAO)
>>>   VALUES(:WCOBRANCA_ID, :WVLR_PG, :WVLR_IVA, :WVLR_DISC,
>>> :WDT_PG_EFECTIVO,
>>> ORECIBO,:WNOOPERACAO);
>>>
>>> END
>>> suspend,
>>>
>>> Só consigo uma 1.ª vez o negativar o 1.º insert O que há de errado neste
>>> codigo?
>>> Alguém já passou por isto que possa ajudar.
>>> Obrigado
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> No virus found in this incoming message.
>>> Checked by AVG - http://www.avg.com
>>> Version: 8.0.138 / Virus Database: 270.6.6/1624 - Release Date: 
>>> 20/8/2008
>>> 19:11
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>
>>
>>
>>


MR> --------------------------------------------------------------------------------


MR> ______________________________________________
MR> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
MR> Para saber como gerenciar/excluir seu cadastro na lista, use:
MR> http://www.firebase.com.br/fb/artigo.php?id=1107
MR> Para consultar mensagens antigas: http://firebase.com.br/pesquisa






______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista