Página 1 de 1

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 05:17
por Nascimento
Amigos estou mudando um pouco meu codigo separei um trecho que é o que nao estou conseguindo fazer
tem 2 tipos de mudança LI ou OC
o que preciso e que se algum dos numeros do quadro mudar a situacao de LI para OC
o programa avise que houve mudança segue o codigo abaixo
agradeço desde já quem poder me ajudar

Código: Selecionar todos

#include 'inkey.ch'

Proc main()
Public aApto:={}
wop2:= 9
cls
use teste
goto top
dados:= space(3)
situ:= space(2)
do while (wop2 != 0)
 do case
   case (LastKey() == K_F2)
	 Index on strzero(val(apt),3) teste               
     @ 01,02 say 'entre com o numero' get dados
     @ 01 ,25 say ' indique a situacao' get situ pict '@!'
    read
    seek Val(alltrim(apt))
    Replace sit with situ
*    replace apt with dados
	  @ 01,02 say space(100)
	  inkeY(1)
	  loop
   otherwise
   inkey(1)
   janela()
	tone(100) 
 end case
end do

**********************************************

procedure janela
   use teste
   goto top
   oc:= 0 
   totap:= LastRec() - 1
   linha:= 5
   v_linha:= 15    
   for i:= 1 to 10
      col:= 38
      do while (!EOF())
         if (col > 73)
            exit
         endif
         col:= col + 4         
         do case         
         case sit = "LI"
            set color to w+/g+  
         case sit = "OC"            
               set color to n/r   
            oc++ 
         endcase
          @ linha, col say apt  
         reg_at:= RecNo()
        aadd(aApto,{ltrim(apt),sit})
         testa(ltrim(apt)+sit) // DA ERRO AQUI e PRECISO DA VERIFICAÇAO CONSTANTE
         skip
      enddo
      if (EOF())        
         exit
      endif
      linha:= linha + 2
   next 
*********************************************
proc testa(cCap)
nAp:=ascan(aApto,{|e| e[1]==cCap})
If aApto[nAp,2] == rigth(cCap,2)
else
 @ 01,02 say 'MUDOU' + cCap
 inkey(0)
 @ 01,02 say space(10)
endif
o banco de dados esta anexado abaixo
teste.rar
Banco de dados
(201 Bytes) Baixado 31 vezes

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 09:50
por Jairo Maia
Olá Josivam,

Pelo seu exemplo não foi possível saber exatamente como você faz a checagem de quando houve alteração entre LI e CO, mas é possível entender o motivo do erro.

Veja que a matriz aApto é multidimensional, então no primeiro elemento você coloca ltrim(apt) e no segundo você coloca sit.

Quando você chama a função testa, você chama desta forma: testa(ltrim(apt)+sit), ou seja, envia ambos elementos para o parâmetro cCap da função testa().

Na função testa(), você usa AScan() e compara o elemento 1 com cCap, veja: nAp:=ascan(aApto,{|e| e[1]==cCap}). Então nAp sempre retorna 0 (zero), pois o elemento 1 nunca será igual a cCap, e ai provoca o erro.

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 10:12
por Nascimento
Amigo jairo justamente nao tem checagem e é isso que estou precisando so nao estou sabendo como fazer

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 10:34
por Jairo Maia
Josivam, o que você precisa é avisar que o inquilino mudou (ou que o imóvel está vazio) quando o conteúdo do campo sit for OC? É isso?

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 10:56
por Nascimento
isso, mais uma unica vez, supondo o 201 estava em LI e foi pra OC entao preciso so que envie essa mudança de status so uma vez para funçao testa() ate que a mesma mude novamente porque como vc percebe é um loop a cada 1 segundo vai pra funçao janela() ai preciso que a funçao testa() aponte so as que mudaram de Status ignorando as que ficaram no Mesmo, há na linha 18 tem um pequeno erro pra corrigir trocar seek Val(alltrim(apt)) por seek Val(alltrim(dados)) ja tava quase dormindo no teclado rsrs #-)

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 12:01
por JoséQuintas
Eu acrescentaria um campo: data de mudança da situação.
Assim poderia ver os ocupados "de hoje", por exemplo, selecionando a data.
De quebra, também poderia ver os livres de hoje. (ou da semana, ou do mes)
Talvez até melhor ter as duas datas.

Exemplo:

Código: Selecionar todos

situacao == "OC" .AND. data == Date()
Outra opção é ter um arquivo de histórico, com todas as mudanças de livre/ocupado.

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 12:12
por Jairo Maia
JoséQuintas escreveu:Eu acrescentaria um campo: data de mudança da situação.
Boa Idéia!

Josivam, Alterei seu exemplo. Veja se dá uma idéia da forma que ficou. Pelo menos está funcionando como você quer, eu acho:

Código: Selecionar todos

#include 'inkey.ch'

Proc main()
Public aApto:={}
wop2:= 9
cls
use teste

While !Eof()
 AaDd( aApto, { apt, sit } )
 Skip
EndDo

If Len( aApto ) = 0
 Alert( "Arquivo Vazio" )
 Return Nil
EndIf
   
goto top
do while (wop2 != 0)
 do case

   case (LastKey() == K_F2)
    dados:= space(3)
    situ:= space(2)
    Index on Val( AllTrim( apt ) ) To teste
    @ 01,02 say 'entre com o numero' get dados
    @ 01 ,25 say ' indique a situacao' get situ pict '@!'
    read
    seek Val( AllTrim( dados ) )
    If Found()
     Replace sit with situ
    EndIf
    * replace apt with dados
    @ 01,02 say Space(MaxRow())
    loop

  otherwise
  inkey(1)
  janela()
  tone(100) 

  If inkey(1) = K_ESC
   Exit
  EndIf

 end case

end do
Return Nil

**********************************************

procedure janela
   use teste
   goto top
   oc:= 0 
   totap:= LastRec() - 1
   linha:= 5
   v_linha:= 15    
   col:= 38
   do while (!EOF())
      if (col > 73)
         col:= 38
         linha:= linha + 2
      endif
      col:= col + 4         
      If sit = "LI"
         set color to w+/g+  
      ElseIf sit = "OC"            
         set color to n/r   
         oc++ 
      EndIf

      @ linha, col say apt  
      reg_at:= RecNo()

      Testa( apt, sit )

      skip
   enddo

Return Nil

*********************************************
Proc Testa( cAp, cSit )

 nAp := AScan( aApto, { |e| e[1] == cAp } )

 If nAp > 0 .And. aApto[nAp,2] != cSit
  aApto[ nAp, 2 ] := cSit
  @ 01,02 say 'MUDOU => ' + cAp
  inkey(0)
  @ 01,02 say space(30)
 EndIf

Return Nil

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 12:49
por Nascimento
jairo em primeiros testes esta funcionando exatamente como eu preciso vou começar a fazer o resto da funçao pra ver como se comporta
muito obrigado a vc e ao amigo quincas e tambem aos demais
amigo quincas nao preciso de datas ate porque é uma mudança quase que constante os status dessa maneira que o jairo fez acho que vai dar certo

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 13:04
por JoséQuintas
Não esqueça que a mudança do Jairo vale somente na hora que acabar de alterar.
Se deixar passar a lista, não consegue mais obtê-la.
Gravando a data, pode consultar a qualquer momento.
Conforme sua necessidade, é só escolher.

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 13:05
por Nascimento
observando parece que deu um pequeno erro quando mudo o Status da 246 ta mudando tambem a da 999

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 13:06
por Nascimento
mais é isso nao preciso de consulta futura so em tempo real mesmo mudou avisou parou so isso sem consultas futuras

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 13:53
por Nascimento
Amigos ja resolvi a questao da 999
agradeço desde já toda atençao disponibilizada para meu problema

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 15:18
por Jairo Maia
JoséQuintas escreveu:Gravando a data, pode consultar a qualquer momento.
No início também achei que se tratava de imobiliária. Mas depois percebi que se trata de controle de portaria para Hotéis e Motéis. Apenas mostra as suítes livres e as ocupadas. Aliás, muito bacana a ideia...

Mostrar Mudança de Situaçao

Enviado: 09 Dez 2014 16:21
por Nascimento
sim é exatamente isso :)