Página 1 de 2

Como fazer para rolar venda no caixa

Enviado: 16 Jul 2007 20:41
por Gilberto M Silva
Amigos uso o clipper 5.3

estou precisando fazer um programa de caixa (vendas) que quando o usuário fazer uma venda, ao lado ir aparecendo em sequencia a venda efetuada, como em um supermercado. Se alguem poder me explicar com detalhes fico grato.

/desde já obrigado.

Enviado: 16 Jul 2007 22:07
por Pablo César
Caro Gilberto, eu acho que não vai encontrar dificuldades alguma em fazer isso. Se utilizar uma função de procura de item e exibição dentro de um do while. Acho que a principio tudo deve estar cadastrado com um código de barras para localizar cada produto. Eu fiz agora improvisado só pra ter uma idéia:

Código: Selecionar todos

CLS
VLN:=2
VTOT:=0.00
@ 01,01 TO 22,32
DO WHILE .T.
   CODVAR:=SPACE(13)
   @ 12,38 SAY "Digite o codigo: "
   @ 12,55 GET CODVAR PICT "@9" VALID PROCURA(CODVAR)
   READ
   IF LASTKEY()=27
       EXIT
   ENDIF
ENDDO

FUNCTION PROCURA(CODVAR)
// SELE 1
// SEEK CODVAR
VRET:=.T.
VVLR:=2.99
VPROD:="BOLACHA DE MAIZENA  "+TRANSFORM(VVLR,"@E 999,999.99")
IF VRET=.T.
// IF FOUND()
   VRET:=.T.
   MOSTRA(VPROD,VVLR)
ELSE
   VRET:=.F.
   // MENSAGEM("Codigo nao cadastrado !",5)
ENDIF
RETURN VRET

FUNCTION MOSTRA(VPROD,VVAL)
VTOT:=VTOT+VVAL
@ VLN,02 SAY VPROD
@ VLN+1,02 SAY SPACE(20)+"----------"
@ VLN+2,02 SAY SPACE(20)+TRANSFORM(VTOT,"@E 999,999.99")
IF VLN+3>21
   VLN:=2
ELSE
   VLN:=VLN+1
ENDIF
RETURN
Claro que esse exemplo pode ser melhorado. Mas acredito que utilizar código de barras é a melhor opção quando se tem vários itens cadastrados. A margem de erro, se torna bem menor ou nula se tiverem bem cadastrados todos os titens. Sabe que o leitor de codigo de barras é apenas uma reprodução do que é digitado no teclado, assim que não será dificil implementar.... Boa sorte colega !.

Enviado: 17 Jul 2007 00:09
por Toledo
Gilberto, segue mais um exemplo do que você pode fazer...

Código: Selecionar todos

CLEAR
SET SCOREBOARD OFF
@ 00,00 TO 24,79
@ 02,34 TO 22,77
@ 02,53 SAY "[ CUPOM ]"
@ 02,02 TO 04,32
@ 03,04 SAY "Codigo..:"
@ 06,02 TO 08,32
@ 06,04 SAY "[Descricao Produto]"
@ 09,02 TO 11,32
@ 10,04 SAY "Quantidade...:"
@ 12,02 TO 14,32
@ 13,04 SAY "Vr.Unitario..:"
@ 16,02 TO 18,32
@ 17,04 SAY "Sub-Total....:"
@ 21,04 SAY "F5 - Consulta Cupom"
PRIV aProd:={{1,"MICRO PENTIUM 4",2000.00},;
             {2,"MOUSE OPTICO",70.00},;
             {3,"CD-R SONY",1.60}}
nCod=0
nQtde=1
nUnit=0
nSubTot=0
mCupom=SPAC(10)
MEMOEDIT(mCupom,03,35,21,76,.F.,.F.)
SET KEY -4 TO CON_CUPOM()
vInicia:=.T.
DO WHILE .T.
 @ 3,14 GET nCod PICT "9999" VALID (nCod>0.and.nCod<4)
 READ
 IF LASTKEY()=27
  EXIT
 ENDIF
 @ 7,4 SAY aProd[nCod,2]
 @ 13,19 SAY TRANS(aProd[nCod,3],"@E 9,999.99")
 nUnit=aProd[nCod,3]
 @ 10,19 GET nQtde PICT "9999"
 READ
 nSubTot=aProd[nCod,3]*nQtde
 @ 17,19 SAY TRANS(nSubTot,"@E 9,999.99")
 IF vInicia
  mCupom:="             SUA EMPRESA S/A"+chr(13)+chr(10)
  mCupom+="  Rua Fulano de Tal, 123 - Cidade - SP"+chr(13)+chr(10)
  mCupom+="        CNPJ 99.999.999/9999-99"+chr(13)+chr(10)
  mCupom+="========================================"+chr(13)+chr(10)
  mCupom+="Codigo/Descricao Produto"+chr(13)+chr(10)
  mCupom+="Qtde  -  Vr.Unit.  =  Sub-Total"+chr(13)+chr(10)
  mCupom+="========================================"+chr(13)+chr(10)
  vInicia=.F.
 ENDIF
 mCupom+=STRZERO(nCod,4)+"/"+aProd[nCod,2]+chr(13)+chr(10)
 mCupom+=TRANS(nQtde,"9999")+"  -  "+TRANS(aProd[nCod,3],"@E 9,999.99")+;
         "  =  "+TRANS(nSubTot,"@E 9,999.99")+chr(13)+chr(10)
 MEMOEDIT(mCupom,03,35,21,76,.F.,.F.) 
ENDDO
RETU

PROC CON_CUPOM()
 MEMOEDIT(mCupom,03,35,21,76,.F.,"EDITAR")
RETU

FUNC EDITAR
IF LASTKEY()=27
    RETU 23
ENDIF
RETU 0
Para imprimir o cupom despois você pode até usar a variável mCupom, que é um campo memo.

Abraços,

Enviado: 17 Jul 2007 08:12
por Marcos
Gilberto,
Use o Dbedit ou Tbrowse para fazer o que vc precisa, para o registro ir aparecendo na tela, basta vc pressionar seta a cima ou seta abaixo, ou para ficar mais profissional coloque uma opção <ATUALIZAR> dando um Refresh na tabela.
Espero que clareou mais para vc.
Marcos.

Enviado: 17 Jul 2007 08:19
por Pablo César
Legal este exemplo que o Toledo deu porque além de possibilitar a exibição do cupom por inteiro (através do MEMOEDIT) possibilitaria a impressão do cupom através de arquivo gerado. O que eu achei também interessante, é mostrar o sub-total bem visível, podendo até ser exibido com letras maiores. Também seria bom colocar o campo de valor de pagamento, para indicar o valor de troco na tela.

Enviado: 17 Jul 2007 09:46
por Gilberto M Silva
valeu amigo Pablo as informações vao ser puchadas por codigo de barras,
gato por sua atenção.

Enviado: 17 Jul 2007 09:50
por Gilberto M Silva
valeu mesmo, vc são feras,

Enviado: 17 Jul 2007 09:54
por sygecom
Gilberto:
Segue abaixo um exemplo....

Código: Selecionar todos

nInicio := timetosec(time())
nFim := timetosec(time())
@ 06,10 say  "Tempo"+sectotime(nFim-nInicio)
Obs:Sempre que tiver uma duvida pode postar em um novo post...

e seja bem vindo...

Abraços
Leonardo Machado

Enviado: 17 Jul 2007 10:05
por Pablo César
sygecom escreveu:

Código: Selecionar todos

nInicio := timetosec(time())
nFim := timetosec(time())
@ 06,10 say  "Tempo"+sectotime(nFim-nInicio)
Tchê Leonardo, você pensou que o colega estava perguntando como fazer intervalos de horas ?.
Desculpe, mas isto ja aconteceu há tempos atrás novamente (e se não me engano por vocês mesmos), mas é que:
como fazer calculo com a hora?

Ex: hor1 := time()
hor2 := time()
hor3 := hor2 - hor1
Faz parte da assinatura do colega.... hihihihi
Imagem

Enviado: 17 Jul 2007 10:12
por sygecom
Tchê Leonardo, você pensou que o colega estava perguntando como fazer intervalos de horas ?.
Desculpe, mas isto ja aconteceu há tempos atrás novamente (e se não me engano por vocês mesmos), mas é que:
Tche, eu não pensei...ele realmente esta perguntando....só acho que ele não soube postar....
Faz parte da assinatura do colega.... hihihihi
Eu sei disso....e colega que esta chegando agora é novo...e não deve saber...

Abraços
Leonardo Machado

Enviado: 17 Jul 2007 10:16
por Maligno
Em fóruns e grupos de notícias algumas pessoas tem o hábito de postar dicas em suas assinaturas. Não é muito comum, mas é louvável. :)

Enviado: 17 Jul 2007 11:00
por Pablo César
sygecom escreveu:Tche, eu não pensei...ele realmente esta perguntando....só acho que ele não soube postar....
Desculpa, Leonardo, isto ja aconteceu antes, mas com outro colega... hihihi

Encontrei a mensagem que eu mencionava: Veja aqui
Maligno escreveu:Em fóruns e grupos de notícias algumas pessoas tem o hábito de postar dicas em suas assinaturas.
Tudo bem, fazer uma menção até entendo. Eu mesmo coloquei várias mensagens com GIF animado para destacar algo. Mas fazer uma pergunta dentro da assinatura (desculpa Gilberto) mas causa confusão...

Mas tudo bem... ninguém morre por isso ! Só causou-me graça porque realmente parece que fosse outro questionamento.

Enviado: 17 Jul 2007 11:03
por Gilberto M Silva
como pode ser feito para que os itens listados na tela quando encher a tela, o ultimo listado ficar sempre visivel, isto é, o relatorio na tela ficar rolando a medida que sempre um novo item seja adicionado.

Enviado: 17 Jul 2007 11:04
por Maligno
Pablo César escreveu:Mas fazer uma pergunta dentro da assinatura (desculpa Gilberto) mas causa confusão...
Confusão nenhuma. Você que se distraiu e acabou não entendendo. Ele fez como se faz em FAQs. Uma pergunta e sua resposta na seqüência. Absolutamente normal.
Aliás, ele tirou a dica da assinatura. Gilberto, minha sugestão: coloque de volta e vá trocando as dicas de tempos em tempos. Fica bem legal.

Enviado: 17 Jul 2007 11:05
por Gilberto M Silva
O explo do Toledo tá perfeito qual seria o camando para rolar o itens listados a medida que fossem adicionados novos itens.