Importar Cod. Barras Diversos de 01 Produto
Enviado: 09 Jun 2009 01:09
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!
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
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