Ajuda com programa de vendas(iniciante)

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Bem, eu já pesquisei muito na internet(é difícil encontrar alguma coisa de clipper fora daqui...). As dúvidas que o pessoal pede pra resolver aqui são muito complexas e avançadas... bem... eu precisava muito da ajuda de vocês. Estou terminando um sistema em clipper para entregar como trabalho de faculdade, e estou quebrando a cabeça com a parte de vendas. O porblema é que não consegui entender nenhum sistema pela internet, a coisa tá difícil. Olha, eu preciso completar o sistema com a parte de vendas, mas não sei o que fazer. O sistema se basearia na venda para um cliente, cuja venda seria armazenado em um registro no banco de dados, para futuramente poder gerar um relatório da venda(isso eu até consigo fazer). O que está me encabulando é justamente o momento em que preciso fazer a venda. Eu utilizo a função Locate para caçar os registros do banco de dados um a um, mas o programa trava... a idéia era gerar uma lista dos itens disponíveis para que o usuário do sistema possa "adicionar ao carrinho de compras", eu faço uma box para mostrar os produtos disponíveis. Mas, e se o número de produtos disponíveis a mostrar ultrapassar o total de colunas?? Não há como fazer uma barra de rolagem na caixa para mostrar os produtos?? Alguem aí me dá uma luz por favor, eu vou anexar os dbfs deste módulo também.

Código: Selecionar todos

CLS
USE PRODUTOS INDEX IPCOD NEW
USE VENDAS
USE CLIENTES INDEX ICCOD NEW
USE SAIDAS
INDEX ON CODVEND TO IZCOD
USE PRODUTOS INDEX IPCOD NEW
SET DATE TO BRITISH
SET CENTURY ON

CODCLI:=0
CODPRO:=0
CODVEND:=0
NOMCLI:=SPACE(40)
NOMPRO:=SPACE(40)
DIA:=DATE()
HORA:=TIME()


CODIGO:=0

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM
	
	OPCAO:=1
	
	@10,10 PROMPT 'VER TOTAL'
	@11,10 PROMPT 'ADICIONAR AO CARRINHO'
	@12,10 PROMPT 'VER PRODUTOS DISPONIVEIS'
	@13,10 PROMPT 'FINALIZAR COMPRA'
	MENU TO OPCAO
	IF OPCAO=1
		RETURN
	
	
	ELSEIF OPCAO=2
		SELECT PRODUTOS
		
		
		
	ELSEIF OPCAO=3
		CLS
		@00,00 TO 24,79 DOUBLE
		@1,0 say "Phoenix commerce v1.0"
		@01,55 SAY "VENDA DE PRODUTOS"
		@02,01 TO 02,78
		SELECT PRODUTOS
		GO 1
		RETBOX=CHR (201) +CHR (205) +CHR (187) +CHR (186) +;
   	 CHR (188) +CHR (205) +CHR (200) +CHR (186)
		@03,01,17,78 BOX RETBOX
		
		CI:=03
		LI:=02
		XC:=2
		CODIGO:=0
		
		DO WHILE CODIGO<6
		LOCATE FOR CODIGO=CODIGO
		IF FOUND()
			@04,02 SAY "CODIGO - "
			@04,12 SAY "NOME"	
			@CI+XC,LI SAY CODIGO
			@CI+XC,LI+10 SAY NOME
		INKEY(5)
		ENDIF
		CODIGO:=CODIGO+1
		ENDDO
	ENDIF
	
ENDDO
	
Outro problema que encontrei foi este dos produtos selecionados: como vou conseguir adicionar cada produto selecionado para a venda no banco de dados?? Não daria pra criar uma variável nova pra cada produto selecionado(não sei se estou certo). Aí eu criei uma tabela auxiliar(SAIDAS), com os dados de cada produto escolhido(e a quantidade de cada um).

Gente, como é complicado isso para um trabalho de faculdade....

Alguém tem alguma luz para o meu problema??
Anexos
VENDAS.xls
tabela onde constariam os dados principais da venda
(18 KiB) Baixado 147 vezes
SAIDAS.xls
Tabela auxiliar para VENDAS.DBF que registraria cada produto adicionado(e a quantidade de cada um também). Suportaria até 10 produtos(se trata de um sistema de pequeno porte =D )
(18 KiB) Baixado 109 vezes
PRODUTOS.xls
Tabela de produtos
(18 KiB) Baixado 136 vezes
CLIENTES.xls
Tabela de Clientes
(18 KiB) Baixado 102 vezes
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á

Ajuda com programa de vendas(iniciante)

Mensagem por Pablo César »

Seja bem vindo ao nosso fórum !

Fernando, tem certeza que esse sistema pode ser feito na linguagem xBase e mais preciso com Clipper ?

Não olhei os arquivos em anexo, mas desde já eu indico você fazer em TBROWSE, procure aqui no fórum. Isso vai dar uma idéia como "lista" no C. É dizer você terá um número determinado de colunas (campos) e n de linhas (registros) e você vai adicionando os produtos conforme acionamento pelo próprio usuário, seja através de uma tecla de função que esta abrirá outra janela com os produtos disponíveis ou até mesmo um TBROWSE dentro de outro TBROWSE para selecionar o adicionamento de produtos.

Váriaveis ? Diria melhor VETORes. Pesquise aqui no fórum no item do topo da página em "Busca Avançada", vai ver vários exemplos de TBROWSEs. Mas essa de carrinho... você irá conseguir em [x]Harbour + biblioteca GUI (MiniGui, etc...) para atender ambiente gráfico.
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
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Ajuda com programa de vendas(iniciante)

Mensagem por gvc »

Seu DBF´s estão com extensão XLS - Planilha do Excell.

Vc esta abrindo os arquivos de forma errada. Inclusive abrindo o mesmo arquivo 2 vezes. Verifique.

Monte o seu programa para chamar módulos e não coloque processos dentro do CASE como vc esta fazendo.

Vc precisaria separae entre Pedido (Consulta e Adicionar Produto ao Carrinho) e Ver Carrinho.

Consulte a função DBEdit para ver como funciona e colocar a opção de Pedido.
Atráves do DBEdit vc pode gravar a informação de qual produto e a quantidade o cliente quer.

No módulo de Ver Carrinho, vc tb vai usar o DBEdit para mostar as informações da compra e o valor total.

Veja que com 2 browse vc esta resolvendo o seu exercício.

(Mas vai ter que consultar como funciona!!!! Eh.Eh.Eh.)
"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}
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Obrigado pela recepção aí pessoal!
Bem, sobre estes vetores/arrays eu até tenho uma aula guardada aqui no meu computador, que cria um banco de dados a partir de uma matriz... era sobrte isso que você se referia???
Os bancos de dados eu abri com o excel e os converti para formato XLS para poder anexar nas mensagens aqui do forum.
Eu não separei esta parte do programa em módulos porque meu programa já soma mais de 20 deles.... tá difícil corrigir um por um... bem acho que deva ser melhor repartir este módulo mesmo....
Essa box criada aí ta bem trash.... a idéia minha era que a mesma permitia rolagem entre as tabelas dos bancos de dados(coisa que não deu certo), mas daí eu vi este "poderoso" TBROWSE, e ta quase me tirando do sufoco....
E vocês não tem algum exemplo de função para adicionar pedido, contando o codigo e quantidade do produto(para vários produtos)?
De qualquer forma já agradeço a ajuda.
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Bem pessoal, estou matutando pra fazer o programa por aqui, mas estou com algumas dúvidas:

O meu Tbrowse funciona, pega todos os registros, mas não me permite navegar por eles com o teclado... eu errei aonde?? onde deve colocar aquele include inkey.ch?? Tem que usar algum comando no rtlink??
Bem, a princípio não era pro programa ficar tão complexo mesmo, era só pra oferecer umas facilidades básicas(Tbrowse) ao usuário do sistema...
Então estou anexando meu módulo de consulta de produtos(eu fiz a divisão que o gvc sugeriu).
O que há de errado no meu tbrowse??
Agora outra dúvida: como faço pra armazenar um vetor/array no banco de dados DBF?

Este é o tbrowse: O inkey.ch que eu estou usando é aquele que está na pasta include do clipper.

Código: Selecionar todos

CLS
USE PRODUTOS INDEX IPCOD NEW
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM

	oMybrowser := TBrowseDB(04,01,22,78)
	oColumn1 := TBColumnNew("Codigo Produto",{||Produtos->CODIGO })
	oColumn2 := TBColumnNew("Nome do produto",{|| Produtos->NOME})
	oColumn3 := TBColumnNew("Preço",{|| Produtos->PRECO})
	oColumn4 := TBColumnNew("Quantidade",{|| Produtos->QUANTIDADE})
	oMybrowser:addColumn(oColumn1)
	oMybrowser:addColumn(oColumn2)
	oMybrowser:addColumn(oColumn3)
	oMybrowser:addColumn(oColumn4)
	do while .t.
   while (! oMybrowser:stabilize())
      nkey := inkey()
      if nkey != 0   && Pressionada uma tecla durante a estabilização
         exit
      endif
   enddo
   if oMyBrowser:Stable        && Checa se o objeto está estável
      inkey(0)
   endif
  
   if nkey= 5
      oMyBrowser:up()
   elseif nkey == 24
      oMybrowser:down()
   elseif nkey == 19
      oMybrowser:left()
   elseif nkey == 4
      oMybrowser:right()
   elseif nkey == 1
      oMybrowser:home()
   elseif nkey == 6
      oMybrowser:end()
   elseif nkey == 18
      oMybrowser:pageUp()
   elseif nkey == 3
      oMybrowser:pageDown()
   elseif nkey == 26
      oMybrowser:panLeft()
   elseif nkey == 9
      oMybrowser:panRight()
   elseif nkey == 27
      exit
   endif
close all
cls
quit

  
  ENDDO
  ENDDO 
Este é o módulo(temporário) de adicionar ao carrinho(esta dando um erro no momento, de variável não existente(s), mas deste eu já consegui resolver antes):

Código: Selecionar todos

CLS
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM

USE VENDAS
INDEX ON CODVEND TO IVCOD
CLOSE ALL
USE VENDAS INDEX IVCOD
USE PRODUTOS INDEX IPCOD
USE CLIENTES INDEX ICCOD


CODCLI:=0
VDT:={}
XRESP:=SPACE(01)
QPROD:=0
PROD:=0
PRECOPROD:={}

	SELECT CLIENTES
	@08,10 SAY "DIGITE O CODIGO DO CLIENTE"
	@09,48 GET CODCLI PICT "99999"
	READ
	SET ORDER TO 1
	SEEK CODCLI
	IF .not. FOUND()                   
    @21,01 TO 21,78           
    @22,10 SAY "CODIGO NAO CADASTRADO!"
    INKEY(0)
    @21,01 CLEAR TO 22,78
    LOOP
	ENDIF
	
	@12,10 SAY NOME
	INKEY(4)
	@13,10 SAY "CLIENTE CERTO?"
	@13,25 GET XRESP PICT "!" VALID(XRESP$'SN')
	READ 
	
	IF XRESP:=S
		CODCLI:=CODIGO
		SELECT PRODUTOS
		@03,02 CLEAR TO 23,78
		@10,10 SAY "ESCOLHA UM PRODUTO PELO CODIGO: " GET PROD
		READ
		SEEK PROD
		IF .not. FOUND()
			@21,01 TO 21,78           
			@22,10 SAY "CODIGO NAO CADASTRADO!"
			INKEY(0)
			@21,01 CLEAR TO 22,78
			LOOP
			ENDIF
		
		@12,10 SAY "DIGITE A QUANTIDADE DESTE PRODUTO"
		@13,10 GET QPROD
		READ
		
	ENDIF
		
		
ENDDO 
Anexos
PRODUTOS.xls
(18 KiB) Baixado 122 vezes
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Ajuda com programa de vendas(iniciante)

Mensagem por gvc »

Acerte seu arquivo que guarda os dados do carrinho de compras.
Acerte seu arquivo de saida de produtos.
Quando mandar os arquivos para o forum, envie no formato dbf.
O exemplo abaixo é para mostra o uso do DBEdit para montar browse e permitir navegação e trabalhos com os arquivos.
Use como exemplo (não esta completo) para o cliente selecionar os produtos e em outro módulo use um parecido para consultar o que vc já tem no carrinho de compras. Da para usar o mesmo browse para fazer essa consulta no carrinho, mas vai depender de vc usar o que já foi posto aqui.
Vc pode usar a mesma idéia no TBrowse.

Código: Selecionar todos

***
***
***

function main
local aCampo, aDesc, aMasc

cls

set date brit
set century on
set epoch to 1950
set deleted on

use saidas new

use vendas new

use clientes new
if !file('client01.ntx') .or. !file('client02.ntx') .or. !file('client03.ntx')
   index on field->codigo to client01
   index on field->nome to client02
   index on field->cpf to client03
end
set index to client01, client02, client03

use produtos new
if !file('prod01.ntx') .or. !file('prod02.ntx')
   index on field->codigo to prod01
   index on field->nome to prod02
end
set index to prod01, prod02
dbsetorder(2) // Trabalhar com a Descrição

aCampo := {'codigo', 'nome', 'preco'}
aDesc := {'Cod', 'Descricao', 'Preco'}
aMasc := {'99999', '@!', '9999999.99'}

keyboard ' '
@ 01,00 to 23,79
@ 23,01 say ' [F2] Pesquisa  [F3] Incluir Produto no Carrinho  [F4] Ver Carrinho  [Esc] Sair ' color 'w+/r'
dbedit(02,01, 22,78, aCampo, 'lancando', aMasc, aDesc)

dbcloseall()

return(Nil)

***
***
***
function lancando
local as, getlist := {}
local xDesc

as := lastkey()

do case
   case as = 27
      return(0)
   case as = -1 // F2
      xDesc := space(40)
      @ 05,05 clear to 07,60
      @ 05,05 to 07,60
      @ 06, 07 say 'Descricao:' get xDesc picture '@!' valid !empty(xDesc)
      setcursor(1)
      read
      setcursor(0)
      
      if lastkey() # 27
         keyboard ' '
         return(1)
      end

      dbseek(alltrim(xDesc))
      keyboard ' '
      return(1)
   case as = -2 // F3
      xprod  := produtos->nome
      xpreco := produtos->preco
      xquant := 0
      xtotal := 0
      xopc := ' '
      
      oldcor := setcolor('w+/b')
      @ 05,08 clear to 16,70
      @ 05,08 to 16,70

      @ 07,10 say 'Produto:...' get xprod picture '@!' when .F.
      @ 08,10 say 'Valor Unit:' get xpreco picture '9999999.99' when .F.
      @ 09,10 say 'Quantidade:' get xquant picture '9999' valid calcTotal(xpreco, xquant, @xtotal)
      @ 10,10 say 'Total:.....' get xtotal picture '999999.99' when .F.
      @ 15,10 say 'Confirma Incluir o Produto no Carrinho' get xopc picture '@!' valid xopc $ 'SN'

      setcursor(1)
      read
      setcursor(0)

      setcolor(oldcor)
      if lastkey() # 27 .and. xopc = 'S'
         // << Gravar os Dados do Pedido no Carrinho >>
      end
      keyboard ' '
      return(2)
end
return(1)

***
***
***
function calcTotal(xpreco, xquant, xtotal)

if xquant <= 0
   return(.F.)
end

xtotal := xquant * xpreco

return(.T.)
"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}
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Então, demorei pra voltar a postar, mas estou bem aflito com o programa mesmo.
Demorei pra voltar pra cá por causa do trbalho, provas...

Eu agradeço as dicas do gvc, mas eu não entendo algumas no programa como dbsetorder, keyboard(o buffer do teclado só guarda uma tecla? Tem haver com o lastkey? Bem, entendi... você "zerou" o buffer pra ele não pegar nenuha tecla de mais... ou coisa assim), setcursor e return com o parâmetro nil(pra falar a verdade, eu nem usava o return até meu professor me sugerir).
como se adicionaria uma matriz no banco de dados depois??

Por que o meu tbrowse do exemplo no post acima(pvd.prg) não funciona( nele o usuário apenas consultaria os produtos disponíveis no DB...)? Ao invés do Tbrowse vou usar o browse normal, já resolvi.

Bem, este aqui é o meu programa temporário de adicionar ao carrinho:

Código: Selecionar todos

*** Matriz de venda VDT: Codigo,Nome,Quantidade,Preco: para cada produto um novo valor no vetor ***

CLS
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990

VDT:={}

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM


USE VENDAS
INDEX ON CODVEND TO IVCOD
CLOSE ALL
USE VENDAS INDEX IVCOD
USE PRODUTOS INDEX IPCOD
USE CLIENTES INDEX ICCOD



CODCLI:=0
XRESP:=SPACE(01)
QPROD:=0
PROD:=0
PRECO:=0

	IF LASTKEY() == 27
	QUIT
	ENDIF
	
	SELECT CLIENTES
	@08,10 SAY "DIGITE O CODIGO DO CLIENTE"
	@09,48 GET CODCLI PICT "99999"
	READ
	SET ORDER TO 1
	SEEK CODCLI
	IF .not. FOUND()                   
		@21,01 TO 21,78           
		@22,10 SAY "CODIGO NAO CADASTRADO!"
		INKEY(0)
		@21,01 CLEAR TO 22,78
		LOOP
	ENDIF
	
	@12,10 SAY NOME
	INKEY(4)
	@13,10 SAY "CLIENTE CERTO?"
	@13,25 GET XRESP PICT "!" VALID(XRESP$'SN')
	READ 
	
	IF XRESP='S'
		CODCLI:=CODIGO
		USE PRODUTOS INDEX IPCOD
		@03,02 CLEAR TO 23,78
		@10,10 SAY "ESCOLHA UM PRODUTO PELO CODIGO: "
		@10,41 GET PROD
		READ
		SEEK PROD
		IF .NOT. FOUND()
			@21,01 TO 21,78           
			@22,10 SAY "CODIGO NAO CADASTRADO!"
			INKEY(0)
			@21,01 CLEAR TO 22,78
			LOOP
		ELSE
			@11,02 TO 13,77
			@12,10 say CODIGO
			@12,20 say NOME
			@12,50 say STR(PRECO,6,2)
			@12,60 say "QTDE: "
			@12,65 say QUANTIDADE
			@14,10 say "DIGITE A QUANTIDADE DO PRODUTO: " GET QPROD
			READ
			XRESP:=" "
			@15,10 say "TEM CERTEZA DISSO?" GET XRESP picture '@!' valid XRESP $ 'SN'
			READ
			IF QPROD>QUANTIDADE .and. XRESP="S"
			@16,10 SAY "NAO HA QUANTIDADE SUFICIENTE!!!"
				INKEY(2)
				@16,01 CLEAR TO 16,77
				LOOP
			ELSE
				REPLACE QUANTIDADE WITH (QUANTIDADE-QPROD)
				COMMIT
				PRECO = PRODUTOS->PRECO*QPROD
				aadd=(VDT,{PROD,PRODUTOS->NOME,QPROD,PRECO})
				INKEY(2)
				@18,10 say VDT[1][1]
				XRESP=" "
				INKEY(0)
				@16,10 SAY "DESEJA ADICIONAR OUTRO PRODUTO AO CARRINHO?" GET XRESP picture '@!' valid XRESP $ 'SN'
				READ
			ENDIF
		ENDIF
	
	ENDIF
	
	
ENDDO
Detalhe: eu uso clipper 5.2b
Anexos
CA.zip
Estes são todos os fontes do programa principal, aqui eu compilo apenas um, e o clipper compila todos juntos... é o que eu sei rsrs
(31.14 KiB) Baixado 124 vezes
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Atualizando:

este é o programa final de adicionar ao carrinho segue seu código abaixo:

Código: Selecionar todos

*** Matriz de venda VDT: Codigo,Nome,Quantidade,Preco,PrecoTotal: para cada produto um novo valor no vetor ***

CLS
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990

PUBLIC VDT:={}

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM

	CLOSE ALL
	USE PRODUTOS INDEX IPCOD
	USE CLIENTES INDEX ICCOD



	CODCLI:=0
	XRESP:=SPACE(01)
	QPROD:=0
	PROD:=0
	XPRECO:=0
	PNOME=" "
	CODVEN:=0
	
	
	SET ORDER TO 2
	SELECT CLIENTES
	@08,10 SAY "DIGITE O CODIGO DO CLIENTE"
	@09,48 GET CODCLI PICT "99999"
	READ
	SET ORDER TO 1
	SEEK CODCLI
	IF LASTKEY() == 27
		CLOSE ALL
		DO VPRO
	ENDIF
	IF .not. FOUND()                   
		@21,01 TO 21,78           
		@22,10 SAY "CODIGO NAO CADASTRADO!"
		INKEY(0)
		@21,01 CLEAR TO 22,78
		LOOP
	ENDIF
	
	@12,10 SAY NOME
	INKEY(4)
	@13,10 SAY "CLIENTE CERTO?"
	@13,25 GET XRESP PICT "!" VALID(XRESP$'SN')
	READ 
	
	DO WHILE XRESP="S"
		CODCLI:=CODIGO
		USE PRODUTOS INDEX IPCOD
		@03,02 CLEAR TO 23,78
		@10,10 SAY "ESCOLHA UM PRODUTO PELO CODIGO: "
		@10,41 GET PROD
		READ
		SEEK PROD
		IF .NOT. FOUND()
			@21,01 TO 21,78           
			@22,10 SAY "CODIGO NAO CADASTRADO!"
			INKEY(0)
			@21,01 CLEAR TO 22,78
			LOOP
		ELSE
			PNOME=PRODUTOS->NOME
			@11,02 TO 13,77
			@12,10 say CODIGO
			@12,20 say NOME
			@12,50 say STR(PRECO,6,2)
			@12,60 say "QTDE: "
			@12,65 say QUANTIDADE
			@14,10 say "DIGITE A QUANTIDADE DO PRODUTO: " GET QPROD
			READ
			XRESP:=" "
			@15,10 say "TEM CERTEZA DISSO?" GET XRESP picture '@!' valid XRESP $ 'SN'
			READ
			IF QPROD>QUANTIDADE .and. XRESP="S"
			@16,10 SAY "NAO HA QUANTIDADE SUFICIENTE!!!"
				INKEY(2)
				@16,01 CLEAR TO 16,77
				LOOP
			ELSEIF XRESP="S"
				REPLACE QUANTIDADE WITH (QUANTIDADE-QPROD)
				COMMIT
				XPRECO = PRODUTOS->PRECO*QPROD
				aadd(VDT,{PROD, PNOME, QPROD, PRECO, XPRECO})
				XRESP=" "
				INKEY(0)
				@16,10 SAY "DESEJA ADICIONAR OUTRO PRODUTO AO CARRINHO?" GET XRESP picture '@!' valid XRESP $ 'SN'
				READ
			ELSE
				LOOP
			ENDIF
		ENDIF
	
	ENDDO
	IF XRESP="N"
		CLOSE ALL
		DO VPRO
	ENDIF
	
ENDDO
E este é o programa de ver todos os itens comprados(está dando base error 1111... pif....):

Código: Selecionar todos

*** Matriz de venda VDT: Codigo,Nome,Quantidade,Preco,PrecoTotal: para cada produto um novo valor no vetor ***

CLS
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990
SET ESCAPE OFF

PUBLIC VDT

DO WHILE .T.
	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM

	CLOSE ALL
	USE PRODUTOS INDEX IPCOD
	USE CLIENTES INDEX ICCOD
	
	PRIVATE	CODCLI
	XRESP:=SPACE(01)
	QPROD:=0
	PROD:=0
	XPRECO:=0
	PNOME=" "
	CODVEN:=0
	
	IF LASTKEY() == 27
		CLOSE ALL
		DO VPRO
	ENDIF
	
	@03,10 SAY "CLIENTE:"
	@03,18 SAY NOME
	@03,47 SAY "DATA:"
	@03,52 SAY DATE()
	@03,65 SAY "HORA:"
	@03,70 SAY TIME()
	
	@04,02 TO 06,78
	@05,10 SAY "COD CLI"
	@05,18 SAY "NOME PROD"
	@05,48 SAY "QUANTIDADE"
	@05,59 SAY "PRECO UN"
	@05,68 SAY "PRECO TOT"
	INKEY(0)
	
	FOR LVAR=1 TO LEN(VDT) STEP 1
		@05+LVAR,10 SAY vdt[LVAR][1]
		@05+LVAR,18 SAY vdt[LVAR][2]
		@05+LVAR,59 SAY vdt[LVAR][3]
	NEXT
	
*** Matriz de venda VDT: Codigo,Nome,Quantidade,Preco,PrecoTotal: para cada produto um novo valor no vetor ***
ENDDO
Alguem aí poderia indicar o erro no meu programa de ver total??
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Pessoal, esta é a parte final do programa, a parte de finalizar a venda. Bem, eu até consegui finalizar tudo, mas eu ainda estou com um probleminha com o benedito...
Na hora que eu vou mandar o programa fazer um pequeno relatório da venda(serveria como um pedido de venda), eu não faço idéia de uma função para dar um nome diferente para cada arquivo gerado(cada arquivo representa uma venda) na linha do SET PRINTER TO. Se o clipper não aceita uma expressão genérica para dar nome ao arquivo, como eu faço???

Código: Selecionar todos

CLS
SET DATE TO BRITISH
SET CENTURY ON
SET EPOCH TO 1990

	CLS
	@00,00 TO 24,79 DOUBLE
    @1,0 say "Phoenix commerce v1.0"
    @01,55 SAY "VENDA DE PRODUTOS"
    @02,01 TO 02,78
	SAVE SCREEN TO IMAGEM
	
	
	eNOME:=SPACE(40)
	eEND:=SPACE(30)
	eRESP:=SPACE(01)
	eTEL:=0
	eNUM:=0
	eCID:=SPACE(40)
	eCEP:=0
	eCNPJ:=0
	eINSC:=0
	eRAZAO:=SPACE(40)
	eEMAIL:=SPACE(40)
	USE EMPRESA INDEX IECOD
	eNOME=EMPRESA->NOME
	eEND=EMPRESA->ENDERECO
	eTEL=EMPRESA->TELEFONE
	eNUM=EMPRESA->NUMERO
	eCID=EMPRESA->CIDADE
	eCEP=EMPRESA->CEP
	eCNPJ=EMPRESA->CNPJ
	eINSC=EMPRESA->INSCRICAO
	eRAZAO=EMPRESA->RAZAO
	eEMAIL=EMPRESA->EMAIL
	
	XRESP:=SPACE(01)
	XDATA:=DATE()
	XTEMPO:=TIME()
	XQUANT:=0
	XTOT:=0
	
	USE PSAIDAS NEW
	INDEX ON CODVEND TO PINDEX
	USE VENDA
	CODCLI:=CLIENT
	USE CLIENTES INDEX ICCOD
	SEEK CODCLI
	NOMCLI:=CLIENTES->NOME
	
	USE VENDA
	@04,10 SAY "PRODUTOS ESCOLHIDOS: (TECLE ENTER PARA CONTINUAR)"
	dbedit(06,01,12,78)
	@13,01 TO 13,78
	
	IF LASTKEY() == 27
		CLOSE ALL
		DO VPRO
	ENDIF
	
	@16,10 SAY "DESEJA FINALIZAR A VENDA?" GET XRESP PICTURE "@!" VALID(XRESP$'SN')
	READ
	
	
	
	IF XRESP="S"
		SUM QTPROD TO XQUANT
		SUM PRETOT TO XTOT
		GO TOP
		USE PSAIDAS INDEX PINDEX
		APPEND BLANK
		REPLACE CODVEND WITH 00000+RECCOUNT()
		REPLACE CLIENTE WITH CODCLI
		REPLACE NOMECLI WITH NOMCLI
		REPLACE QPRODS WITH XQUANT
		REPLACE VALOR WITH XTOT
		REPLACE DATA WITH DATE()
		REPLACE HORA WITH TIME()
		COMMIT
		@18,10 SAY "VENDA FINALIZADA! SERA GERADO AGORA UM RELATORIO DA MESMA..."
		NOMEARQ:="P"+STRZERO(CODVEND,5)
		SET PRINTER TO (NOMEARQ).TXT
		SET PRINT ON
		SET CONSOLE OFF
		? eNOME
		?? "                   "
		?? eEND
		INKEY(3)
	ENDIF
eu usei esta variável nomearq para tentar dar um nome diferente a cada arquivo... mas não deu. Como faço agora???
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Toledo »

Amigo, você terá que alterar as linhas 81 e 82 do seu código para:

Código: Selecionar todos

      NOMEARQ:="P"+STRZERO(CODVEND,5)+".TXT"
      SET PRINTER TO (NOMEARQ)
Observei uma outra coisa neste seu código que pode não dar muito certo, que é a forma que você está gerando um código novo da venda (linha 72). Se entre uma venda e outra você excluir algum registro do arquivo PSAIDAS, o código da última venda será duplicado numa próxima venda. Então seria melhor você verificar primeiro qual foi o código utilizado na última venda e simplesmente somar mais 1. Por exemplo:

Troque as linhas 70, 71 e 72 por:

Código: Selecionar todos

      SELE PSAIDAS
      GO BOTTOM
      nCODVEND := CODVEND+1
      APPEND BLANK
      REPLACE CODVEND WITH nCODVEND
Troque a linha 44 do seu código por:

Código: Selecionar todos

   IF !FILE("PINDEX.NTX")
      INDEX ON CODVEND TO PINDEX
   ENDIF
   SET INDEX TO PINDEX
Nos comandos acima será verificado se o arquivo PINDEX.NTX não existe. Se não existe, o arquivo será criado, caso contrário, o arquivo será apenas relacionado ao DBF aberto, evitando a perda de tempo de ter que criar o arquivo de índice a cada venda.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Fernandex
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 30 Jul 2010 13:48
Localização: Bocaina/São Paulo

Re: Ajuda com programa de vendas(iniciante)

Mensagem por Fernandex »

Puxa cara, valeu mesmo. O sistema ficou uma beleza!
Acho que depois de entregar o trabalho, vou aprimorar o sistema, e implantar aqui na loja onde eu trabalho. Mas agradeço muito pelas dicas e pelos programas do Fórum.
:)) :)Pos
Responder