Clipper On Line • Ver Tópico - Calendário Permanente

Calendário Permanente

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Calendário Permanente

Mensagempor yugi386 » 20 Mar 2019 08:37

Eis uma rotina para criar calendários permanentes.
O exemplo aqui gera um arquivo TXT com 200 calendários (de 1900 até 2100).

Exemplo de Layout:

Imagem

FUNCTION MAIN

   REQUEST HB_LANG_PT
   HB_LANGSELECT( 'PT' )
   set date french
   set century on
   
   set printer on
   set printer to calendario.txt
   set console off
   set device to printer
   
   // Chamada dafunção (basta digitar o ano)
   for ct:= 1900 to 2100
      geraCalendario(ct)
   next

   set printer off
   set printer to
   set console on
   set device to screen
   
return NIL

// =============================================================================================================================
// Função para gerar calendário de qualquer ano
function geraCalendario(ano)
local bissexto := .F., verdata:= "29/02/"+ alltrim(str(ano)), data_inicial:= "01/01/"+ alltrim(str(ano)), dia_inicial:= 1, calendario
   
   // verifica se o ano é bissexto:
   if len(alltrim(dtos(ctod(verdata)))) == 0
      bissexto = .F.
   else
      bissexto = .T.
   endif      
   
   // Verificando o dia inicial do ano:
   dia_inicial = dow(ctod(data_inicial))
   
   ? replicate("-",91)
   ? "| " + alltrim(str(ano)) + space(84) + "|"
   ? replicate("-",91)   
   calendario = calendario(dia_inicial,bissexto)
   MOSTRA_CALENDARIO(calendario)

return nil

// =============================================================================================================================
/*
   GERA UM CALENDÁRIO ANUAL
   dia_inicial = nº do dia da semana que o ano começa
   bissexto = variável para indicar se o ano é bissexto (.T. OU .F.)
*/
FUNCTION CALENDARIO(dia_inicial,bissexto)
local ano, numero_de_dias:=0, dia_mes, mes, dias:={"DOM","SEG","TER","QUA","QUI","SEX","SAB"},DIAMES:={31,28,31,30,31,30,31,31,30,31,30,31}, contador := 1

   if bissexto == .T.
      ano:= array(366,2)
      DIAMES:={31,29,31,30,31,30,31,31,30,31,30,31}
   else
      ano:= array(365,2)
      DIAMES:={31,28,31,30,31,30,31,31,30,31,30,31}
   endif      

   numero_de_dias = len(ano)
   
   // Montando o calendario:
   for mes:= 1 to 12
      for dia_mes:= 1 to DIAMES[mes]
         ano[contador,1] = strzero(dia_mes,3)
         ano[contador,2] = dias[dia_inicial]
         ++ dia_inicial
         if dia_inicial > 7
            dia_inicial = 1
         endif      
         ++contador
      next
   next

return ano
// =============================================================================================================================

FUNCTION MOSTRA_CALENDARIO(dados_anuais)
local dias:={"DOM","SEG","TER","QUA","QUI","SEX","SAB"},meses:={"JAN","FEV","MAR","ABR","MAI","JUN","JUL","AGO","SET","OUT","NOV","DEZ"},DIAMES:={31,28,31,30,31,30,31,31,30,31,30,31}, mapa1, mapa2, mapa3, mapa4,;
   mapa := ;
    "| 001                         | 002                         | 003                         |" +;
   "| DOM SEG TER QUA QUI SEX SAB | DOM SEG TER QUA QUI SEX SAB | DOM SEG TER QUA QUI SEX SAB |" +;
   "| A01 A02 A03 A04 A05 A06 A07 | B01 B02 B03 B04 B05 B06 B07 | C01 C02 C03 C04 C05 C06 C07 |" +;
   "| A08 A09 A10 A11 A12 A13 A14 | B08 B09 B10 B11 B12 B13 B14 | C08 C09 C10 C11 C12 C13 C14 |" +;
   "| A15 A16 A17 A18 A19 A20 A21 | B15 B16 B17 B18 B19 B20 B21 | C15 C16 C17 C18 C19 C20 C21 |" +;
   "| A22 A23 A24 A25 A26 A27 A28 | B22 B23 B24 B25 B26 B27 B28 | C22 C23 C24 C25 C26 C27 C28 |" +;
   "| A29 A30 A31 A32 A33 A34 A35 | B29 B30 B31 B32 B33 B34 B35 | C29 C30 C31 C32 C33 C34 C35 |" +;
   "| A36 A37 A38 A39 A40 A41 A42 | B36 B37 B38 B39 B40 B41 B42 | C36 C37 C38 C39 C40 C41 C42 |"
LOCAL ct, dia_inicial:=1, mes,semanas:={"S01","S02","S03","S04","S05","S06","S07","S08","S09","S10","S11","S12","S13","S14","S15","S16","S17","S18","S19","S20","S21"}
   
   if len(dados_anuais) == 366
      DIAMES:={31,29,31,30,31,30,31,31,30,31,30,31}
   endif

   mapa1 = mapa
   mapa2 = mapa
   mapa3 = mapa
   mapa4 = mapa
   
   // MONTANDO O PRIMEIRO TRIMESTRE
   dia_inicial = 1
   total_dias = 0
   
   DO CASE
      case dados_anuais[1,2] = "DOM"
         dia_inicial = 1
      case dados_anuais[1,2] = "SEG"
         dia_inicial = 2
      case dados_anuais[1,2] = "TER"
         dia_inicial = 3
      case dados_anuais[1,2] = "QUA"
         dia_inicial = 4
      case dados_anuais[1,2] = "QUI"
         dia_inicial = 5
      case dados_anuais[1,2] = "SEX"
         dia_inicial = 6
      case dados_anuais[1,2] = "SAB"
         dia_inicial = 7
   ENDCASE
   
   total_dias = diames[1] + diames[2] + diames[3]   //   total de dias do trimestre
   mes = 1
   marca_mes = DIAMES[mes]
   
   marcador = 1
   do while marcador < dia_inicial
      mapa1 = strtran(mapa1,("A"+strzero(marcador,2)),"   ")
      ++marcador
   enddo

   prefixo := {"A","B","C"}   
   contador = 1
   for ct:= 1 to total_dias
      mapa1 = strtran(mapa1,(prefixo[mes]+strzero(marcador,2)),str(contador,3))
      ++dia_inicial
      if dia_inicial > 7
         dia_inicial = 1
      endif   

      ++marcador
      ++contador
      
      if (ct == diames[1]) .or. (ct == diames[1] + diames[2]) .or. (ct == diames[1] + diames[2] + diames[3])
         for ct2:= 1 to 49
            mapa1 = strtran(mapa1,(prefixo[mes]+strzero(ct2,2)),"   ")
            ++marcador
         next
      
         marcador = 1
         do while marcador < dia_inicial
            mapa1 = strtran(mapa1,(prefixo[mes]+strzero(marcador,2)),"   ")
            ++marcador
         enddo
         
         ++mes
         marca_mes = diaMES[mes]
         contador = 1

      endif
      
   next
   
   mapa1 = strtran(mapa1,"001",meses[1])
   mapa1 = strtran(mapa1,"002",meses[2])
   mapa1 = strtran(mapa1,"003",meses[3])
   
   // MONTANDO O SEGUNDO TRIMESTRE
   total_dias = diames[1] + diames[2] + diames[3]   //   total de dias do trimestre
   
   DO CASE
      case dados_anuais[TOTAL_DIAS+1,2] = "DOM"
         dia_inicial = 1
      case dados_anuais[TOTAL_DIAS+1,2] = "SEG"
         dia_inicial = 2
      case dados_anuais[TOTAL_DIAS+1,2] = "TER"
         dia_inicial = 3
      case dados_anuais[TOTAL_DIAS+1,2] = "QUA"
         dia_inicial = 4
      case dados_anuais[TOTAL_DIAS+1,2] = "QUI"
         dia_inicial = 5
      case dados_anuais[TOTAL_DIAS+1,2] = "SEX"
         dia_inicial = 6
      case dados_anuais[TOTAL_DIAS+1,2] = "SAB"
         dia_inicial = 7
   ENDCASE
   
   total_dias = diames[4] + diames[5] + diames[6]   //   total de dias do trimestre
   mes = 4
   marca_mes = DIAMES[mes]
   
   marcador = 1
   do while marcador < dia_inicial
      mapa2 = strtran(mapa2,("A"+strzero(marcador,2)),"   ")
      ++marcador
   enddo

   prefixo := {"A","B","C"}   
   contador = 1
   for ct:= 1 to total_dias
      mapa2 = strtran(mapa2,(prefixo[mes-3]+strzero(marcador,2)),str(contador,3))
      ++dia_inicial
      if dia_inicial > 7
         dia_inicial = 1
      endif   

      ++marcador
      ++contador
      
      if (ct == diames[4]) .or. (ct == diames[4] + diames[5]) .or. (ct == diames[4] + diames[5] + diames[6])
         for ct2:= 1 to 49
            mapa2 = strtran(mapa2,(prefixo[mes-3]+strzero(ct2,2)),"   ")
            ++marcador
         next
      
         marcador = 1
         do while marcador < dia_inicial
            mapa2 = strtran(mapa2,(prefixo[mes-3]+strzero(marcador,2)),"   ")
            ++marcador
         enddo
         
         ++mes
         marca_mes = diaMES[mes]
         contador = 1

      endif
      
   next
   
   mapa2 = strtran(mapa2,"001",meses[4])
   mapa2 = strtran(mapa2,"002",meses[5])
   mapa2 = strtran(mapa2,"003",meses[6])
   
   // MONTANDO O TERCEIRO TRIMESTRE
   total_dias = diames[1] + diames[2] + diames[3] + diames[4] + diames[5] + diames[6]   //   total de dias do trimestre
   
   DO CASE
      case dados_anuais[TOTAL_DIAS+1,2] = "DOM"
         dia_inicial = 1
      case dados_anuais[TOTAL_DIAS+1,2] = "SEG"
         dia_inicial = 2
      case dados_anuais[TOTAL_DIAS+1,2] = "TER"
         dia_inicial = 3
      case dados_anuais[TOTAL_DIAS+1,2] = "QUA"
         dia_inicial = 4
      case dados_anuais[TOTAL_DIAS+1,2] = "QUI"
         dia_inicial = 5
      case dados_anuais[TOTAL_DIAS+1,2] = "SEX"
         dia_inicial = 6
      case dados_anuais[TOTAL_DIAS+1,2] = "SAB"
         dia_inicial = 7
   ENDCASE
   
   total_dias = diames[7] + diames[8] + diames[9]   //   total de dias do trimestre
   mes = 7
   marca_mes = DIAMES[mes]
   
   marcador = 1
   do while marcador < dia_inicial
      mapa3 = strtran(mapa3,("A"+strzero(marcador,2)),"   ")
      ++marcador
   enddo

   prefixo := {"A","B","C"}   
   contador = 1
   for ct:= 1 to total_dias
      mapa3 = strtran(mapa3,(prefixo[mes-6]+strzero(marcador,2)),str(contador,3))
      ++dia_inicial
      if dia_inicial > 7
         dia_inicial = 1
      endif   

      ++marcador
      ++contador
      
      if (ct == diames[7]) .or. (ct == diames[7] + diames[8]) .or. (ct == diames[7] + diames[8] + diames[9])
         for ct2:= 1 to 49
            mapa3 = strtran(mapa3,(prefixo[mes-6]+strzero(ct2,2)),"   ")
            ++marcador
         next
      
         marcador = 1
         do while marcador < dia_inicial
            mapa3 = strtran(mapa3,(prefixo[mes-6]+strzero(marcador,2)),"   ")
            ++marcador
         enddo
         
         ++mes
         marca_mes = diaMES[mes]
         contador = 1

      endif
      
   next
   
   mapa3 = strtran(mapa3,"001",meses[7])
   mapa3 = strtran(mapa3,"002",meses[8])
   mapa3 = strtran(mapa3,"003",meses[9])
   
   // MONTANDO O QUARTO TRIMESTRE
   total_dias = diames[1] + diames[2] + diames[3] + diames[4] + diames[5] + diames[6] + diames[7] + diames[8] + diames[9]   //   total de dias do quarto
   
   DO CASE
      case dados_anuais[TOTAL_DIAS+1,2] = "DOM"
         dia_inicial = 1
      case dados_anuais[TOTAL_DIAS+1,2] = "SEG"
         dia_inicial = 2
      case dados_anuais[TOTAL_DIAS+1,2] = "TER"
         dia_inicial = 3
      case dados_anuais[TOTAL_DIAS+1,2] = "QUA"
         dia_inicial = 4
      case dados_anuais[TOTAL_DIAS+1,2] = "QUI"
         dia_inicial = 5
      case dados_anuais[TOTAL_DIAS+1,2] = "SEX"
         dia_inicial = 6
      case dados_anuais[TOTAL_DIAS+1,2] = "SAB"
         dia_inicial = 7
   ENDCASE
   
   total_dias = diames[10] + diames[11] + diames[12]   //   total de dias do trimestre
   mes = 10
   marca_mes = DIAMES[mes]
   
   marcador = 1
   do while marcador < dia_inicial
      mapa4 = strtran(mapa4,("A"+strzero(marcador,2)),"   ")
      ++marcador
   enddo

   prefixo := {"A","B","C"}   
   contador = 1
   for ct:= 1 to total_dias
      mapa4 = strtran(mapa4,(prefixo[mes-9]+strzero(marcador,2)),str(contador,3))
      ++dia_inicial
      if dia_inicial > 7
         dia_inicial = 1
      endif   

      ++marcador
      ++contador
      
      if (ct == diames[10]) .or. (ct == diames[10] + diames[11]) .or. (ct == diames[10] + diames[11] + diames[12])
         for ct2:= 1 to 49
            mapa4 = strtran(mapa4,(prefixo[mes-9]+strzero(ct2,2)),"   ")
            ++marcador
         next
      
         marcador = 1
         do while marcador < dia_inicial
            mapa4 = strtran(mapa4,(prefixo[mes-9]+strzero(marcador,2)),"   ")
            ++marcador
         enddo
         
         ++mes
         if mes > 12
            exit
         endif   
         marca_mes = diaMES[mes]
         contador = 1
      
      endif
      
   next

   mapa4 = strtran(mapa4,"001",meses[10])
   mapa4 = strtran(mapa4,"002",meses[11])
   mapa4 = strtran(mapa4,"003",meses[12])
   
   mapa = mapa1 + mapa2 + mapa3 + mapa4
   nome_mes1 = {"JAN    ","FEV      ","MAR  ","ABR  ","MAI ","JUN  ","JUL  ","AGO   ","SET     ","OUT    ","NOV     ","DEZ     "}
   nome_mes2 = {"JANEIRO","FEVEREIRO","MARCO","ABRIL","MAIO","JUNHO","JULHO","AGOSTO","SETEMBRO","OUTUBRO","NOVEMBRO","DEZEMBRO"}

   for ct:= 1 to 12
      mapa = strtran(mapa,nome_mes1[ct],nome_mes2[ct])
   next

   ? replicate("-",91)
   inicio = 1
   fim = 91
   for ct:= 1 to 32
      ? substr(mapa,inicio,fim)
      inicio = inicio + 91
      if ct % 8 == 0
         ? replicate("-",91)
      endif
   next
   
RETURN NIL
yugi386
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 82
Data de registro: 24 Jul 2008 10:36
Cidade/Estado: Minas Gerais
Curtiu: 0 vez
Mens.Curtidas: 27 vezes

Calendário Permanente

Mensagempor Nascimento » 21 Mar 2019 20:51

parabéns amigo, ficou muito bom
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Calendário Permanente

Mensagempor mustafa » 02 Abr 2019 15:49

Hola yugi386

Me gusto mucho el ejemplo de generar Calendarios
He modificando un poco para poder generar también si se quiere PDF

Eu realmente gostei do exemplo de gerar calendários
Eu modifiquei um pouco para poder gerar também se você quiser PDF

Saludos/ Saudações
Mustafa
Anexos
Calendario.zip
(364.96 KiB) Baixado 69 vezes
Avatar de usuário

mustafa
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 4
Data de registro: 02 Jun 2018 09:24
Cidade/Estado: Alicante/España
Curtiu: 0 vez
Mens.Curtidas: 2 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 17 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro