Ir para conteúdo
  • Cadastre-se

amarildolacerda

Membros
  • Total de ítens

    186
  • Registro em

  • Última visita

Tudo que amarildolacerda postou

  1. O manual de orientação possui exemplos diversos para um único corpo de cancelamento. Não encontrei texto sobre a impressão de ambos, no entanto pode ser interessante -para controle interno. Como vc optou em dividir em duas partes creio que vai facilitar. Estes documentos impressos não tem valor fiscal, só tem validade o que se encontra registrado na SEFAZ, é uma questão mais de padronização e menos de comprovação fiscal. Impresso em dois corpos há a possibilidade de entrega de uma via para o cliente, quando couber. O cancelamento deveria ainda ter um local para assinaturas do cliente e do operador, já que a legislação geral determina tal procedimento, no entanto não consta do manual de orientação (assunto a parte).
  2. procedure TACBrSATExtratoESCPOS.ImprimirExtratoCancelamento(ACFe: TCFe; ACFeCanc: TCFeCanc); begin inherited; AtivarPosPrinter; GerarCabecalho; GerarTotais(True); GerarRodape(True, True); // amarildo lacerda - alterado para cortar papel GerarDadosCancelamento; ImprimirCopias; end; ACBrSATExtratoESCPOS.pas
  3. Tenho uma impressora WIFI Epson (testei na DASCOM também) e elas permitem imprimir direto na porta 9100 usando endereço IP. Alterei o ACBrDevice para aceitar PORTA=RAW://ip:port ACBrDevice.pas
  4. Daniel, olha esta. Concluido o teste unitário, passou tudo.... compilado com XE7, tanto no aplicativo final quando no ambiente de teste, tudo funcionando... Então enviei para o montador. Lá no montador, esta instalado um XE6... com XE6 não funcionou, dá um erro de acesso a memória e trava o aplicativo (quando vai fechar o cupom) e não sai do lugar... fica naquela janela de debug CPU do delphi mostrando os códigos hex. Investigando, mudei o varíavel "xSAT_EnviarDadosVenda" do TACBrSATDinamico_stdcall para fora do objecto... de tal forma que fosse possível chama-la independente do objeto... e alterei estas linhas: ------------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx------------------------------------------------------- function TACBrSAT.EnviarDadosVenda(dadosVenda : AnsiString) : String ; var NomeCFe,ret : String; begin fsComandoLog := 'EnviarDadosVenda( '+dadosVenda+' )'; if Trim(dadosVenda) = '' then raise EACBrSATErro.Create('Parâmetro: "dadosVenda" não informado'); IniciaComando; if fsConfigArquivos.SalvarEnvio then begin NomeCFe := CalcCFeNomeArq( fsConfigArquivos.PastaEnvio, fsConfigArquivos.PrefixoArqCFe + FormatDateTime('YYYYMMDDHHNNSS',Now) + '-' + IntToStrZero(numeroSessao, 6), '-env'); WriteToTXT(NomeCFe, dadosVenda, False, False); end; ret := Trim(dadosVenda); //ret := fsSATClass.EnviarDadosVenda( ret ); // debug ret := xSAT_EnviarDadosVenda( numeroSessao, PAnsiChar(codigoDeAtivacao), PAnsiChar(dadosVenda) ) ; Result := FinalizaComando( ret ); DecodificaRetorno6000; end ; -----------------------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx---------------------------------- Alterado isto, funcionou OK no XE6. Não entendi o que aconteceu, já que no XE7 a estrutura original funcionou correto... mas no XE6 falhou. Meus 20 anos de DELPHI não foram suficiente. Como estou usando o simulador, espero conseguir melhorias até chegar ao final. Vou encerrar esta etapa, agora vamos preparar um piloto.
  5. Aplicando teste unitário, notei que não estava passando o teste de desconto/acrescimo no total do cupom. Quando manda Desconto para o ECF, o valor do desconto vem negativo... então precisa inverter o sinal do desconto; Fiz a seguinte alteração procedure TACBrECFVirtualSATClass.SubtotalizaCupomVirtual( DescontoAcrescimo: Double; MensagemRodape: AnsiString); begin with fsACBrSAT do begin if DescontoAcrescimo > 0 then CFe.Total.DescAcrEntr.vAcresSubtot := DescontoAcrescimo else CFe.Total.DescAcrEntr.vDescSubtot := DescontoAcrescimo*(-1); // Amarildo Lacerda... checar com Daniel se esta correto... já que o dado vem negativo para desconto. CFe.InfAdic.infCpl := MensagemRodape; end; end; ACBrECFVirtualSAT.pas
  6. Hoje peguei uma epson para fazer teste; notei que não esta passando os parametros da serial para a virtual procedure TACBrECFVirtualPrinter.AtivarPosPrinter; begin if not Assigned( FPosPrinter ) then raise Exception.Create('Componente PosPrinter não associado'); if FPosPrinter.Porta = '' then begin FPosPrinter.Porta := TACBrECF( ECF ).Porta; FPosPrinter.Device.ParamsString := TACBrECF( ECF ).Device.DeviceToString(false); // Amarildo Lacerda - A PosPrinter deve receber a configuração da porta configurada na ACBrECF end; FPosPrinter.Ativar; end; ACBrECFVirtualPrinter.pas
  7. Alterei para o Trunk2, funcinou.
  8. Daniel, Conclui a atualização do componente SAT usando o trunk2. Ficou muito bom a nova estrutura, o anterior estava confuso, agora melhorou muito. Após associar todos os componentes, quando passava para abrir a porta da impressora, retornava um erro na ECFVirtual.... Observando o código notei que a sequencia estava tentando abrir a porta serial duas vezes... então fiz a seguinte alteração.... (funcionou). --------------------------------------------------------- procedure TACBrECFVirtualClass.Ativar; begin if not Assigned(ECFVirtual) then // Amarildo Lacerda -- estava abrindo a porta serial antes de abrir a virtual (quando usa ESCPOS - epson)... inherited Ativar; try LeArqINI ; AtivarVirtual; except Desativar ; raise ; end ; end; -------------------------------------------------------- No desenvolvimento, usei uma impressora DASCOM com ESCPOS da epson... Não esta imprimindo o QRCODE - ainda não olhei o que acontece, estou desconfiado que precisa fazer um código específico para ela - ou é porque estou com o simulador (vou olhar depois). Os outros comandos, funcionaram bem. O visual impresso do cupom, precisava dar uma melhorada. Antes, aquele que tem na NaoFiscal, sai legal, agora esta desalinhado no ESCPOS. ACBrECFVirtual.pas
  9. - Alterado para fazer o fechamento do cupom de Sangria, suprimento e outros cupons não fiscais. - incluido para checar durante a recuperação se o cupom anterior "pendente" era um cupom não fiscal e fazer o tratamento de cancelamento não fiscal em separado da rotina fiscal cupom. ACBrECFVirtualPrinter.pas ACBrECFVirtualSAT.pas
  10. Daniel, Ficou bom a alteração... Eu só tenho a Epson 01.01.00, não tenho como testar em outro modelo ou versão.
  11. Estava utilizando a versão 01.00 da Epson Modelo 800F (Convênio 09) ou brindada... Usando código EscPos estava na versao 01.00.00 da Epson, funcionava bem... (já havia concluído homologação com cliente) Na loja, recebemos a versão 01.01.00.... parou tudo, não subia nada... Olhando o ACBr da EscPos e algumas tentativas notei que a 01.01.00 passou a tratar alguns comandos de forma diferente. Segue a alteração para resolver: function TACBrECFEscECF.RetornaInfoECF(Registrador: String): AnsiString; begin if pos('|', Registrador) = 0 then begin if isEpson and (copy(fsNumVersao,1,4)='0101') then Registrador := Registrador + '|0' else Registrador := Registrador + '|'; end; ... .. ..
  12. Italo, você esta certo. A questão é que consigo justificar a falta de link no lado cliente, mas não consigo justificar se a SEFAZ fica indisponível e não tem um EPEC funcionando. Então me parece que devo fazer o que esta ao meu alcance. Nós já tentamos protocolar um pedido para autorizar funcionamento em contingência assinando localmente (sem EPEC), mas por enquanto não conseguimos convencer o agente a por o carimbo no pedido... ou seja, não conseguimos nem dar entrada no pedido - vamos tentar novamente, só aguardar um pouco o desenrolar com o SAT la na sefaz e encontrar um momento mais oportuno.
  13. Li os últimos posts, então fui olhar como nós configuramos.... aqui no nosso aplicativo a diretiva //{$DEFINE SoapHTTP} esta comentada. No passado, quanto tentamos desmarcar, apareceram alguns erros - quando notamos que funcionava certinho se a diretiva estivesse comentada. Vi uns posts anteriores falando de erros. Este mês o site de SP esteve uns dias em manutenção. Em produção ficamos um tempo sem poder transmitir, mas esta semana esta tudo normal... estamos transmitindo em produção regularmente. Em ambiente de homologação, tem uns horário que não funciona... é bom não se descabelar muito - se um passo estiver funcionando e logo em seguida ele para de funcionar.. espera um pouco (10-20 minutos) depois tenta novamente (eles ainda estão fazendo alterações na SEFAZ). Já melhorou bastante, mas é bom ficar atento. Os problemas que estamos enfrentando estão relacionado a disponibilidade de link e não de funcionamento do código. Visando isto, estou estudando a questão do EPEC para ver se consigo melhorar a disponibilidade do serviço. Não tenho experiência de como funciona o EPEC, tenho que aprender a mecânica da coisa ainda.
  14. Aqui nós vamos implementar o EPEC... Veja a situação. Esta semana recebemos comunicado da SEFAZ SP que a NFCe vai sair do ar durante 2 dias e que estará funcionando para EPEC... Estou olhando o ACBr para ver como fazer isto. Se alguem já fez alguma coisa, será util.
  15. Links de Sao Paulo case ALayOut of // WBA NFC-e SP LayNfeInutilizacao : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/nfeinutilizacao2.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/nfeinutilizacao2.asmx'); LayNfeConsulta : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/nfeconsulta2.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/nfeconsulta2.asmx'); LayNfeStatusServico : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx'); LayNfeCadastro : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://ncfe.fazenda.sp.gov.br/ws/cadconsultacadastro2.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/cadconsultacadastro2.asmx'); LayNFeCCe, LayNFeEvento : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/recepcaoevento.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/recepcaoevento.asmx'); LayNfeAutorizacao : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/nfeautorizacao.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/nfeautorizacao.asmx'); LayNfeRetAutorizacao : Result := DFeUtil.SeSenao(AAmbiente=1, 'https://nfce.fazenda.sp.gov.br/ws/nferetautorizacao.asmx' 'https://homologacao.nfce.fazenda.sp.gov.br/ws/nferetautorizacao.asmx'); end; Link QRCode: // WBA - SP 35: urlUF := DFeUtil.SeSenao(AAmbiente = taProducao, '', 'https://homologacao.nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaQRCode.aspx'); //SP OBS: somente os links de Homologação estão sendo ativados. Ainda não tem link de produção.
  16. Atualizando o Código. Inclui um projeto de exemplo para ilustrar como iniciar um terminal e como associar um programa para o mesmo. Fiz alguns ajustes no código para facilitar iniciar um terminal novo. Aproveitem. TerMultiProtocolo.zip
  17. Reconfigurei as propriedades de página no drive da impressora (estava configurado para usar A4, alterei para Letter). Tudo funcionou. Notei que o tamanho do papel que o RAVE estava alocando não era o esperado, após a reconfiguração, passou a pegar as informações corretas.
  18. Aconteceu o mesmo aqui... (Del2007 / Rave Retrato) nesta linha unit ACBrDANFeCBRaveRetrato; .. procedure ImprimirItens(PosX:Double); .... if (YPos+(aFontHeigth*QtdeMin))>FLastItens then begin Break; end else... YPos = 160... QtdeMin = 0 FLastItens = -35 Entra em loop ao executar o BREAK e retorna para gerar outra linha... Eu tenho um JPG associado; Tenho uma impressora configurada (LEXMARK).
  19. Estou voltando de férias e estou me inteirando das notícias. Já procurei na NET e não encontrei nada sobre a disponibilidade de algum equipamento SAT disponível para iniciar trabalhos. Alguém tem alguma notícia ?
  20. Eu uso o MadExcept. Estou recebendo "Report" nestas linhas: function AssinarMSXML(XML : AnsiString; Certificado : ICertificate2; out XMLAssinado : AnsiString): Boolean; --- linha: --> xmldoc.setProperty('SelectionNamespaces', DSIGNS); function ValidaMSXML(XML: AnsiString; out Msg: AnsiString; const APathSchemas: string = ''; AModeloDF: TpcnModeloDF = moNFe): Boolean; -- linha:--> Schema.add( 'http://www.portalfiscal.inf.br/nfe' schema_filename ); Em ambas indica que há uma "Variants" não liberada. Já fiz tentativas para ajustar, mas não obtive sucesso.
  21. Se a NFCe for emitida para um consumidor, onde só identifica o CPF, não pode enviar a tag xNome (vazia); Quando vazia RS esta criticando. em: pcnNFeW.pas procedure TNFeW.GerarDest; var UF: string; const HOM_NOME_DEST = 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL'; begin UF := ''; Gerador.wGrupo('dest', 'E01'); // Gerador.wCampoCNPJCPF('E02', 'E03', nfe.Dest.CNPJCPF, nfe.Dest.enderDest.cPais); if NFe.infNFe.Versao >= 3 then begin if NFe.Dest.idEstrangeiro <> '' then Gerador.wCampo(tcStr, 'E03a', 'idEstrangeiro', 01, 20, 1, NFe.Dest.idEstrangeiro, 'erro') else Gerador.wCampoCNPJCPF('E02', 'E03', NFe.Dest.CNPJCPF, NFe.Dest.enderDest.cPais); end else Gerador.wCampoCNPJCPF('E02', 'E03', NFe.Dest.CNPJCPF, NFe.Dest.enderDest.cPais); if NFe.ide.tpAmb = taProducao then begin //Alteração WBAGestão if (NFe.Dest.xNome<>'') or (NFe.ide.modelo <> 65) then // NFCe não pode enviar nome em branco Gerador.wCampo(tcStr, 'E04', 'xNome ', 02, 60, 1, NFe.Dest.xNome, DSC_XNOME); end else Gerador.wCampo(tcStr, 'E04', 'xNome ', 02, 60, 1, HOM_NOME_DEST, DSC_XNOME); if (NFe.ide.modelo <> 65) or (NFe.Dest.enderDest.xLgr <> '') then // AL - na NFCe não é obrigatorio informar endereço do destinatario begin (* *) GerarDestEnderDest(UF); if (NFe.ide.modelo <> 65) then begin Gerador.IDNivel := 'E01'; // Inscrição Estadual if NFe.Dest.IE = 'ISENTO' then Gerador.wCampo(tcStr, 'E17', 'IE ', 00, 14, 1, NFe.Dest.IE, DSC_IE) else if (Trim(NFe.Dest.IE) <> '') or (NFe.ide.modelo <> 65) then Gerador.wCampo(tcStr, 'E17', 'IE ', 00, 14, 1, SomenteNumeros(NFe.Dest.IE), DSC_IE); // if (length(nfe.Dest.CNPJCPF) = 11) and (SomenteNumeros(nfe.Dest.IE) <> '') then // Gerador.wAlerta('E17', 'IE', DSC_IE, ERR_MSG_INVALIDO); // Para MG produtor rural possui CPF e IE if (FOpcoes.ValidarInscricoes) and (NFe.Dest.IE <> '') and (NFe.Dest.IE <> 'ISENTO') then if not ValidarIE(NFe.Dest.IE, UF) then Gerador.wAlerta('E17', 'IE', DSC_IE, ERR_MSG_INVALIDO); Gerador.wCampo(tcStr, 'E18', 'ISUF ', 08, 09, 0, NFe.Dest.ISUF, DSC_ISUF); if (FOpcoes.ValidarInscricoes) and (NFe.Dest.ISUF <> '') then if not ValidarISUF(NFe.Dest.ISUF) then Gerador.wAlerta('E18', 'ISUF', DSC_ISUF, ERR_MSG_INVALIDO); Gerador.wCampo(tcStr, 'E19', 'email ', 01, 60, 0, NFe.Dest.Email, DSC_EMAIL); end; end; Gerador.wGrupo('/dest'); end;
  22. Alterações: |* - Incluido totalizador para cancelamentos |* - Incluido totalizador Desconto |* - Incluido totalizador Acrescimo |* - Alterado relatorio gerencial que estava mostrando errado totaldia II e do NN (AddBufferRelatorio)• |* - Incluido para ler o indice do registrador de impostos |* - Alterado de Private para Protected para permitir herança |* - Incluido metodos para complentar dados necessário para a NFC-e ACBrECFNaoFiscal.pas
  23. Italo, Vc tem razão, o LayNfeCancelamento não existe mesmo.... olhei o código e estou utilizando LayNFeEvento
  24. Incluido a descrição no IBPTax e o arquivo da versão 0.0.2 passou a ter 7 posições ao invés de 6 como estava previsto. Estava dando erro na sequencia dos registro em função do deslocamento de colunas. procedure TACBrIBPTax.PopularItens; var Item: TStringList; I: Integer; begin if Arquivo.Count <= 0 then raise EACBrIBPTax.Create('Arquivo de itens não foi baixado!'); FVersaoArquivo := ''; Itens.Clear; Item := TStringList.Create; try Item.Delimiter := ';'; // primeira linha contem os cabecalhos de campo e versão do arquivo Item.DelimitedText := Arquivo.Strings[0]; if Item.Count = 7 then FVersaoArquivo := Item.Strings[6]; // proximas linhas contem os registros for I := 1 to Arquivo.Count - 1 do begin Item.DelimitedText := Arquivo.Strings; if Item.Count >= 6 then begin with Itens.New do begin NCM := Item.Strings[0]; Excecao := Item.Strings[1]; Descricao := Item.Strings[3]; AliqNacional := StringToFloatDef(Item.Strings[4], 0.00); AliqImportado := StringToFloatDef(Item.Strings[5], 0.00); Tabela := TACBrIBPTaxTabela(StrToInt(Trim(Item.Strings[2]))); end; end; end; finally Item.Free; end; end;
×
×
  • 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.