Página 1 de 1

Calendario de senhas de almoço

Enviado: 18 Jul 2010 12:42
por lapinhazzz
Boa Tarde Amigos do Forum
Estive ontem até às 5 da manhã a tentar resolver e não consegui.
Peço a vocês para que consigam resolver isto por favor.
É assim:
Tenho um programa que tem como objectivo registar os dias em que houve venda de senhas de almoço
Sendo assim tenho uma base de dados chamada SENHAS com os seguintes campos:
MARDES - numérico e de três posições: 1 se marcou esse dia como vendida a senha, 0 se esse dia ainda não foi marcado como venda e 2 se já imprimiu esse dia.
E DATAREFER=Data do dia em que foi marcada a venda.
As cores são:
Se MARDES=1 fundo branco com letras pretas
Se MARDES=0 fundo roxo com letras pretas
Se MARDES=2 fundo verde com letras pretas
Quando mando imprimir os dias que estão com MARDES=1 passam para MARDES=2 e fixa a cor verde
O Dia em que estamos será com fundo do calendário com dia amarelo.
Posteriormente farei isto com um número de processo do aluno.
Depois a pesquisa se o MARDES=1 será também testada qual foi o processo do aluno
Se digitar espaço ou seja caracter 32 então marca esse dia como um dia de venda da senha, se marcar outro dia o programa apresenta os dias que estão marcados para venda.
Farei uma rotina para impressão e é convertido os dias com MARDES=1 para MARDES=2
O Código é este:

Código: Selecionar todos

[procedure calendario

   Local telaant,corant,;
      getlist := {},;
      wCursor

   wCursor := SetCursor(0)
   Private MMES,;
      DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,;
      DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,;
      DT21,DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,;
      DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,;
      DT41,DT42,wlin,wcol,cursor,mm,dt,at,wteladata,col,;
      lin,kont,kc,data,tcal,t,mensa,mes,kk,wUltima,NLINCOL,NLIN,NCOL,cor,mardes,ZZ
   set date brit
   set cent on
   set epoch to 1970
   use senhas
   inde on datarefer to idata
   wLin=row()
   wCol=col()
   MMES='        Janeiro  FevereiroMar‡o    Abril    Maio     Junho    Julho    Agosto   Setembro Outubro  Novembro Dezembro '
   DT=date()
   TELAANT=savescreen(6,0,24,79)
   CORANT=setcolor()
   setcolor('w+/br')
   @ 06,21 say 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'
   @ 07,21 say 'º                                   º'
   @ 08,21 say 'ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹'
   @ 09,21 say 'º Dom  Seg  Ter  Qua  Qui  Sex  Sab º'
   @ 10,21 say 'º                                   º'
   @ 11,21 say 'º                                   º'
   @ 12,21 say 'º                                   º'
   @ 13,21 say 'º                                   º'
   @ 14,21 say 'º                                   º'
   @ 15,21 say 'º                                   º'
   @ 16,21 say 'º                                   º'
   @ 17,21 say 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ'
   *sombrear(6,21,17,57)
   Mensagem('<'+chr(27)+chr(26)+'>Altera Mˆs, <> Altera Ano, <Ins> Procura Data e <Esc> p/ Sair',1)
   TCAL=savescreen(6,21,18,59)
   do whil .t.
      restscreen(6,21,18,59,TCAL)
      T=ltri(str(day(DT)))+' de '+rtri(subs(MMES,val(subs(dtoc(DT),4,2))*9,9))+' de '+ltri(str(year(DT)))+'.'
      MENSA=T
      setcolor('gr+/br')
      @ 07,int((80-len(MENSA))/2) say MENSA
      stor '  ' to DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,DT21
      stor '  ' to DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,DT41,DT42
      DATA=ctod('01/'+subs(dtoc(DT),4,7))
      KONT=dow(DATA)
      MES=month(DATA)
      do whil month(DATA)=MES
         KK=strzero(KONT,2)
         cc=ltri(strzero(day(dt),2))
         dd=ltri(subs(dtoc(dt),4,7))
         ee=cc+'/'+dd
         @ 1,1 say ee
         ff=ctod(ee)
         DT&KK.=str(day(DATA),2)
         KONT=KONT+1
         DATA=DATA+1
      end
      seek ff
      IF found()
         * replace mardes with 0
         replace datarefer with ff
      else
         append blank
         replace mardes with 0
         replace datarefer with ff
      endi
      seek ff
      a1=ltri(strzero(day(datarefer),2))
      a2=ltri(subs(dtoc(datarefer),4,7))
      a3=cc+'/'+a2
      a4=ctod(a3)
      @ 2,3 say a4

      setcolor('n/br')
      @ 11,24 say DT01
      @ 11,29 say DT02
      @ 11,34 say DT03
      @ 11,39 say DT04
      @ 11,44 say DT05
      @ 11,49 say DT06
      @ 11,54 say DT07
      @ 12,24 say DT08
      @ 12,29 say DT09
      @ 12,34 say DT10
      @ 12,39 say DT11
      @ 12,44 say DT12
      @ 12,49 say DT13
      @ 12,54 say DT14
      @ 13,24 say DT15
      @ 13,29 say DT16
      @ 13,34 say DT17
      @ 13,39 say DT18
      @ 13,44 say DT19
      @ 13,49 say DT20
      @ 13,54 say DT21
      @ 14,24 say DT22
      @ 14,29 say DT23
      @ 14,34 say DT24
      @ 14,39 say DT25
      @ 14,44 say DT26
      @ 14,49 say DT27
      @ 14,54 say DT28
      @ 15,24 say DT29
      @ 15,29 say DT30
      @ 15,34 say DT31
      @ 15,39 say DT32
      @ 15,44 say DT33
      @ 15,49 say DT34
      @ 15,54 say DT35
      @ 16,24 say DT36
      @ 16,29 say DT37
      @ 16,34 say DT38
      @ 16,39 say DT39
      @ 16,44 say DT40
      @ 16,49 say DT41
      @ 16,54 say DT42
      KONT=1
      for LIN=11 to 16
         for col=24 to 54 step 5
            KC=strzero(KONT,2)
            zz&kc.=str(day(DT),2)
            if DT&KC.=str(day(DT),2)
               setcolor('gr+/br')
               @ LIN,COL say DT&KC.
               setcolor('gr+/br')
               if cc=a1 .AND.  mardes=1
                  setcolor('n/w+*')
                  @ LIN,COL say dt&KC.
                  setcolor('n/w+*')
               elseif mardes=0
                  ll=lin
                  cl=col
                  setcolor('gr+/br')
                  @ LIN,COL say dt&kc.
                  setcolor('gr+/br')
               elseif mardes=2
                  *setcolor('gr+/g+')
                  *@ LIN,COL say DT&KC.
                  *setcolor('gr+/g+')
               endif
            endif
            KONT=KONT+1
         next
      next
      do whil ! str(inke(0),3)$' 27. 19.  4.  32.  22.'
      end
      wUltima=lastkey()
      if wUltima=27
         exit
      end
      if wUltima=19                                             && SETA P/ <-
         if year(DT)=100 .and. mont(DT)=1
            loop
         endi
         IF DT=date()
            loop
         ELSE
            DT=DT-1
         ENDIF
         IF empt(dt)
            wait "entrou no empt(dt)"
         ENDIF
         do whil empt(DT)
            At=AT-1
            DT=AT
            DT=DT-(20+day(DT))
            DT=ctod(subs(dtoc(AT),1,2)+subs(dtoc(DT),3,8))
         end
      elseif wUltima=4                                          && SETA P/ ->
         if year(DT)=2999 .and. mont(DT)=12
            loop
         endi
         DT=DT+1
      elseif wUltima=32
         go top
         seek ff
         if datarefer=ff .AND. mardes=1
            replace mardes with 0
         elseif datarefer=ff .AND. mardes=0
            replace mardes with 1
         endif
      end
   end
   @ wLin,wCol say ''
   set cent off
   restscreen(6,0,24,79,TELAANT)
   setcolor(CORANT)
   SetCursor( wCursor )
   set date amer
   retu

   *******
   func M1
      MEMVAR MM
      if year(MM)<100 .or. year(MM)>2999
         ERRO('Ano da data inv lido.')
         retu(.f.)
      endi
      retu(.t.)

/*Funcao.....: Erro
Proposito..: Emitir uma mensagem de erro na linha 24
             e fazer soar o alarme
Parametros.: Mensagem de Erro
Autor......: Walter Goldberg

*/

      procedure erro
         para wMensagem
         priv wCorAnt, wTelaAnt
         wCorAnt=setcolor()
         setcolor("w+")
         wMensagem=wMensagem+' - Tecle <Enter>'
         wMensagem=stuff(spac(80),(80-len(wMensagem))/2+1,len(wMensagem),wMensagem)
         wTelaAnt=savescreen(24,0,24,79)
         set curs off
         @ 24,0 say wMensagem
         tone(527,1)
         tone(727,1)
         inke(0)
         restscreen(24,0,24,79,wTelaAnt)
         setcolor(wCorAnt)
         set curs on
         return
/*

Procedure......: Mensagem
Objetivo.......: Enviar mensagem para linha 24
Parametros.....: 1§ Mensagem a ser exibida
                 2§ Status
                 3§ Cor

Status.........: Status = 1
                 Exibe mensagem e retorna
                 Mensagem(Mensagem,1)

                 Status = 2
                 Exibe mensagem, da beep e retorna
                 Mensagem(Mensagem,2)

                 Status = 3
                 Exibe mensagem,da beep,espera ®Enter¯,apaga
                 Mensagem(Mensagem,3)

                 Status = 4
                 Apaga linha 24
                 Mensagem(" ",4)

                 Cor

Exemplo.: Mensagem('',4)
          Mensagem('Arquivo n„o Existe Tecle <cr>',3,'w+/b')

Autor..........: Walter Goldberg

*/

/* ------------- Begin Mensagem Procedure --------------- */


         Procedure Mensagem ( cMensagem,cStatus,cCor )
            Local cCorAnt  ,;
               cEspacos := space(80),;
               wSalvaLinha24,;
               wCh

            cCorAnt=setcolor()

            *
            * Define o status em funcao do parametro cStatus
            *

            if valtype( cStatus ) == "U"
               cStatus = 3
            end

            *
            * Define a Cor em funcao do parametro Cor
            *

            if valtype( cCor ) == "U"
               cCor = "w+/br"
            end

            setcolor( cCor )

            if (len(trim(cMensagem))=0)
               setcolor( cCor )
               @ 24,00 say cEspacos
               setcolor( cCorAnt )
               return
            endif

            cMensagem=stuff(cEspacos,(80-len(cMensagem))/2+1,len(cMensagem),cMensagem)

            setcolor( cCor )
            wSalvaLinha24 := SaveScreen( 24,0,24,79 )
            @ 24,00 say cMensagem
            do case
               case ( cStatus=2)
                  BEEP()
               case (cStatus=3)
                  BEEP()
                  Do While ( ( wCh := InKey( 0 ) ) != K_ENTER  ) ; EndDo
                     SetColor( "N" )
                     RestScreen( 24,0,24,79,wSalvaLinha24 )
               EndCase
               setcolor ( cCorAnt )
               return

/* -------------- End Mensagem Procedure ---------------- */

/*

Procedure......: Beep
Objetivo.......: Emitir um sinal sonoro
Parametros.....: Nenhum
Author.........: Walter Goldberg

*/

/* --------------- Begin Beep Procedure ----------------- */


               Procedure Beep
                  tone(1001,1)
                  tone(1501,1)
                  tone(2001,1)
                  return

/* ---------------- End Beep Procedure ------------------ */



*]
Objectivo: Ficará registado no calendário os dias que estão marcados para imprimir
Muito obrigado
Lapinhazzz

Re: Calendario de senhas de almoço

Enviado: 19 Jul 2010 09:49
por alxsts
Olá!

Penso que tanto o código postado quanto o enunciado do problema estão um tanto quanto confusos. Poderias explicar melhor para que te possamos ajudar?

Re: Calendario de senhas de almoço

Enviado: 19 Jul 2010 10:31
por lapinhazzz
Caro amigo do forum
Você pode compilar aquilo que está postado e verificar que irá aparecer um calendário.
Através desse calendário se digitar espaço o programa assinala esse dia com cor branca.
Por exemplo:
Quando um cliente quer o dia 20 então se estamos no dia 19 carrega na seta para a direita e está no dia 20 depois carrega em espaço e fica o dia 20 como dia marcado e escolhido pelo cliente.
Exemplo

Dom Seg Ter Qua Qui Sex Sab
1 2 3 .. .. .. ..
20

Se quiser marcar outro dia é só carregar na seta para a direita e vai para outro dia e marca o dia se quiser.

Depois de tudo marcado os dias que queremos o programa pergunta se quer imprimir(esta rotina ainda não está feita)

Todos os dias marcados serão marcados ou desmarcados conforme o que está numa base de dados chamada senhas

MARDES é o campo que indica se
1 - está marcado
0 - está desmarcado
2 - já foi impresso

Com este código não estou conseguindo marcar os dias e vê-los na tela, só consigo ver se estiver no dia que marco.
por exemplo quando marco um dia e depois sigo para outro dia sem marcar então o dia que anteriormente marquei não aparece. nesta rotina que tenho só aparece o dia marcado se estiver colocado nesse dia.

No fim de marcar os dias que quero o programa deve perguntar se confirmo(esta parte ainda não está feita) e se confirmar sim então pergunta se quer imprimir(rotina não feita) se confirmar imprimir então os dias marcados passam a outra cor

dia 20 marcado - Cor de fundo branca com letra preta
dia 20 marcado e impresso - Cor verde e letra preta (aqui podemos "navegar" nos dias verdes mas já não os podemos imprimir novamente.

Agora aqui está o problema:

Como é que eu faço isto.

Pode compilar o programa que funciona mas não tanto como eu queria pois preciso de ajuda para uma rotina que fizesse isto que eu relatei.

BASE DE DADOS SENHAS CONTEM OS SEGUINTES CAMPOS
MARDES - 1 CARACTER NUMERICO -marcado ou desmarcado
DATAREFER - CARACTER DATA - data de referencia do dia em que está marcado ou desmarcado

Me ajudem por favor

A rotina original é mais ou menos isto

Código: Selecionar todos

procedure calendario 
   
    Local telaant,corant,; 
       getlist := {},; 
       wCursor 
   
    wCursor := SetCursor(0) 
    Private MMES,; 
       DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,; 
       DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,; 
       DT21,DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,; 
       DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,; 
       DT41,DT42,wlin,wcol,cursor,mm,dt,at,wteladata,col,; 
       lin,kont,kc,data,tcal,t,mensa,mes,kk,wUltima,NLINCOL,NLIN,NCOL,cor,mardes,ZZ 
    set date brit 
    set cent on 
    set epoch to 1970 
    use senhas 
    inde on datarefer to idata 
    wLin=row() 
    wCol=col() 
    MMES='        Janeiro  FevereiroMar‡o    Abril    Maio     Junho    Julho    Agosto   Setembro Outubro  Novembro Dezembro ' 
    DT=date() 
    TELAANT=savescreen(6,0,24,79) 
    CORANT=setcolor() 
    setcolor('w+/br') 
    @ 06,21 say 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»' 
    @ 07,21 say 'º                                   º' 
    @ 08,21 say 'ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹' 
    @ 09,21 say 'º Dom  Seg  Ter  Qua  Qui  Sex  Sab º' 
    @ 10,21 say 'º                                   º' 
    @ 11,21 say 'º                                   º' 
    @ 12,21 say 'º                                   º' 
    @ 13,21 say 'º                                   º' 
    @ 14,21 say 'º                                   º' 
    @ 15,21 say 'º                                   º' 
    @ 16,21 say 'º                                   º' 
    @ 17,21 say 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ' 
    *sombrear(6,21,17,57) 
    Mensagem('<'+chr(27)+chr(26)+'>Altera Mˆs, <> Altera Ano, <Ins> Procura Data e <Esc> p/ Sair',1) 
    TCAL=savescreen(6,21,18,59) 
    do whil .t. 
       restscreen(6,21,18,59,TCAL) 
       T=ltri(str(day(DT)))+' de '+rtri(subs(MMES,val(subs(dtoc(DT),4,2))*9,9))+' de '+ltri(str(year(DT)))+'.' 
       MENSA=T 
       setcolor('gr+/br') 
       @ 07,int((80-len(MENSA))/2) say MENSA 
       stor '  ' to DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,DT21 
       stor '  ' to DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,DT41,DT42 
       DATA=ctod('01/'+subs(dtoc(DT),4,7)) 
       KONT=dow(DATA) 
       MES=month(DATA) 
       do whil month(DATA)=MES 
          KK=strzero(KONT,2) 
             DT&KK.=str(day(DATA),2) 
          KONT=KONT+1 
          DATA=DATA+1 
       end 

       setcolor('n/br') 
       @ 11,24 say DT01 
       @ 11,29 say DT02 
       @ 11,34 say DT03 
       @ 11,39 say DT04 
       @ 11,44 say DT05 
       @ 11,49 say DT06 
       @ 11,54 say DT07 
       @ 12,24 say DT08 
       @ 12,29 say DT09 
       @ 12,34 say DT10 
       @ 12,39 say DT11 
       @ 12,44 say DT12 
       @ 12,49 say DT13 
       @ 12,54 say DT14 
       @ 13,24 say DT15 
       @ 13,29 say DT16 
       @ 13,34 say DT17 
       @ 13,39 say DT18 
       @ 13,44 say DT19 
       @ 13,49 say DT20 
       @ 13,54 say DT21 
       @ 14,24 say DT22 
       @ 14,29 say DT23 
       @ 14,34 say DT24 
       @ 14,39 say DT25 
       @ 14,44 say DT26 
       @ 14,49 say DT27 
       @ 14,54 say DT28 
       @ 15,24 say DT29 
       @ 15,29 say DT30 
       @ 15,34 say DT31 
       @ 15,39 say DT32 
       @ 15,44 say DT33 
       @ 15,49 say DT34 
       @ 15,54 say DT35 
       @ 16,24 say DT36 
       @ 16,29 say DT37 
       @ 16,34 say DT38 
       @ 16,39 say DT39 
       @ 16,44 say DT40 
       @ 16,49 say DT41 
       @ 16,54 say DT42 
       KONT=1 
       for LIN=11 to 16 
          for col=24 to 54 step 5 
             KC=strzero(KONT,2) 
             
             if DT&KC.=str(day(DT),2) 
                setcolor('gr+/br') 
                @ LIN,COL say DT&KC. 
                setcolor('gr+/br') 
                
             endif 
             KONT=KONT+1 
          next 
       next 
       do whil ! str(inke(0),3)$' 27. 19.  4.  32.  22.' 
       end 
       wUltima=lastkey() 
       if wUltima=27 
          exit 
       end 
       if wUltima=19                                             && SETA P/ <- 
          if year(DT)=100 .and. mont(DT)=1 
             loop 
          endi 
          IF DT=date() 
             loop 
          ELSE 
             DT=DT-1 
          ENDIF 
          
          do whil empt(DT) 
             At=AT-1 
             DT=AT 
             DT=DT-(20+day(DT)) 
             DT=ctod(subs(dtoc(AT),1,2)+subs(dtoc(DT),3,8)) 
          end 
       elseif wUltima=4                                          && SETA P/ -> 
          if year(DT)=2999 .and. mont(DT)=12 
             loop 
          endi 
          DT=DT+1 
       elseif wUltima=32                                 && caracter espaço
          & SE CARREGAR EM ESPAÇO ENTÃO A ROTINA QUE VAI FICAR AQUI É PARA DESMARCAR OU MARCAR
              O DIA COM COR BRANCA OU SEM COR BRANCA
  &&             MARCADO = COR BRANCA
    &&           DESMARCADO = COR NORMAL
&& AQUI DEVERÁ TESTAR SE O CAMPO MARDES DAS SENHAS É 1 (MARCADO) OU 0 (DESMARCADO
       end 
    end 
    
    retu 
Como não estou com a rotina original apaguei alguma coisa da que fiz anteriormente para melhor compreensão. Não sei se esta segunda rotina funciona.

Mas se compilar a primeira verá logo o que quero dizer.
não esquecer de criar a base de dados com os campos que lhe disse
Base de dados chamada SENHAS
MARDES NUMERICO 1
DATAREFER DATA

O objectivo será assinalar num calendário a partir da data do pc em que estamos para os dias seguintes ou seja (marcar os dias que os alunos querem as senhas para o almoço) e imprimi-las. Essa parte de imprimir posso eu tentar fazer mas agora o meu problema é visualizar os dias.
dias marcados - letras pretas e fundo branco
dias não marcados - letras amarelas e fundo da cor do calendário
dias impressos - letras pretas e fundo verde

Me ajudem por favor

Obrigado

Lapinhazzz.

qualquer rectificação ao código mandem para ....@gmail.com
Nota de Moderação:
por anacatacombs: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f2r1
Nota de Moderação:
por Toledo: Mensagem editada para retirar a numeração das linhas que estava no código. Quando for copiar algum código de outra mensagem, clique no botão Imagem e depois copie o código que vai aparecer na janela que irá se abrir.
Evite postar endereço de e-mail para receber a solução de uma dúvida, que pode ser resolvida aqui mesmo no fórum, utilize a opção de "Anexar arquivo". Leia as regras do fórum.
11 - Não é permitido postar o e-mail pessoal com o objetivo de receber ou oferecer qualquer auxílio que poderia ser feito pelo Fórum. O Fórum foi criado para intermediar a comunicação entre os participantes, não servir de mural de recados.

Re: Calendario de senhas de almoço

Enviado: 20 Jul 2010 05:19
por lapinhazzz
Peço a todos do forum as minhas desculpas por infringir as regras do forum, nomeadamente postar o meu e-mail.
Para retirar a numeração não sabia como era, agora já sei.
Fiz isto na minha boa fé.
Bem haja a todos.
Fico a aguardar a resolução do meu problema.

Lapinhazzz

Re: Calendario de senhas de almoço

Enviado: 20 Jul 2010 10:11
por Toledo
Lapinhazzz, faça um teste com este exemplo e veja se era isto que você queria:

Código: Selecionar todos

procedure calendario

   Local telaant,corant,;
      getlist := {},;
      wCursor

   wCursor := SetCursor(0)
   Private MMES,;
      DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,;
      DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,;
      DT21,DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,;
      DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,;
      DT41,DT42,wlin,wcol,cursor,mm,dt,at,wteladata,col,;
      lin,kont,kc,data,tcal,t,mensa,mes,kk,wUltima,NLINCOL,NLIN,NCOL,cor,mardes,ZZ
   set date brit
   set cent on
   set epoch to 1970
   use senhas
   inde on DTOS(datarefer) to idata  //alteracao
   set index to idata   //alteracao
   wLin=row()
   wCol=col()
   MMES='        Janeiro  FevereiroMarco    Abril    Maio     Junho    Julho    Agosto   Setembro Outubro  Novembro Dezembro '
   DT=date()
   TELAANT=savescreen(6,0,24,79)
   CORANT=setcolor()
   setcolor('w+/br')
   @ 06,21 say 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'
   @ 07,21 say 'º                                   º'
   @ 08,21 say 'ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹'
   @ 09,21 say 'º Dom  Seg  Ter  Qua  Qui  Sex  Sab º'
   @ 10,21 say 'º                                   º'
   @ 11,21 say 'º                                   º'
   @ 12,21 say 'º                                   º'
   @ 13,21 say 'º                                   º'
   @ 14,21 say 'º                                   º'
   @ 15,21 say 'º                                   º'
   @ 16,21 say 'º                                   º'
   @ 17,21 say 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ'
   *sombrear(6,21,17,57)
   Mensagem('<'+chr(27)+chr(26)+'>Altera Mˆs, <> Altera Ano,  Procura Data e  p/ Sair',1)
   TCAL=savescreen(6,21,18,59)
   do whil .t.
      restscreen(6,21,18,59,TCAL)
      T=ltri(str(day(DT)))+' de '+rtri(subs(MMES,val(subs(dtoc(DT),4,2))*9,9))+' de '+ltri(str(year(DT)))+'.'
      MENSA=T
      setcolor('gr+/br')
      @ 07,int((80-len(MENSA))/2) say MENSA
      stor '  ' to DT01,DT02,DT03,DT04,DT05,DT06,DT07,DT08,DT09,DT10,DT11,DT12,DT13,DT14,DT15,DT16,DT17,DT18,DT19,DT20,DT21
      stor '  ' to DT22,DT23,DT24,DT25,DT26,DT27,DT28,DT29,DT30,DT31,DT32,DT33,DT34,DT35,DT36,DT37,DT38,DT39,DT40,DT41,DT42
      DATA=ctod('01/'+subs(dtoc(DT),4,7))
      KONT=dow(DATA)
      MES=month(DATA)
      do whil month(DATA)=MES
         KK=strzero(KONT,2)
         cc=ltri(strzero(day(dt),2))
         dd=ltri(subs(dtoc(dt),4,7))
         ee=cc+'/'+dd
         @ 1,1 say ee
         ff=ctod(ee)
         DT&KK.=str(day(DATA),2)
         KONT=KONT+1
         DATA=DATA+1
      end
      seek DTOS(ff)   //ALTERACAO
      IF found()
         * replace mardes with 0
         replace datarefer with ff
      else
         append blank
         replace mardes with 0
         replace datarefer with ff
      endi
      seek DTOS(ff)  //ALTERACAO
      a1=ltri(strzero(day(datarefer),2))
      a2=ltri(subs(dtoc(datarefer),4,7))
      a3=cc+'/'+a2
      a4=ctod(a3)
      @ 2,3 say a4

      setcolor('n/br')
      @ 11,24 say DT01
      @ 11,29 say DT02
      @ 11,34 say DT03
      @ 11,39 say DT04
      @ 11,44 say DT05
      @ 11,49 say DT06
      @ 11,54 say DT07
      @ 12,24 say DT08
      @ 12,29 say DT09
      @ 12,34 say DT10
      @ 12,39 say DT11
      @ 12,44 say DT12
      @ 12,49 say DT13
      @ 12,54 say DT14
      @ 13,24 say DT15
      @ 13,29 say DT16
      @ 13,34 say DT17
      @ 13,39 say DT18
      @ 13,44 say DT19
      @ 13,49 say DT20
      @ 13,54 say DT21
      @ 14,24 say DT22
      @ 14,29 say DT23
      @ 14,34 say DT24
      @ 14,39 say DT25
      @ 14,44 say DT26
      @ 14,49 say DT27
      @ 14,54 say DT28
      @ 15,24 say DT29
      @ 15,29 say DT30
      @ 15,34 say DT31
      @ 15,39 say DT32
      @ 15,44 say DT33
      @ 15,49 say DT34
      @ 15,54 say DT35
      @ 16,24 say DT36
      @ 16,29 say DT37
      @ 16,34 say DT38
      @ 16,39 say DT39
      @ 16,44 say DT40
      @ 16,49 say DT41
      @ 16,54 say DT42
      //ALTERACAO ATE A LINHA 174
      vMes:=MONTH(DT)+1
      vAno:=YEAR(DT)
      IF vMes>12
       vMes:=1
       vAno+=1
      ENDIF
      vUltDia=DAY(CTOD('01/'+STRZERO(vMes,2)+'/'+STRZERO(vAno,4))-1)
      vMes:=MONTH(DT)
      vAno:=YEAR(DT)
      LIN:=11
      for i=1 to vUltDia
        DATA:=CTOD(STRZERO(i,2)+'/'+STRZERO(vMes,2)+'/'+STRZERO(vAno,4))
        if i=1
         vDia1:=DOW(DATA)
        endif
        if DATA>=DATE()
         go top  //alteracao
         SEEK DTOS(DATA)
         if FOUND()            
           if mardes=1
            if DT=DATA
              setcolor('b+/w+')
            else
              setcolor('n/w+*')
            endif
           elseif mardes=0
            if DT=DATA
              setcolor('b+/br')
            else
              setcolor('gr+/br')
            endif
           elseif mardes=2
            if DT=DATA
              setcolor('b+/g+')
            else
              setcolor('gr+/g+')
            endif
           endif
         else
           setcolor('gr+/br')
         endif
        else
         setcolor('n/br')
        endif
        COL:=24+((DOW(DATA)-1)*5)
        @ LIN,COL say STRZERO(DAY(DATA),2)
        if vDia1/7=INT(vDia1/7)
         LIN+=1
        endif
        vDia1+=1
      next
      do whil ! str(inke(0),3)$' 27. 19.  4.  32.  22.'
      end
      wUltima=lastkey()
      if wUltima=27
         exit
      end
      if wUltima=19                                             && SETA P/ <-
         if year(DT)=100 .and. mont(DT)=1
            loop
         endi
         IF DT=date()
            loop
         ELSE
            DT=DT-1
         ENDIF
         IF empt(dt)
            wait "entrou no empt(dt)"
         ENDIF
         do whil empt(DT)
            At=AT-1
            DT=AT
            DT=DT-(20+day(DT))
            DT=ctod(subs(dtoc(AT),1,2)+subs(dtoc(DT),3,8))
         end
      elseif wUltima=4                                          && SETA P/ ->
         if year(DT)=2999 .and. mont(DT)=12
            loop
         endi
         DT=DT+1
      elseif wUltima=32
         go top
         seek DTOS(ff)  //ALTERACAO
         if datarefer=ff .AND. mardes=1
            replace mardes with 0
         elseif datarefer=ff .AND. mardes=0
            replace mardes with 1
         endif
      end
   end
   @ wLin,wCol say ''
   set cent off
   restscreen(6,0,24,79,TELAANT)
   setcolor(CORANT)
   SetCursor( wCursor )
   set date amer
   retu
As alterações que eu fiz estão comentadas com //alteracao.

Obs.: depois desta alterações que fiz, muitas linhas do código original podem ser excluídas, por exemplo da linha 81 a 123... entre outras.

Abraços,

Re: Calendario de senhas de almoço

Enviado: 21 Jul 2010 06:38
por lapinhazzz
Bingo. Era mesmo isto que queria.

Muito mas muito obrigado Toledo.
Cumprimentos a todos do Forum
Lapinhazzz
:{

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 05:26
por lapinhazzz
Bom Dia amigos do Forum.
Estou com outro problema neste sistema.

A base de dados senhas tem o seguinte:

mardes datarefer proc
1 29/07/2010 10
0 30/072010 10
1 29/07/2010 20
1 30/07/2010 20

Já alterei o código para quando mardes=1 e o proc=10 ou 20 ou 30, depende do processo do aluno
ele apresenta para cada proc a cor correspondente ao mardes. Se 1 marca se 0 desmarca se 2 já imprimiu
Mas não estou conseguindo executar isto.
Por favor consegue alterar o código para que de acordo com o processo do aluno (proc) e a data que foi acrescentada na base de dados quando 1 muda a cor e assim sucessivamente. Para cada aluno (proc)
Parece mentira mas andei de volta da solução do caso e não consegui.
Obrigado.

Lapinhazzz

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 07:41
por Toledo
Lapinhazzz, tente explicar melhor o que você quer... eu não consegui entender nada!

Abraços,

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 08:17
por lapinhazzz
Amigos do Forum Bom Dia.
O que eu queria é que além do código que foi postado o qual está certo eu queria acrescentar o seguinte:

Imagine que na base de dados eu tenho o número de processo do aluno
O calendário que quero é feito com o número de processo do aluno (proc) que se encontra na base de dados senhas.

Composição da base de dados:

mardes
datarefer
proc
nome

use senhas
index on dtos(datarefer)+str(proc)

Para cada número de processo do aluno corresponde a venda de senhas que voce postou

terei que fazer

@ 1,1 say "qual o número de processo do aluno" get vproc
read
depois apresenta no calendário para esse número de processo os dias que ele escolheu para almoçar.
Ao que não estou conseguindo fazer

A cada aluno introduzido com vproc é acrescentado na base de dados a datarefer e o proc ou seja a data a que se refere a refeição e o proc ou nº de processo do aluno
se mardes=1 então está marcado para venda
se mardes=0 então esta desmarcada a venda
se mardes=1
então pesquisa o vproc e a datarefer se condiz e apresenta no ecra o calendario desse aluno e daquilo que ele escolheu.
por exemplo
quando introduzo no vproc o número 10
é acrescentado na base de dados a datarefer (a data em que estamos) e no proc o número 10
é apresentado no ecra o calendário para esse proc de 10
os dias que estão marcados com mardes=1 então faz a cor para esse dia
se acrescentarmos outro vproc então vai buscar na base o proc certo e apresenta o calendário de senhas escolhido para esse vproc introduzido.

Obrigado a todos

Lapinhazzz

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 14:22
por lapinhazzz
Boa Tarde a todos do Forum

O que pretendo segue aqui em imagem:

Imagem

O Proc contém 10 que significa o aluno número 10
O calendário com o almoço está marcado no dia 29 como dia de venda ou seja na base de dados o campo mardes=1
O meu problema é se mudo para outro número de aluno como será o código para pesquisar o dbf e registar o dia e marcar ou desmarcar dependendo do mardes=1 ou mardes=0 que são campos da base de dados mais o número do aluno.
O que foi dito atrás está certo só que queria que fosse um calendário de senhas de almoço para diversos alunos, cada um com os dias que foram escolhidos.
O dbf chama-se senhas.dbf e contem
mardes - numérico 1
datarefer - data
proc - caracter 6

Obrigado a todos e espero obter uma resposta
O que queria era alterar o código para introduzir esta nova variavel, mas andei, andei, andei e não consegui.
Lapinhazzz

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 14:52
por Toledo
Lapinhazzz, coloque aqui o código fonte deste seu exemplo acima, assim vai ficar mais fácil tentar lhe ajudar.

Abraços,

Re: Calendario de senhas de almoço

Enviado: 29 Jul 2010 19:09
por lapinhazzz
Bom Dia amigos do Forum
Consegui resolver o problema.
Só é necessário a base de dados senhas.dbf
campos:
mardes numerico 1
datarefer data
dataactual data
proc caracter 6

Código: Selecionar todos


procedure calendario

   Local telaant,corant,;
      getlist := {},;
      wCursor

   wCursor := SetCursor(0)
   Private MMES,;
      wlin,wcol,cursor,mm,dt,at,wteladata,col,;
      lin,kont,kc,data,tcal,t,mensa,mes,kk,wUltima,NLINCOL,NLIN,NCOL,cor,mardes,ZZ
   set date brit
   set cent on
   set epoch to 1970
   use senhas
   inde on dtos(datarefer)+proc to idata
   *inde on DTOS(datarefer) to idata                            //alteracao
   set index to idata                                           //alteracao
   wLin=row()
   wCol=col()
   MMES='        Janeiro  FevereiroMarco    Abril    Maio     Junho    Julho    Agosto   Setembro Outubro  Novembro Dezembro '
   DT=date()
   TELAANT=savescreen(6,0,24,79)
   CORANT=setcolor()
   setcolor('w+/br')
   @ 06,21 say '╔═══════════════════════════════════╗'
   @ 07,21 say '║                                   ║'
   @ 08,21 say '╠═══════════════════════════════════╣'
   @ 09,21 say '║ Dom  Seg  Ter  Qua  Qui  Sex  Sab ║'
   @ 10,21 say '║                                   ║'
   @ 11,21 say '║                                   ║'
   @ 12,21 say '║                                   ║'
   @ 13,21 say '║                                   ║'
   @ 14,21 say '║                                   ║'
   @ 15,21 say '║                                   ║'
   @ 16,21 say '║                                   ║'
   @ 17,21 say '╚═══════════════════════════════════╝'
   *sombrear(6,21,17,57)
   TCAL=savescreen(6,21,18,59)
   tproc="      "
   @ 1,35 say "processo:" get tproc
   read
   do whil .t.
      restscreen(6,21,18,59,TCAL)
      T=ltri(str(day(DT)))+' de '+rtri(subs(MMES,val(subs(dtoc(DT),4,2))*9,9))+' de '+ltri(str(year(DT)))+'.'
      MENSA=T
      setcolor('gr+/br')
      @ 07,int((80-len(MENSA))/2) say MENSA
      cc=ltri(strzero(day(dt),2))
      dd=ltri(subs(dtoc(dt),4,7))
      ee=cc+'/'+dd
      ff=ctod(ee)
      seek dtos(ff)+tproc                                       //ALTERACAO
      IF !found()
         append blank
         replace mardes with 0
         replace datarefer with ff
         replace dataactual with date()
         replace proc with tproc
      endi
      //ALTERACAO ATE A LINHA 170
      vMes:=MONTH(DT)+1
      vAno:=YEAR(DT)
      IF vMes>12
         vMes:=1
         vAno+=1
      ENDIF
      vUltDia=DAY(CTOD('01/'+STRZERO(vMes,2)+'/'+STRZERO(vAno,4))-1)
      vMes:=MONTH(DT)
      vAno:=YEAR(DT)
      LIN:=11
      for i=1 to vUltDia
         DATA:=CTOD(STRZERO(i,2)+'/'+STRZERO(vMes,2)+'/'+STRZERO(vAno,4))
         if i=1
            vDia1:=DOW(DATA)
         endif
         go top                                                 //alteracao
         SEEK DTOS(DATA)+tproc
         if FOUND()
            if mardes=1
               if dtos(DT)+tproc=dtos(DATA)+tproc
                  setcolor('b+/w+')
               else
                  setcolor('n/w+*')
               endif
            elseif mardes=0
               if dtos(DT)+tproc=dtos(DATA)+tproc
                  setcolor('b+/br')
               else
                  setcolor('gr+/br')
               endif
            elseif mardes=2
               if dtos(DT)+tproc=dtos(DATA)+tproc
                  setcolor('b+/g+')
               else
                  setcolor('gr+/g+')
               endif
            endif
         else
            setcolor('gr+/br')
         endif
         COL:=24+((DOW(DATA)-1)*5)
         @ LIN,COL say STRZERO(DAY(DATA),2)
         if vDia1/7=INT(vDia1/7)
            LIN+=1
         endif
         vDia1+=1
      next
      do whil ! str(inke(0),3)$' 27. 19.  4.  32.  22.'
      end
      wUltima=lastkey()
      if wUltima=27
         exit
      end
      if wUltima=19                                             && SETA P/ <-
         if year(DT)=100 .and. mont(DT)=1
            loop
         endi
         IF DT=date()
            loop
         ELSE
            DT=DT-1
         ENDIF
         IF empt(dt)
            wait "entrou no empt(dt)"
         ENDIF
         do whil empt(DT)
            At=AT-1
            DT=AT
            DT=DT-(20+day(DT))
            DT=ctod(subs(dtoc(AT),1,2)+subs(dtoc(DT),3,8))
         end
      elseif wUltima=4                                          && SETA P/ ->
         if year(DT)=2999 .and. mont(DT)=12
            loop
         endi
         DT=DT+1
      elseif wUltima=32
         go top
         seek DTOS(ff)+tproc                                    //ALTERACAO
         if datarefer=ff .AND. mardes=1
            replace mardes with 0
         elseif datarefer=ff .AND. mardes=0
            replace mardes with 1
         endif
      end
   end
   @ wLin,wCol say ''
   set cent off
   restscreen(6,0,24,79,TELAANT)
   setcolor(CORANT)
   SetCursor( wCursor )
   *   set date amer
   retu

Obrigado a todos
lapinhazzz