-
Total de ítens
1.303 -
Registro em
-
Última visita
-
Days Won
9
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por hleorj
-
-
Segue Refatoração
-
-
Tive que criar uma função para remove espaços duplos para o meu caso, pois os dados que estão no xml.
Os dados que estão no banco foram adicionados através de importação , onde pode haver :
Tab -> chr( 9 ) ou
Line Feed -> chr( 10 ) ou
Carriage return-> chr( 12 ) ou
Espaços duplos -> chr( 32 )+chr( 32 ).
const NativeLineFeed = Char(#10); NativeCarriageReturn = Char(#13); Function RemoveDuplos( Const s : AnsiString ) : AnsiString; procedure SkipBlanks(var S: AnsiString; StringLength: Cardinal; var ReadIndex: Cardinal); begin while ReadIndex < StringLength do begin if S[ReadIndex] = NativeCarriageReturn then S[ReadIndex] := NativeLineFeed else if S[ReadIndex + 1] = NativeCarriageReturn then S[ReadIndex + 1] := NativeLineFeed; if (S[ReadIndex] < #33) and (S[ReadIndex] = S[ReadIndex + 1]) then Begin Inc(ReadIndex) End else exit; end; end; var StringLength, ReadIndex, WriteIndex: Cardinal; begin Result := S; ReadIndex := 1; WriteIndex := 1; StringLength := Length(Result); while ReadIndex <= StringLength do begin SkipBlanks( Result , StringLength, ReadIndex); Result[WriteIndex] := Result[ReadIndex]; Inc(WriteIndex); Inc(ReadIndex); end; SetLength(Result, WriteIndex - 1); end;
Caso tenham este problema na importação, segue trecho de minha implementação :
with Det.Items[I] do begin Nota_it_ent.Chave := 0; Nota_it_ent.situacao := ''; Fornecedor.codforn := Prod.cProd; Fornecedor.descricao := copy( RemoveDuplos( Prod.xProd) ,1,60); if Fornecedor.ManterTrans then Estoque.ObterProduto( Fornecedor.codigo ) else Estoque.ObterProduto( Prod.cProd);
Ps : Implementar a função RemoveDuplos no componente requer mas testes.
( AVISADOS ? )
-
Pois é Juliomar, não veja a faca nem o queijo, gostaria de encontrar o fio a meada...
delphi7, win7 trunk2
Obrigado,
Leão
Para encontrar o fio meada : basta debugar com D7 , cada rotina do componente, .. te dou um grande apoio moral de coração aberto.
- 1
-
-
-
A ideia não é transformar todos os espaços duplos em simples ??
De uma olhada nos fontes do método indicado, na ACBrUtil.pas
Daniel , o problema começa aqui
function TNotasFiscais.LoadFromFile(CaminhoArquivo: String; AGerarNFe: Boolean = True): Boolean;
-
Sim ela faz isto. Mas o problema é o espaço duplo existente que não aparece no XML. Se conta 60 caracteres e ao chegar no ponto parado apresentar 62 caracteres. Diferente da descrição original.
Farei um debug mas detalhado. De cada passo do ler XML.
-
Ficar isto padrão ????
function ReverterFiltroTextoXML(aTexto: AnsiString): AnsiString; var p1,p2:Integer; vHex,vStr:String; begin aTexto := StringReplace(aTexto, '&' , '&' , [rfReplaceAll]); aTexto := StringReplace(aTexto, '<' , '<' , [rfReplaceAll]); aTexto := StringReplace(aTexto, '>' , '>' , [rfReplaceAll]); aTexto := StringReplace(aTexto, '"', '"' , [rfReplaceAll]); aTexto := StringReplace(aTexto, ''' , #39 , [rfReplaceAll]); aTexto := RemoverEspacosDuplos(aTexto); <<<==== nova linha ++ p1 := Pos('&#x',aTexto); while p1>0 do begin for p2:=p1 to Length(aTexto) do if aTexto[p2]=';' then break; vHex:=Copy(aTexto,p1,p2-p1+1); vStr:=StringReplace(vHex,'&#x','',[rfReplaceAll]); vStr:=StringReplace(vStr,';','',[rfReplaceAll]); vStr:=HexToAscii(vStr); aTexto:=StringReplace(aTexto,vHex,vStr,[rfReplaceAll]); p1:=Pos('&#x',aTexto); end; result := Trim(aTexto); end;
daria problema em algum momento, pois qualquer string com Espaço duplo seria removida.
-
Pode se estivermos vendo endereços errados sim.. o que subi foi no trunk2 !
está certo o endereço pra ti?
outra coisa seus arquivos estão todos verdes ou diferentes? dai o svn vai ignorar e não irá atualizar
Estava no trunk, e não no trunk2! peço desculpas;
Espero que você tenha feito as alterações nos seus arquivos originais e não tenha copiado os meus porque são da trunk; vou proceder meu sistemas para trunk2, alguma dica para uma troca menos turbulenta ?
Agradeço a troca de informações, e desculpa qualquer coisa;Tenha : Tempo disponível..café ..não durma antes das 2 da manha ..Leia as dicas do fórum.
-
Ao fazer uma importação dos dados de produtos para uma tabela de banco de dados.
Num devido item na descrição do produto, segue :
me causando erro no tamanho da informação ( 62 caracteres )
No xml RPFX 0100 0 FLEXIVEL FREIO HIDR DIANT DIR 93248636 (FH02310) No banco RPFX 0100 0 FLEXIVEL FREIO HIDR DIANT DIR 93248636 (FH02310)
Conclusão no texto do xml existe um espaço duplo que não foi tratado pela função
Na Figura Exemplo para voltar para 60 caracteres removendo os espaços duplos
aTexto := StringReplace(aTexto, ' ' , ' ' , [rfReplaceAll]);
Alguma dica para solucionar e ser implantada na função ?
-
Adorei o abreviar detalhamento. Ter um padrão será sempre o objetivo. Tenho certeza que sua ideia com o desenvolvimento será padrão.
PS : trabalhe para ter um padrão que não seje refatorado.
-
Sim fiz isso mesmo Henrique!
subi no svn a correção de numeração de páginas pra todos!
uma coisa é que teremos que diminuir a gama de arquivos
deixando um normal outro para o simples de cada modelo! senão teremos muita dor de cabeça na manutenção!
correto.nas danfes do SVN .. existem diferenças entre elas dentro de pouco tempo poderá uma enviar para uma pasta versões obsoletas.. assim é meu pensamento.
as versões _Dc são as mas compatíveis com o código do SVN. , sugiro mas um tempo para torna-las oficiais. removendo o _DC .
- 1
-
Uma pergunta antes de alterar estava com o svn atualizado?
Sim, o diretório ACBRNFe2\trunk\Exemplos\ACBrNFe2\Delphi\Report, acabei de confirmar tentando atualizar novamente e tenho apenas a resposta Concluído Na revisão: 10287.
Verificar as finais com _DC.fr3
para praticar as mesmas atualizacoes
-
Atualize a sua versão do Fast que aceite scripts ... procure no post forum as soluçôes de outros usúarios.
-
No svn lembrando que se alguém ver que não pode ser assim abreviado será retornado!
Pode reverter para a versão anterior..para manter o padrão de outras rotinas.
-
Qual danfe em fast? Use danferetratonovo.fr3 ou danferetratonovo_DC.fr3 para retrato. A paisagem possui erros que serão ajustados com o devido tempo.
Vc tem atualizado o acbr ?
-
Estive ausente nos últimos dois dias e só agora pude baixar e testar as mudanças feitas e unificação das propriedades QuebraLinhaEm... para uma genérica, ficou melhor sim, mas fiz outras modificações:
1) No Fortes, modelo Paisagem, não havia sido aplicada a refatoração para o detalhamento dos medicamentos.
2) No caso específico de Medicamentos, quando estiver configurado para não efetuar a quebra de linha, abreviei as strings fixas, pois como o objetivo é fazer com que o detalhamento ocupe o menor número de linhas possível, as strings originais acabavam ocupando vários caracteres quebrando automaticamente em várias linhas as informações. Com isso, um danfe em formato paisagem (por ex) com apenas dois ou três produtos acaba gerando duas páginas, mesmo com a quebra linha configurada para "false".
Pessoalmente, abreviado achei que ficou mais eficiente, pois em alguns clientes que usam medicamentos, passou a gerar mais uma página desnecessariamente quando as strings estão completas.
Se for possível subir no SVN assim eu ficaria grato!
Espero ter contribuído com o projeto!
Segue anexo arquivos alterados.
[]s
Luis
Pode abrir o projeto em Fast e aplicar as mesmas configurações ..
Mesmo não usando Danfe Fast ser pode alterar o código fonte ( ACBrNFeDANFEFRDM.pas )
E de interesse que Danfe Fast e Forte.. tenham o mesmo tratamento.
Com relação ao seu codigo :
if fQuebraLinhaEmDetalhamentoEspecifico then begin if dm_nLote in FDetMedicamentos then Result := Result + ACBrStr('NÚMERO DO LOTE: ') + med.Items[i].nLote + sQuebraLinha; if dm_qLote in FDetMedicamentos then Result := Result + ACBrStr('QUANTIDADE DO LOTE: ' )+ FormatFloat('###,##0.000', med.Items[i].qLote) + sQuebraLinha; if dm_dFab in FDetMedicamentos then Result := Result + ACBrStr('DATA DE FABRICAÇÃO: ') + DateToStr(med.Items[i].dFab) + sQuebraLinha; if dm_dVal in FDetMedicamentos then Result := Result + ACBrStr('DATA DE VALIDADE: ') + DateToStr(med.Items[i].dVal) + sQuebraLinha; if dm_vPMC in FDetMedicamentos then Result := Result + ACBrStr('PREÇO MÁX. CONSUMIDOR: R$ ') + FormatFloat('###,##0.00', med.Items[i].vPMC) + #13#10; end else begin if dm_nLote in FDetMedicamentos then Result := Result + ACBrStr('LOTE:') + med.Items[i].nLote + ' '; if dm_qLote in FDetMedicamentos then Result := Result + ACBrStr('QTD:' )+ FormatFloat('###,##0.000', med.Items[i].qLote) + ' '; if dm_dFab in FDetMedicamentos then Result := Result + ACBrStr('FAB:') + DateToStr(med.Items[i].dFab) + ' '; if dm_dVal in FDetMedicamentos then Result := Result + ACBrStr('VAL:') + DateToStr(med.Items[i].dVal) + ' '; if dm_vPMC in FDetMedicamentos then Result := Result + ACBrStr('PREÇO MÁX. CONSUMIDOR: R$ ') + FormatFloat('###,##0.00', med.Items[i].vPMC) + #13#10; end;
Poderia fornecer arquivo xml com dados de medicamentos para se fazer um estudo , pois o código acima não esta seguindo o padrão de quebralinhaDetalhamentosEspecifico de outras rotinas.
Obrigado por qualquer coisa.
- 1
-
Segue refatoração da Revisão
- Incluída a variavél sQuebraLinha : String;
sQuebraLinha := QuebraLinha;
- Incluída a Função Quebralinha.
Para Fast :
Function .TACBrNFeFRClass.QuebraLinha : String; begin if fQuebraLinhaEmDetalhamentoEspecifico then Result := ';' else Result := ' - '; end;
Para Fortes :
Function TfrlDANFeRL.QuebraLinha : String; begin if fQuebraLinhaEmDetalhamentoEspecifico then Result := #13#10 else Result := ' - '; end;
== == unit ===
========
- 2
-
Obrigado!
já está no svn!
Posso melhorar o SVN ?
-
O Imposto.ICMS.pICMS não existe quando o Imposto.ICMS.CSOSN for igual a csosn102.
Preencha da seguinte forma e veja que o a tag pICMS não irá aparecer no XML.
Imposto.ICMS.CSOSN := csosn102; Imposto.PIS.CST := pis49; Imposto.COFINS.CST := cof49;
Ficará dessa forma:
<ICMS> <ICMSSN102> <Orig>0</Orig> <CSOSN>102</CSOSN> </ICMSSN102> </ICMS>
Muitíssimo obrigada pelas respostas.
Masss, rsrsrs
No xml não aparece mesmo, nem se eu colocar Imposto.ICMS.pICMS := 0;
Nos meus xmls quando ocorre a situação do icms 102 estão sempre aparecendo da maneira que você descreveu acima.
Está idêntico. A minha dúvida é em relação ao contador que está dizendo que quando importa o xml para o programa dele aparece que o produto é "ISENTO DE ICMS".
A pergunta é a seguinte: Está certo isso? Aparece mesmo? É normal?
Ou o contador está fazendo algo de errado?
Vou colocar em anexo o XML para conferência.Novamente, muito obrigada
Oportunidade para fazer uma auditoria / consultoria no software do contator.
Ps : Cobre por hora
-
Boa tarde pessoal,
Sou usuário do componente ACBR a algum tempo e gosto muito do mesmo. Parabéns pelo trabalho.
Bem, não se estou no lugar correto para fazer essa postagem mas achei que tem a ver.
No danferetrato.fr3 no cabeçalho da nota e na identificação, serie e folhas tem um pequenino erro de apresentação do total das páginas onde esta sendo usado a variavel do fast TotalPages ao invés de TotalPages#, fiz o ajuste e gostaria que fosse colocado essa correção no ambiente.
Obrigado.
Segue em anexo o danfe ajustado.
Use DanfeRetratoNovo.fr3 ou DanfeRetratoNovo_DC.fr3.
-
Olá pessoal, não sei se esse é o local mais indicado para fazer esta pergunta, mas não sei onde fazer =\
Instalei o sat em vários clientes. Um contador de um desses clientes está dizendo que o cupom está sendo emitido de forma errônea.
Ele me pediu para colocar os seguintes campos na tributação
ICMS: 102
Alíquota do ICMS: 0,00
Origem: Nacional
PIS := 99
Alíquota do PIS: 0,00
COFINS := 99
Alíquota do Cofins := 0,00Na programação está sendo feito da seguinte maneira
Imposto.ICMS.CSOSN := csosn102;
Imposto.ICMS.pICMS := 0;
Imposto.PIS.CST := pis49;
Imposto.PIS.pPIS := 0;
Imposto.COFINS.CST := cof49;
Imposto.COFINS.pCOFINS := 0;
Observação: Quando coloco o PIS e o Cofins como 99 o aparelho sat não valida o xml, se coloco 49 que foi o que algumas pessoas me indicaram no caso do SAT, dá certo.
O contador me reportou que o ICMS está sendo registrado como "ISENTO DE ICMS" quando é importado para o programa da folhamatic e disse para mim que não pode registrar como "ISENTO DE ICMS" que está incorreto.
Já verifiquei o XML e está carregando exatamente estes campos que apresentei acima.
Perguntei para o contador o que deveria aparecer no lugar de "ISENTO DE ICMS" e ele não soube me responder.
A pergunta é a seguinte: O contador está falando bobagem? O programa da folhamatic é doido? Ou estou fazendo algo de errado?Obrigado a atenção de todos
A empresa esta no simples nacional ???
-
Bom,..vamos chegar numa acordo. ?
Sua solicitação não esta facilitando a identificação das devidas informações de crédito de icms para SN e muita gente vai que ter explicar o significado dos dados na danfe;
Alterar Tamanho de Logo, Posição do Nome da Empresa, Tamanho do Endereço
em ACBrNFe
Postado
Rodrigoogini , poderia informar de códigos de exemplo ?