Imprimir recebimento de leite dentro de um calendário

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Imprimir recebimento de leite dentro de um calendário

Mensagem por rubens »

Pessoal to fazendo o sistema para um laticinio, e no final do mes tem que imprimir o extrato de fornecimento de leite por dia dentro de um calendario.

O DBF contem os seguintes campos
CODIGO - C - 6 - CODIGO DO PRODUTOR
LITROS - N - 12,1 - NUMEROS DE LITROS POR LANCAMENTO
DATA - D - 8 - DATA DO LANCAMENTO.

Preciso preenher o calendario abaixo com a qtde litros por fornecedor no dia.

|Dia Qtde | Dia Qtde| Dia Qtde| Dia Qtde|
|01 1.239,0| 02 | 03 | 04 |
|05 | 06 | 07 | 08 |
|09 1.239,0| 10 | 11 | 12 |
e vai ate o dia 31


Não estou conseguindo, fazer isso... O que tá pegando é que os lancamentos no dbf nao sao feitos todos os dias senao criava uma matriz e blz.. mas o dia que falhar não dá pra criar um for x = 1 to 31.. tem mes que nao tem dia 31 e o produtor tb nao entrega o leite todos os dias...

Alguem já montou isso.. sabe como fazer para preencher esse relatorio...

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Até pode criar uma matriz pra isso sim. No dia em que não houver qualquer quantidade, simplesmente preencha o elemento com zero. Ao imprimir, você pode tanto imprimir com zero, quanto ignorar esse dia. Com relação ao número de dias do mês, também. Inicialmente, inicia em 1 e vai até 31. É só fazer um teste pra limitar o trabalho da malha de acordo com a quantidade de dias do mês.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Certo... mas vou usar como parametro para preencher esta matriz... o que.. o for x ou os dados selecionados no dbf

não tou conseguindo visualisar... tem como passar algo pratico... como um exemplo ??/

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

A idéia é resolver o problema em três etapas.

1) Inicialização da matriz.
Crie uma matriz com 31 elementos, um para cada dia. Cada elemento será uma matriz com o número do dia, seqüencialmente numerados, e a quantidade. A quantidade virá, claro, do DBF. No DBF você não terá os 31 dias. Faltarão alguns dias no intervalo e, provavelmente, no final, já que nem todos os meses têm 31 dias. Então, ao numerar o dia, você já inicializa a quantidade com zero.

2) Carga dos dados.
Encontrado o cliente em questão e com o mês selecionado, para cada registro encontrado, você procura pelo dia na matriz e salva a quantidade encontrada no registro. Claro que, havendo mais de uma entrega no mês, você soma com o que houver na matriz.

3) Impressão.
Na malha FOR/NEXT de impressão, sua contagem irá até o último dia do mês em questão, e não 31. Dentro da malha, supondo que você não queira imprimir os dias com quantidade zero, é só fazer um teste simples. Se a quantidade for zero, force o salto da malha para o topo (LOOP).

Claro que você não precisa necessariamente utilizar uma matriz. Só usei-a pra tornar a solução mais fácil. Pode-se também fazer isso diretamente com os dados do DBF. Só que os controles ficam mais chatos.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Eh... realmente pensei em fazer usando diretamente o dados do dbf, já que se usar a matriz o servico sera dobrado... bom.. vou mexer o bolo aqui para ver o que vira.. e quando tiver algo concreto posto o resultado aqui..

Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Não chega a ser um trabalho tão grande assim. Aliás, em vista da facilidade que traz, é um trabalho até pequeno. Os controles ficam mais fáceis. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Código: Selecionar todos

xdata := ctod('01/01/2008')
xmes := month(xdata)
m_qtd := {}
while month(xdata) = xmes
   aadd(m_qtd, {xdata, 0})
   xdata++
end

use recebido index receb01 // é o arquivo das quantidades recebidas
dbseek(dtos(xdata, .T.))
while !eof() .and. month(data_rec) = xmes
   xpos := ascan(m_qtd, data_rec)
   if xpos > 0
      m_qtd[xpos, 2] += qtd_rec // campo quantidade recebida de leite
   end
   dbskip()
end

for i := 1 to len(m_qtd)
   ? m_qtd[i, 1], m_qtd[i, 2]
next
É uma base para vc fazer o que deseja.
Espero ter ajudado. Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Olá..

realmente quebrei a cabeça para usar uma matriz com dua dimensoes.. mas não, então resolvi usar uma matriz simples... preenchida com 31 posições zeradas.. daí foi só pesquisar no dbf o dia e acrescentar o valor desse dia usando a posição na matriz.. Problema resolvido..

aDIA := {}
FOR X = 1 TO 31
AADD(aDIA,0.0)
NEXT

WHILE !EOF()
nDIA := DAY( MLT->DATA )
aDIA[nDIA] += MLT->LITROS
DBSKIP()
ENDDO

Obrigado pessoal pela ajuda
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Dependendo da situação, eu também uso MATRIZ com elementos concatenados. Isto é, as vezes decido guardar duas informações num mesmo elemento. Claro que as suas posições SEMPRE são fixas. Isto me facilita na hora de pesquisa. Funciona muito bem, principalmente na utilização do ACHOICE que apenas permite MATRIZ UNIDIMENSIONAL. Outra forma de não fazer matriz bidimensional, seria a criação de duas matrizes com a mesma quantidade de elementos. Mas a dificuldade acresce quanto precisamos sortear ou ordenar as matrizes. Daí que concateno cada elemento da matriz e processo depois desdobrando-o.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

rubens escreveu:realmente quebrei a cabeça para usar uma matriz com dua dimensoes.. mas não, então resolvi usar uma matriz simples...
E eu achando que falando de duas dimensões estava facilitando pro seu lado. :)))
Se bem que, pensando como leigo nessa área, não seria ideal também incluir o valor da entrega? Imagino que leite não tem preço fixo, dia a dia, no mês todo. Se for realmente assim, o ideal seria realmente incluir mais um elemento na matriz para o preço, para que sejam impressos os valores parciais dia-a-dia e o total do mês.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
toya
Usuário Nível 3
Usuário Nível 3
Mensagens: 157
Registrado em: 26 Jul 2004 16:51
Localização: Campo Grande/MS - Brasil
Contato:

Sistema Laticinio

Mensagem por toya »

Rubens... tenho Sistema de Laticinio, conforme e-mail enviado...
Elcio Carlos
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044

FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

[Rubens]
Qual foi sua dificuldade de usar matriz multidimensional?

Usar o dia foi uma boa saida.
O que não pode acontecer é vc precisar fazer isso com mais de um mes.
Se vc tiver que processar do dia 15 de um mes até o dia 14 do outro, o esquema já não funciona mais.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Alguem sabe me dizer porque nao recebo emails do andamento dos meu proprios topicos... nao recebi um e-mail sequer deste topico...
e a caixa notificar-me quando for respondida está marcada.. enao tenho nenhum bloqueador de spam é direto no hotmail.
"Eu e minha casa servimos ao Senhor e você ???"
Responder