Pegar o mesmo registro do campo anterior

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

Bom dia galera,
seguinte.. vê se alguém pode me ajudar...
tenho uma tabela com alguns campos..
entre eles, data, cod_produto, preço_custo, preço_venda
diariamente eles entram com esses valores
no forms quero fazer um cabecalho com o campo data( que ele vai digitar apenas uma vez, podendo ser qualquer data sysdate e outras)
e embaixo um campo mult_record para ser mais facil para ele digitar, ele só vai digitar cod_produto, preço_custo, preço_venda.
o que eu tinha feito era o seguinte..
no key_next_item do campo preço_venda que é o ultimo campo do registro;

Selecionar tudo

va_data_lancamento := :bloco1.data;
next_record;
:bloco1.dat_lancamento := va_data_lancamento;
mas quando fui salvar me deparei que ele gera um novo registro quando passo pelo next_record. e o campo cod_produto seria inserido nulo.
E isso não pode acontecer.
alguém tem alguma idéia?

Obrigado
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

trabalha com uma trigger diferente.

No seu caso a when-new-record-instance do teu bloco multi-row deve servir perfeitamente.

Joga este teu código lá, e tira aquele next-record.

Ou tu pode fazer o teu campo do bloco muti-row copiar o valor do campo do cabeçalho através de uma propriedade do item COPY VALUE FROM ITEM.

la tu coloca o NOME_BLOCO.NOME_ITEM que é pra copiar o valor.

Qualquer duvida posta aew.
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

O COPY VALUE FROM ITEM não deu certo porque o campo é o mesmo. só muda o registro.
O que eu tenho que fazer é sair do campo preço_venda ir para o proximo registro entrar no item cod_produto e na data continuar a mesma data do proximo registro.
mas se eu salvo ele da que o cod_produto esta null. Isto acontece porque ele já preencheu previamente o campo data com a data anterior neste registro , mas eu não vou por mais registro.
Deixa eu tentar falar um exemplo.

Minha_tabela

Selecionar tudo

data_lcto  cod_produto(fk) preço_custo preço_venda
01/01/01          1                 1,00            1,50
01/01/01          2                 1,00            2,00
01/01/01          3                 2,00            3,00
mas em vez de ele ficar digitando toda vez todos os campos.. eu quero manter a data e ele digita do cod produto pra frente.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Como eu já te falei, trabalha com a when-new-record-instance do bloco.
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

já tentei.. não funcionou.
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

Tem alguma maneira de eu zerar os campos e não inserir no registro nada no pre-insert ou pre-update?
tipo.. ir para o previous_record e o last_record ser tudo null e não salvar o last_record?
não sei.. Talvez to falando alguma besteira.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

NA WHEN-NEW-ITEM-INSTANCE do teu campo :

Selecionar tudo

  BEGIN
     IF :GLOBAL.DATA IS NOT NULL THEN
        :NOME_BLOCO.NOME_CAMPO := :GLOBAL.DATA
     END IF;
  END;
NA POST-TEXT-ITEM ou na WHEN-VALIDATE-ITEM do teu campo:

Selecionar tudo

   BEGIN
       IF :NOME_BLOCO.NOME_CAMPO IS NOT NULL THEN
             :GLOBAL.DATA := :NOME_BLOCO.NOME_CAMPO;
       END IF;
   END ;
Qualque erro posta aí.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Cara.. blza?

Vamos ver se posso te ajudar.

~ Não entendi porque tu quer dar um NEXT_RECORD na tua KEY-NEXT-ITEM, mas tudo bem. Eu colocaria uma NEXT_ITEM. :P

~ O teu bloco multi-record está com a propriedade Navigation Style setada pra "Change Record". Por isso que cria um novo registro.

Tu pode, ao digitar uma data, fazê-la receber um parâmetro.
Ai, quando entra em um NOVO registro, faz o campo recebê-lo.
Isso é o que eu faria.
Ou não.

Vê se dá certo aí :-o
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

ORA-01400: cannot insert NULL into .....

Isso acontece porque no registro a qual ele foi ele já insere automaticamente a data do registro anterior.. mas como eu não vou colocar nenhum dado nesse registro ele da erro dizendo que existem campos obrigatorios null.

exemplo.

estou inserindo 10 registros.. se eu não sair do :system.cursor_record = 10. BLZA.. ELE GRAVA CERTO.
mas se eu passar pro 11º e não inserir nada no 11º registro ele da esse erro. Pois no 11º ele esta com a data preenchida . e o cod_produto, preço_custo, preço_venda esta vazio.
então por isso que eu pensei de colocar algo no pre_insert (fazer ele voltar pro registro anterior) e limpar o 11º em tempo de execucao.
Responder
  • Informação