PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Ajuda na implementação deste código #460205

05/11/2013

0

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




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

Fabio 2013

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar