Ir para conteúdo
  • Cadastre-se

hleorj

Moderadores
  • Total de ítens

    1.303
  • Registro em

  • Última visita

  • Days Won

    9

Posts postados por hleorj

  1. 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 ? )

     

     

     

     

  2. 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.

    • Curtir 1
  3. Ficar isto padrão ????

    function ReverterFiltroTextoXML(aTexto: AnsiString): AnsiString;
    var p1,p2:Integer;
        vHex,vStr:String;
    begin
      aTexto := StringReplace(aTexto, '&amp;' , '&' , [rfReplaceAll]);
      aTexto := StringReplace(aTexto, '&lt;'  , '<' , [rfReplaceAll]);
      aTexto := StringReplace(aTexto, '&gt;'  , '>' , [rfReplaceAll]);
      aTexto := StringReplace(aTexto, '&quot;', '"' , [rfReplaceAll]);
      aTexto := StringReplace(aTexto, '&#39;' , #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.

  4. 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.

  5. 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 :

    Texto.thumb.png.cc706fa3964972d5efd76b0e

    me causando erro  no tamanho da informação ( 62 caracteres )

    SalvarExemplo.thumb.png.71e4e427b93d0e13

    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 ? 

     

     

     

     

  6. 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. :-D

  7. 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 .

     

    • Curtir 1
  8. 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

  9. 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

    ACBrNFeDANFeRLRetrato.pas

    ACBrNFeDANFeRLPaisagem.pas

    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. 

     

    • Curtir 1
  10. 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 ===

    DAnfes.rar

    ========

    • Curtir 2
  11. 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

    AD35151011111111111111591234567890000366552201.xml

    Oportunidade para fazer uma auditoria / consultoria no software do contator.

    Ps : Cobre por hora

  12. 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.

    DANFeRetrato.fr3

    Use DanfeRetratoNovo.fr3 ou DanfeRetratoNovo_DC.fr3.

  13. 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,00

    Na 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 ???

×
×
  • 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.