
FABIO-2012
Membros-
Total de itens
8 -
Registro em
-
Última visita
Sobre FABIO-2012

FABIO-2012's Achievements
0
Reputação
-
Obrigado amigo, mas você poderia pelo menos me mostrar em meu código como você faria? Já seria assim de muita ajuda ele esta funcionando mas eu queria apenas entyender aonde colocaria os campos porque qualquer erro recorrente de não ter o microterminal eu conseguiria resolver aqui, meu problema é não conseguir c compreender o código em um todo, se puder fazer isso será muito bom
-
Boa tarde amigos! Estou precisando editar o código abaixo para que o mesmo funcione com banco de dados, mas como sou novo em delphi estou quebrando a cabeça sem saber como fazer isso, precisaria que algum coega do forum me desse umas dicxas de como fazer para implementar este código com BD Basicamente ele manda informações para um microterminal, eu consegui fazer ele enviar informações e recebe-las em um memo ele pesquisa produto e usuário em DOIS arquivos texto respectivamente: PRODUTO.TXT VENDA.TXT No caso eu deveria fazer com que ele me funcionasse para comanda eletrônica em PADARIA se algum amiogo já fez algo assim ou ao menos saiba implementar me ajude por gentileza Copiei abaixo a unit do exemplo que vêm junto com o microterminal: PS: A comunicação com o terminal esta funcionando ok unit UTerminal; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, ScktComp, StdCtrls, ActnList, Buttons, ImgList, jpeg; type PVendaItem = ^TVendaItem; TVendaItem = record idProduto: Integer; quantidade: Real; descricao: string[255]; balancaRetorno: string[255]; valor: Real; valorTotal: Real; pesar: Boolean; end; // PONTEIRO PARA CONTROLE E AÇÕES DOS TERMINAIS PTerminal = ^TTerminal; TTerminal = record IP: string; // ARMAZENAR IP DO TERMINAL tecla: string; // TECLA DIGITADA teclado: string; // BUFFER DO TECLADO delai: Integer; // CONTADOR DO DELAY DO TERMINAL estado: Integer; // PONTO DE EXECUÇÃO DO PROGRAMA estadoProximo: Integer; //USADO QUANDO TIVER DELAI tecladoAguardar: Boolean; // ESPERAR DIGITAÇÃO texto: string; // TEXTO DE ENTRADA textoPos: Integer; // POSIÇÃO DENTRO TEXTO QUE SERÁ RECEBIDO imprimir: Boolean; socket: TCustomWinSocket; // OPERADOR operadorID: Integer; operadorNome: string; // VENDA itens: TList; // LISTA DE ITENS COMPRADOS ValorTotal: Real; // VALOR TOTAL DA COMPRA end; TFTerminal = class(TForm) Panel1: TPanel; Bevel1: TBevel; servidor: TServerSocket; Panel2: TPanel; Splitter1: TSplitter; Bevel2: TBevel; edPorta: TEdit; Label1: TLabel; ActionList1: TActionList; actConecta: TAction; Timer1: TTimer; Memo1: TMemo; rgSerial: TRadioGroup; Label2: TLabel; Label3: TLabel; Panel3: TPanel; lstConexao: TListBox; Label4: TLabel; ImageList1: TImageList; actSair: TAction; SpeedButton2: TSpeedButton; Panel4: TPanel; Image1: TImage; Bevel3: TBevel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure servidorClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure servidorClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure servidorClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Timer1Timer(Sender: TObject); procedure actSairExecute(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } // LISTA DE POINTEIROS DE TERMINAIS terminais: TList; // PROCEDURES PARA MANIPULACAO DE LISTA PONTEIROS procedure listaLimpar(xlista: TList); // PROCEDURES E FUNÇÕES PARA CONTROLE DE TERMINAIS function terminalCriar(xip: string): Pointer; procedure terminalDestruir(xterminal: Pointer); function terminalLocalizar(xip: string): Pointer; // MANIPULADORES DE SOCKET procedure servidorDesconectar; procedure servidorConectar; // MANIPULADORES DO TERMINAL // TECLADO function terminalTeclaTratar(xterminal: Pointer): Boolean; // TRATAR TECLA PRECIONADA NO TERMINAL procedure terminalTeclaPontoAjustar(xterminal: Pointer); // TESTA SE A TECLA PONTO FOI PRECIONADA procedure terminalGet(xterminal: Pointer; str: string); // DISPLAY DO TERMINAL procedure terminalDisplayPosicionar(xterminal: Pointer; xlinha, xcoluna: Byte); procedure terminalDisplayEnviar(xterminal: Pointer; xtexto: string); procedure terminalDisplayLimpar(xterminal: Pointer); // BALANCA procedure terminalBalanca(xterminal: Pointer); // IMPRIMIR procedure terminalImprimir(xterminal: Pointer; dados: string); // VARIAVEIS procedure terminalLimparVariaveis(xterminal: Pointer); // TRATAR ESTADO DO TERMINAL procedure terminalEstado(xterminal: Pointer); // PROCURAR USUARIO function usuarioGet(xidUsuario: Integer; var xnome: string): Boolean; // PROCURAR PRODUTO function produtoGet(xidProduto: Integer; var xdescricao: string; var xvalor: Real; var xpeso: Boolean): Boolean; public { Public declarations } end; const // ESTADOS DO TERMINAL ESTADOOPERADOR = 10; ESTADOPRODUTO = 20; ESTADOFECHARVENDA = 90; ESTADOESPERAR = -1; ESTADOINICIAL = ESTADOOPERADOR; ESTADOFINAL = 9999; // NOMES DOS ARQUIVOS ARQUIVOUSUARIO = 'Usuario.txt'; ARQUIVOPRODUTO = 'Produto.txt'; // LAYOUT ARQUIVO USUARIO USUARIOCODFIM = 5; USUARIONOME = USUARIOCODFIM + 1; // LAYOUT O ARQUIVO DE PRODUTOS PRODUTOCODFIM = 5; PRODUTODESCRICAOINICIO = 7; PRODUTODESCRICAOQTD = 20; PRODUTOVALOR = 28; PRODUTOVALORQTD = 8; PRODUTOPESO = 37; PRODUTOPESOTAMANHO = 1; var FTerminal: TFTerminal; implementation {$R *.dfm} { TFTerminal } function TFTerminal.terminalCriar(xip: string): Pointer; var wterminal: PTerminal; begin Result := terminalLocalizar(xip); if Result = nil then begin New(wterminal); wterminal.IP := xip; wterminal.ValorTotal := 0; wterminal.itens := TList.Create; terminais.Add(wterminal); Result := wterminal; end; end; procedure TFTerminal.terminalDestruir(xterminal: Pointer); begin ; // DESTRUIR O TERMINAL QUANDO O MESMO FOR DESCONECTADO if xterminal = nil then Exit; PTerminal(xterminal)^.socket := nil; ; // LIMPAR LISTA DE VENDAS listaLimpar(PTerminal(xterminal)^.itens); ; // DESTRUIR LISTA DE VENDAS FreeAndNil(PTerminal(xterminal)^.itens); ; // REMOVER TERMINAL DA LISTA DE TERMINAIS terminais.Delete(terminais.IndexOf(xterminal)); ; // LIMPAR TERMIANL DA MEMORIA Dispose(xterminal); end; function TFTerminal.terminalLocalizar(xip: string): Pointer; var i: Integer; begin Result := nil; for i := 0 to terminais.Count - 1 do begin if PTerminal(terminais.Items[i])^.IP = xip then Result := terminais.Items[i]; end; end; procedure TFTerminal.FormCreate(Sender: TObject); begin ; // CRIAR LISTA DE TERMINAIS terminais := TList.Create; end; procedure TFTerminal.listaLimpar(xlista: TList); var i: Integer; begin if xlista = nil then Exit; for i := xlista.Count - 1 downto 0 do begin if xlista.Items[i] <> nil then Dispose(xlista.Items[i]); end; xlista.Clear; end; procedure TFTerminal.FormDestroy(Sender: TObject); begin ; // DESETRUIR LISTA DE TERMINAIS servidorDesconectar; listaLimpar(terminais); FreeAndNil(terminais); end; procedure TFTerminal.servidorClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin lstConexao.Items.Add(Socket.RemoteAddress); Socket.Data := terminalCriar(Socket.RemoteAddress); PTerminal(Socket.Data)^.socket := Socket; terminalLimparVariaveis(Socket.Data); terminalEstado(Socket.Data); end; procedure TFTerminal.servidorClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var widList: Integer; begin terminalDestruir(Socket.Data); widList := lstConexao.Items.IndexOf(Socket.RemoteAddress); if widList >= 0 then lstConexao.Items.Delete(widList); end; procedure TFTerminal.servidorDesconectar; var i: Integer; begin with servidor do begin for i := Socket.ActiveConnections - 1 downto 0 do begin with servidor.Socket.Connections[i] do begin terminalDisplayLimpar(Data); terminalDisplayEnviar(Data, 'SERVIDOR DESCONECTADO'); terminalDestruir(Data); end; end; lstConexao.Items.Clear; actConecta.ImageIndex := 0; actConecta.Hint := 'Conectar'; Close; end; end; procedure TFTerminal.servidorConectar; begin with servidor do begin Port := StrToInt(edPorta.Text); actConecta.ImageIndex := 1; actConecta.Hint := 'Desconectar'; Open; end; end; procedure TFTerminal.terminalDisplayEnviar(xterminal: Pointer; xtexto: string); begin ; // ENVIAR TEXTO PARA O TERMINAL with PTerminal(xterminal)^ do begin socket.SendText(xtexto); end; end; procedure TFTerminal.terminalDisplayPosicionar(xterminal: Pointer; xlinha, xcoluna: Byte); var StrTemp: string; begin StrTemp := Chr(27) + '[' + FormatFloat('00', xlinha) + ';' + FormatFloat('00', xcoluna) + 'H'; with PTerminal(xterminal)^ do begin Socket.SendText(StrTemp); end; end; procedure TFTerminal.terminalDisplayLimpar(xterminal: Pointer); begin with PTerminal(xterminal)^ do begin socket.SendText(#27'[H'#27'[J'); terminalDisplayPosicionar(xterminal, 1, 1); end; end; function TFTerminal.terminalTeclaTratar(xterminal: Pointer): Boolean; // TRATAR TECLA PRECIONADA NO TERMINAL var gpict: string; tamanho: Integer; begin with PTerminal(xterminal)^ do begin if tecla = Chr(0) then begin Result := False; Exit; end; ; // TECLA DEL PRECIONADA if tecla = Chr(27) then begin if textoPos = 1 then begin teclado := Chr(27); tecladoAguardar := False; Result := True; end else begin while textoPos > 1 do begin tecla := Chr(8) + Chr(16) + Chr(8); // BACKSPACE terminalDisplayEnviar(xterminal, tecla); textoPos := textoPos - 1; end; teclado := ''; Result := False; end; Exit; end; if tecla = Chr(8) then // BACKSPACE begin if textoPos > 1 then begin gpict := Copy(texto, textoPos - 1, 1); if (gpict = '/') or (gpict = '.') then begin terminalDisplayEnviar(xterminal, Tecla); textoPos := textoPos - 1; end; textoPos := textoPos - 1; teclado := copy(teclado, 1, textoPos - 1); tecla := tecla + ' ' + Chr(8); terminalDisplayEnviar(xterminal, Tecla); end; Result := False; Exit; end; if tecla = Chr(13) then // ENTER begin tecladoAguardar := false; Result := true; Exit; end; gpict := copy(texto, textoPos, 1); ; // PEDIDO DE PESO if gpict = #3 then begin ; // todo peso foi recebido if Tecla = #3 then begin tecladoAguardar := False; Result := True; Exit; end else begin ; // PROTOCOLO DA BALANÇA <STX> PPPPP <ETX> if (tecla <> #2) and (tecla <> #3) then teclado := teclado + tecla; end; end; if gpict = 'X' then // QUALQUER TECLA begin teclado := teclado + tecla; textoPos := textoPos + 1; terminalDisplayEnviar(xterminal, Tecla); end else if gpict = '9' then // SOMENTE ACEITAR NUMEROS E "." OU "/" OU "-" begin if ((Tecla[1] in ['0'..'9'])) or (Tecla = '.') or (Tecla = '/') or (Tecla = '-') then begin if Tecla = '.' then begin terminalTeclaPontoAjustar(xterminal); end else begin teclado := teclado + tecla; textoPos := textoPos + 1; terminalDisplayEnviar(xterminal, tecla); end; end; end else begin if gpict = 'A' then // Somente teclas alfabéticas begin if tecla[1] in ['A'..'Z'] then begin teclado := teclado + tecla; textoPos := textopos + 1; terminalDisplayEnviar(xterminal, Tecla); end; end else if gpict = '*' then // Digitação de senha begin if tecla[1] in ['0'..'9'] then // caso apenas número begin teclado := teclado + tecla; textoPos := textoPos + 1; tecla := '*'; terminalDisplayEnviar(xterminal, tecla); end; end else begin Result := False; Exit; end; end; tamanho := Length(texto) + 1; gpict := copy(texto, textoPos, 1); if tamanho = textoPos then begin Result := true; tecladoAguardar := False; end else begin if gpict = '/' then begin tecla := '/'; textoPos := textoPos + 1; terminalDisplayEnviar(xterminal, Tecla); Result := False; end else if gpict = '.' then begin tecla := '.'; textoPos := textoPos + 1; terminalDisplayEnviar(xterminal, Tecla); Result := False; end else begin Result := False; end; end; end; end; procedure TFTerminal.terminalTeclaPontoAjustar(xterminal: Pointer); // TESTA SE A TECLA PONTO FOI PRECIONADA var PosPonto: integer; StrDisp: string; spPic: integer; begin with PTerminal(xterminal)^ do begin PosPonto := 1; while (copy(texto, PosPonto, 1) <> '.') do begin PosPonto := PosPonto + 1; if PosPonto = length(texto) then begin Exit; end; end; if PosPonto = length(texto) then begin exit; end; spPic := PosPonto - 1 - length(texto); StrDisp := ''; while spPic > 0 do begin StrDisp := StrDisp + ' '; spPic := spPic - 1; end; strdisp := strdisp + teclado; sppic := textoPos; while sppic > 1 do begin terminalDisplayEnviar(xterminal, chr(8)); sppic := sppic - 1; end; textoPos := posponto; terminalDisplayEnviar(xterminal, strdisp); teclado := strdisp; end; end; procedure TFTerminal.terminalLimparVariaveis(xterminal: Pointer); begin with PTerminal(xterminal)^ do begin textoPos := 0; estado := ESTADOINICIAL; estadoProximo := -2; tecladoAguardar := False; delai := 0; operadorID := 0; operadorNome := ''; ValorTotal := 0; listaLimpar(itens); end; end; procedure TFTerminal.terminalGet(xterminal: Pointer; str: string); begin with PTerminal(xterminal)^ do begin if not tecladoAguardar then begin tecladoAguardar := true; textoPos := 1; texto := str; teclado := ''; end; end; end; procedure TFTerminal.terminalBalanca(xterminal: Pointer); begin with PTerminal(xterminal)^ do begin socket.SendText(#27 + '[?24h' + #27 + '[5i' + #5 + #27 + '[4i'); //Serial 1 para MT TCP // socket.SendText(Chr(27) + '[?24r' + Chr(27) + '[5i' + Chr(5) + Chr(27) + '[4i');// serial 0 para MT TCP end; end; procedure TFTerminal.terminalImprimir(xterminal: Pointer; dados: string); begin with PTerminal(xterminal)^ do begin if not imprimir then begin Memo1.Lines.Add(dados); end else begin case rgSerial.ItemIndex of 0: begin socket.SendText(#27 + '[?24h' + #27 + '[5i' + Dados + #27 + '[4i'); end; 1: begin socket.SendText(#27 + '[?24r' + #27 + '[5i' + Dados + #27 + '[4i'); end; 2: begin socket.SendText(#27 + '[?24l' + #27 + '[5i' + Dados + #27 + '[4i'); end; end; end; end; end; procedure TFTerminal.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; end; procedure TFTerminal.servidorClientRead(Sender: TObject; Socket: TCustomWinSocket); var StrTemp: string; wterminal: Pointer; i: Integer; begin StrTemp := UpperCase(Socket.ReceiveText); wterminal := Socket.Data; if wterminal <> nil then begin with PTerminal(wterminal)^ do begin for i := 1 to Length(StrTemp) do begin tecla := copy(StrTemp, I, 1); terminalEstado(wterminal); end; tecla := Chr(0); // TECLA NULA terminalEstado(wterminal); // CHAMAR TRATAMENTO DE TECLAS PARA ATUALIZÇÃO DE TELA DO TERMINAL end; end; end; function TFTerminal.usuarioGet(xidUsuario: Integer; var xnome: string): Boolean; var widusuario: string; warquivo: TStringList; i: Integer; begin try widusuario := FormatFloat('00000', xidUsuario); warquivo := TStringList.Create; warquivo.LoadFromFile(ARQUIVOUSUARIO); for i := 0 to warquivo.Count - 1 do begin Result := Pos(widusuario, warquivo[i]) > 0; if Result then begin xnome := Trim(Copy(warquivo[i], USUARIONOME, Length(warquivo[i]) - USUARIOCODFIM)); Break; end; end; finally FreeAndNil(warquivo); end; end; function TFTerminal.produtoGet(xidProduto: Integer; var xdescricao: string; var xvalor: Real; var xpeso: Boolean): Boolean; var widProduto, wvalor: string; wvalorReal: Real; warquivo: TStringList; i, cod: Integer; begin try widProduto := FormatFloat('00000', xidProduto); warquivo := TStringList.Create; warquivo.LoadFromFile(ARQUIVOPRODUTO); for i := 0 to warquivo.Count - 1 do begin Result := Pos(widProduto, warquivo[i]) > 0; if Result then begin xdescricao := Trim(Copy(warquivo[i], PRODUTODESCRICAOINICIO, PRODUTODESCRICAOQTD)); wvalor := Trim(Copy(warquivo[i], PRODUTOVALOR, PRODUTOVALORQTD)); Val(Trim(wvalor), wvalorReal, cod); xvalor := wvalorReal; xpeso := Trim(Copy(warquivo[i], PRODUTOPESO, Length(warquivo[i]) - PRODUTOPESOTAMANHO)) = '1'; Break; end; end; finally FreeAndNil(warquivo); end; end; procedure TFTerminal.Timer1Timer(Sender: TObject); var i: Integer; begin for I := 0 to Servidor.Socket.ActiveConnections - 1 do begin if Servidor.Socket.Connections[i].Data <> nil then begin with PTerminal(Servidor.Socket.Connections[i].Data)^ do begin if delai > 0 then begin delai := delai - 1; if delai <= 0 then begin terminalEstado(Servidor.Socket.Connections[i].Data); end; end; end; end; end; end; procedure TFTerminal.actSairExecute(Sender: TObject); begin Application.Terminate; end; procedure TFTerminal.FormShow(Sender: TObject); begin servidor.Port:=1001; servidor.Active:=true; end; end.
-
Oi amigo, Boa tarde! Eu vi seu post e lhe aconselho a não usar quickreport faça diferente mende diretamente para impressora assim a impressão será mais rapida e funcionará em todas as impressoras. Copie o código abaixo em um button e teste ai é só inserir seu bd e ir mudando ao seu gosto ficará bem melhor var Cup: TextFile; begin AssignFile(Cup,form26.DBEDIT5.Text); <====// Aqui eu coloquei um DBEDIT porque linkei à um campo que criei em meu bd chamado PORTA ai se a impressora for COM1 COM2 OU LPT1 USB ETC... EU SÓ SALVO NO CAMPO e não preciso ficar editando diretamente no código toda vez que pegar uma impressora diferente // Rewrite(Cup); Writeln(Cup,''); Writeln(Cup, datamodule1.Qregfantasia.Text); Writeln(Cup, 'CNPJ'+ datamodule1.QregCNPJ.Text); Writeln(Cup,' '+'Caixa'+' '+datamodule1.QLoginusuario.Text); Writeln(Cup,' '+'Tel:'+' '+datamodule1.Qregtelefone.Text+' '+'Fax:'+' '+datamodule1.QregTel1.Text); Writeln(Cup,' '+'End:'+' '+ datamodule1.Qregendereo.Text+' ' +'N,'+' '+ datamodule1.Qregnumero.Text); Writeln(Cup,' '+'Cupom n,'+' '+datamodule1.QDatacod_venda.Text); Writeln(Cup,' '+'Cliente:'+' '+datamodule1.QDataCliente.Text); Writeln(Cup,' '+'CNPJ/CPF:'+' '+datamodule1.QDatacpfcnpj.Text); Writeln(Cup,' '+ 'Data.: ' + DateToStr(date) + ' '+'Hora.: ' + TimeToStr(Time)); writeln(cup,' '+' '+dbedit8.Text); Writeln(Cup,'----------------------------------------'); Writeln(Cup, 'Codigo'); Writeln(Cup, 'Produto Quant. Pr. Unit. Pr. Total'); Writeln(Cup,'----------------------------------------'); Writeln(Cup,''); datamodule1.QVenda.First; While not datamodule1.QVenda.Eof do begin Writeln(Cup, datamodule1.QVendacodigo_barras.Text); Writeln(Cup, datamodule1.QVendadescricao.Text); Writeln(Cup, ' '+ datamodule1.QVendaquant.Text +'X '+ datamodule1.QVendavalorUnit.Text + ' '+ datamodule1.QVendavalorTotal.Text); datamodule1.qvenda.Next; end; Writeln(Cup,'---------------------------------------'); Writeln(Cup,' '+'TOTAL:'+' '+'R$:'+' '+datamodule1.QSumgeralgrid.Text); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); Writeln(Cup,''); CloseFile(Cup); end;
-
Nossa abandonaram o forum?
-
Boa tarde, amigos! Possuo um adoquery com a seguinte SQL: select venda.grupo, venda.datav,venda.qtd1,venda.valorUnit,venda.descricao, sum(venda.ValorTotal) as total, sum(venda.ValorTotal / venda.valorUnit) as qtd from venda where datav = :datav group by venda.grupo,venda.qtd1,venda.datav, venda.descricao,venda.valorUnit,venda.ValorTotal; Ela me mostra em um DBGRID todos os produtos vendidos no dia totalizados e com quatidade agrupados por descrição Mas agora preciso fazer uma pesquisa através de um dblookcombobox aonde ao clicar nela seleciono o grupo para assim mostrar a mesma pesquisa só que desta vez apenas um grupo por vez, só que quando faço dá o seguinte erro "total e quantidade not exsits value default para este parameter" No onclick do dblookcombobox fiz assim: with Q1V do begin Q1V.SQL.Clear; Q1V.SQL.Add('select datav,qtd,descricao,grupo,valorunit,total from venda Where grupo Like '+''''+Trim(DBLookupComboBox1.Text)+'%'+''''+''); Q1V.SQL.Add('Order By grupo'); Q1V.Open; end; end; Algém sabe o que pode ser??
-
valor do maskedit sendo gravado no campo data
pergunta respondeu ao FABIO-2012 de FABIO-2012 em Delphi, Kylix
Beleza entendi só não sei ao certo como poderia fazer istO? -
valor do maskedit sendo gravado no campo data
pergunta respondeu ao FABIO-2012 de FABIO-2012 em Delphi, Kylix
olá bom dia! Pois bem, o campo é Data/Hora que é o que o access têm abaixo segue todfo o código que fiz: procedure Tpesq10.JvXPButton1Click(Sender: TObject); begin if strtoDate(maskedit1.text) > strtodate(maskedit2.Text) then begin Showmessage('A data inicial não deve ser'+#13 +'maior que a final!'); maskedit1.setfocus; exit; end; datamodule1.Qpaga.Close; datamodule1.Qpaga.SQL.Clear; datamodule1.Qpaga.LockType:=ltReadOnly; datamodule1.Qpaga.SQL.Add('select * from formPagamento where data_venda Between :inicio and :fim'); datamodule1.Qpaga.Parameters.Parambyname('inicio').Value :=MaskEdit1.Text; datamodule1.Qpaga.Parameters.Parambyname('fim').Value :=MaskEdit2.Text; datamodule1.Qpaga.LockType:=ltOptimistic; datamodule1.Qpaga.Open; // abaixo estes bot~eos calculam o total dos dbgrids e jogam em um edit form19.Button2.Click; form19.Button6.Click; form19.Button3.Click; form19.Button4.Click; form19.Button7.Click; form19.Button8.Click; Form19.Button1.Visible:=false; form19.Panel1.Visible:=true; form19.Button5.Visible:=true; form19.GroupBox1.Visible:=true; form19.GroupBox2.Visible:=true; pesq10.Close; form19.Button7.Click; end; abaixo o código dos botões: var dinh : Real; begin dinh :=0; datamodule1.Qpaga.First; while not datamodule1.Qpaga.Eof do Begin datamodule1.Qpaga.Edit; dinh := dinh + datamodule1.Qpaga.fieldByName('totaldinhe').AsCurrency; datamodule1.Qpaga.Next; Edit2.Text :=FormatFloat('#,00.00',dinh); end; end; procedure TForm19.Button3Click(Sender: TObject); var dinh : Real; begin dinh :=0; datamodule1.Qpaga.First; while not datamodule1.Qpaga.Eof do Begin dinh := dinh + datamodule1.Qpaga.fieldByName('DebitoForm').AsCurrency; datamodule1.Qpaga.Next; Edit3.Text :=FormatFloat('#,00.00',dinh); end; end; procedure TForm19.Button4Click(Sender: TObject); var dinh : Real; begin dinh :=0; datamodule1.Qpaga.First; while not datamodule1.Qpaga.Eof do Begin dinh := dinh + datamodule1.Qpaga.fieldByName('CreditoForm').AsCurrency; datamodule1.Qpaga.Next; Edit4.Text :=FormatFloat('#,00.00',dinh); end; end; procedure TForm19.Button6Click(Sender: TObject); var dinh : Real; begin dinh :=0; datamodule1.Qpaga.First; while not datamodule1.Qpaga.Eof do Begin dinh := dinh + datamodule1.Qpaga.fieldByName('ChequeForm').AsCurrency; datamodule1.Qpaga.Next; Edit5.Text :=FormatFloat('#,00.00',dinh); end; end; procedure TForm19.Button7Click(Sender: TObject); var dinh : Real; begin dinh :=0; datamodule1.Qpaga.First; while not datamodule1.Qpaga.Eof do Begin dinh := dinh + datamodule1.Qpaga.fieldByName('totaldinhe').AsCurrency; dinh := dinh + datamodule1.Qpaga.fieldByName('creditoform').AsCurrency; dinh := dinh + datamodule1.Qpaga.fieldByName('chequeform').AsCurrency; dinh := dinh + datamodule1.Qpaga.fieldByName('debitoform').AsCurrency; datamodule1.Qpaga.Next; Edit6.Text :=FormatFloat('#,00.00',dinh); end; end; -
Bom dia, amigos Feliz 2012 Tenho um form aonde pesquiso entre datas e ocorre que descobri que se digito uma data no maskedit esta data acaba sendo grabada no campo data, tentei usar o locktype em readOnly, mas mesmo assim nada, sse alguém puder me ajudar ficarei agradecido. O bd é access begin if strtoDate(maskedit1.text) > strtodate(maskedit2.Text) then begin Showmessage('A data inicial não deve ser'+#13 +'maior que a final! ' ); maskedit1.setfocus; exit; end; datamodule1.Qpaga.Close; datamodule1.Qpaga.SQL.Clear; datamodule1.Qpaga.LockType:=ltReadOnly; datamodule1.Qpaga.SQL.Add('select * from formPagamento where data_venda Between :inicio and :fim'); datamodule1.Qpaga.Parameters.Parambyname('inicio').Value :=MaskEdit1.Text; datamodule1.Qpaga.Parameters.Parambyname('fim').Value :=MaskEdit2.Text; datamodule1.Qpaga.LockType:=ltOptimistic; datamodule1.Qpaga.Open;