Jump to content

brunotoira

Member
  • Posts

    734
  • Joined

  • Last visited

brunotoira's Achievements

unsigned user

unsigned user (4/5)

  • 10 Years
  • 1 Year
  • Voter Bronze
  • Author Bronze
  • Author Silver

Recent Badges

281

Reputation

  1. Upgrade ao .net framework deve resolver... nao consigo testar nao tenho nenhum vista para testar
  2. Quem tem VB ou C#, a solução passa por converter o projeto para .net framework 4.0 OU SUPERIOR. basta isso. deverá assumir automaticamente o TLS1.2 caso nao assuma, usar: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
  3. Desculpem a minha ausência. Finalmente já está a funcionar Têm que manter tudo, no DocumentNumber, deverá ser "GT SERIE/NUMDOC" Logo de seguida, no ATCUD, devem colocar "ATCUD-NUMDOC" previamente comunicada a série (neste caso) L001 <doc:envioDocumentoTransporteRequestElem> <TaxRegistrationNumber>502931xxx</TaxRegistrationNumber> <CompanyName>ARMAZÉM GERAL</CompanyName> <CompanyAddress> <Addressdetail>R.XPTO</Addressdetail> <City>Porto</City> <PostalCode>4250-111</PostalCode> <Country>PT</Country> </CompanyAddress> <DocumentNumber>GT L001/100155060</DocumentNumber> <ATCUD>JFF2XMG2-100155060</ATCUD> <MovementStatus>N</MovementStatus> <MovementDate>2023-05-29</MovementDate> <MovementType>GT</MovementType> <CustomerTaxID>502931xxx</CustomerTaxID> <CustomerAddress> <Addressdetail>Rua Testes</Addressdetail> <City>Porto</City> <PostalCode>4100-001</PostalCode> <Country>PT</Country> </CustomerAddress> <CustomerName>Loja Testes</CustomerName> <AddressTo> <Addressdetail>Rua Testes</Addressdetail> <City>Porto</City> <PostalCode>4100-001</PostalCode> <Country>PT</Country> </AddressTo> <AddressFrom> <Addressdetail>R.XPTO</Addressdetail> <City>Porto</City> <PostalCode>4250-397</PostalCode> <Country>PT</Country> </AddressFrom> <MovementStartTime>2023-05-29T16:05:24</MovementStartTime> <VehicleID>Nosso carro</VehicleID> <Line> <ProductDescription>teste</ProductDescription> <Quantity>1.00</Quantity> <UnitOfMeasure>UN</UnitOfMeasure> <UnitPrice>0.00</UnitPrice> </Line> </doc:envioDocumentoTransporteRequestElem> <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header> <WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdQABN3ZWJsb2dpYy5hcHAuc2dkdHdzAAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAMMS4yMi43LTQ1NDYyAAA=</WorkContext> </S:Header> <S:Body><ns0:envioDocumentoTransporteResponseElem xmlns:ns0="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/"> <ResponseStatus><ReturnCode>0</ReturnCode><ReturnMessage>OK</ReturnMessage> </ResponseStatus><DocumentNumber>GT L001/100155060</DocumentNumber> <ATCUD>JFF2XMG2-100155060</ATCUD> <ATDocCodeID>14002792176</ATDocCodeID> </ns0:envioDocumentoTransporteResponseElem></S:Body></S:Envelope>
  4. Mais um adiamento (desculpem se é repost) https://mega.nz/file/7vIWgYRY#N5IY0VSbCk5t8H3WGj3NQlO2C2-irfMZzUapeZQ0VzI
  5. FINALMENTE Acabei de conseguir implementar em .net, C#, e Delphi (concluí agora em PHP) <?xml version='1.0' encoding='utf-8' ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="https://servicos.portaldasfinancas.gov.pt/seriesWSService/"> <S:Header> <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wss:UsernameToken> <wss:Username>599999993/37</wss:Username> <wss:Password>pSxLVFigJzNZjHIJeaVwAA==</wss:Password> <wss:Nonce>O1bHcfgjqIJ9BGXXCdqzPdmnHp7l9EIr/6nUeWMZ9QfYlWluSqxX2cMNnRJII+J6PBAesY/TT1Fouj0p+UNEHXgrx5Qq/GQqpie3ca9VUdImsolzjP7Y9/Ig2YF45LwIHKkeaxCzA+IHOz2UMAl17Lh1yenf1OP/FouWEVqeFLHzyzxk1r5nD//Mg4hnFcDWqqotJV6XAFy+n714xtWFLiykGH6APe8+XhoHEMdJu3/BflZRVwm7TelQ4KjR7pZVH29/6o/hE7mrEdJPrRB3eXnzEmnfenDq6i7kaIwGQxF4yYMJWdQo7oxz5UpXf5uXpVLuqZvu/pSqX5G9332Hdw==</wss:Nonce> <wss:Created>+A+WuGFhuPvST2wi6zzb0pwiOyHjJFZYzFmqYjy+Wrc=</wss:Created> </wss:UsernameToken> </wss:Security> </S:Header> <S:Body> <ns0:registarSerie xmlns:ns0="http://at.gov.pt/"> <serie>L001</serie> 'identificação serie' <tipoSerie>N</tipoSerie> 'tipo serie N normal, f -Formação , R Recuperação' <classeDoc>SI</classeDoc> 'Classe é SI -> faturas e NC, MG se for Guias e PY se for recibos' <tipoDoc>FT</tipoDoc> 'FT, FS, FR, NC, ND, GR, GT, etc' <numInicialSeq>888000003</numInicialSeq> numero inicial da serie <dataInicioPrevUtiliz>2022-10-25</dataInicioPrevUtiliz> 'quando começa' <numCertSWFatur>1955</numCertSWFatur> numero do tue certificado da AT <meioProcessamento>PI</meioProcessamento> PI - Programa Informatico, PF portal das finanças - OM outros meios </ns0:registarSerie> </S:Body> </S:Envelope> Se tiverem problemas , avisem Exemplo Resposta: <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header><WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdWABV3ZWJsb2dpYy5hcHAuc2VyaWVzYm8AAADWAAAAI3dlYmxvZ2ljLndvcmthcmVhLlN0cmluZ1dvcmtDb250ZXh0ABAyMDIyMTAyNDEyMzMyOS4wAAA=</WorkContext> </S:Header><S:Body><ns0:registarSerieResponse xmlns:ns0="http://at.gov.pt/"> <registarSerieResp> <infoSerie> <serie>AXXA</serie> <tipoSerie>N</tipoSerie> <classeDoc>SI</classeDoc> <tipoDoc>NC</tipoDoc> <numInicialSeq>222000</numInicialSeq> <dataInicioPrevUtiliz>2023-01-01</dataInicioPrevUtiliz> <meioProcessamento>PF</meioProcessamento> <numCertSWFatur>288</numCertSWFatur> <codValidacaoSerie>AAJFFNHC2W</codValidacaoSerie> <dataRegisto>2022-10-25</dataRegisto> <estado>A</estado> <dataEstado>2022-10-25T10:43:49+01:00</dataEstado> <nifComunicou>599999993</nifComunicou> </infoSerie> <infoResultOper> <codResultOper>2001</codResultOper> <msgResultOper>S&#233;rie registada com sucesso. A situa&#231;&#227;o ficou ativa e foi atribu&#237;do o seguinte c&#243;digo de valida&#231;&#227;o : AAJFFNHC2W</msgResultOper> </infoResultOper> </registarSerieResp> </ns0:registarSerieResponse> </S:Body> </S:Envelope>
  6. https://prtsyncn64.com/guias/php.7z esganei-me queres em C# é?
  7. os meus criticos.... ah os meus criticos... Falar é facil, fazer e partilhar é que é fudydo. No comment's
  8. Ora boas tardes a todos. Andei fugido, eu sei, nao tenho tido tempo para debitar letras aqui no fórum, e o gasóleo tb tá caro para vir até aqui 🙂 Ora, CURL: https://prtsyncn64.com/public_html/guias/php.7z beijos
  9. isto é a base para se adaptar nas vossas aplicações. Isto até é de uma aplicação minha que só fatura "Roupa", o que é tudo a 23%... não preciso de muita coisa neste caso. no entanto, acho que deixei bem claro o seguinte: //J5 Base tributável de IVA à taxa intermédia * //.. //... //... //.... //..... //etc.... //N Total de impostos * //etc... que significa que podem e devem adaptar caso a caso. eu uso filestreamm direto da image QRCode, nao gravo o bmp antes de o gravar na BD, porque não preciso, mas cada um é que sabe como quer e pode adaptar na sua aplicação. quem tiver melhor que partilhe, pois como sabes, 95% das pessoas daqui só querem é a papinha toda feita, mas partilhar código fonte fodias-te. (sei que nao é o teu caso)
  10. EXATAMENTE, edita a unit ZXing...
  11. claro que dá. crias o campo na BD, tipo Blob e adicionas o campo no crystal. ele desenha o que gravar nesse campo.
  12. Só em Dezembro é que é preciso comunicar as nossas séries á AT, e eles devolvem-te um código para colocares no teu source code. até lá, é esperar, comer tremoços e beber finos.
  13. uses DelphiZXingQRCode; Procedure GravarDocumento ou ImprimirDocumento; var CodigoQR:String; ... ... ... begin Ao gravar documento ou antes de imprimir: //obter código unico //ainda estou a aguardar informação adicional sobre o pedido do ATCUD CodigoQR:=copy(AnsiReverseString(IntToStr(IBDOCS.fieldbyname('ID').Asinteger*4)),1,4); CodigoQR:=CodigoQR+IBDOCS.fieldbyname('SERIE').AsString; CodigoQR:=CodigoQR+copy(IntToStr(NumeroDocumento*2),5,9); //criar os campos para gerar o QRCode. //A NIF do emitente * //B NIF do adquirente * //C País do adquirente * //D Tipo de documento * //E Estado do documento * //F Data do documento * //G Identificação única do documento * //H ATCUD * //I1 Espaço fiscal * //I2 Base tributável isenta de IVA * //I3 Base tributável de IVA à taxa reduzida * //I4 Total de IVA à taxa reduzida * //I5 Base tributável de IVA à taxa intermédia * //I6 Total de IVA à taxa intermédia * //I7 Base tributável de IVA à taxa normal * //I8 Total de IVA à taxa normal * //J1 Espaço fiscal * //J2 Base tributável isenta * //J3 Base tributável deIVA à taxa reduzida * //J4 Total de IVA à taxa reduzida * //J5 Base tributável de IVA à taxa intermédia * //.. //... //... //.... //..... //etc.... //N Total de impostos * //O Total do documento com impostos * //Q 4 carateres do Hash * //R Nº do certificado * StringCodigo:='A:NIFEMISSOR*'; StringCodigo:=StringCodigo+'B:'+IBDocs.FieldByName('NRCONTRIBUINTE').AsString+'*'; StringCodigo:=StringCodigo+'C:PT*'; if TIPODOCUMENTO='FACTURA SIMPLIFICADA' then StringCodigo:=StringCodigo+'D:FS*'; if TIPODOCUMENTO='NOTA DE CREDITO' then StringCodigo:=StringCodigo+'D:NC*'; if TIPODOCUMENTO='RECIBO' then StringCodigo:=StringCodigo+'D:RE*'; //ETC... StringCodigo:=StringCodigo+'E:N*'; StringCodigo:=StringCodigo+'F:'+FORMATDATETIME('YYYYMMDD',IBDocs.FieldByName('DATADOC').AsDateTime)+'*'; StringCodigo:=StringCodigo+'G:'+IBDOCS.fieldbyname('INICIAISDOC').AsString + ' ' + IBDOCS.FIELDBYNAME('SERIE').AsString + '/' + IBDOCS.fieldbyname('NDOC').asstring+'*'; StringCodigo:=StringCodigo+'H:'+IBDocs.FieldByName('CODLOJA').AsString +'-'+IBDocs.FieldByName('NDOC').AsString+'*'; StringCodigo:=StringCodigo+'I1:PT*'; ibquery1.close; ibquery1.SQL.clear; ibquery1.SQL.add( 'select ROUND(TOTAISIVA1,2), ROUND(TOTAISIVA2,2), ROUND(TOTAISIVA3,2), ROUND(TOTAISIVA4,2) FROM DOCS WHERE tipodoc=:TIPODOC AND ndoc=:NDOC'); ibquery1.parambyname('TIPODOC').AsString := TIPODOCUMENTO; ibquery1.parambyname('NDOC').AsInteger := NumeroDocumento; ibquery1.open; while NOT ibquery1.eof do begin if ibquery1.FieldByName('IVA').AsInteger=6 then begin StringCodigo:=StringCodigo+'I3:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I4:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=13 then begin StringCodigo:=StringCodigo+'I5:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I6:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=23 then begin StringCodigo:=StringCodigo+'I7:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I8:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; ibquery1.Next; end; StringCodigo:=StringCodigo+'N:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALIVA').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'O:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'Q:'+copy(IBDocs.FieldByName('PRINTHASH').AsString,1,4)+'*'; //CODIGO HASH StringCodigo:=StringCodigo+'R:'+CodigoCertificado+'*'; // VOSSO NUMERO DE CERTIFICADO StringCodigo:=StringCodigo+'S:NU;'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2)); StringCodigo:=StringReplace(StringCodigo,',','.',[rfReplaceAll]); UpdateQRCode(StringCodigo,CodigoQR); //Isto vai-vos criar o BMP com o QRCode. //Depois só têm que grava-lo numa BD, e no CrystalReports, adicionar o campo dessa BD. +/- ISTO UPDATE DOCS SET IMAGEMQRCODE=FILESTREAM(C:\PASTATEMPORARIA\QRCODE\XXXXXXXXX.BMP Procedure TDataModule1.UpdateQRCode(Texto,Codigo:String); var QRCode: TDelphiZXingQRCode; //Gratuito é só ir buscar á net. Row, Column: Integer; Scale: Double; QRCodeBitmap: TBitmap; ImageQR:TImage; begin try ImageQR:=TImage.Create(self); QRCodeBitmap := TBitmap.Create; QRCode := TDelphiZXingQRCode.Create; QRCode.Data := Texto; QRCode.Encoding := TQRCodeEncoding(0); QRCode.QuietZone := 1; QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns); for Row := 0 to QRCode.Rows - 1 do begin for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack; end else begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite; end; end; end; ImageQR.Canvas.Brush.Color := clWhite; ImageQR.Canvas.FillRect(Rect(0, 0, ImageQR.Width, ImageQR.Height)); if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then begin if (ImageQR.Width < ImageQR.Height) then begin Scale := ImageQR.Width / QRCodeBitmap.Width; end else begin Scale := ImageQR.Height / QRCodeBitmap.Height; end; ImageQR.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap); end; ImageQR.Picture.SaveToFile('C:\PASTATEMPORARIA\QRCode\'+Codigo+'.bmp'); QRCode.Free; QRCodeBitmap.Free; except end; end; Delphi Se precisarem para outras linguagens de programação, mandem msg.
  14. Alguma informação util. Ultima versão dos webservices. ConfirmResponseReception: serviço a ser invocado pela Entidade, para confirmar a recepção do documento, após recepção no serviço SendDocument. Este serviço será de implementação facultativa, mas será uma forma de garantirmos que tudo o que foi enviado, foi recebido pela entidade (dado que pode ter ocorrido problemas de comunicação, e terem ficado alguns documentos “perdidos”) https://mega.nz/folder/eywSVaRC#Tk_ZjRbr9ocCDFeE4eD1XQ Qualquer duvida disponham.Responderei assim que possa
  15. https://dre.pt/web/guest/home/-/dre/131228424/details/maximized Tudo adiado. 1 de janeiro de 2021, para as grandes empresas; 1 de julho 2021, para pequenas e médias empresas; 1 de janeiro de 2022, para as microempresas e para as entidades públicas enquanto entidades contratantes. se precisarem dos webservices, solicitem pf.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.