Importar Cod. Barras Diversos de 01 Produto

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Importar Cod. Barras Diversos de 01 Produto

Mensagem por fladimir »

Olá Senhores, desenvolvi uma rotina para um conversor, mas por incrivel q pareça não estou conseguindo simplificar ela e esta demorando muito.

O q esta ocorrendo é o seguinte tem uma tabela Produto q contem o Campo do Codigo Interno do Produto e outras informações, mas o Codigo de Barras é guardado em outra tabela. Pois muitas vezes 01 Produtos tem códigos de barras agrupados.

Puxar as informações da tabela produto ok, mas o q esta pegando é q tenho q puxar 01 codigo de barras q seria o codigo principal para minha tabela de produtos e os outros para outra tabela.

Resumindo extrair diversos codigos de barras de 01 produto onde vai haver 01 cod. de barras principal e outros agrupados, isto é muito comum por exemplo com sabonete XXXXXXX 90 Gr. no qual só muda a fragancia por exemplo e o cliente usa um cadastro para vários produtos.

A rotina abaixo funciona, mas esta demorando muito, numa tabela de 10.000 itens aproximadamente demora quase 10 horas, é um absurdo!

Código: Selecionar todos

   

Proc Main
   USE \Destino\PRODUTO.DBF ALIAS Receptor EXCLUSIVE NEW     // Tabela q vai receber os produtos
   ZAP
   USE Produto.DBF ALIAS Doador  NEW                                   // Tabela com os produtos a serem importados
   
   DBSELECTAREA("Doador")
   Doador->( DBGOTOP() )
   WHILE Doador->( !EOF() )
      IF Receptor->( NewRec(0) )  // Adiciona novo registro
         Receptor->Prcodi     := STRZERO(Doador->Pr_Codigo,6)
         Receptor->Prdesc     := AllTrim(Doador->Pr_Descric)
         Receptor->Prcons     := Doador->Pr_Preco
      ENDIF
      Receptor->(LiberaRec(0) )
      Doador->( DBSKIP() )
   ENDDO
   Dbcloseall()
 	
   * Cod. Barras
	 
   USE \Destino\PRODUTO.DBF ALIAS Receptor shared NEW   // Tabela  com os produtos
   Index on PRCODI to iProduto
   USE Barras.DBF ALIAS Doador  NEW                             // Tabela com os Cod. de Barras (Chave Cod. Interno do Produto)
   Index on BR_PRCODIG to iBarras
   FimDoador := Doador->(LastRec())
	 
   Use \Destino\CodBar.dbf alias CodBar exclusive new        // Vai Receber os CodBarras
   zap
	 
   Barra:=""
    
   DBSELECTAREA("Receptor")
   Receptor->( DBGOTOP() )
   FimReceptor := Receptor->(LastRec())
   RegReceptor := 1

   Igual := 0

   WHILE Receptor->( !EOF() )
      Doador->(DbGotop())
      RegDoador := 1

      While Doador->(!EOF())
         IF Doador->BR_PrCodig = val(Receptor->PrCodi) .and. Len(alltrim(Doador->BR_Barras))>6
            barra := STRTRAN(ALLTRIM(Doador->BR_BARRAS),".","")
            barra := STRTRAN(barra,",","")
            barra := STRTRAN(barra,"-","")
            barra := STRTRAN(barra,"/","")
            If Igual = 0
               Receptor->(BlockRec(0))
               Receptor->CodBarra := barra
               Receptor->(LiberaRec(0))
               Igual := 1
            Else
               CodBar->( NewRec(0) )
               CodBar->Prcodi   := STRZERO(Doador->Br_PrCodig,6)
               CodBar->CodBarra := barra
               CodBar->(LiberaRec(0))
            Endif
         Else
            Igual := 0
         ENDIF
         @ 10,10 say "Posicao dentro do BD Barras -> " + Transform(RegDoador,"@E 999999") + "/" + Transform(FimDoador,"@E 999999")
         RegDoador++
         Doador->(DbSkip())
      ENDDO
      @ 12,10 say "Posicao dentro do BD Produto-> " + Transform(RegReceptor,"@E 999999") + "/" + Transform(FimReceptor,"@E 999999")
      RegReceptor++
      Receptor->(DbSKip())
   Enddo
   DBCLOSEALL()
   Return


Talvez os colegas pensem pq não simplesmente tipo usar a Tabela de Produtos base e a Tabela de Barras Base sem ter q ficar puxando nada tipo somente compatibilizando os campos, o fato é q todo meu sistema baseia-se numa tabela de produtos q contenha um código de barras ou não, tipo somente vai utilizar a tabela CodBAR qdo tiver MAIS DE 01 código agrupado na mesma ficha, o q não ocorre na base q será importada q tem os produtos e os códigos distintos.


Agradeço desde já a todos e Sucesso!!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Importar Cod. Barras Diversos de 01 Produto

Mensagem por fladimir »

Pessoal dei um jeitinho BRAZUCA....

Na mesma rotina acima, adicionei para q após um Registro Encontrado na Tabela BARRAS e adicionado na Tabela de Destino de Produtos e/ou CODBAR o mesmo fosse excluido pois não seria utilizado mais, ou seja, reduzi o número de registros na tabela BARRAS consequentemente aumentando GRADATIVAMENTE a velocidade da ROTINA....

...mas não achei q ficou muito legal, pois na verdade podem exisitir situações q não seja possível DELETAR os registros q são encontrados.


Vlw galera... Sucesso!!!!


:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder