Jump to content

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png click.png click.png

bylaardt

Membros
  • Posts

    27
  • Joined

  • Last visited

1 Follower

Recent Profile Visitors

810 profile views

bylaardt's Achievements

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator Rare
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

25

Reputation

2

Community Answers

  1. Qual distro? algumas distros já vêm com o FPC pré-instalado que conflita com a compilação do ppcx recomendo instalar o lazarus através do fpcupdeluxe, ele já reconfigura o fpc.cfg e você pode instalar todos os compiladores cruzados que precisar, sem alterar o fpc instalado em /usr/bin ou /usr/local/bin, não conflitando com a distro e permitindo instalar várias versões diferentes do lazarus e dp FPC em diretórios distintos. A versão mais atual você pode baixar daqui: https://github.com/LongDirtyAnimAlf/fpcupdeluxe/releases
  2. A divisão decimal sempre deve ser evitada, não importa a linguagem! E quando possível, primeiro multiplique, depois divida, veja o exemplo teórico: 3*(10/3) = 3* (3.33333333333) = 9.99999999999 3*10/3 = 30 / 3 = 10 creio que você resolveria o problema sem gambiarras se removesse os parêntese e apenas multiplicasse: 11000,00 * 0.022215 É importante também você converter para o formato correto do número, preferencialmente usando Currency ao invés de Extended: Lembre-se que a estrutura do Currency é basicamente um Int64 com quatro casas decimais
  3. procedure SetControlUpperCase(MyComponent:TWinControl); Var i:Integer; begin if MyComponent is TCustomComboBox then TCustomComboBox(MyComponent).CharCase:=ecUppercase else if MyComponent is TCustomEdit then TCustomEdit(MyComponent).CharCase:=ecUppercase; for i:=0 to MyComponent.ControlCount-1 do if MyComponent.Controls[i] is TWinControl then SetControlUpperCase(TWinControl(MyComponent.Controls[i])); end; depois é só chamar a procedure uma vez, exemplo: procedure TForm1.FormCreate(Sender: TObject); begin SetControlUpperCase(Self); end; com a vantagem de poder controlar por Tform, por Tpanel, ou qualquer outro TWinControl ou seus descendentes
  4. porque utf8 não é apenas 8bits (note que você usa [1] para limitar ao primeiro byte). não use OnKeyPress, caso queira colocar no evento apropriado, coloque em OnUTF8KeyPress e não limite à um byte a alteração com Uppercase Mas ainda acredito que apenas setar corretamente a propriedade Charcase deve resolver no seu caso.
  5. O Bug já foi corrigido em versões posteriores (trunk review 62806), mandei o patch em março. https://bugs.freepascal.org/view.php?id=36815 O problema só ocorre com compilação GTK2, se compilar para Qt não ocorre o erro.
  6. Outra opção é setar ecUpercase na propriedade Charcase de qualquer objeto derivado de TCustomEdit
  7. Eu entendi um evento para cada fornecedor, limitado à 100 eventos por lote. Tem certeza que é um arquivo para cada fornecedor / cliente?
  8. Eu estou usando Linux e resolvi o único problema de validação alterando o nome do arquivo "envioLoteEventos-v1_03_02.xsd" para "EnvioLoteEventos-v1_03_02.xsd".
  9. Quanto ao estudo da ACBrNFe, a minha intenção é realmente verificar como ocorre a evolução do componente, os remendos, as gambiarras, os processos de revisão: o desenvolvimento em si, não apenas o estudo do código fonte. Ainda vejo deficiência na documentação: acharia muito mais interessante comentar o código para poder gerar a documentação por aplicativos como o pasdoc, mas isso é opinião. Imagino que possa haver muito mais contribuições quando o material está documentado, mas ao mesmo tempo, sei que isso demanda recursos. A documentação ajudaria muito no processo de revisão. Quanto à modificação: Agora faz todo o sentido do mundo! Reitero: "... fica o agradecimento pelo pronto atendimento, é raro encontrar uma equipe tão dedicada! " Grato à todos os Moderadores, em especial ao Sr. Italo.
  10. Com certeza! eu apenas tive dificuldades em entender o que LoadFromString deveria fazer, e a rotina não fazia sentido (aliás, ainda não faz) para mim. Eu ainda não me sinto apto a ajudar por enquanto já que, como eu disse, ainda estou estudando os fontes e entendendo a dinâmica dos desenvolvedores. Quando digo que sou muito fã do ACBr, não o digo porque os componentes são bons ou fáceis de usar. Digo isso pela filosofia de trabalho compartilhado. Pessoalmente ainda não usei os componentes, e nem vejo necessidade imediata de fazê-lo, mas isso não significa que eu não possa contribuir num futuro próximo. Também percebo que alguns os códigos são bem confusos e outros bem limpos. isso demonstra claramente a pluralidade dos desenvolvedores, e isso é o que mais me encanta no projeto. Não há excesso de conservadorismo ou privação de idéias. Para ajudáa-los, talvez a minha maior dificuldade seja a de adptar os fontes para serem compatíveis com o Delphi (preferência por {$mode objfpc} ), já que não o uso mais desde a versão 5 porém, pelo que vejo, é bastante comum os fontes serem adaptados para ficarem compatíveis.
  11. Oi Italo, Grato! Era isso que eu precisava saber. Presumo que o componente será revisto, certo?
  12. Oi Juliomar, pronto, esvaziei a mente e me deparo com um código assim: Abaixo o do arquivo ACBrReinf.pas function TEventos.LoadFromString(AXMLString: String): Boolean; var AXML: AnsiString; P, N: integer; function PosReinf: integer; begin Result := pos('</Reinf>', AXMLString); end; begin Result := False; N := PosReinf; while N > 0 do begin P := pos('</Reinf>', AXMLString); if P > 0 then begin AXML := copy(AXMLString, 1, P + 9); AXMLString := Trim(copy(AXMLString, P + 10, length(AXMLString))); end else begin AXML := copy(AXMLString, 1, N + 6); AXMLString := Trim(copy(AXMLString, N + 6, length(AXMLString))); end; Result := Self.ReinfEventos.LoadFromString(AXML); N := PosReinf; end; end; o mesmo código se replica em TLoteEventos, em ACBrReinfLoteEventos.pas. E eu fiquei me perguntando se havia alguma explicação pra essas variáveis N e P, ou eu simplesmente poderia reescrever o código assim (já comentado para usar com o pasdoc): {Alimentação de XML em TItemLoteEventos com o conteúdo de evento XML já assinado para posterior envio. IMPORTANTE: o conteúdo de AXMLString já deverá estar assinado e desprovido de cabeçalhos} function TLoteEventos.LoadFromString(AXMLString: String): Boolean; Const ReinfSearchTag = '</Reinf>'; var AXML: AnsiString; P: integer; begin P := pos(ReinfSearchTag, AXMLString); while N > 0 do begin AXML := copy(AXMLString, 1, ifthen(p>0,p+9,6) ); AXMLString := Trim(copy(AXMLString, ifthen(p>0,P + 10,6) length(AXMLString))); Add.FXML := AXML; P := pos(ReinfSearchTag, AXMLString); end; Result := Self.Count > 0; end; O projeto já é muito grande, e cheio de copia-e-cola, sinal claro que a documentação era necessária e não foi usada. O Código é confuso, no exemplo que citei, é inclusive deselegante, salvo se o código acima não puder ser reduzido e N e P realmente tinham alguma razão de ser que eu desconhecia. E sem os devidos comentários, é mais confuso ainda, porque temos que recorrer ao fórum para entender a intenção do desenvolvedor, porque o código pode ainda não estár concluído, certo? PS: Redigir a documentação base para o pasdoc pode ser um bom exercício para a criatividade literária, veja isso como algo positivo! Quanto à citação " quer melhor documentação que os fontes? " minha resposta seria: Quero fontes passiveis de serem documentadas, por exemplo, pelo pasdoc, portanto sim: a documentação ideal estaria nos fontes ?. Logo, se você discorda, é porque eu me expressei mal, desculpe-me mais uma vez. Voltando ao assunto original: note que eu ainda estou no campo da opinião, o comentário (cabeçalho para pasdoc) que eu fiz na reescrita da função é meramente especulativa, pode não ser isso, por isso estou pedindo ajuda para entender o que são essas funções, e o que a variável N e P representam. Já tive retorno de 3 moderadores e ainda não consegui me expressar ? de modo a conseguir me fazer entender. Mas fica o agradecimento pelo pronto atendimento, é raro encontrar uma equipe tão dedicada!
  13. Oi Rafael, não vou poder ajudar enquanto não entender a metodologia. Como você pode ver, a falta de documentação e os fontes pouco comentados me impedem de saber o que vocês já têm pronto. Minha dúvida específica era em relação à função LoadFromString presente em Teventos e TloteEventos, que ainda não foi solucionada: não sei qual o objetivo dessa função. só isso! ela me parece confusa: veja os fontes, as variáveis N e P não fazem sentido. meu objetivo não é usar o reinf, e sim estudar os fontes. Escolhi o Reinf justamente por ser uma tecnologia que precisa ser implantada agora e estou avaliando como ocorre todo o processo de divulgação dos fontes, correção dos eventuais bugs, mas a dúvida permanece: o que é essa função? Ela é usada em TLoteEventos.CarregaXMLEventos, mas a função por si só não faz sentido, especialmente em relação à busca da posição por '</Reinf> ' nas variáveis N e P. e um IF que, se considerarmos que N e P sempre terão o mesmo valor. veja N é atribuido antes do loop while e no seu final, e P é atribuído dentro do loop while já no seu início. Achou confuso? pois é!... eu também, por isso que pergunto!
  14. Oi Italo, na verdade eu ainda estou estudando os componentes, não exatamente usando-os ainda. E eu sou muito fã do ACBr, mas também sou muito fã de projetos OpenSource porque permitem à você adaptar, melhorar, personalizar. Acho que nada não possa ser melhorado e a rigidez de um componente pode não ser a melhor forma de evoluir. Acho importante ter todos os recursos, mas nem sempre eu preciso de um caminhão para ir à panificadora para trazer apenas um pãozinho... Minha dificuldade está em entender o que a função LoadFromString deveria fazer. pelo nome parece-me que deveria ler um evento baseado num XML já gerado anteriormente, mas a rotina, ao estudá-la me pareceu sem sentido, só isso! A falta de documentação ou de comentários nos fontes dificulta muito esse tipo de estudo. Peço ajuda para entender porque quero evitar suposições erradas, não gostaria de presumir que essa função era pra fazer algo que na verdade faz outra e, ao final, chegar a conclusão de que o componente era ruim ou bugado se na verdade ele é ótimo e eu apenas não soubia como usá-lo durante minha avaliação. Peço desculpas se não consegui me expressar de forma adequada da primeira vez. e agradeço desde já a sua pronta atenção. Sei que não é fácil responder a todos, mas eu ainda estou confuso com a rotina: Ela serve para carregar os XML já gerados anteriormente? as variáveis N e P na função realmente estão corretas?
  15. estudando os fontes, eu simplesmente não consigo entender as funções derivadas de TEventos.LoadFromString(AXMLString: String): Boolean; (linha 224 de acbrreinfeventos.pas e seguintes) explico: qual a função das variáveis N e P já que ambos procuram pela mesma posição com a função "pos('</Reinf>', AXMLString)" ? cada evento não deveria estar entre as posições de <Reinf> e </Reinf>? Eu já possuo um gerador de XML, caso eu gere os eventos por essa rotina que não faz parte do tAcbrReinf, seria essa função (TEventos.LoadFromString) que eu devo usar para enviá-los?
×
×
  • Create New...

Important Information

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.