Ir para conteúdo
  • Cadastre-se

assdias

Membros
  • Total de ítens

    12
  • Registro em

  • Última visita

Posts postados por assdias

  1. Bom dia a todos!

    Ao Ler Retorno com "procedure TACBrBoleto.LerRetorno(AStream: TStream)" estava gerando "Access Violation", fiz a seguinte modificação:

    *** Unit: ACBrBoleto, Linha: 2171.

    De:

         if not Assigned(AStream) then 
         begin
    		...
         end
         else 
           SlRetorno.LoadFromStream(AStream);

    Para:

         if not Assigned(AStream) then 
         begin
    		...
         end
         else
         begin
           AStream.Position := 0;
           SlRetorno.LoadFromStream(AStream);
         end;

     

    • Curtir 1
  2. Em 04/11/2015 at 16:30, Alexsander disse:

    No Banco do Brasil (BB) há a opção de "multa fixa" que utiliza um valor ao invés de um percentual. Alguns clientes usam regras como "Acima de R$ 250 a multa é 2%, abaixo é R$ 5". Na posição 66 do segmento R há um campo onde o BB espera 1=Valor Fixo ou 2=Percentual. No entanto, a procedure TACBrBancoBrasil.GerarRegistroTransacao240 tem no segmento R o seguinte trecho de código:

    
    IfThen((PercentualMulta <> null) and (PercentualMulta > 0), '2', '0')   + // 66 - 66 1-Cobrar Multa / 0-Não cobrar multa

    Além da discrepância entre o comentário e o código, aqui somente será passado o valor 2 (percentual), nunca 1 (valor fixo). Não existe suporte à multa por Valor Fixo? Imagino que poderia ser criada uma nova propriedade em TACBrTitulo para informar o tipo de multa (com default em percentual), talvez um MultaValorFixo boolean por exemplo, reusando a propriedade PercentualMulta como ValorMulta quando MultaValorFixo for true. Assim o código acima ficaria:

    
    IfThen((PercentualMulta <> null) and (PercentualMulta > 0), IfThen(MultaValorFixo,'1','2'), '0')   + // 66 - 66 1=Valor Fixo; 2=Percentual

    Que tal? Segue em anexo o novo ACBrBoleto.pas e um diff dele com o trunk2 de hoje:

    
    alex@alex-desenvolvimento:~/fontes/ACBr/Fontes/ACBrBoleto$ svn diff ACBrBoleto.pas 
    Index: ACBrBoleto.pas
    ===================================================================
    --- ACBrBoleto.pas	(revisão 10389)
    +++ ACBrBoleto.pas	(cópia de trabalho)
    @@ -794,6 +794,7 @@
         fOcorrenciaOriginal: TACBrOcorrencia;
         fParcela           : Integer;
         fPercentualMulta   : Double;
    +    fMultaValorFixo    : Boolean;
         fSeuNumero         : String;
         fTipoDiasProtesto: TACBrTipoDiasIntrucao;
         fTipoImpressao     : TACBrTipoImpressao;
    @@ -908,6 +909,7 @@
          property Versao               : String   read fVersao                write fVersao;
          property SeuNumero            : String   read fSeuNumero             write fSeuNumero;
          property PercentualMulta      : Double   read fPercentualMulta       write fPercentualMulta;
    +     property MultaValorFixo       : Boolean   read fMultaValorFixo       write fMultaValorFixo;
          property ValorDescontoAntDia  : Currency read fValorDescontoAntDia  write  fValorDescontoAntDia;
          property TextoLivre : String read fTextoLivre write fTextoLivre;
          property CodigoMora : String read fCodigoMora write SetCodigoMora;
    @@ -1334,6 +1336,7 @@
        fValorRecebido        := 0;
        fValorDescontoAntDia  := 0;
        fPercentualMulta      := 0;
    +   fMultaValorFixo       := false;
        fReferencia           := '';
        fVersao               := '';
     
    @@ -1604,8 +1607,8 @@
           end;
     
           if PercentualMulta <> 0 then
    -         AStringList.Add(ACBrStr('Cobrar Multa de ' +
    -                         FormatCurr('R$ #,##0.00',ValorDocumento*( 1+ PercentualMulta/100)-ValorDocumento) +
    +         AStringList.Add(ACBrStr('Cobrar Multa de ' + FormatCurr('R$ #,##0.00',
    +           IfThen(MultaValorFixo, PercentualMulta, ValorDocumento*( 1+ PercentualMulta/100)-ValorDocumento)) +
                              ' após o vencimento.'));
        end;
     end;
    alex@alex-desenvolvimento:~/fontes/ACBr/Fontes/ACBrBoleto$ 
    

    Desde já agradeço.

    ACBrBoleto.pas

    Bom dia a todos!

    Como o default é false para a propriedade MultaValorFixo logo no IfThen o valor verdadeiro não pode ser o PercentualMulta e sim o ValorFixoEmR$, e polindo um pouco mais o código podemos simplifica-lo para algo assim já que temos o IfThen que atende as duas situações "PercentualMulta" ou ValorFixoEmR$:

    *** Unit ACBrBoleto.pas, linha 1609.

          if PercentualMulta <> 0 then
          begin
             AStringList.Add(ACBrStr('Cobrar multa de ' +
               ifthen(MultaValorFixo,
                      FormatCurr('R$ #,##0.00', ValorDocumento*( 1+ PercentualMulta/100)-ValorDocumento),
                      FloatToStr(PercentualMulta) + '%') + ' após o vencimento.'));
          end;

     

    ACBrBoleto.pas

  3. Bom dia a todos!

    Terminei agora pouco a implementação da impressão da Inutilização no Fast Report, como não quis depender de uma NFe para carregar os dados do emitente, limitei a apresentar apenas o CNPJ do Emitente, vou disponibilizar os fontes para todos, caso o Projeto ACBr queira melhorar e implementar no projeto fiquem a vontade.

    Segue...

    ** Os dados de parâmetros estão sendo carregados, coloquei  algumas condições "Assigned(FNFe)" em "CarregaParametros" para evitar Access Violation.

    Exemplo de uso:

      OpenDialog1.Title := 'Selecione a Inutilização';
      OpenDialog1.DefaultExt := '*.XML';
      OpenDialog1.Filter := 'Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*';
      OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathInu;
      if OpenDialog1.Execute then
      begin
        ACBrNFeDANFEFR1.Sistema := 'ACBr';
        ACBrNFe1.InutNFe.LerXML(OpenDialog1.FileName) ;
        ACBrNFeDANFEFR1.ImprimirInutilizacao;
    	//ACBrNFeDANFEFR1.ImprimirInutilizacaoPDF;
      end;

     

    ACBrNFeDANFEFR.pas

    ACBrNFeDANFEFRDM.pas

    ACBrNFeDANFEFRReg.pas

    INUTILIZACAO.fr3

  4. Em 12/04/2015 00:23:27, GAC Sistemas disse:

    Bom dia a todos, alguém pode me ajudar? Estive testando o TMS Aurelius para aprender o seu funcionamento, gerei pelo TMS Data Modeler uma entidade chamada UF (estados SP, RJ, MG, etc...) a qual adicionei sua unit a um projetinho teste que compilou sem problemas. Adicionei o componente TAureliusDataSet mas não estou sabendo popular os Fields do componente com os atributos da classe UF (Código, Sigla, NomeDoEstado), alguém pode me indicar onde estou falhando? Assisti algumas vídeo aulas pelo YouTube mas nos vídeos o apresentador já mostra o projeto com os fields populados do componente TAureliusDataSet, não estou conseguindo enxergar o "pulo do gato". Grato desde já por qualquer ajuda ou dica.

    Boa note a todos, acredito que você já deva ter resolvido, só para deixar registrado segue o caminho para sua dúvida:

    1) Depois das classes prontas você precisa criar um packege, adicionar as class e compilar (No meu caso eu deixei como Designtime and runtime, não me recordo se é a regra)

    2) Adicione seu AureliusDataset e no menu de contexto do componente você encontrar uma opção "Load Field Definitions..."   

    3) No Load Field Definitions, na caixa Adicional Packages, clique no botão "+", localize a BPL gerada pelo pacote criado no passo 1

    4) No combo "Load Field from class" selecione a classe desejada

    5) Voltando ao menu de contexto do AureliusDataset, na opção Fields Editor, segue os passos já conhecidos...

    Obs.: Para adicionar um campo de uma classe que contem relacionamento com a classe selecionada no passo 4, você edita o FieldName pelo objecto inspector adicionando um ponto ponto . Exemplo: Vamos supor que um determinado campo é uma classe (Objeto) chamado Empresa e você quer o CNPJ dela, então coloque: Empresa.CNPJ, dessa forma você terá acesso a esse conteúdo pelo DataSet.

    Desculpe pela demora, mais fica aqui registrado....

    Abraço!

  5. Estou utilizado o TMS Aurelius em Desenvolvimento, tenho gostado sinto falta de algumas flexibilidades que encontramos no Hibernate, acredito que irá amadurecer com o tempo.

     

    Encontrei algumas dificuldades que resolvi como help e com muito teste até achar o melhor caminho.

    Algumas limitações precisei resolver mexendo no fonte do próprio Framework (Veja o tópico "")

     

    Algumas situações recorri ao bom e velho SQL, até porque precisava de mais performance, e também por ser complexo. 

    Essa parte do complexo o Aurelius  deixou a desejar... mais estou tentando desvendar melhor, acredito que seja falta de domínio no framework.

     

    Hoje, tenho um PDV por finalizar usando 90% do Aurelius e uma Retaguarda sendo implementada usando 100% nos cadastros e movimentações, 20% nas pesquisas, 0% nas ferramentas de importação de dados, 0% nos Relatórios.

     

    Essa tem sido minha experiencia até o momento.

     

  6. Eu procurei e não encontrei essa property "MaxConstraintNameLength" só achei funções "GetMaxConstraintNameLength" e mesmo que existisse o firebird só suporta 31 caracteres para nomes de FK.  

     

    Então falta uma implementação como essa que fiz ou algo mais sofisticado... para dar suporte a nomes longos de FK.

     

    *** Essa função "GetMaxConstraintNameLength " na unit: Aurelius.Sql.Firebird.pas, esta fixo o valor "MaxConstraintNameLength",

    eu poderia ter implementado aqui a solução (só para o Firebird). Mas, achei melhor colocar no ancestral, para não ter problemas futuros com outros bancos. Da forma que fiz estou considerando o "MaxConstraintNameLength" de cada banco:

     

    function TFirebirdSQLGenerator.GetMaxConstraintNameLength: Integer;
    begin
      Result := 31;
    end;
  7.  

    Bom dia!

     

    Tenho usado o TMS Aurelius e estou tendo dificuldades em classes que faz uso de JoinColumn, na seguinte situação:

     

        [Association([TAssociationProp.Lazy], [TCascadeType.SaveUpdate])]
        [JoinColumn('VENDAPRAZOCONTACONTABIL_ID', [TColumnProp.Required], 'ID')]
        FVendaPrazoContaContabil: Proxy<TPlanoContas>;
     
        [Association([TAssociationProp.Lazy], [TCascadeType.SaveUpdate])]
        [JoinColumn('VENDAVISTACONTACONTABIL_ID', [TColumnProp.Required], 'ID')]
        FVendaVistaContaContabil: Proxy<TPlanoContas>;
     
    Nesse caso, na geração da tabela do banco de dados (Firebird) ele cria a relação do primeiro campo, mais no segundo ocorre o seguinte erro:
     
    Index FK_PDVCONFIGURACAO_PLANOCONTAS_ already exists'.
     
    *** Pelo que percebi o Aurelius gera o nome da "FK" com o nome da tabela principal + o nome da tabela FK, onde nesse caso deveria numera-las ou ter alguma forma para informar o nome da relação. Ou o firebird (2.5) suportar nome de FK com mais de 31 caracteres.
     
    Alguém já passou por essa situação?
     

     

     

    Resolvi o problema acima, segue solução:

     

    Alterado no TMS Aurelius a unit: "Aurelius.Sql.AnsiSQLGenerator" 
     
    function TAnsiSQLGenerator.GetForeignKeyName(ForeignKey: TForeignKeyMetadata): string;
    begin
      Result := 'FK_';
     
      if ForeignKey.FromTable.Schema <> '' then
        Result := Result + ForeignKey.FromTable.Schema + '_';
     
      Result := Result + ForeignKey.FromTable.Name + '_';
     
      if ForeignKey.ToTable.Schema <> '' then
        Result := Result + ForeignKey.ToTable.Schema + '_';
     
      Result := Result + ForeignKey.ToTable.Name + '_' +
        ConcatColumnNames(ForeignKey.FromColumns, '_');
     
      // Original: Result := Copy(Result, 1, GetMaxConstraintNameLength);
     
     // Novo, quando o numero de caracteres do nome for maior que o suportado pelo banco de dados, numera as FK :
      if not (Length(Result) > GetMaxConstraintNameLength) then
        Result := Copy(Result, 1, GetMaxConstraintNameLength)
      else
        Result := Format('%s%3.3d',[Copy(Result, 1, GetMaxConstraintNameLength-3),
          ForeignKey.FromTable.ForeignKeys.Count]);
     
    end;
  8. Bom dia!

     

    Tenho usado o TMS Aurelius e estou tendo dificuldades em classes que faz uso de JoinColumn, na seguinte situação:

     

        [Association([TAssociationProp.Lazy], [TCascadeType.SaveUpdate])]
        [JoinColumn('VENDAPRAZOCONTACONTABIL_ID', [TColumnProp.Required], 'ID')]
        FVendaPrazoContaContabil: Proxy<TPlanoContas>;
     
        [Association([TAssociationProp.Lazy], [TCascadeType.SaveUpdate])]
        [JoinColumn('VENDAVISTACONTACONTABIL_ID', [TColumnProp.Required], 'ID')]
        FVendaVistaContaContabil: Proxy<TPlanoContas>;
     
    Nesse caso, na geração da tabela do banco de dados (Firebird) ele cria a relação do primeiro campo, mais no segundo ocorre o seguinte erro:
     
    Index FK_PDVCONFIGURACAO_PLANOCONTAS_ already exists'.
     
    *** Pelo que percebi o Aurelius gera o nome da "FK" com o nome da tabela principal + o nome da tabela FK, onde nesse caso deveria numera-las ou ter alguma forma para informar o nome da relação. Ou o firebird (2.5) suportar nome de FK com mais de 31 caracteres.
     
    Alguém já passou por essa situação?
     
     
×
×
  • 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.