Página 3 de 3

Calendário, marcar dia trabalhado

Enviado: 03 Jul 2025 18:51
por Itamar M. Lins Jr.
Olá!
Não sei pq, o calendário ficou com os dias(nomes) em português em posições erradas em relação ao dia(numero). Na Hwgui. Já resolvi.
Agora estava resolvendo a melhor maneira de guardar o resultado do calendário marcado em um DBF, fiz um campo com 68 caracteres ANOMESDIAS assim coloco apenas 12 inclusões por pessoa. Muito difícil acontecer.
Tinha feito ANO MES DIA, depois apenas dia no formato data. (365 inclusões ) x 12 venceu o 12.
Pq tem que gravar e a opção de remover(desmarcar) o dia, caso algum erro.

Ainda não terminei...Tô em macha lenta na programação.

Saudações,
Itamar M. Lins Jr.

Calendário, marcar dia trabalhado

Enviado: 03 Jul 2025 19:54
por Itamar M. Lins Jr.
Olá!
Aumentei o campo, tem que separar os dias com "," ou "/", "." etc..
Senão embola dia 01 + 17 fica 0117, ai a função at() pega 01 - 11 - 17 rsrsrs.

Saudações,
Itamar M. Lins Jr.

Calendário, marcar dia trabalhado

Enviado: 03 Jul 2025 21:06
por JoséQuintas
Se entendi, pode reduzir e talvez melhorar
202507xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ano com 4 dígitos
mes com 2 dígitos
um byte pra cada dia, máximo 31 bytes
total 37 bytes

Pode criar uma função de de/para

pra pegar marcação do dia, Substr( campo, 6 + dia, 1 )
Num browse então, só definir colunas pra cada byte
Usando aquele esquema de FOR/EACH só pra ter variável LOCAL no codeblock:

Código: Selecionar todos

FOR nCont = 1 TO 31
    FOR EACH nDia IN nCont
       AAdd( col, { || iif( PegaDia( field->Registro, nCont ), "X", " " )
   NEXT
NEXT
...
FUNCTION PegaDia( cCampo, nDia )

   RETURN Substr( cCampo, 6 + nDia, 1 ) == "X"
Sei lá se vai precisar mostrar um ano ou mais...

Calendário, marcar dia trabalhado

Enviado: 03 Jul 2025 21:13
por JoséQuintas
Lembrando também que o FOR/EACH vale pra letras.

Código: Selecionar todos

aDias := Array(31)
FOR EACH cLetra IN Substr( cCampo, 7 ) // pula yyyymm ano/mes
   aDias[ cLetra:__EnumIndex() ] := cLetra
NEXT

Calendário, marcar dia trabalhado

Enviado: 06 Jul 2025 21:19
por JoséQuintas
Tava olhando aqui de novo...
Pena que é perigoso trabalhar com binário, senão seria um único bit, que representaria 255 dias.
Ou transformar isso em hexa e usar 2 letras.
putz...
2 x 12 = 24
24 bytes pro ano inteiro.

Montar em binário, os 255 bits
ver que número dá
converter em hexa.
É meio doido mas é interessante.
histórico de 1 ano seriam 12 bytes, em hexa 24 bytes.

Ou até menos.... 255 bits dá pra representar 255 dias, pelo menos 6 meses, reduz pra 2 bytes, ou 4 bytes em hexa.
Só precisa do bit indicando sim/não.
Muito louco isso: 1 ano em 4 bytes.
Será que fiz a conta direito ?
2025xxxx

Calendário, marcar dia trabalhado

Enviado: 06 Jul 2025 21:26
por JoséQuintas
É lógico que não.
Misturei bits e bytes.
1 byte representa até 255, mas não tem 255 bits.
São só 8 bits, no máximo uma semana.