Ir para conteúdo
  • Cadastre-se

Élviro Cavalcanti

Membros
  • Total de ítens

    187
  • Registro em

  • Última visita

Tudo que Élviro Cavalcanti postou

  1. Bom dia pessoal, estava revendo meu código de inclusão de item no detvenda, atualmente meu banco conta com mais de 1.000.000 de registros nessa tabela, estou usando o Firebird com o IBX. Estou vendo uma forma de melhorar e otimizar o tempo de inclusão desse registro, caso tenham alguma ideia agradeço a ajuda! Segue abaixo o código IBQueryDetVenda.Close; IBQueryDetVenda.sql.Clear; IBQueryDetVenda.SQL.Add('insert into DETVENDA'); IBQueryDetVenda.SQL.Add('(CODVENDA, DATA, HORA, CODPRODUTO, DESCRICAO, UN, NCM, CFOP,'); IBQueryDetVenda.SQL.Add('QUANTIDADE, VALORUNITARIO, SUBTOTAL, DESCONTO, VLRDESCONTO,'); IBQueryDetVenda.SQL.Add('VALORTOTAL, PESOLIQ, PESOBRUTO, ALIQUOTA, VALORICMS, USUARIO,'); IBQueryDetVenda.SQL.Add('DATAMODIFICACAO, CODLOTE, NLOTE, DTVENCIMENTOLOTE, DTFABBRICACAOLOTE, COMISSAONORMAL, VLRCOMISSAONORMAL,'); IBQueryDetVenda.SQL.Add('COMISSAODIFERENCIADA, VLRCOMISSAODIFERENCIADA, CODVENDEDOR, VENDEDOR,'); IBQueryDetVenda.SQL.Add('COMISSAO, REF, TAMANHO, CODCLI, CLIENTE, CODGRUPO, GRUPO, CODSUBGRUPO,'); IBQueryDetVenda.SQL.Add('SUBGRUPO, CODFORNECEDOR, FORNECEDOR, LUCRO, VLRCUSTOINCIAL, VLRCUSTO,'); IBQueryDetVenda.SQL.Add('VLRTOTALCUSTO, DIFERENCACUSTO, CODCOLABORADOR, CODBARRAS, BASECALCULOICMS,'); IBQueryDetVenda.SQL.Add('LABORATORIO, TOTALPESOLIQUIDO, TOTALPESOBRUTO, VOLUMES, QUANTVOLUMES,'); IBQueryDetVenda.SQL.Add('ALIQ_NAC, VLRALIQ_NAC, CODCOBRADOR, COBRADOR, CODMUNICIPIO, CEST, PROMOCAO, CSTNOTAFISCAL, PIS, COFINS, CODANP, CSOSN, VLRCUSTOMEDIO,'); IBQueryDetVenda.SQL.Add('CODORIGEMMERCADORIA, CST, CODCHAVETAMANHOSDETVENDA, FAMILIA, CODGRADE, DESCRICAOGRADECOR)'); IBQueryDetVenda.SQL.Add('values'); IBQueryDetVenda.SQL.Add('(:QCODVENDA, :QDATA, :QHORA, :QCODPRODUTO, :QDESCRICAO, :QUN, :QNCM, :QCFOP,'); IBQueryDetVenda.SQL.Add(':QQUANTIDADE, :QVALORUNITARIO, :QSUBTOTAL, :QDESCONTO, :QVLRDESCONTO,'); IBQueryDetVenda.SQL.Add(':QVALORTOTAL, :QPESOLIQ, :QPESOBRUTO, :QALIQUOTA, :QVALORICMS, :QUSUARIO,'); IBQueryDetVenda.SQL.Add(':QDATAMODIFICACAO, :QCODLOTE, :QNLOTE, :QDTVENCIMENTOLOTE, :QDTFABBRICACAOLOTE, :QCOMISSAONORMAL, :QVLRCOMISSAONORMAL,'); IBQueryDetVenda.SQL.Add(':QCOMISSAODIFERENCIADA, :QVLRCOMISSAODIFERENCIADA, :QCODVENDEDOR, :QVENDEDOR,'); IBQueryDetVenda.SQL.Add(':QCOMISSAO, :QREF, :QTAMANHO, :QCODCLI, :QCLIENTE, :QCODGRUPO, :QGRUPO, :QCODSUBGRUPO,'); IBQueryDetVenda.SQL.Add(':QSUBGRUPO, :QCODFORNECEDOR, :QFORNECEDOR, :QLUCRO, :QVLRCUSTOINCIAL, :QVLRCUSTO,'); IBQueryDetVenda.SQL.Add(':QVLRTOTALCUSTO, :QDIFERENCACUSTO, :QCODCOLABORADOR, :QCODBARRAS, :QBASECALCULOICMS,'); IBQueryDetVenda.SQL.Add(':QLABORATORIO, :QTOTALPESOLIQUIDO, :QTOTALPESOBRUTO, :QVOLUMES, :QQUANTVOLUMES,'); IBQueryDetVenda.SQL.Add(':QALIQ_NAC, :QVLRALIQ_NAC, :QCODCOBRADOR, :QCOBRADOR, :QCODMUNICIPIO, :QCEST, :QPROMOCAO, :QCSTNOTAFISCAL, :QPIS, :QCOFINS, :QCODANP, :QCSOSN, :QVLRCUSTOMEDIO,'); IBQueryDetVenda.SQL.Add(':QCODORIGEMMERCADORIA, :QCST, :QCODCHAVETAMANHOSDETVENDA, :QFAMILIA, :QCODGRADE, :QDESCRICAOGRADECOR)'); IBQueryDetVenda.ParamByName('QCODVENDA').AsInteger := DM.IBVendaCODIGO.AsInteger; IBQueryDetVenda.ParamByName('QDATA').AsDate := DM.IBVendaDATA.AsDateTime; IBQueryDetVenda.ParamByName('QHORA').AsString := TimeToStr(now); IBQueryDetVenda.ParamByName('QCODPRODUTO').AsInteger := DM.IBEstoqueCODIGO.Value; IBQueryDetVenda.ParamByName('QDESCRICAO').AsString := VDescricao; IBQueryDetVenda.ParamByName('QUN').AsString := DM.IBEstoqueUNIDADE.AsString; IBQueryDetVenda.ParamByName('QNCM').AsString := DM.IBEstoqueCODIGONCM.AsString; IBQueryDetVenda.ParamByName('QCODVENDEDOR').AsCurrency := DM.IBVendaCODVENDEDOR.AsInteger; IBQueryDetVenda.ParamByName('QVENDEDOR').AsString := DM.IBVendaVENDEDOR.AsString; IBQueryDetVenda.ParamByName('QCOMISSAO').AsCurrency := VComissaoVendedor; IBQueryDetVenda.ParamByName('QREF').AsString := DM.IBEstoqueREF.AsString; IBQueryDetVenda.ParamByName('QTAMANHO').AsString := DM.IBEstoqueTAMANHO.AsString; IBQueryDetVenda.ParamByName('QCODCLI').AsInteger := DM.IBVendaCODCLI.AsInteger; IBQueryDetVenda.ParamByName('QCLIENTE').AsString := DM.IBVendaCLIENTE.AsString; IBQueryDetVenda.ParamByName('QCODGRUPO').AsInteger := DM.IBEstoqueCODGRUPO.AsInteger; IBQueryDetVenda.ParamByName('QGRUPO').AsString := VGrupo; IBQueryDetVenda.ParamByName('QCODSUBGRUPO').AsInteger := DM.IBEstoqueCODSUBGRUPO.AsInteger; IBQueryDetVenda.ParamByName('QSUBGRUPO').AsString := DM.IBEstoqueSUBGRUPO.AsString; IBQueryDetVenda.ParamByName('QCODFORNECEDOR').AsInteger := DM.IBEstoqueCODFORNECEDOR.AsInteger; IBQueryDetVenda.ParamByName('QFORNECEDOR').AsString := DM.IBEstoqueFORNECEDOR.AsString; IBQueryDetVenda.ParamByName('QLUCRO').AsCurrency := CurrencyEdit3.Value - (CurrencyEdit4.Value * DM.IBEstoqueVLRCUSTOFINAL.AsCurrency); IBQueryDetVenda.ParamByName('QVLRCUSTOINCIAL').AsCurrency := DM.IBEstoqueVLRCUSTO.AsCurrency; IBQueryDetVenda.ParamByName('QVLRCUSTO').AsCurrency := DM.IBEstoqueVLRCUSTOFINAL.AsCurrency; IBQueryDetVenda.ParamByName('QVLRTOTALCUSTO').AsCurrency := DM.IBEstoqueVLRCUSTOFINAL.AsCurrency * CurrencyEdit4.Value; IBQueryDetVenda.ParamByName('QDIFERENCACUSTO').AsCurrency := (DM.IBEstoqueVLRCUSTOFINAL.AsCurrency * CurrencyEdit4.Value) - (DM.IBEstoqueVLRCUSTO.AsCurrency * CurrencyEdit4.Value); IBQueryDetVenda.ParamByName('QCODCOLABORADOR').AsInteger := DM.IBVendaCODPARCEIRO.AsInteger; IBQueryDetVenda.ParamByName('QCODBARRAS').AsString := DM.IBEstoqueCODBARRAS.AsString; IBQueryDetVenda.Prepare; IBQueryDetVenda.ExecSQL; //Insere os dados na tabela de venda //Somar os valores na tabela de venda try begin IBQuery1.DisableControls; IBQuery1.close; IBQuery1.SQL.Clear; IBQuery1.SQL.Add('SELECT sum(VLRTOTALCUSTO), Count(DESCRICAO), Sum(QUANTIDADE), Sum(VLRDESCONTO), Sum(TOTALPESOLIQUIDO), Sum(TOTALPESOBRUTO), Sum(VLRALIQ_NAC), Sum(VALORTOTAL), Sum(SUBTOTAL), Sum(VLRACRESCIMO) FROM DETVENDA'); IBQuery1.SQL.ADD('WHERE CODVENDA = ' + QuotedStr(edcodvenda.Text) + ''); IBQuery1.Prepare; IBQuery1.open; DM.IBVenda.Edit; DM.IBVendaSUBTOTALCUSTO.AsString := floattostr(IBQuery1.fields[0].asfloat); DM.IBVendaTOTALCUSTO.Text := floattostr(IBQuery1.fields[0].asfloat); DM.IBVendaITENS.AsString := floattostr(IBQuery1.fields[1].asfloat); DM.IBVendaVOLUMES.AsString := floattostr(IBQuery1.fields[2].asfloat); DM.IBVendaVLRDESCONTO.AsString := floattostr(IBQuery1.fields[3].asfloat); DM.IBVendaPESOLIQ.AsString := floattostr(IBQuery1.fields[4].asfloat); DM.IBVendaPESOBRUTO.AsString := floattostr(IBQuery1.fields[5].asfloat); DM.IBVendaVLRTOTALALIQ_NAC.AsString := floattostr(IBQuery1.fields[6].asfloat); DM.IBVendaVALORTOTAL.AsString := floattostr(IBQuery1.fields[7].asfloat); DM.IBVendaSUBTOTAL.AsString := floattostr(IBQuery1.fields[8].asfloat); DM.IBVendaVLRACRESCIMO.Text := floattostr(IBQuery1.fields[9].asfloat); DM.IBVendaSENHALIBERACAO.Clear; DM.IBVendaUSUARIOSENHALIBERACAO.Clear; DM.IBVendaVALORTOTAL.AsCurrency := (DM.IBVendaSUBTOTAL.AsCurrency - IBQuery1.fields[3].asfloat) + DM.IBVendaVLRACRESCIMO.AsCurrency; DM.ibvenda.Post; IBQuery1.EnableControls; DM.IBTransaction1.CommitRetaining; end; except begin ShowMessage('Não foi possível somar itens da venda!'); Close; end; end; //Somar os valores na tabela de venda
  2. Sempre esse código pra o PIX else if DM.IBRecebimentoVendaPDVCODFORMAPAGAMENTO.AsInteger = 17 then begin tPag := fpPagamentoInstantaneo; vPag := DM.IBRecebimentoVendaPDVVLRRECEBIDO.AsCurrency; end
  3. Segue a forma que faço pra pegar o XML original, essa rotina fica logo após a rotina de envio GerarNFCe(DM.IBVendaPDVNUMEROCUPOM.AsString); //Rotina para gerar o xml ACBrNFe1.Enviar (1,False,False,False); //Rotina para envio do arquivo para a sefaz //Rotina para copiar o xml original para a pasta de xml originais if not DirectoryExists(edtPathLogs.Text + '\XMLOriginal') then ForceDirectories(edtPathLogs.Text + '\XMLOriginal'); VsOrigem := edtPathLogs.Text + '\1-env-lot.xml'; if FileExists(edtPathLogs.Text + '\XMLOriginal\' + DM.IBVendaPDVNUMEROCUPOM.AsString + '.xml') then begin Application.MessageBox('Já existe um arquivo XML que foi gerado anteriormente na pasta \XMLOrigimal, verifique!', 'Controller', MB_OK + MB_ICONINFORMATION); end else begin if FileExists(edtPathLogs.Text + '\1-env-lot.xml') then Begin VsDestino := edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml'; CopyFile(Pchar(VsOrigem), PChar(VsDestino), False); if FileExists(edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml') then RenameFile(edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml', edtPathLogs.Text + '\XMLOriginal\' + DM.IBVendaPDVNUMEROCUPOM.AsString + '.xml'); End; end; //Rotina para copiar o xml original para a pasta de xml originais
  4. Bom dia, sempre consulto dessa forma FrmPrincipal.ACBrNFe1.NotasFiscais.Clear; FrmPrincipal.ACBrNFe1.Consultar(DM.IBVendaPDVCHAVENFCE.AsString, False); FrmPrincipal.ACBrNFe1.WebServices.Consulta.Executar; MemoResp.Lines.Text := FrmPrincipal.ACBrNFe1.WebServices.Consulta.RetWS; memoRespWS.Lines.Text := FrmPrincipal.ACBrNFe1.WebServices.Consulta.RetornoWS; ShowMessage(obterNroResultado(MemoResp.text, 'xMotivo','</xMotivo'));
  5. Você tentou carregar o retorno num campo memo pra saber o que está voltando como resposta? Dependendo, você pode localizar dentro do retorno esses dados
  6. Boa tarde, eu estava com um problema semelhante, conseguia gerar o XML com o campo de hora usando o now, mas quando usava a hora do meu sistema, sempre acusava que estava atrasado, continuei usando o now como parâmetro de hora para envio, só que pego o xml original (sem o protocolo de retorno)e coloco numa pasta renomeado com o número do cupom, dessa forma eu quando vou consultar e baixar o xml com o protocolo de autorização, eu apenas carrego no componente o xml que foi gerado originalmente, segue abaixo o que fiz, espero que ajude! Aqui eu gero o xml e envio para a sefaz GerarNFCe(DM.IBVendaPDVNUMEROCUPOM.AsString); ACBrNFe1.Enviar (1,False,False,False); //Rotina para copiar o xml original para a pasta de xml originais if not DirectoryExists(edtPathLogs.Text + '\XMLOriginal') then ForceDirectories(edtPathLogs.Text + '\XMLOriginal'); VsOrigem := edtPathLogs.Text + '\1-env-lot.xml'; if FileExists(edtPathLogs.Text + '\XMLOriginal\' + DM.IBVendaPDVNUMEROCUPOM.AsString + '.xml') then begin Application.MessageBox('Já existe um arquivo XML que foi gerado anteriormente na pasta \XMLOrigimal, verifique!', 'Controller', MB_OK + MB_ICONINFORMATION); end else begin if FileExists(edtPathLogs.Text + '\1-env-lot.xml') then Begin VsDestino := edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml'; CopyFile(Pchar(VsOrigem), PChar(VsDestino), False); if FileExists(edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml') then RenameFile(edtPathLogs.Text + '\XMLOriginal\1-env-lot.xml', edtPathLogs.Text + '\XMLOriginal\' + DM.IBVendaPDVNUMEROCUPOM.AsString + '.xml'); End; end; //Rotina para copiar o xml original para a pasta de xml originais e aqui é onde faço a consulta caso não tenha o xml na pasta ou por algum acaso o cliente não tenha mais esse xml //Consulta se o xml está na pasta if FileExists(DM.IBVendaPDVCAMINHOXML.AsString) then Begin Label16.Caption := 'Localizado aquivo XML na pasta '; FrmSituacaoNFCe.Refresh; Sleep(1000); MemoResp.Lines.LoadFromFile(DM.IBVendaPDVCAMINHOXML.AsString); ScrollBox3.Visible := true; DM.IBVendaPDV.Edit; DM.IBVendaPDVPROTOCOLONFCE.AsString := obterNroResultado(MemoResp.text, '<nProt','</nProt'); DM.IBVendaPDVENVIADO.AsString := 'S'; DM.IBVendaPDV.Post; DM.IBTransaction1.CommitRetaining; End else begin Application.MessageBox('XML da NFCe não localizada na pasta, o sistema vai gerar um novo arquivo XML!', 'Controller', MB_OK + MB_ICONINFORMATION); Label16.Caption := 'Aguarde, o sistema vai gerar o aquivo XML ...'; FrmSituacaoNFCe.Refresh; Sleep(1000); FrmPrincipal.ACBrNFe1.NotasFiscais.Clear; EdCodVendaEnvio.Text := DM.IBVendaPDVCODIGO.AsString; FrmPrincipal.ACBrNFe1.Consultar(DM.IBVendaPDVCHAVENFCE.AsString, False); FrmPrincipal.ACBrNFe1.WebServices.Consulta.Executar; MemoResp.Lines.Text := FrmPrincipal.ACBrNFe1.WebServices.Consulta.RetWS; memoRespWS.Lines.Text := FrmPrincipal.ACBrNFe1.WebServices.Consulta.RetornoWS; ShowMessage(obterNroResultado(MemoResp.text, 'xMotivo','</xMotivo')); Edit2.Text := obterNroResultado(MemoResp.text, 'xMotivo','</xMotivo'); if Edit2.Text = 'Autorizado o uso da NF-e' then begin Label16.Caption := 'Autorizado o uso da NF-e'; FrmSituacaoNFCe.Refresh; Sleep(500); //ShowMessage('Vai gerar a NFCe'); DM.IBVendaPDV.Edit; DM.IBVendaPDVPROTOCOLONFCE.AsString := obterNroResultado(MemoResp.text, '<nProt','</nProt'); DM.IBVendaPDVENVIADO.AsString := 'S'; DM.IBVendaPDV.Post; EdCodVendaEnvio.Text := DM.IBVendaPDVCODIGO.AsString; //GerarNFCe(DM.IBVendaPDVNUMEROCUPOM.AsString); FrmPrincipal.ACBrNFe1.NotasFiscais.LoadFromFile(FrmPrincipal.edtPathLogs.Text + '\XMLOriginal\' + DM.IBVendaPDVNUMEROCUPOM.AsString + '.xml'); FrmPrincipal.ACBrNFe1.Consultar(); end else begin Application.MessageBox('Não foi possível gerar o novo XML!', 'Controller', MB_OK + MB_ICONSTOP); end; Panel1.Visible := false; FrmSituacaoNFCe.Refresh; end;
  7. Quando tento enviar apenas com o caminho retrna o erro "Undefined service gds_db/tcp
  8. No caso, estou informando 192.168.1.58/3050:C:Fire\DADOS.FDB
  9. Boa tarde, estou tentando conectar o banco Firebird 2.5 com o componente UniConnection no APP usando Delphi, quando uso o MySQL ele funciona e conecta normal, mas usando o firebird ele retorna "connection rejected by remote interface" mesmo com a porta liberada, segue abaixo a forma que estou usando para conectar o banco (192.168.1.58/3050:C:Fire\DADOS.FDB), alguém já pegou esse problema? UniConnection1.Close(); UniConnection1.Database := EdBase.Text; UniConnection1.Port := 3050; UniConnection1.Username := 'sysdba'; UniConnection1.Password := 'masterkey'; UniConnection1.LoginPrompt := False; UniConnection1.ProviderName := 'InterBase'; UniConnection1.Connected := True;
  10. Pois é meu amigo, estava usando o do danfe da nfe, acabei de ajustar aqui, peço desculpas pela falta de atenção! Aqui resolvido agora, tudo correndo certo aqui, pode fechar a postagem!
  11. Bom dia, estou tentando imprimir a NFCe na bobina, mas sempre me retorna no papel A4 ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile('C:\Delphi 2010\NFCe ACBR\Arquivos NFCe\NFCe\202109\NFCe\26210905347988000183650010000054051000930194-nfce.xml',False); ACBrNFe1.Configuracoes.Geral.ModeloDF := moNFCe; ACBrNFe1.Configuracoes.Geral.VersaoDF := ve400; ACBrNFe1.NotasFiscais.Imprimir; Esse é como chamo a impressão, mas sempre retorna no formato A4, alguém sabe como posso converter e imprimir de forma na bobina?
  12. Entendi, vou pesquisar na internet sobre como usar sequence e generators, fico grato pela ajuda mais uma vez !
  13. Você tem algum exemplo de como usar? Sempre usei gerators.
  14. Boa tarde, estou migrando pra usar o componente Unidac no delphi 2010 e como sempre usei os gatilhos do firebird para gerar o código sequencial, vi que pra o Unidac tem a forma via SQL, o que acontece é que meu banco é grande e esse retorno demora um pouco, segue abaixo o código e caso alguém use de outra forma, agradeço a ajuda! DM.IBQVerifica.close; DM.IBQVerifica.SQL.Clear; DM.IBQVerifica.SQL.Add('select max(Vendas.Codigo) from Vendas'); DM.IBQVerifica.open; DM.IBVendaCODIGO.AsInteger := DM.IBQVerifica.Fields[0].AsInteger + 1;
  15. Isso mesmo meu amigo, basta pegar o CSC e emitir as 10 notas de teste
  16. Boa tarde, só os códigos CSC e pedir os protocolos de homologação e produção
  17. Para correção do erro Could not load SSL library ao enviar a NFe ou a NFCe, basta colocar esses dois arquivos nas pastas C:\Windows\System32 e C:\Windows\SysWOW64 caso exista na máquina. Segue abaixo o link para baixar os arquivos https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqa1B0ajYwd29ZTXZGUUVpbm82RVFxdkNIM2N4Z3xBQ3Jtc0trZ211UXVoOTFuZk45dGxjWHhYZ2o5RDk4U0RwS0hyRmVmZlVyN0M2X2RMS3pOZUg4WDFTRVFfUnRYVl9QTXJQZGFsWHNvcWZBcklpT2l1c0huUno2VS1MN1hNRDltV3VnRnA2NGxMNkxFR2d4dGI3UQ&q=http%3A%2F%2Ftecno.dev%2FDLL-fintech
  18. Sim, mas como o componente tem a cesso a Firebird e SQL Lite fiz esse questionamento sobre qual seria melhor pra uso nesse caso.
  19. Qual seria o melhor para trabalhar nesse caso, Unidac ou o Zeos?
  20. Fernando, eu uso uma rotina pra meu sistema, vou postar abaixo, pode ser util pra você Favor anexar arquivo e não colar trecho de códigos EDIT: Exemplo.txt
  21. Eu tive que usar o Delphi Delphi 10.4 pra poder fazer rodar, agora o app está normal
  22. entendi, estou no xe8 vou atualizar ele novamente e verificar se vai rodar, vou colocando aqui os procedimentos que poderá ajudar outros membros nessa questão, obrigado meu amigo!
  23. Estou usando a Android 10 (API 29), é a mesma que você utiliza?
  24. Juliomar, sempre que tento abrir no android 11 ele fecha o app, fui nas permissões no delphi e marquei como True as permissões, mas mesmo assim ele fecha.
  25. Eu acho que se fizer com variávem também daria certo var VValorTotal, VValorDividido, VValorResultado:Currency; begin VValorTotal := 50; VValorDividido := VValorTotal / 3; Edit1.Text := floattostr(VValorDividido); VValorResultado := VValorDividido * 3; ShowMessage(FormatFloat('0.00', VValorResultado));
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...