Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3218 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Oi. Boa tarde!

Pretendo usar o ACBrNFSe no Delphi 7. Porém preciso enviar o código de geração da nota pro desenvolvedor que irá adicionar isso ao sistema e colocar em produção. É possível isolar numa pasta apenas a units com as funções referente a esse componente e enviar o fonte sem que esse outro desenvolvedor tenha que instalar tudo no Delphi dele? Seria muito complicado fazer isso?

Postado
6 minutos atrás, Raylan Zibel disse:

Oi. Boa tarde!

Pretendo usar o ACBrNFSe no Delphi 7. Porém preciso enviar o código de geração da nota pro desenvolvedor que irá adicionar isso ao sistema e colocar em produção. É possível isolar numa pasta apenas a units com as funções referente a esse componente e enviar o fonte sem que esse outro desenvolvedor tenha que instalar tudo no Delphi dele? Seria muito complicado fazer isso?

Você está diante de uma suite open source. Se você separar as pastas e enviar somente o que vai utilizar, ainda assim, na hora de compilar com certeza o outro desenvolvedor terá que instalar o componente, pense numa trabalheira como citou o @Juliomar Marchetti. Seria tão difícil assim para ele instalar o ACBr ainda mais com o instalador dispoível?

_____________

Prates, Agnaldo

  • Membros Pro
Postado

Você pode adicionar o acbr ao path, e usar os objetos, declarando e instanciando, sem colocar os componentes nos forms.

 

Ai a outra pessoa lá vai fazer a mesma coisa, colocar só no path do  delphi.

Postado
5 minutos atrás, Agnaldo Prates disse:

Você está diante de uma suite open source. Se você separar as pastas e enviar somente o que vai utilizar, ainda assim, na hora de compilar com certeza o outro desenvolvedor terá que instalar o componente, pense numa trabalheira como citou o @Juliomar Marchetti. Seria tão difícil assim para ele instalar o ACBr ainda mais com o instalador dispoível?

Pra mim ACBr é básico de ter no Delphi. Mas é o ambiente de desenvolvimento do Boss. Já configurado com a duzia de componentes que usa. E o ACBr não instala sem problema 100% das vezes. Negócio é que ele envia atualizações quase diárias de customizações pros clientes. Se der algum problema no Delphi dele a produção para.

3 minutos atrás, nazarenoneto disse:

Você pode adicionar o acbr ao path, e usar os objetos, declarando e instanciando, sem colocar os componentes nos forms.

 

Ai a outra pessoa lá vai fazer a mesma coisa, colocar só no path do  delphi.

Foi +/- o que pensei. Obrigado Nazareno.

Postado

Raylan,

Sempre usei ACBr sem instalar. Funciona muito bem e facilita bastante a instalação de atualizações: É só baixar. Sempre que o componente é não visual, eu costumo preferir essa abordagem.

Só o que tem que fazer é como disse o colega Nazareno:

  • Adicionar o ACBr ao path: são várias pastas a adicionar. Quanto mais componentes for usar, mais pastas terá que adicionar. Eu particularmente, vou tentando compilar, vejo qual unit está faltando, localizo e adicionando ao path. Uma alternativa a essas várias pastas é colocar tudo na mesma pasta... mas aí você vai ter um pouco mais de trabalho na hora de atualizar... acho mais prático adicionar os paths. Depois você pode copiar a linha do Library Path e guardar em um arquivo texto (eu tenho um repositório só para esses arquivos texto rs) caso precise configurar em uma nova instalação.
  • Usar os componentes instanciando dinamicamente quando for usar (variavel := TComponente.Create). Aqui cabe ter uma certa atenção às boas práticas de instanciamento de classes no Delphi:
    • Não esquecer de liberar os objetos não mais necessários;
    • Usar sempre uma variável local ou Field de algum objeto, se possível (poucas situações na minha experiencia exigiram uma variável global!)
    • Se for um Field, provavelmente será uma boa ideia instanciar no constructor da classe e destruir no destructor (às vezes não é necessário destruir manualmente, se o objeto for owner do componente instanciado.
Postado
43 minutos atrás, Gabriel Frones disse:

Raylan,

Sempre usei ACBr sem instalar. Funciona muito bem e facilita bastante a instalação de atualizações: É só baixar. Sempre que o componente é não visual, eu costumo preferir essa abordagem.

Só o que tem que fazer é como disse o colega Nazareno:

  • Adicionar o ACBr ao path: são várias pastas a adicionar. Quanto mais componentes for usar, mais pastas terá que adicionar. Eu particularmente, vou tentando compilar, vejo qual unit está faltando, localizo e adicionando ao path. Uma alternativa a essas várias pastas é colocar tudo na mesma pasta... mas aí você vai ter um pouco mais de trabalho na hora de atualizar... acho mais prático adicionar os paths. Depois você pode copiar a linha do Library Path e guardar em um arquivo texto (eu tenho um repositório só para esses arquivos texto rs) caso precise configurar em uma nova instalação.
  • Usar os componentes instanciando dinamicamente quando for usar (variavel := TComponente.Create). Aqui cabe ter uma certa atenção às boas práticas de instanciamento de classes no Delphi:
    • Não esquecer de liberar os objetos não mais necessários;
    • Usar sempre uma variável local ou Field de algum objeto, se possível (poucas situações na minha experiencia exigiram uma variável global!)
    • Se for um Field, provavelmente será uma boa ideia instanciar no constructor da classe e destruir no destructor (às vezes não é necessário destruir manualmente, se o objeto for owner do componente instanciado.

O instalador adiciona no library path apenas os paths correspondentes aos pacotes selecionados durante a instalação ou ele adiciona todos os paths ??

Postado

Confesso que também fiquei confuso com a resposta do amigo Juliomar rs. Então procurei nos fontes do instalador e achei a seguinte função:

procedure TfrmPrincipal.FindDirs(ADirRoot: String; bAdicionar: Boolean = True);
var
  oDirList: TSearchRec;

  function EProibido(const ADir: String): Boolean;
  const
    LISTA_PROIBIDOS: ARRAY[0..4] OF STRING = (
      'quick', 'rave', 'laz', 'VerificarNecessidade', '__history'
    );
  var
    Str: String;
  begin
    Result := False;
    for str in LISTA_PROIBIDOS do
    begin
      Result := Pos(AnsiUpperCase(str), AnsiUpperCase(ADir)) > 0;
      if Result then
        Break;
    end;
  end;

begin
  ADirRoot := IncludeTrailingPathDelimiter(ADirRoot);

  if FindFirst(ADirRoot + '*.*', faDirectory, oDirList) = 0 then
  begin
     try
       repeat
          if ((oDirList.Attr and faDirectory) <> 0) and
              (oDirList.Name <> '.')                and
              (oDirList.Name <> '..')               and
              (not EProibido(oDirList.Name)) then
          begin
             with oACBr.Installations[iVersion] do
             begin
               if bAdicionar then
               begin
                  AddToLibrarySearchPath(ADirRoot + oDirList.Name, tPlatform);
                  AddToLibraryBrowsingPath(ADirRoot + oDirList.Name, tPlatform);
               end
               else
                  RemoveFromLibrarySearchPath(ADirRoot + oDirList.Name, tPlatform);
             end;
             //-- Procura subpastas
             FindDirs(ADirRoot + oDirList.Name, bAdicionar);
          end;
       until FindNext(oDirList) <> 0;
     finally
       SysUtils.FindClose(oDirList)
     end;
  end;
end;

Pelo código, só posso assumir que ele adiciona todos os subdiretórios de Fontes, com exceção destes poucos listados no array de proibidos. Curiosamente, o diretório .svn não aparece na lista de proibidos, então me pergunto se ele não estará adicionando estes diretórios também ao path. Alguém que tenha instalado pelo instalador confirma?

Abraços.

Postado
2 minutos atrás, Gabriel Frones disse:

Confesso que também fiquei confuso com a resposta do amigo Juliomar rs. Então procurei nos fontes do instalador e achei a seguinte função:


procedure TfrmPrincipal.FindDirs(ADirRoot: String; bAdicionar: Boolean = True);
var
  oDirList: TSearchRec;

  function EProibido(const ADir: String): Boolean;
  const
    LISTA_PROIBIDOS: ARRAY[0..4] OF STRING = (
      'quick', 'rave', 'laz', 'VerificarNecessidade', '__history'
    );
  var
    Str: String;
  begin
    Result := False;
    for str in LISTA_PROIBIDOS do
    begin
      Result := Pos(AnsiUpperCase(str), AnsiUpperCase(ADir)) > 0;
      if Result then
        Break;
    end;
  end;

begin
  ADirRoot := IncludeTrailingPathDelimiter(ADirRoot);

  if FindFirst(ADirRoot + '*.*', faDirectory, oDirList) = 0 then
  begin
     try
       repeat
          if ((oDirList.Attr and faDirectory) <> 0) and
              (oDirList.Name <> '.')                and
              (oDirList.Name <> '..')               and
              (not EProibido(oDirList.Name)) then
          begin
             with oACBr.Installations[iVersion] do
             begin
               if bAdicionar then
               begin
                  AddToLibrarySearchPath(ADirRoot + oDirList.Name, tPlatform);
                  AddToLibraryBrowsingPath(ADirRoot + oDirList.Name, tPlatform);
               end
               else
                  RemoveFromLibrarySearchPath(ADirRoot + oDirList.Name, tPlatform);
             end;
             //-- Procura subpastas
             FindDirs(ADirRoot + oDirList.Name, bAdicionar);
          end;
       until FindNext(oDirList) <> 0;
     finally
       SysUtils.FindClose(oDirList)
     end;
  end;
end;

Pelo código, só posso assumir que ele adiciona todos os subdiretórios de Fontes, com exceção destes poucos listados no array de proibidos. Curiosamente, o diretório .svn não aparece na lista de proibidos, então me pergunto se ele não estará adicionando estes diretórios também ao path. Alguém que tenha instalado pelo instalador confirma?

Abraços.

O meu ficou assim, instalando só os pacotes de NFSE:

C:\ACBR\Fontes\ACBrBoleto;C:\ACBR\Fontes\ACBrBoleto\FC;C:\ACBR\Fontes\ACBrBoleto\FC\Fast;C:\ACBR\Fontes\ACBrBoleto\FC\Fortes;C:\ACBR\Fontes\ACBrBoleto\Logos;C:\ACBR\Fontes\ACBrBoleto\Logos\Colorido;C:\ACBR\Fontes\ACBrBoleto\Logos\PretoBranco;C:\ACBR\Fontes\ACBrCapicom;C:\ACBR\Fontes\ACBrComum;C:\ACBR\Fontes\ACBrDFe;C:\ACBR\Fontes\ACBrDFe\ACBrBlocoX;C:\ACBR\Fontes\ACBrDFe\ACBrCTe;C:\ACBR\Fontes\ACBrDFe\ACBrCTe\DACTE;C:\ACBR\Fontes\ACBrDFe\ACBrCTe\DACTE\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrCTe\DACTE\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrCTe\PCNCTe;C:\ACBR\Fontes\ACBrDFe\ACBrGNRE;C:\ACBR\Fontes\ACBrDFe\ACBrGNRE\GNRE;C:\ACBR\Fontes\ACBrDFe\ACBrGNRE\GNRE\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrGNRE\GNRE\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrGNRE\PCNGNRE;C:\ACBR\Fontes\ACBrDFe\ACBrMDFe;C:\ACBR\Fontes\ACBrDFe\ACBrMDFe\DAMDFE;C:\ACBR\Fontes\ACBrDFe\ACBrMDFe\DAMDFE\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrMDFe\DAMDFE\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrMDFe\PCNMDFe;C:\ACBR\Fontes\ACBrDFe\ACBrNFe;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\ACBrECFVirtualNFCe;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFCe;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFCe\EscPos;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFCe\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFCe\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFe;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFe\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\DANFE\NFe\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrNFe\PCNNFe;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe\DANFSE;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe\DANFSE\Fast;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe\DANFSE\Fortes;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe\PCNNFSe;C:\ACBR\Fontes\ACBrDFe\ACBrNFSe\Provedores;C:\ACBR\Fontes\ACBrDiversos;C:\ACBR\Fontes\ACBrDiversos\ACBrFalaWaves;C:\ACBR\Fontes\ACBrOpenSSL;C:\ACBR\Fontes\ACBrSAT;C:\ACBR\Fontes\ACBrSAT\ACBrECFVirtualSAT;C:\ACBR\Fontes\ACBrSAT\Extrato;C:\ACBR\Fontes\ACBrSAT\Extrato\EscPos;C:\ACBR\Fontes\ACBrSAT\Extrato\Fortes;C:\ACBR\Fontes\ACBrSAT\PCNSAT;C:\ACBR\Fontes\ACBrSerial;C:\ACBR\Fontes\ACBrTCP;C:\ACBR\Fontes\ACBrTEFD;C:\ACBR\Fontes\ACBrTXT;C:\ACBR\Fontes\ACBrTXT\ACBrConvenio115;C:\ACBR\Fontes\ACBrTXT\ACBrDeSTDA;C:\ACBR\Fontes\ACBrTXT\ACBrLFD;C:\ACBR\Fontes\ACBrTXT\ACBrPAF;C:\ACBR\Fontes\ACBrTXT\ACBrSEF2;C:\ACBR\Fontes\ACBrTXT\ACBrSintegra;C:\ACBR\Fontes\ACBrTXT\ACBrSPED;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDContabil;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDECF;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDFCont;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDFiscal;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDPisCofins;C:\ACBR\Fontes\ACBrTXT\ACBrSPED\ACBrSPEDPisCofinsImportar;C:\ACBR\Fontes\ACBrTXT\SintegraSultan;C:\ACBR\Fontes\Imagens;C:\ACBR\Fontes\PCNComum;C:\ACBR\Fontes\Terceiros;C:\ACBR\Fontes\Terceiros\AJBarcode;C:\ACBR\Fontes\Terceiros\DelphiZXingQRCode;C:\ACBR\Fontes\Terceiros\JediWin32API;C:\ACBR\Fontes\Terceiros\synalist;C:\ACBR\Fontes\Terceiros\TGif;C:\ACBR\Fontes\Terceiros\ZLibExGZ;C:\ACBR\Fontes\Terceiros\ZLibExGZ\win32;C:\ACBR\Fontes\Terceiros\ZLibExGZ\win64;C:\ACBR\Fontes\Terceiros\ZLibExGZ\zlib;C:\ACBR\Lib\Delphi\LibD7

 

  • Este tópico foi criado há 3218 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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