Ir para conteúdo
  • Cadastre-se

johnbh3

Membros
  • Total de ítens

    690
  • Registro em

  • Última visita

Tudo que johnbh3 postou

  1. No PostMan peguei o mesmo JSON gerado pelo delphi e enviou, so troquei claro o '#$D#$A' do JSON gerado pelo delphi Retornou normalmente status 200 { "seuNumero": "1383", "nossoNumero": "00845404898", "codigoBarras": "07791905600000010000001112050675100845404898", "linhaDigitavel": "07790001161205067510208454048987190560000001000" }
  2. Bom dia Ainda mechendo no componente do post Consegui avançar um pouco ! Consigui recuperar o boleto e gerar o PDF dele. Mas o endpoint de envio do boleto da erro - ao chamar a GerarBoleto Porem o envio do boleto retorna erro: HTTP/1.0 400 Bad Request {"status":400,"title":"Falha durante a execução da request","detail":"Verifique se os dados informados estão de acordo com a documentação disponibilizada e tente novamente","violacoes":[{"razao":"O valor requerido no Body não foi informado","propriedade":"body"}]} Código de retorno: 400 O json gerado fica assim '{'#$D#$A' "pagador":{'#$D#$A' "cnpjCpf":"01281218000124",'#$D#$A' "nome":"BIO MOVEIS E DECORACOES LTDA - ME",'#$D#$A' "email":"",'#$D#$A' "telefone":"",'#$D#$A' "cep":"09133000",'#$D#$A' "numero":"552",'#$D#$A' "complemento":"",'#$D#$A' "bairro":"VILA GUARARA",'#$D#$A' "cidade":"S�O PAULO",'#$D#$A' "uf":"SP",'#$D#$A' "endereco":"EST DO PEDROSO",'#$D#$A' "ddd":"",'#$D#$A' "tipoPessoa":"FISICA"'#$D#$A' },'#$D#$A' "dataEmissao":"2022-07-23",'#$D#$A' "seuNumero":"1377",'#$D#$A' "dataVencimento":"2022-07-19",'#$D#$A' "mensagem":{'#$D#$A' "linha1":"",'#$D#$A' "linha2":"",'#$D#$A' "linha3":"",'#$D#$A' "linha4":"",'#$D#$A' "linha5":""'#$D#$A' },'#$D#$A' "desconto1":{'#$D#$A' "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A' "taxa":0,'#$D#$A' "valor":0,'#$D#$A' "data":""'#$D#$A' },'#$D#$A' "desconto2":{'#$D#$A' "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A' "taxa":0,'#$D#$A' "valor":0,'#$D#$A' "data":""'#$D#$A' },'#$D#$A' "desconto3":{'#$D#$A' "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A' "taxa":0,'#$D#$A' "valor":0,'#$D#$A' "data":""'#$D#$A' },'#$D#$A' "valorNominal":64.87,'#$D#$A' "valorAbatimento":0,'#$D#$A' "multa":{'#$D#$A' "codigoMulta":"NAOTEMMULTA",'#$D#$A' "data":"",'#$D#$A' "valor":0,'#$D#$A' "taxa":0'#$D#$A' },'#$D#$A' "mora":{'#$D#$A' "codigoMora":"ISENTO",'#$D#$A' "data":"",'#$D#$A' "valor":0,'#$D#$A' "taxa":0'#$D#$A' },'#$D#$A' "cnpjCPFBeneficiario":"08030107000194",'#$D#$A' "numDiasAgenda":"SESSENTA"'#$D#$A'}' Logo apos passar na linha: SJson := GenerateReadableText(js,i); Por fim tenta enviar e da o erro no post idhttp.Post('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos',JsonStreamEnvio,JsonStreamRetorno); A proposito o codigo completo da unit unit uBancoInter; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Controls, Vcl.Dialogs, Vcl.StdCtrls, IdServerIOHandler, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdCoderMIME, uLkJSON,XSuperObject; const numDiasAgenda:array[0..2] of string = ( 'ZERO', 'TRINTA', 'SESSENTA'); codigoDesconto:array[0..6] of string = ( 'NAOTEMDESCONTO', 'VALORFIXODATAINFORMADA', 'PERCENTUALDATAINFORMADA', 'VALORANTECIPACAODIACORRIDO', 'VALORANTECIPACAODIAUTIL', 'PERCENTUALVALORNOMINALDIACORRIDO', 'PERCENTUALVALORNOMINALDIAUTIL'); codigoMulta:array[0..2] of string = ( 'NAOTEMMULTA', 'VALORFIXO', 'PERCENTUAL'); codigoMora:array[0..2] of string = ( 'VALORDIA', 'TAXAMENSAL', 'ISENTO'); filtaPor:array[0..3] of string = ( 'PAGOS', 'EXPIRADOS', 'VENCIDOSAVENCER', 'TODOSBAIXADOS'); ordenarPor:array[0..6] of string = ( 'NOSSONUMERO', 'DATAVENCIMENTO_DSC', 'NOMESACADO', 'VALOR_ASC', 'VALOR_DSC', 'STATUS_ASC', 'STATUS_DS'); codigoBaixa:array[0..7] of string = ( 'ACERTOS', 'PROTESTADO', 'DEVOLUCAO', 'PROTESTOAPOSBAIXA', 'PAGODIRETOAOCLIENTE', 'SUBISTITUICAO', 'FALTADESOLUCAO', 'APEDIDODOCLIENTE'); diasBaixas:array[0..3] of string = ( 'Hoje', 'SeteDias', 'QuinzeDias', 'TrintaDias'); type TVariantArray = array of array of variant; TipoData = ( Vencimento, Emissao); TipoSituacao = ( Pagos, Expirados, VencidosAVencer, TodosBaixados ); TipoDiasBaixa = ( Hoje, SeteDias, QuinzeDias, TrintaDias); TipoBaixa = ( Acertos, Protestado, Devolucao, ProtestoAposBaixa, PagoDiretoAoCliente, Subistituicao, FaltaDeSolucao, APedidoDoCliente); TipoOrdem = ( NossoNumero, DataVencimento_DSC, NomeSacado, Valor_ASC, Valor_DSC, Status_ASC, Status_DS); TipoMora = ( ValorDia, TaxaMensal, Isento); TipoMulta = ( NaoTemMulta, ValorFixo, Percentual); TipoDesconto = ( NaoTemDesconto, ValorFixoDataInformada, PercentualDataInformada, ValorAntecipadoDiaCorrido, ValorAntecipadoDiaUtil, PercentualValorNominalDiaCorrido, PercentualValorNominalDiaUtil); TipoAgenda = ( Zero, Trinta, Sessenta); TipoPessoa = ( Fisica, Juridica); TPagador = Class(Tcomponent) private ftipopessoa:TipoPessoa; fnome:string; // max 100 fendereco:string; //max 90 fnumero:string; // max 10 fcomplemento:string; //max 30 fbairro:string; // max 60 fcidade:string; fuf:string; fcep:string; // max 8 fcnpjCPF:string; femail:string; // max 50 fddd:string; // max 2 ftelefone:string; //max 9 public published property TipoPessoa:TipoPessoa read ftipopessoa write ftipopessoa; property Nome:string read fnome write fnome; property Endereco:string read fendereco write fendereco; property Numero:string read fnumero write fnumero; property Complemento:string read fcomplemento write fcomplemento; property Bairro:string read fbairro write fbairro; property UF:string read fuf write fuf; property CEP:string read fcep write fcep; property CNPJ_CPF:string read fcnpjCPF write fcnpjCPF; property Email:string read femail write femail; property Telefone:string read ftelefone write ftelefone; property DDD:string read fddd write fddd; property Cidade:string read fcidade write fcidade; End; TDesconto1 = Class(TComponent) private fcodigodesc:TipoDesconto; fdatadesc:tdate; ftaxa:double; fvalor:double; public published property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc; property DataDesconto:tdate read fdatadesc write fdatadesc; property Taxa:double read ftaxa write ftaxa; property Valor:double read fvalor write fvalor; End; TDesconto2 = Class(TComponent) private fcodigodesc:TipoDesconto; fdatadesc:tdate; ftaxa:double; fvalor:double; public published property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc; property DataDesconto:tdate read fdatadesc write fdatadesc; property Taxa:double read ftaxa write ftaxa; property Valor:double read fvalor write fvalor; End; TDesconto3 = Class(TComponent) private fcodigodesc:TipoDesconto; fdatadesc:tdate; ftaxa:double; fvalor:double; public published property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc; property DataDesconto:tdate read fdatadesc write fdatadesc; property Taxa:double read ftaxa write ftaxa; property Valor:double read fvalor write fvalor; End; //Classe responsavel por retornar uma lista de boletos gerando a patir de um dia após //Classe responsavel por recuperar os dados do Boleto detalhado TDadosDoBoleto = class(Tcomponent) public private protected published end; //Classe responsavel por baixar um boleto no formato pdf em base64 TPDFdoBoleto = class(Tcomponent) public private fNossoNumero:string; protected published property NossoNumero: String read fNossoNumero write fNossoNumero; end; TMesangem = class(Tcomponent) public private fmensagem1,fmensagem2,fmensagem3,fmensagem4,fmensagem5:string; protected published //maximo 78 caracteres por mensagem property Mensagem1: String read fMensagem1 write fMensagem1; property Mensagem2: String read fMensagem2 write fMensagem2; property Mensagem3: String read fMensagem3 write fMensagem3; property Mensagem4: String read fMensagem4 write fMensagem4; property Mensagem5: String read fMensagem5 write fMensagem5; end; TMulta = class(Tcomponent) public private fcodigoMulta:TipoMulta; fdata:tdate; ftaxa:double; fvalor:double; protected published property CodigoMulta: TipoMulta read fcodigoMulta write fcodigoMulta; property DataAContar: Tdate read fdata write fdata; property Taxa: double read ftaxa write ftaxa; property Valor: double read fvalor write fvalor; end; TMora = class(Tcomponent) public private fcodigoMora:TipoMora; fdata:tdate; ftaxa:double; fvalor:double; protected published property CodigoMora: TipoMora read fcodigoMora write fcodigoMora; property DataAContar: Tdate read fdata write fdata; property Taxa: double read ftaxa write ftaxa; property Valor: double read fvalor write fvalor; end; TCertificado = class(Tcomponent) private fcertfile:string; fkeyfile:string; frootcertfile:string; published property CertFile:string read fcertfile write fcertfile; property KeyFile:string read fkeyfile write fkeyfile; property RootCertFile:string read frootcertfile write frootcertfile; end; //Classe resposavel por gerar novo boleto no banco TBancoInter = class(Tcomponent) private fconta:string; fseuNumero:string; //15 maximo fvalorNorminal:double; fvalorAbatimento:double; fDataEmissao:Tdate; fDataVencimento:Tdate; fpagador:TPagador; fmensagem:TMesangem; fmulta:TMulta; fmora:TMora; //fdataLimite:TipoAgenda; fdesconto1:TDesconto1; fdesconto2:TDesconto2; fdesconto3:TDesconto3; fCodigoBarras:string; fLinhaDigitavel:string; fNossoNumero:string; fcpf_cnpj:string; fnumDiasAgenda:TipoAgenda; fcertificado:TCertificado; fSitpagamento:string; fSituacao:string; fValorPago:double; fDataPagamento:tdate; function MontaDados:Tstringlist; public constructor Create( AOwner : TComponent); override; Destructor Destroy; override ; Function GerarBoleto:TStringList; function GetCodigoBarras:string; function GetLinhaDigitavel:string; function GetNossoNumero:string; //Consulta Pagamento procedure Consulta(NossoNumero:string); function ConsultaLita(FiltraPorSituacao:TipoSituacao;FiltrarPorData:TipoData;FiltrarDias:TipoDiasBaixa):Tstringlist; function ConsultaUmBoleto(NossoNumero:string):Tstringlist; procedure BaixaBoleto(NossoNumero:string;CodigoBaixa:TipoBaixa); procedure RecuperaBoletoPDF(NossoNumero,LocalPath:string); protected published property NumeroConta: String read fconta write fconta; property CPF_CNPJ_Beneficiario:string read fcpf_cnpj write fcpf_cnpj; property SeuNumero: String read fseuNumero write fseuNumero; property ValorNorminal: double read fvalorNorminal write fvalorNorminal; property ValorAbatimento: double read fvalorAbatimento write fvalorAbatimento; property DataEmissao: Tdate read fDataEmissao write fDataEmissao; property Vencimento: Tdate read fDataVencimento write fDataVencimento; //property DataLimite: TipoAgenda read fdataLimite write fdataLimite; property Pagador: TPagador read fpagador write fpagador ; property Mensagem: TMesangem read fMensagem write fmensagem ; property Multa: TMulta read fmulta write fmulta; property Mora: TMora read fmora write fmora ; property Desconto1:TDesconto1 read fdesconto1 write fdesconto1; property Desconto2:TDesconto2 read fdesconto2 write fdesconto2; property Desconto3:TDesconto3 read fdesconto3 write fdesconto3; property NumDiasAgenda:TipoAgenda read fnumDiasAgenda write fnumDiasAgenda; property Certificado:TCertificado read fcertificado write fcertificado; end; function RetCodigoDesconto(valor:TipoDesconto):string; function RetCodigoBaixa(valor:TipoBaixa):string; function RetTipoOrdem(valor:TipoOrdem):string; function RetCodigoMora(valor:TipoMora):string; function RetCodigoMulta(valor:TipoMulta):string; function RetDiasAgenda(valor:TipoAgenda):string; function RetData(data:tdate):string; function strzero(valor1:integer;valor2:integer):string; function numdos(valor:double):string; function RetTipoPessoa(valor:TipoPessoa):string; function RetSituacao(valor:TipoSituacao):string; function RetDataFiltro(valor:TipoData):string; procedure ConfiguraSSl(ConfSSL:TIdSSLIOHandlerSocketOpenSSL;ArqCertFile,ArqKeyFile:string); Procedure ConfiguraIndy(ConfInd:TIdHTTP;NumConta:string); procedure Register; implementation procedure Register; begin RegisterComponents('Aprendendo', [TBancoInter]); end; function numdos(valor:double):string; var vtexto,resultado:string; begin vtexto := FloatToStr(valor); resultado := StringReplace(vtexto,'.','',[rfReplaceAll]); resultado := StringReplace(resultado,',','.',[rfReplaceAll]); result := trim(resultado); end; procedure ConfiguraSSl(ConfSSL:TIdSSLIOHandlerSocketOpenSSL;ArqCertFile,ArqKeyFile:string); begin //configurando o soketssl with ConfSSL.SSLOptions do begin Method := sslvSSLv23; SSLVersions := [sslvSSLv23]; CertFile := ArqCertFile; KeyFile := ArqKeyFile; end; end; Procedure ConfiguraIndy(ConfInd:TIdHTTP;NumConta:string); begin ConfInd.HandleRedirects:=True; with confind.Request.CustomHeaders do begin Clear; Values['Authorization'] := 'Bearer bddsss7e-a749-4cce-9dfe-b30fdfdfdac7e446'; end; { with confind.Request.CustomHeaders do begin Clear; Add('Content-Type: application/json'); /Add('x-inter-conta-corrente: '+NumConta); end; } end; function strzero(valor1:integer;valor2:integer):string; var monta:string; tira,ia:integer; begin if valor2=0 then begin result:=''; exit; end; monta:=trim(inttostr(valor1)); tira:=length(monta); if tira>valor2 then result := inttostr(valor1); tira:=valor2-tira; monta:=''; for ia:=1 to tira do monta:=monta+'0'; monta:=monta+trim(inttostr(valor1)); result := monta end; function RetData(data:tdate):string; var year,month,day:word; begin DecodeDate(data,year,month,day); if year<2021 then result := '' else result := strzero(year,4)+ '-' + strzero(month,2) + '-' + strzero(day,2); end; function RetTipoOrdem(valor:TipoOrdem):string; begin case valor of NossoNumero: result := ordenarPor[0] ; DataVencimento_DSC: result := ordenarPor[1] ; NomeSacado: result := ordenarPor[2] ; Valor_ASC: result := ordenarPor[3] ; Valor_DSC: result := ordenarPor[4] ; Status_ASC: result := ordenarPor[5] ; Status_DS: result := ordenarPor[6] ; end; end; function RetSituacao(valor:TipoSituacao):string; begin case valor of Pagos: result := filtaPor[0]; Expirados: result := filtaPor[1]; VencidosAVencer: result := filtaPor[2]; TodosBaixados: result := filtaPor[3]; end; end; function RetCodigoMora(valor:TipoMora):string; begin case valor of ValorDia: result := codigoMora[0]; TaxaMensal: result := codigoMora[1]; Isento: result := codigoMora[2]; end; end; function RetCodigoMulta(valor:TipoMulta):string; begin case valor of NaoTemMulta: result := codigoMulta[0]; ValorFixo: result := codigoMulta[1]; Percentual: result := codigoMulta[2]; end; end; function RetDiasAgenda(valor:TipoAgenda):string; begin case valor of Zero: result := numDiasAgenda[0]; Trinta: result := numDiasAgenda[1]; Sessenta: result := numDiasAgenda[2]; end; end; function RetDataFiltro(valor:TipoData):string; begin case valor of Vencimento: result := 'VENCIMENTO' ; Emissao: result := 'EMISSAO'; end; end; function RetCodigoBaixa(valor:TipoBaixa):string; begin case valor of Acertos: result := codigoBaixa[0]; Protestado: result := codigoBaixa[1]; Devolucao: result := codigoBaixa[2]; ProtestoAposBaixa: result := codigoBaixa[3]; PagoDiretoAoCliente: result := codigoBaixa[4]; Subistituicao: result := codigoBaixa[5]; FaltaDeSolucao: result := codigoBaixa[6]; APedidoDoCliente: result := codigoBaixa[7]; end; end; function RetCodigoDesconto(valor:TipoDesconto):string; begin case valor of NaoTemDesconto: result := codigoDesconto[0]; ValorFixoDataInformada: result := codigoDesconto[1]; PercentualDataInformada: result := codigoDesconto[2]; ValorAntecipadoDiaCorrido: result := codigoDesconto[3]; ValorAntecipadoDiaUtil: result := codigoDesconto[4]; PercentualValorNominalDiaCorrido: result := codigoDesconto[5]; PercentualValorNominalDiaUtil: result := codigoDesconto[6]; end; end; function RetTipoPessoa(valor:TipoPessoa):string; begin case valor of Fisica: result := 'FISICA' ; Juridica: result := 'JURIDICA' ; end; end; { TBancoInter } procedure TBancoInter.BaixaBoleto(NossoNumero: string; CodigoBaixa: TipoBaixa); var SJson,StringBaixa:string; DadosJson:TStringList; JsonStreamRetorno,JsonStreamEnvio : TStringStream; idHttp:TIdHTTP; SoketSSL:TIdSSLIOHandlerSocketOpenSSL; i:integer; begin StringBaixa := NossoNumero+'/baixas'; JsonStreamRetorno := TStringStream.Create; idHttp := tidHttp.Create(self); SoketSSL := TIdSSLIOHandlerSocketOpenSSL.Create(self); SJson :='{"codigoBaixa":"'+RetCodigoBaixa(CodigoBaixa)+'"}'; JsonStreamEnvio := TStringStream.Create(SJson); //configurando o soketssl ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile); //linkando o soketssl ao idhttp idHttp.IOHandler := SoketSSL; ConfiguraIndy(IdHTTP,NumeroConta); //enviando via https DadosJson := TStringList.Create; try idhttp.Post('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/'+StringBaixa,JsonStreamEnvio,JsonStreamRetorno); except on E:EIdHTTPProtocolException do DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage) else showexception(exceptobject, exceptaddr); end; if IdHTTP.ResponseCode<>204 then begin DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode)); DadosJson.Add(''); end; if JsonStreamRetorno.DataString<>'' then DadosJson.add(JsonStreamRetorno.DataString); if IdHTTP.ResponseCode<>204 then begin DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').'); showmessage(DadosJson.Text); DadosJson.Clear; end; JsonStreamRetorno.Free; JsonStreamEnvio.Free; SoketSSL.Free; idHttp.Free; end; procedure TBancoInter.Consulta(NossoNumero: string); begin end; function TBancoInter.ConsultaLita(FiltraPorSituacao:TipoSituacao;FiltrarPorData:TipoData;FiltrarDias:TipoDiasBaixa):Tstringlist; var DadosJson:TStringList; JsonStreamRetorno : TStringStream; idHttp:TIdHTTP; SoketSSL:TIdSSLIOHandlerSocketOpenSSL; i:integer; montaconsulta,SJson:string; js:TlkJSONobject; begin JsonStreamRetorno := TStringStream.Create; idHttp := tidHttp.Create(self); SoketSSL := TIdSSLIOHandlerSocketOpenSSL.Create(self); //configurando o soketssl ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile); //linkando o soketssl ao idhttp idHttp.IOHandler := SoketSSL; ConfiguraIndy(IdHTTP,NumeroConta); //enviando via https DadosJson := TStringList.Create; try montaconsulta := 'filtrarPor=' + RetSituacao(FiltraPorSituacao); montaconsulta := montaconsulta + '&filtrarDataPor=' + RetDataFiltro(FiltrarPorData); if FiltrarDias=Hoje then montaconsulta := montaconsulta + '&dataInicial='+RetData(now) else if FiltrarDias=SeteDias then montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 7) else if FiltrarDias=QuinzeDias then montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 15) else if FiltrarDias=TrintaDias then montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 30); montaconsulta := montaconsulta + '&dataFinal=' + RetData(date + 30); IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos?'+montaconsulta,JsonStreamRetorno); except on E:EIdHTTPProtocolException do DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage) else showexception(exceptobject, exceptaddr); end; if IdHTTP.ResponseCode<>200 then begin DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode)); DadosJson.Add(''); end; if JsonStreamRetorno.DataString<>'' then DadosJson.add(JsonStreamRetorno.DataString); if IdHTTP.ResponseCode<>200 then begin DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').'); showmessage(DadosJson.Text); DadosJson.Clear; end else begin //aqui tratamos os dados recebidos js := TlkJSON.ParseText(DadosJson.Text) as TlkJSONobject; i:=0; SJson := GenerateReadableText(js,i); DadosJson.Clear; DadosJson.Add(SJson); //result.Add(SJson); end; result := DadosJson; JsonStreamRetorno.Free; SoketSSL.Free; idHttp.Free; end; function TBancoInter.ConsultaUmBoleto(NossoNumero: string): Tstringlist; var DadosJson:TStringList; JsonStreamRetorno : TStringStream; idHttp:TIdHTTP; SoketSSL:TIdSSLIOHandlerSocketOpenSSL; i:integer; SJson:string; js:TlkJSONobject; begin JsonStreamRetorno := TStringStream.Create; idHttp := tidHttp.Create(self); SoketSSL := TIdSSLIOHandlerSocketOpenSSL.Create(self); //configurando o soketssl ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile); //linkando o soketssl ao idhttp idHttp.IOHandler := SoketSSL; ConfiguraIndy(IdHTTP,NumeroConta); //enviando via https DadosJson := TStringList.Create; try IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos/' + NossoNumero,JsonStreamRetorno); except on E:EIdHTTPProtocolException do DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage) else showexception(exceptobject, exceptaddr); end; if IdHTTP.ResponseCode<>200 then begin DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode)); DadosJson.Add(''); end; if JsonStreamRetorno.DataString<>'' then DadosJson.add(JsonStreamRetorno.DataString); if IdHTTP.ResponseCode<>200 then begin DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').'); showmessage(DadosJson.Text); DadosJson.Clear; end else begin //aqui tratamos os dados recebidos js := TlkJSON.ParseText(DadosJson.Text) as TlkJSONobject; i:=0; SJson := GenerateReadableText(js,i); DadosJson.Clear; DadosJson.Add(SJson); //result.Add(SJson); end; result := DadosJson; JsonStreamRetorno.Free; SoketSSL.Free; idHttp.Free; end; constructor TBancoInter.Create(AOwner: TComponent); begin inherited; fpagador := TPagador.Create(SELF); fpagador.Name:='Pagador'; fpagador.SetSubComponent(true); fmensagem := TMesangem.Create(self); fmensagem.Name := 'Mensagem'; fmensagem.SetSubComponent(true); fmulta := TMulta.Create(self); fmulta.Name := 'Multa'; fmulta.SetSubComponent(true); fmora := TMora.Create(self); fmora.Name := 'Mora'; fmora.SetSubComponent(true); fdesconto1 := TDesconto1.Create(self); fdesconto1.Name:='Desconto1'; fdesconto1.SetSubComponent(true); fdesconto2 := TDesconto2.Create(self); fdesconto2.Name:='Desconto2'; fdesconto2.SetSubComponent(true); fdesconto3 := TDesconto3.Create(self); fdesconto3.Name:='Desconto3'; fdesconto3.SetSubComponent(true); fcertificado := TCertificado.Create(self); fcertificado.Name:='Certificado'; fcertificado.SetSubComponent(true); end; destructor TBancoInter.Destroy; begin fmora.Free; fpagador.Free; fmensagem.Free; fmulta.Free; fdesconto1.Free; fdesconto2.Free; fdesconto3.Free; inherited; end; function TBancoInter.GerarBoleto: TStringList; var DadosEnvio:TStringList; JsonStreamRetorno, JsonStreamEnvio: TStringStream; idHttp:TIdHTTP; SoketSSL:TIdSSLIOHandlerSocketOpenSSL; i:integer; js:TlkJSONobject; SJson:string; ws: TlkJSONstring; begin idHttp := tidHttp.Create(self); SoketSSL := TIdSSLIOHandlerSocketOpenSSL.Create(self); //linkando o soketssl ao idhttp ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile); idHttp.IOHandler := SoketSSL; //enviando via https ConfiguraIndy(IdHTTP,NumeroConta); DadosEnvio := TStringList.Create; JsonStreamRetorno := TStringStream.Create(''); DadosEnvio.Text := MontaDados.Text; js := TlkJSON.ParseText(Dadosenvio.Text) as TlkJSONobject; i:=0; SJson := GenerateReadableText(js,i); JsonStreamEnvio := TStringStream.Create(SJson); //JsonStreamEnvio := TStringStream.Create(DadosEnvio.Text); DadosEnvio.Clear; try idhttp.Post('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos',JsonStreamEnvio,JsonStreamRetorno); except on E:EIdHTTPProtocolException do DadosEnvio.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage) else showexception(exceptobject, exceptaddr); end; if idhttp.ResponseCode<>200 then begin DadosEnvio.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode)); DadosEnvio.Add(''); end; if JsonStreamRetorno.DataString<>'' then DadosEnvio.add(JsonStreamRetorno.DataString); if idhttp.ResponseCode=200 then begin js := TlkJSON.ParseText(DadosEnvio.Text) as TlkJSONobject; fCodigoBarras := vartostr(js.Field['codigoBarras'].Value); fLinhaDigitavel := vartostr(js.Field['linhaDigitavel'].Value); fNossoNumero := vartostr(js.Field['nossoNumero'].Value); js.Free; end; if IdHTTP.ResponseCode<>200 then showmessage('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').'); idHttp.Free; JsonStreamRetorno.Free; JsonStreamEnvio.Free; result := DadosEnvio; end; function TBancoInter.GetCodigoBarras: string; begin result := fCodigoBarras; end; function TBancoInter.GetLinhaDigitavel: string; begin result := fLinhaDigitavel; end; function TBancoInter.GetNossoNumero: string; begin result := fNossoNumero; end; function TBancoInter.MontaDados: Tstringlist; var Dados:tstringlist; begin Dados := TStringList.Create; // dados do pagador Dados.Add('{'); Dados.Add(' "pagador":{'); dados.Add(' "cnpjCpf":"' + Pagador.CNPJ_CPF + '",'); dados.Add(' "nome":"' + pagador.Nome + '",'); dados.Add(' "email":"' + pagador.Email + '",'); dados.Add(' "telefone":"' + pagador.Telefone + '",'); dados.Add(' "cep":"' + pagador.CEP + '",'); dados.Add(' "numero":"' + pagador.Numero + '",'); dados.Add(' "complemento":"' + pagador.Complemento + '",'); dados.Add(' "bairro":"' + pagador.Bairro + '",'); dados.Add(' "cidade":"' + pagador.Cidade + '",'); dados.Add(' "uf":"' + pagador.UF + '",'); dados.Add(' "endereco":"' + pagador.Endereco + '",'); dados.Add(' "ddd":"' + pagador.DDD + '",'); dados.Add(' "tipoPessoa":"' + RetTipoPessoa(pagador.TipoPessoa) + '"'); Dados.Add(' },'); //dados do boleto Dados.Add(' "dataEmissao":"' + RetData(fDataEmissao) + '",'); Dados.Add(' "seuNumero":"' + SeuNumero + '",'); //Dados.Add(' "dataLimite":"' + RetData(Vencimento) + '",'); Dados.Add(' "dataVencimento":"' + RetData(Vencimento) + '",'); //mensagem no boleto Dados.Add(' "mensagem":{'); dados.Add(' "linha1":"' + Mensagem.Mensagem1 + '",'); dados.Add(' "linha2":"' + Mensagem.Mensagem2 + '",'); dados.Add(' "linha3":"' + Mensagem.Mensagem3 + '",'); dados.Add(' "linha4":"' + Mensagem.Mensagem4 + '",'); dados.Add(' "linha5":"' + Mensagem.Mensagem5 + '"'); Dados.Add(' },'); Dados.Add(' "desconto1":{'); dados.Add(' "codigoDesconto":"' + RetCodigoDesconto(desconto1.CodigoDesconto) + '",'); dados.Add(' "taxa":' + numdos(Desconto1.Taxa) + ','); dados.Add(' "valor":' + numdos(Desconto1.Valor) + ','); dados.Add(' "data":"' + RetData(desconto1.DataDesconto) + '"'); Dados.Add(' },'); Dados.Add(' "desconto2":{'); dados.Add(' "codigoDesconto":"' + RetCodigoDesconto(desconto2.CodigoDesconto) + '",'); dados.Add(' "taxa":' + numdos(Desconto2.Taxa) + ','); dados.Add(' "valor":' + numdos(Desconto2.Valor) + ','); dados.Add(' "data":"' + RetData(desconto2.DataDesconto) + '"'); Dados.Add(' },'); Dados.Add(' "desconto3":{'); dados.Add(' "codigoDesconto":"' + RetCodigoDesconto(desconto3.CodigoDesconto) + '",'); dados.Add(' "taxa":' + numdos(Desconto3.Taxa) + ','); dados.Add(' "valor":' + numdos(Desconto3.Valor) + ','); dados.Add(' "data":"' + RetData(desconto3.DataDesconto) + '"'); Dados.Add(' },'); Dados.Add(' "valorNominal":' + numdos(ValorNorminal) + ','); Dados.Add(' "valorAbatimento":' + numdos(ValorAbatimento) + ','); //multa a ser aplicada Dados.Add(' "multa":{'); dados.Add(' "codigoMulta":"' + RetCodigoMulta(multa.CodigoMulta) + '",'); dados.Add(' "data":"' + RetData(multa.DataAContar) + '",'); dados.Add(' "valor":' + numdos(multa.Valor) + ','); dados.Add(' "taxa":' + numdos(multa.Taxa) ); Dados.Add(' },'); //mora diaria Dados.Add(' "mora":{'); dados.Add(' "codigoMora":"' + RetCodigoMora(mora.CodigoMora) + '",'); dados.Add(' "data":"' + RetData(multa.DataAContar) + '",'); dados.Add(' "valor":' + numdos(mora.Valor) + ','); dados.Add(' "taxa":' + numdos(mora.Taxa) ); Dados.Add(' },'); Dados.Add(' "cnpjCPFBeneficiario":"' + CPF_CNPJ_Beneficiario + '",'); Dados.Add(' "numDiasAgenda":"' + RetDiasAgenda(NumDiasAgenda) + '"'); Dados.Add('}'); result := dados; end; procedure TBancoInter.RecuperaBoletoPDF(NossoNumero, LocalPath: string); var DadosJson:TStringList; JsonStreamRetorno : TStringStream; idHttp:TIdHTTP; SoketSSL:TIdSSLIOHandlerSocketOpenSSL; MStream:TMemoryStream; Decoder:TIdDecoderMIME; Base64: string; begin JsonStreamRetorno := TStringStream.Create; idHttp := tidHttp.Create(self); SoketSSL := TIdSSLIOHandlerSocketOpenSSL.Create(self); //configurando o soketssl ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile); //linkando o soketssl ao idhttp idHttp.IOHandler := SoketSSL; ConfiguraIndy(IdHTTP,NumeroConta); //enviando via https DadosJson := TStringList.Create; try IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos/' + NossoNumero + '/pdf',JsonStreamRetorno); except on E:EIdHTTPProtocolException do DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage) else showexception(exceptobject, exceptaddr); end; if IdHTTP.ResponseCode<>200 then begin DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode)); DadosJson.Add(''); DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').'); showmessage(DadosJson.Text); DadosJson.Clear; end; if (IdHTTP.ResponseCode=200) and (JsonStreamRetorno.DataString<>'') then begin Decoder := TIdDecoderMIME.Create(nil); MStream := TMemoryStream.Create; Base64 := JsonStreamRetorno.DataString; Decoder.DecodeStream(Base64,MStream); MStream.SaveToFile(LocalPath+'\boleto-inter-' + NossoNumero + '.pdf'); FreeAndNil(Decoder); FreeAndNil(MStream); ShowMessage('Boleto Baixado Com Sucesso!'); end; JsonStreamRetorno.Free; SoketSSL.Free; idHttp.Free; end; end.
  3. Eu até consegui pegar o token Agora eu n seu como pegar os boletos pelo postman conforme documentação : https://developers.bancointer.com.br/reference/pesquisarboletos Onde eu passo esses QUERY PARAMS no postman?
  4. Pessoal Neste topico Parece que tinha solução para API do banco inter. Vejo o site dos cara eles fizeram favor de mudar a forma que fala com a API, antes geravam um arquivo certificado e agora aponta pra outo endereço https://developers.bancointer.com.br/reference/token-1 Me tire uma duvida basedo neste link como que faço pra passar os parametros corretos no postman por exemplo? Onde devo informar client_id e client_secret e scope
  5. ACBr_NFeDanfeFR.dpk(94) Fatal: E2202 Required package 'fs25' not found Sabem me dizer pq deu este erro? Somente o DanFe deu isso. Estou usando o delphi sydney pq ele reclamada do fs25? Os outros outros componentes do fastreport instalou.
  6. Desculpe pessoal reinicie o PC e por algum motivo deu ! Coisas de windows
  7. johnbh3

    Instalação do ACBR

    Pessoal estou usando o instalador do ACBR acabei de baixar no delphi delphi sydney E trava quando na parte inicial passa pelo adicionar path e trava em adicionando variavel de ambiente.
  8. unit uVendaItem; interface type TVendaItem = class private FIDVendaItem: Integer; FIDVenda: Integer; FProduto: String; { private declarations } protected { protected declarations } public { public declarations } property IDVendaItem: Integer read FIDVendaItem write FIDVendaItem; property IDVenda: Integer read FIDVenda write FIDVenda; property Produto: string read FProduto write FProduto; published { published declarations } end; implementation end. unit uVenda; interface uses System.Generics.Collections, System.SysUtils, uVendaItem, Dialogs; type TVenda = class private FIDVenda: Integer; FData: TDateTime; FListaVendaItem: TObjectList<TVendaItem>; { private declarations } protected { protected declarations } public { public declarations } property IDVenda: Integer read FIDVenda write FIDVenda; property Data: TDateTime read FData write FData; property ListaVendaItem: TObjectList<TVendaItem> read FListaVendaItem write FListaVendaItem; constructor Create; destructor Destroy; override; procedure AdicionarVendaItem(pProduto: String); procedure Remover(Index: Integer); function Count: Integer; published { published declarations } end; implementation { TVenda } procedure TVenda.AdicionarVendaItem(pProduto: String); var I: Integer; begin FListaVendaItem.Add(TVendaItem.Create); I := FListaVendaItem.Count -1; FListaVendaItem[I].IDVendaItem := I; FListaVendaItem[I].IDVenda := FIDVenda; FListaVendaItem[I].Produto := pProduto; end; function TVenda.Count: Integer; begin Result := FListaVendaItem.Count; end; constructor TVenda.Create; begin inherited; FIDVenda := 0; FData := EncodeDate(1900,1,1); FListaVendaItem := TObjectList<TVendaItem>.Create; end; destructor TVenda.Destroy; begin FreeAndNil(FListaVendaItem); inherited; end; procedure TVenda.Remover(Index: Integer); begin if Index < Count then FListaVendaItem.Delete(Index) else ShowMessage('Item não encontrado!'); end; end. O que vocês acham? Agora vou implementar os campos de valores R$ e percorrer a lista a ideia seria esta mesmo?
  9. Faça uma aplicação para simular o funcionamento de um caixa de restaurante, com as seguintes características: Os produtos disponíveis são: Bebidas • Refrigerante = R$ 5,90 p/ und • Água mineral = R$ 4,00 p/und • Cerveja = R$ 8,50 p/und Alimentos • Sanduiche queijo = R$ 20,00 p/und • Sanduiche misto = R$ 29,00 p/und • Self service = R$ 39,90 p/ Kg • Sobremesa = R$ 45,90 p/Kg Brindes • Boné = R$ 49,90 p/und • Chaveiro = R$ 14,90 p/und Deve existir a possibilidade de acrescentar ou excluir produtos à lista. Ao final da digitação dos dados a conta do cliente deve ser mostrada em uma listbox. A aplicação deve permitir cancelar produtos e recalcular a conta do cliente. Pessoal me dêem uma luz, com.o eu poderia fazer isto no listbox? Eu adicionaria no listbox os dados da conta com zeros a direita tipo assim Prod. Nome do prod. Qtde. Valor 0001. produto teste. 10. 100.00 Mas a dúvida como seria recalculado a conta? Através de um while? Isto e um teste pra vaga de emprego. Mas fiquei confuso por usar um listbox. O que eu fiz até agora foi a classe orientada a objetos do cadastro de produto, se fosse se fosse com dbgrid até seria mais tranquilo usando tabela temporária e chamar minha classe pra gravar a venda
  10. Pessoal uma tabela x e y em MySQL X Y a b c d 1 2 1 2 3 3 3 4 4 5 5 6 5 7 7 8 9 1 Retorna o erro Error Code: 1093. You can't specify target table 'y' for update in FROM clause Sabem o motivo?
  11. Pessoal Na transmissão do ESocial existe alguma tag que identificar o sistema que foi transmitido o xml?
  12. \resolvi pessoal obrigado E desculpe o post
  13. var LRequisicao: TidHTTP; LResposta: String; FLinkAutenticacao: string; LParametros: TStringList; FProtocoloSSL:TIdSSLIOHandlerSocketOpenSSL; begin FLinkAutenticacao:='https://api.lucree.com.br/autenticacao/v1'; LParametros := TStringList.Create; LParametros.Add('"username": "[email protected]"'); LParametros.Add('"password": "123456"'); FProtocoloSSL := TIdSSLIOHandlerSocketOpenSSL.Create(Application); FProtocoloSSL.SSLOptions.Mode := sslmUnassigned; FProtocoloSSL.SSLOptions.Method := sslvTLSv1_2; FProtocoloSSL.SSLOptions.SSLVersions := [sslvTLSv1_2]; LRequisicao := TIdHTTP.Create(Nil); //LRequisicao.OnWork := OnWork; LRequisicao.IOHandler := FProtocoloSSL; LRequisicao.Request.ContentType := 'application/json'; LResposta := LRequisicao.Post(FLinkAutenticacao, LParametros); Eu tenho retorno http/ 1.1 400 - bad request O json que envio no raw do postman e: { "username": "[email protected]", "password": "123456" }
  14. Detalhe: Variavel: FLinkAutenticacao:='https://api.lucree.com.br/autenticacao/v1'; Eu tenho retorno http/ 1.1 400 - bad request
  15. Pessoal para conexão via postman e bem simples esta conexão GET no endereço: https://api.lucree.com.br/autenticacao/v1 Vou na aba body e adiciono o json {"username": "[email protected]","password": "123456"} Retorna pra mim o token Agora que preciso fazer isto com delphi usando o TidHTTP var LRequisicao: TidHTTP; LResposta: String; FLinkAutenticacao: string; body:string; LParametros: TStringList; FProtocoloSSL:TIdSSLIOHandlerSocketOpenSSL; begin LParametros := TStringList.Create; LParametros.Add('"username": "[email protected]"'); LParametros.Add('"password": "123456"'); FProtocoloSSL := TIdSSLIOHandlerSocketOpenSSL.Create(Application); FProtocoloSSL.SSLOptions.Mode := sslmUnassigned; FProtocoloSSL.SSLOptions.Method := sslvTLSv1_2; FProtocoloSSL.SSLOptions.SSLVersions := [sslvTLSv1_2]; LRequisicao := TIdHTTP.Create(Nil); //LRequisicao.OnWork := OnWork; LRequisicao.IOHandler := FProtocoloSSL; LRequisicao.Request.ContentType := 'application/raw'; LResposta := LRequisicao.Post(FLinkAutenticacao, LParametros); Pessoal eu sei não e assim, mas e pra vocês terem uma ideia. Eu fiz uma conexão com outra maquinha onde os dados da conexão se data por parametros, dai eu criava um tStringList e passava exemplo assim LParametros := TStringList.Create; LParametros.Add('grant_type=client_credentials'); LParametros.Add('client_id='+AChaveAtual.ClientID); LParametros.Add('client_secret='+AChaveAtual.SecretCode); LRequisicao.Request.ContentType := 'application/x-www-form-urlencoded'; LResposta := LRequisicao.Post(FLinkAutenticacao, LParametros); Porém como podem ver esta Lucree, os dados para login e passado via JSON no body no postaman e não sei como fazer isto com TidHTTP Nesta lucre diferentemente o body eu passo como raw no postaman
  16. Bom dia Estou tendo este erro na NFCe em Mg - Rejeição: NFC-e com Data-Hora de emissão atrasada Estão sabendo de algo?
  17. Pessoal Tenho uma tabela com seguinte estrutura. SELECT FUNC_CODEMP AS CODEMP, FUNC_CODFUN AS CODFUN, FUNC_AQUINI AS AQUINI, FUNC_AQUFIN AS AQUFIN, FUNC_GOZINI AS GOZINI, FUNC_GOZFIN AS GOZFIN, FUNC_DTAREC AS DTAREC, FUNC_VALREC AS VALREC, FUNC_AUTFUN AS AUTFUN FROM FUNFER WHERE F__AUTFUN = '00100000000000019592' Me foi solicitado para que eu exiba o saldo de ferias dos entre as datas ( FUNC_GOZINI AS GOZINI, FUNC_GOZFIN AS GOZFIN) Ou seja gozo das ferias. O funcionário tirou ferias de 01/03/2022 a 15/03/2022 - Neste caso ele tirou 14 dias - restando 16 dias. No proximo ano o funcionario vai tirar em 01/03/2023 a 15/03/2022 Neste caso ele tirou 14 dias - restando 16 dias Porém exibir o saldo neste caso de 16+16 E possível fazer isto com SQL?
  18. Já resolvi desculpe, coloquei nil e deu certo
  19. Pessoal dentro do fasrtrepot estou carregando uma imagem assim FOTO_FUNCIONARIO.LoadFromFile(foto); Como que eu faço pra limpar esta imagem?
  20. Perdão resolvido o lote coloquei com mmyyddhhnn
  21. johnbh3

    Carta de correção

    Bom dia, Estou com um erro na carta de correeção que ao depurarar da um erro que o número do lote não e um numero inteiro valido. with ACBrNFe1.EventoNFe.Evento.Add do begin infEvento.chNFe := Chave; infEvento.CNPJ := FrmPrincipal.CNPJ_EMP; infEvento.dhEvento := now; infEvento.tpEvento := teCCe; infEvento.nSeqEvento := StrToInt(nSeqEvento); infEvento.detEvento.xCorrecao := Correcao; end; Try ACBrNFe1.EnviarEvento(StrToInt(idLote)); Erro na linha enviar !
  22. Desculpe pessoal encontrei, nossa to cansado. Faltou as virgulas em qtde= :pqtde em diante
  23. Sabem me dizer onde esta meu erro? [FireDAC][Phys][MySQL] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'vunitario= ? vrtotalitem= ? where id= ?' at line 5 Depurando os valores estão todos sendo passado para os parametrôs. O erro esta dando na função function TItemPedido.incluir_Alter_ItemPedido no QryInserir.ExecSQL; QryInserir.ParamByName('pidproduto').AsInteger :=fidproduto; QryInserir.ParamByName('pidpedido').AsInteger :=fidpedido; QryInserir.ParamByName('pqtde').AsFloat:=fqtde; QryInserir.ParamByName('pvunitario').AsFloat:=fvunitario; QryInserir.ParamByName('pvrtotalitem').AsFloat:=fvrtotalitem; QryInserir.ExecSQL; unit classe.itemPedido; interface uses FireDAC.Comp.Client, Vcl.Dialogs, System.SysUtils; type TItemPedido = class private fConexao : TFDConnection; fid :integer; fidpedido :integer; fidproduto :integer; fqtde :Real; fvunitario :Real; fvrtotalitem :Real; public property Conexao : TFDConnection read fConexao write fConexao; property id : integer read fid write fid; property idpedido : integer read fidpedido write fidpedido; property qtde : Real read fqtde write fqtde; property vunitario : Real read fvunitario write fvunitario; property vrtotalitem : Real read fvrtotalitem write fvrtotalitem; property idproduto : Integer read fidproduto write fidproduto; constructor Create (conexao : TFDconnection); destructor Destroy ; override; function incluir_Alter_ItemPedido (TipoOperacao: string; out erro: string) : boolean; procedure excluirPedido(numeroPedido: integer); function consultarItensPedido (idPedido : integer) : TFDQuery; function somaItensPedido (idPedido: integer): Real; end; implementation var Qry : TFDQuery; { TItemPedido } function TItemPedido.consultarItensPedido(idPedido: integer): TFDQuery; begin try //fConexao.Connected :=false; //fConexao.Connected :=true; Qry.Close; Qry.SQL.Clear; Qry.sql.Add('SELECT'); Qry.sql.Add(' itempedido.id,'); Qry.sql.Add(' itempedido.idpedido,'); Qry.sql.Add(' itempedido.idproduto,'); Qry.sql.Add(' itempedido.qtde,'); Qry.sql.Add(' itempedido.vrtotalitem,'); Qry.sql.Add(' itempedido.vunitario,'); Qry.sql.Add(' produto.nome as nome_produto,'); Qry.sql.Add(' produto.vrproduto'); Qry.sql.Add('FROM '); Qry.sql.Add(' itempedido'); Qry.sql.Add(' INNER JOIN produto ON itempedido.idproduto = produto.id'); Qry.SQL.Add('Where itempedido.idpedido='+QuotedStr(IntToStr(idPedido))); Qry.sql.Add(' ORDER BY itempedido.id'); Qry.Open(); finally Result :=Qry; end; end; constructor TItemPedido.Create(conexao: TFDconnection); begin fConexao := conexao; Qry :=TFDQuery.Create(nil); Qry.Connection :=fConexao; end; destructor TItemPedido.Destroy; begin Qry.Destroy; inherited; end; procedure TItemPedido.excluirPedido(numeroPedido: integer); begin fConexao.Connected :=false; fConexao.Connected :=true; fConexao.ExecSQL('delete from pedido where id=:numeroPedido',[numeroPedido]); consultarItensPedido(0); end; function TItemPedido.incluir_Alter_ItemPedido(TipoOperacao: string; out erro: string): boolean; var QryInserir :TFDQuery; begin try try fConexao.Connected :=false; fConexao.Connected :=true; QryInserir :=TFDQuery.Create(nil); QryInserir.Connection :=fConexao; QryInserir.SQL.Clear; if TipoOperacao='INSERIR' then begin QryInserir.SQL.Add('INSERT INTO pedido (dtaemissao, vrtotpedido, codcliente)'); QryInserir.sql.Add('VALUES (:pdtaemissao, :pvrtotpedido, :pcodcliente)'); end else begin QryInserir.SQL.Add('update itempedido set'); QryInserir.SQL.Add('idproduto= :pidproduto,'); QryInserir.SQL.Add('idpedido= :pidpedido,'); QryInserir.SQL.Add('qtde= :pqtde'); QryInserir.SQL.Add('vunitario= :pvunitario'); QryInserir.SQL.Add('vrtotalitem= :pvrtotalitem'); QryInserir.SQL.Add('where id= :pid'); QryInserir.ParamByName('pid').AsInteger :=fid; end; QryInserir.ParamByName('pidproduto').AsInteger :=fidproduto; QryInserir.ParamByName('pidpedido').AsInteger :=fidpedido; QryInserir.ParamByName('pqtde').AsFloat:=fqtde; QryInserir.ParamByName('pvunitario').AsFloat:=fvunitario; QryInserir.ParamByName('pvrtotalitem').AsFloat:=fvrtotalitem; QryInserir.ExecSQL; Result :=true; except on E : Exception do begin erro := E.Message; Result :=false; end; end; finally QryInserir.Destroy; end; end; function TItemPedido.somaItensPedido(idPedido: integer): Real; begin try //fConexao.Connected :=false; //fConexao.Connected :=true; Qry.Close; Qry.SQL.Clear; Qry.sql.Add('SELECT'); Qry.sql.Add(' sum(qtde*vunitario) AS TOTAL_PEDIDO'); Qry.sql.Add('FROM'); Qry.sql.Add(' itempedido'); Qry.sql.Add('Where idpedido='+QuotedStr(IntToStr(idPedido))); Qry.Open(); finally Result :=Qry.FieldByName('TOTAL_PEDIDO').AsFloat; end; end; end.
  24. Mas já estou com TFDPhysMySQLDriverLink incluido no datamodule, os componentes e mesma coisa de trabalhar que Firebird ou Postgress Esses dois links que vc citou nada funciona!, eu já tinha lido eles
  25. Pessoal, estou tendo este erro na conexão com MySQL Quando vou no FDConnection e clico pra testar recebo o erro: cannot load vendor library libmysql.dll se eu executo o .exe faz conexão, mas preciso funcionando na IDE pra desenvolvimento . Eu já fiz de tudo, já deixei como 32bits na IDE e 64. Já peguei tanto as DLL 32/64 em https://dev.mysql.com/downloads/mysql/ e coloquei tanto no diretorio do executavel quanto na pasta bin do delphi, ou no windows. Nada funciona, impressionante tentei de um tudo que se fala no google, algo simples mas que já demorei horas e não sai do lugar. Já peguei a DLL a dll da pasta C:\Program Files\MySQL\MySQL Server 8.0\lib e coloquei junto do executavel - Dai o executavel para de funciona reclamando da arquitetura x64 required x86, ok, compilei em x64 resolveu o problema do .exe mas continua na IDE com mesma jaca, o .exe funciona tanto em 32/64 mas na IDE de forma alguma consigo fazer o teste consequentemente vou conseguir rodar nenhum comando pra dev
×
×
  • 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...