Ajuda na implementação deste código
Bom dia amigos !
Preciso implementar a busca de produtos e usuário usando um microterminal, a comunicação e até o tratamento de teclas consegui implementar baseado no exemplo que segue, mas estou perdido na parte aonde irei implementar a busca e inserção de produtos no bd de meu sistemas abaixo segue a parte aonde é tratado o estado:
No caso só para eu entender possuo duas tabelas a primeira é PRODUTOS
A primeira:
datamodule1.produtos:
cdodigo
descrição
valor
A segunda:
datamodule1.vendas
codigo
descrição
valor
Preciso implementar a busca de produtos e usuário usando um microterminal, a comunicação e até o tratamento de teclas consegui implementar baseado no exemplo que segue, mas estou perdido na parte aonde irei implementar a busca e inserção de produtos no bd de meu sistemas abaixo segue a parte aonde é tratado o estado:
No caso só para eu entender possuo duas tabelas a primeira é PRODUTOS
A primeira:
datamodule1.produtos:
cdodigo
descrição
valor
A segunda:
datamodule1.vendas
codigo
descrição
valor
procedure TForm1.terminalEstado(xterminal: Pointer);
var
prodDesc: string;
prodValor: Real;
prodPesar: Boolean;
waux, waux1: string;
wproduto: PVendaItem;
i, cod: Integer;
begin
; // TRATAR ESTADO DO TERMINAL
if xterminal = nil then
Exit;
with PTerminal(xterminal)^ do
begin
case estado of
ESTADOESPERAR:
begin
; // AGUARDAR UMA RESPOSTA ( DELAI )
estado := estadoProximo;
estadoProximo := -2;
end;
ESTADOOPERADOR:
begin
; // PEDIR OPERADOR NA TELA DO TERMINAL
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''OPERADOR:'');
terminalGet(xterminal, ''****'');
estado := estado + 1;
end;
ESTADOOPERADOR + 1:
begin
; // VALIDAR OPERADOR
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '''') or (teclado = #27) then
begin
estado := ESTADOOPERADOR
end
else
begin
; // PROCURAR USUÁRIO NO ARQUIVO TEXTO
; // AQUI VOCÊ PODE TAMBÉM OLOCAR SUA CONSULTA NO BANCO DE DADOS
if usuarioGet(StrToInt(''0'' + teclado), operadorNome) then
begin
estado := ESTADOPRODUTO;
end
else
begin
teclado := '''';
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''OPERADOR NAO'');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, ''ENCONTRADO'');
estado := ESTADOESPERAR;
estadoProximo := ESTADOOPERADOR;
delai := 3;
end;
end;
end;
end;
ESTADOPRODUTO:
begin
; // PEDIR CÓDIGO DO PRODUTO
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''V.TOTAL: '' + FormatFloat(''0.00'', ValorTotal));
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, ''PRODUTO: '');
terminalGet(xterminal, ''99999'');
estado := estado + 1;
end;
ESTADOPRODUTO + 1:
begin
; // VALIDAR PRODUTO
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '''') then
begin
if tecla[1] = #13 then
begin
; // VERIFICAR SE FECHA A VENDA
if itens.Count >= 1 then
estado := ESTADOFECHARVENDA // FECHAR A VENDA
else
estado := ESTADOPRODUTO; // CONTINUAR EM PRODUTOS
end
else
begin
estado := ESTADOPRODUTO;
end;
end
else if (teclado = #27) then
begin
; // CANCELAR A VENDA
ValorTotal := 0;
operadorID := 0;
operadorNome := '''';
listaLimpar(itens);
estado := ESTADOOPERADOR;
end
else
begin
; // PROCURAR PRODUTO NO ARQUIVO TEXTO
; // AQUI VOCÊ PODE TAMBÉM OLOCAR SUA CONSULTA NO BANCO DE DADOS
if produtoGet(StrToInt(''0'' + teclado), prodDesc, prodValor, prodPesar) then
begin
; // ACRECESNTAR PRODUTO NA LISTA DE VENDA
New(wproduto);
wproduto.idProduto := StrToInt(''0'' + teclado);
wproduto.valor := prodValor;
wproduto.descricao := prodDesc;
wproduto.pesar := prodPesar;
PTerminal(xterminal)^.itens.Add(wproduto);
; // VERIFICAR SE O PRODUTO É DE PESAR OU NÃO
if wproduto.pesar then
begin
; // SOLICITAR PESO PARA A BALANÇA
terminalGet(xterminal, #3);
estado := ESTADOPRODUTO + 4;
end
else
begin
; // SOLICITAR QUANTIDADE DE PRODUTOS
estado := ESTADOPRODUTO + 2;
end;
end
else
begin
; // PRODUTO NÃO ENCONTRADO
teclado := '''';
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''PRODUTO NAO'');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, ''ENCONTRADO'');
estado := ESTADOESPERAR;
estadoProximo := ESTADOPRODUTO;
delai := 3;
end;
end;
end;
end;
ESTADOPRODUTO + 2:
begin
; // PEDIR QUANTIDADE DE PRODUTOS
delai := 0;
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, PVendaItem(itens.Items[itens.Count - 1])^.descricao);
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, ''QTD: '');
terminalGet(xterminal, ''9999999'');
estado := estado + 1;
end;
ESTADOPRODUTO + 3:
begin
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '''') then
begin
estado := ESTADOPRODUTO + 2;
end
else if (teclado = #27) then
begin
Dispose(itens.Items[itens.Count - 1]);
itens.Delete(itens.Count - 1);
estado := ESTADOPRODUTO;
end
else
begin
with PVendaItem(itens.Items[itens.Count - 1])^ do
begin
quantidade := StrToFloat(''0'' + teclado);
valorTotal := valor * quantidade;
end;
ValorTotal := ValorTotal +
PVendaItem(itens.Items[itens.Count - 1])^.valorTotal;
estado := ESTADOPRODUTO;
end;
end;
end;
ESTADOPRODUTO + 4:
begin
; // SOLICITAR PESO PARA BALANÇA
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''AGUARDANDO PESO...'');
teclado := '''';
terminalBalanca(xterminal);
estado := estado + 1;
delai := 4;
end;
ESTADOPRODUTO + 5:
begin
if terminalTeclaTratar(xterminal) then
begin
if teclado = '''' then
begin
terminalGet(xterminal, Chr(3));
estado := ESTADOPRODUTO + 4;
delai := 4;
end
else
begin
with PVendaItem(itens.Items[itens.Count - 1])^ do
begin
balancaRetorno := teclado;
waux := Copy(Trim(teclado), 1, 2);
waux1 := Copy(Trim(teclado), 3, 3);
Val(waux + ''.'' + waux1, quantidade, cod);
valorTotal := valor * quantidade;
ValorTotal := ValorTotal +
PVendaItem(itens.Items[itens.Count - 1])^.valorTotal;
end;
estado := ESTADOPRODUTO;
end;
end
else
begin
if delai <= 0 then
begin
teclado := '''';
terminalBalanca(xterminal);
delai := 4;
end;
end;
end;
ESTADOFECHARVENDA:
begin
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''IMPRIMIR ?'');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, ''1-SIM 2-NAO'');
terminalGet(xterminal, ''9'');
estado := estado + 1;
end;
ESTADOFECHARVENDA + 1:
begin
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '''') then
begin
estado := ESTADOFECHARVENDA;
end
else if (teclado = #27) or (teclado = ''2'') then
begin
imprimir := False;
teclado := '''';
estado := estado + 1;
end
else
begin
imprimir := True;
estado := estado + 1; ;
end;
end;
end;
ESTADOFECHARVENDA + 2:
begin
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, ''VENDA FINALIZADA'');
Memo1.Lines.Clear;
terminalImprimir(xterminal, ''OPERADOR: '' + operadorNome);
terminalImprimir(xterminal, '''');
for i := 0 to itens.Count - 1 do
begin
with PVendaItem(itens.Items[i])^ do
begin
if pesar then
begin
terminalImprimir(xterminal,
descricao + '' - '' +
FormatFloat(''0.000 kg'', quantidade) + '' - '' +
balancaRetorno + '' - '' +
FormatFloat(''R$ 0.00'', valor) + '' - '' +
FormatFloat(''R$ 0.00'', valorTotal)
);
end
else
begin
terminalImprimir(xterminal,
descricao + '' - '' +
FormatFloat(''0'', quantidade) + '' - '' +
FormatFloat(''R$ 0.00'', valor) + '' - '' +
FormatFloat(''R$ 0.00'', valorTotal)
);
end;
end;
end;
terminalLimparVariaveis(xterminal);
estado := ESTADOINICIAL;
end;
ESTADOFINAL:
begin
if terminalTeclaTratar(xterminal) then
begin
terminalLimparVariaveis(xterminal);
estado := ESTADOINICIAL;
end;
end;
end;
end;
Fabio 2013
Curtidas 0