Ir para conteúdo
  • Cadastre-se

dev botao

Out of Memory ao gerar Bloco X de Estoque


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

Recommended Posts

Bom pessoal,

Estou tentando gerar o estoque com +- 100mil itens, porém ocorre o erro de memória, falaram por ai para compilar o ACBr em 64 bits, não obtive muito sucesso com o instalador pois o mesmo sempre muda para 32 bits, alguém já obteve sucesso em gerar com um numero alto de produtos? 

Alguém manja de compilar em x64?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
3 minutos atrás, José Carlos Buss disse:

Bom pessoal,

Estou tentando gerar o estoque com +- 100mil itens, porém ocorre o erro de memória, falaram por ai para compilar o ACBr em 64 bits, não obtive muito sucesso com o instalador pois o mesmo sempre muda para 32 bits, alguém já obteve sucesso em gerar com um numero alto de produtos? 

Alguém manja de compilar em x64?

Bem simples jovem. 

ele deve de ter adicionado os path no library em x64 basta deixar no instalador desmarcado a opção para deixar somente LibXX e instalar win32

pois a sua IDE é win32 certo. os fontes já estão preparados para funcionar em x64 bastando criar sua aplicação a adicionar o suporte pra ela que vai funcionar.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
16 minutos atrás, José Carlos Buss disse:

Bom pessoal,

Estou tentando gerar o estoque com +- 100mil itens, porém ocorre o erro de memória, falaram por ai para compilar o ACBr em 64 bits, não obtive muito sucesso com o instalador pois o mesmo sempre muda para 32 bits, alguém já obteve sucesso em gerar com um numero alto de produtos? 

Alguém manja de compilar em x64?

Isso provavelmente não resolverá o seu problema.... não há solução para isso no ACBr... e NUNCA seria possível transmitir por WebService, um arquivo tão grande...

a maneira que o ACBrBlocoX gera o XML, exige carregar todos os Itens na memória para gerá-lo... e depois carregar todo o XML na memória, para assiná-lo...

Sempre haverá um limite de memória...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Não importa as opções que seleciono no instalador, ele sempre compila pra win32. Gostaria de compilar para win64 para testar se o erro de falta de memória ainda persiste, pois até com 10mil já da o problema.

No log do instalador:

Caminho: C:\ACBr Trunk\
Versão do delphi: Delphi 10 Seattle (0)
Plataforma: Win32(0)
================================================================================
Criando diretórios de bibliotecas...

 

Posso estar errado mas pelo que olhei, ele sempre muda na hora de instalar.

ACBrInstall_Trunk2 >> uPrincipal

 

// botão de compilação e instalação dos pacotes selecionados no treeview
procedure TfrmPrincipal.btnInstalarACBrClick(Sender: TObject);

...

 for iListaVer := 0 to clbDelphiVersion.Count -1 do
  begin
    // só instala as versão marcadas para instalar.
    if clbDelphiVersion.Checked[iListaVer] then
    begin
      lstMsgInstalacao.Clear;
      pgbInstalacao.Position := 0;

      // seleciona a versão no combobox.
      edtDelphiVersion.ItemIndex := iListaVer;
      edtDelphiVersionChange(edtDelphiVersion);       ------------------- aqui ele seta para win32

      // define dados da plataforna selecionada
      SetPlatformSelected;

 

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, Daniel Simoes disse:

No instalador use Win32...

Selecione 64 bits no seu Projeto, no Delphi 

Certo, mas ai me ocorre divergência de versões.

[dcc64 Fatal Error] Main.pas(9): F2048 Bad unit format: 'C:\ACBr Trunk\Lib\Delphi\LibD23\ACBrBase.dcu' - Expected version: 30.0, Windows Unicode(x64) Found version: 30.0, Windows Unicode(x86) 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
47 minutos atrás, José Carlos Buss disse:

Certo, mas ai me ocorre divergência de versões.

[dcc64 Fatal Error] Main.pas(9): F2048 Bad unit format: 'C:\ACBr Trunk\Lib\Delphi\LibD23\ACBrBase.dcu' - Expected version: 30.0, Windows Unicode(x64) Found version: 30.0, Windows Unicode(x86) 

Deixou desmarcado a opção Deixar somente LibXX?

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Boa Tarde

@José Carlos Buss saberia me informar se compilando em 64bits lhe resolveu o problema, se sim qual o tamanho do arquivo/quantidade de itens que chegou a testar?

@Daniel Simoes vc comentou anteriormente que não é possível fazer fazer isso da forma atual que o ACBr trata/processa o arquivo para assinar, certo? Pensam em fazer alguma alteração, ou devido a questão do tamanho do arquivo irão aguardar que o estado altere a rotina?

Poderias sugerir alguma outra forma de fazer isso?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não há como corrigir isso no ACBr... os componentes trabalham com o conceito de que todo o arquivo estará na memória... 

Não faz o menor sentido criar, assinar e transmitir um arquivo desse tamanho... 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
Em 10/04/2018 at 13:45, Daniel Simoes disse:

Não há como corrigir isso no ACBr... os componentes trabalham com o conceito de que todo o arquivo estará na memória... 

Não faz o menor sentido criar, assinar e transmitir um arquivo desse tamanho... 

É realmente um problema, no meu caso tenho um cliente com 40.244 itens (uma papelaria), gerar ele gera, porém na hora de salvar da a mensagem de estouro de memória, em um momento consegui salvar zipar o arquivo e transmiti-lo, mas o estranho é que se tento gerar novamente não consigo mais, da estouro de memória. Única solução que vejo é limitar quantidade de registros, porém estaria enviado uma informação incompleta para o sefaz, podendo causar problemas tanto para o cliente quanto para softwarehouse.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Moderadores
1 hora atrás, João Paulo Müller disse:

Boa tarde pessoal, 

Os mercados já está transmitindo os arquivos do bloco X, até o final de anos os demais seguimentos serão obrigados a transmitir os arquivos.. Como estão  tratando essa questão do Out of Memory?

Pegamos um cliente agora com este problema, possui 120 mil produtos.

Boa tarde, João Paulo Müller.

Como foi dito nesse tópico, seria complicado transmitir por WebService um arquivo tão grande, sugiro que entre em contato com a Sefaz para encontrar uma outra solução.

Equipe ACBr

Felipe Eduardo Resende Mesquita

Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

 

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, João Paulo Müller disse:

Boa tarde pessoal, 

Os mercados já está transmitindo os arquivos do bloco X, até o final de anos os demais seguimentos serão obrigados a transmitir os arquivos.. Como estão  tratando essa questão do Out of Memory?

Pegamos um cliente agora com este problema, possui 120 mil produtos.

Boa Tarde João...

Então e tomei a liberdade de fazer algumas alterações no componente para gerar o arquivo já que o estoque já é obrigatório o envio esse mês, precisei alterar a forma que se guardava a informação para gerar o XML(esta usando String se não me engano) e também alterei a forma de se fazer a assinatura, pode se por falta de conhecimento minha do componente mais estava levando bastante tempo.

Notei que vc comentou de possuir 120k de produtos, a legislação esta bem "por cima" dando/deixando muitas brechas pela questão do entendimento, pelo que entendi deram liberdade para cada estado criar o seu WS então pensa na confusão que isso vai ficar... 
Mais em contato com o pessoal técnico que me colocou em contato com o GESAC cosegui esclarecer bastante coisas uma delas é que não é necessário mandar todos os produtos(como me foi exigido na homologação) e sim apenas os que tiveram movimentação(entradas ou saidas) no período.

Vou deixar um grupo de discussão administrado pela SEF-SC bem util a baixo, anteriormente deixavam até fazer questionamentos mais hj apenas para atualização de o que esta ocorrendo na parte Técnica do Bloco X. Mais tem algum material de legislação ali já postado tbm:
https://groups.google.com/forum/#!forum/sef-sc-siv

Nesse grupo de discussão vc vai poder ver que existem questionamentos com relação ao tamanho do arquivo e o pessoal da SEF não parece ter a intenção nenhuma de mudar isso ou a forma que é feita, não que devemos concordar com isso, mais precisamos cumprir as obrigações legais que nos são impostas.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
Em 18/07/2018 at 14:41, Francisco IBS disse:

Boa Tarde João...

Então e tomei a liberdade de fazer algumas alterações no componente para gerar o arquivo já que o estoque já é obrigatório o envio esse mês, precisei alterar a forma que se guardava a informação para gerar o XML(esta usando String se não me engano) e também alterei a forma de se fazer a assinatura, pode se por falta de conhecimento minha do componente mais estava levando bastante tempo.

Notei que vc comentou de possuir 120k de produtos, a legislação esta bem "por cima" dando/deixando muitas brechas pela questão do entendimento, pelo que entendi deram liberdade para cada estado criar o seu WS então pensa na confusão que isso vai ficar... 
Mais em contato com o pessoal técnico que me colocou em contato com o GESAC cosegui esclarecer bastante coisas uma delas é que não é necessário mandar todos os produtos(como me foi exigido na homologação) e sim apenas os que tiveram movimentação(entradas ou saidas) no período.

Vou deixar um grupo de discussão administrado pela SEF-SC bem util a baixo, anteriormente deixavam até fazer questionamentos mais hj apenas para atualização de o que esta ocorrendo na parte Técnica do Bloco X. Mais tem algum material de legislação ali já postado tbm:
https://groups.google.com/forum/#!forum/sef-sc-siv

Nesse grupo de discussão vc vai poder ver que existem questionamentos com relação ao tamanho do arquivo e o pessoal da SEF não parece ter a intenção nenhuma de mudar isso ou a forma que é feita, não que devemos concordar com isso, mais precisamos cumprir as obrigações legais que nos são impostas.

Boa tarde Francisco, 

Obrigado pelas informações.

Me juntei ao grupo, inclusive já fiz alguns questionamentos ao Bruno (Auditor)...

Encontrei um tópico no grupo referente ao estoque que descreve o seguinte:

Citar

Boa tarde,

Repasso informação da Gerência de Automação.

No arquivo de estoque que é enviado todo mês, qual a necessidade de constar nesse arquivo produtos sem estoque e sem movimentação fiscal?

A orientação é para gerar o arquivo de estoque sem estes itens (pois seriam itens obsoletos, não mais movimentados pelo estabelecimento). Se caso voltarem a ser movimentados, estes voltarão a constar no arquivo de estoque.

 

Vou ver se consigo enviar um e-mail ao Bruno questionando se é necessário que o produto NÃO possua estoque e também NÃO tenha movimento para ficar de fora do XML ou se basta o produto não possuir movimento.

Pois pode acontecer de o produto possuir estoque mas não possui movimento no período, neste caso deveria constar no XML ou não? 

Vou ver se consigo tirar essa dúvida com ele,  caso você já estiver a par da questão seria de grande valia essa informação.

Novamente, obrigado pela colaboração.

 

Editado por João Paulo Müller
Link para o comentário
Compartilhar em outros sites

9 minutos atrás, João Paulo Müller disse:

Boa tarde Francisco, 

Obrigado pelas informações.

Me juntei ao grupo, inclusive já fiz alguns questionamentos ao Bruno (Auditor)...

Encontrei um tópico no grupo referente ao estoque que descreve o seguinte:

Vou ver se consigo enviar um e-mail ao Bruno questionando se é necessário que o produto NÃO possua estoque e também NÃO tenha movimento para ficar de fora do XML ou se basta o produto não possuir movimento.

Pois pode acontecer de o produto possuir estoque mas não possui movimento no período, neste caso deveria constar no XML ou não? 

Vou ver se consigo tirar essa dúvida com ele,  caso você já estiver a par da questão seria de grande valia essa informação.

Novamente, obrigado pela colaboração.

 

Boa Tarde...

Semana passada troquei um e-mail com o Bruno Nogueira sobre isso,  eu tive um primeiro entendimento errado o  correto é:

- Qualquer produto com quantidade a cima de 0.
- Qualquer produto com movimentação, venda ou entrada.

Deve constar no arquivo de estoque.

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Francisco IBS disse:

Boa Tarde...

Semana passada troquei um e-mail com o Bruno Nogueira sobre isso,  eu tive um primeiro entendimento errado o  correto é:

- Qualquer produto com quantidade a cima de 0.
- Qualquer produto com movimentação, venda ou entrada.

Deve constar no arquivo de estoque.

Deixe me ver se compreendi corretamente,

de qualquer forma se o produto possuir estoque (Quantidade > 0) deve constar no arquivo XML;

Agora, se o produto não possuir estoque (Quantidade <= 0) E não possuir movimento ai sim não precisa constar no XML, isto?

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, João Paulo Müller disse:

Deixe me ver se compreendi corretamente,

de qualquer forma se o produto possuir estoque (Quantidade > 0) deve constar no arquivo XML;

Agora, se o produto não possuir estoque (Quantidade <= 0) E não possuir movimento ai sim não precisa constar no XML, isto?

Esse foi o entendimento que tive, a única coisa que eu mudaria no que vc falou é a questão de produto com quantidade < 0... pelo que da a entender isso não pode ocorrer, não recordo se vi algum questionamento disso lá no grupo de discussão ou na base de conhecimento do CAF, no endereço http://caf2.sef.sc.gov.br/, acesse a opção ECF, vais encontrar algo, pelo que entendi o cliente deve sempre deixar o estoque 0 ou positivo, no arquivo não deve conter estoque negativo. O que é estranho pq lembro de ter uma flag no xml que diz se o estoque é positivo ou negativo.

 

Link para o comentário
Compartilhar em outros sites

Em 03/10/2018 at 13:54, Francisco IBS disse:

Esse foi o entendimento que tive, a única coisa que eu mudaria no que vc falou é a questão de produto com quantidade < 0... pelo que da a entender isso não pode ocorrer, não recordo se vi algum questionamento disso lá no grupo de discussão ou na base de conhecimento do CAF, no endereço http://caf2.sef.sc.gov.br/, acesse a opção ECF, vais encontrar algo, pelo que entendi o cliente deve sempre deixar o estoque 0 ou positivo, no arquivo não deve conter estoque negativo. O que é estranho pq lembro de ter uma flag no xml que diz se o estoque é positivo ou negativo.

 

Exatamente Francisco.

Existe uma Flag para indicar se o estoque é positivo ou negativo.

Aqui estamos enviando tanto os estoques positivos e negativos (se houver) e controlando conforme a Flag.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 18/07/2018 at 14:41, Francisco IBS disse:

Boa Tarde João...

Então e tomei a liberdade de fazer algumas alterações no componente para gerar o arquivo já que o estoque já é obrigatório o envio esse mês, precisei alterar a forma que se guardava a informação para gerar o XML(esta usando String se não me engano) e também alterei a forma de se fazer a assinatura, pode se por falta de conhecimento minha do componente mais estava levando bastante tempo.

Notei que vc comentou de possuir 120k de produtos, a legislação esta bem "por cima" dando/deixando muitas brechas pela questão do entendimento, pelo que entendi deram liberdade para cada estado criar o seu WS então pensa na confusão que isso vai ficar... 
Mais em contato com o pessoal técnico que me colocou em contato com o GESAC cosegui esclarecer bastante coisas uma delas é que não é necessário mandar todos os produtos(como me foi exigido na homologação) e sim apenas os que tiveram movimentação(entradas ou saidas) no período.

Vou deixar um grupo de discussão administrado pela SEF-SC bem util a baixo, anteriormente deixavam até fazer questionamentos mais hj apenas para atualização de o que esta ocorrendo na parte Técnica do Bloco X. Mais tem algum material de legislação ali já postado tbm:
https://groups.google.com/forum/#!forum/sef-sc-siv

Nesse grupo de discussão vc vai poder ver que existem questionamentos com relação ao tamanho do arquivo e o pessoal da SEF não parece ter a intenção nenhuma de mudar isso ou a forma que é feita, não que devemos concordar com isso, mais precisamos cumprir as obrigações legais que nos são impostas.

Boa tarde Francisco.

Não seria interessante sugerir essas alterações realizadas no componente para serem enviadas para o SVN?

Acredito que mesmo enviando somente os produtos com estoque e movimentação, mesmo assim pode acabar ocorrendo problema com determinadas maquinas.

Editado por João Paulo Müller
Link para o comentário
Compartilhar em outros sites

4 horas atrás, João Paulo Müller disse:

Boa tarde Francisco.

Não seria interessante sugerir essas alterações realizadas no componente para serem enviadas para o SVN?

Acredito que mesmo enviando somente os produtos com estoque e movimentação, mesmo assim pode acabar ocorrendo problema com determinadas maquinas.

Inicialmente quando fiz as alterações tinha uma esperança e pelas conversas no forum que isso seria alterado, mais pelo andar da carruagem creio ser dificil, então por isso não sugeri a alteração no SVN.
Não sei como anda o desenvolvimento disso pelos ADM's ou colaboradores que tem acesso ao SVN mais se não tem nenhuma alteração do fonte para isso posso disponibilizar 100problemas o que desenvolvi, só não consigo essa semana só para semana que vem.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
Em 10/10/2018 at 17:11, Daniel Simoes disse:

Para sugerir melhorias ou correções aos fontes, basta Anexar as Units modificadas...

 

Boa Tarde...

Compactei toda a pasta do bloco X que esta em anexo.

Primeira mente criei a unit "pcnGeradorBlocoX.pas" que é uma cópia da "pcnGerador.pas" só que modifiquei a classe para usar WideString e TFileStream pois não queria estragar nenhuma outra rotina que já usa ele.

Por que "TFileStream" ? 
Nos testes que fiz foi a forma mais rápida que consegui para criar o arquivo. 

Unit ACBrBlocoX_WebServices.pas ganhou 2 novas variaveis "SituacaoProcStr" e "Mensagem" para guardar as informações do retorno.

Acredito que seja isso, desculpe a demora, como comentei não estou na empresa essa semana.

Caso falte algo ou alguem tenha alguma outra sugestão fico aberto a críticas.

ACBrBlocoX.rar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Moderadores
Em 19/10/2018 at 16:27, Francisco IBS disse:

Boa Tarde...

Compactei toda a pasta do bloco X que esta em anexo.

Primeira mente criei a unit "pcnGeradorBlocoX.pas" que é uma cópia da "pcnGerador.pas" só que modifiquei a classe para usar WideString e TFileStream pois não queria estragar nenhuma outra rotina que já usa ele.

Por que "TFileStream" ? 
Nos testes que fiz foi a forma mais rápida que consegui para criar o arquivo. 

Unit ACBrBlocoX_WebServices.pas ganhou 2 novas variaveis "SituacaoProcStr" e "Mensagem" para guardar as informações do retorno.

Acredito que seja isso, desculpe a demora, como comentei não estou na empresa essa semana.

Caso falte algo ou alguem tenha alguma outra sugestão fico aberto a críticas.

ACBrBlocoX.rar

Bom dia.

uma dúvida funciona seu código no delphi 7 e lazarus?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Acho que as modificações não irão corrigir o problema em definitivo... pois mesmo trabalhando com TFileStream... no final da rotina, você move isso para uma String (FXMLOriginal)...

  FXMLOriginal := ConverteXMLtoUTF8(LendoArquivo.Text);
  LendoArquivo.Free;
  if Assinar then
    FXMLAssinado := TACBrBlocoX(FACBrBlocoX).SSL.Assinar(FXMLOriginal, 'ReducaoZ', 'Mensagem');

e a rotina de assinatura da ACBrDFeSSL, trabalha apenas com Strings e não com Stream

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1164 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.