*---------------------------------------------------------------* * Módulo: NfImpressao * * Método: Importar_Arquivos * *---------------------------------------------------------------* *-------------------------------------------------------------------* * Localiza o Arquivo a ser importado * *-------------------------------------------------------------------* sFile = Getfile('TXT', '', 'Importar', 0, 'Localize o Arquivo com os Produtos') If Vazio(sFile) Then Return .T. Endif If File(sFile) == .T. Then msWait('Aguarde... Importando produtos do arquivo.','NoClear','NoWait') oForm = _Screen.ActiveForm Create Cursor cItensTXT (codigo c(20), Quantidade N(12,3), Codigo_Seta c(8), Status L, lValid L, Produto c(6), Grade c(3)) Store Filetostr(sFile) To sProdutos Store Memlines(sProdutos) To gNum sCodigoSeta = '' *-------------------------------------------------------------------* * Lê o arquivo de texto com os produtos e quantidades * *-------------------------------------------------------------------* For i = 1 To gNum Store Getwordnum(Mline(sProdutos,i),1,';') To sCodigo Store Getwordnum(Mline(sProdutos,i),2,';') To sQuantidade If Len(Alltrim(sCodigo)) <> 0 Then Append Blank In cItensTXT Replace Status With .F. In cItensTXT Replace codigo With Getwordnum(Mline(sProdutos,i),1,';') In cItensTXT Replace Quantidade With Val(Getwordnum(Mline(sProdutos,i),2,';')) In cItensTXT If Len(Alltrim(cItensTXT.codigo))==13 .And. Leftc(cItensTXT.codigo,5)=='00000' Then Replace Codigo_Seta With Rightc(Alltrim(cItensTXT.codigo),8) In cItensTXT Replace Produto With Leftc(Rightc(Alltrim(cItensTXT.codigo),8),6) In cItensTXT Endif If Len(Alltrim(STRTRAN(cItensTXT.codigo ,'-',''))) <= 8 Then Replace Codigo_Seta With Padn(Alltrim(STRTRAN(cItensTXT.codigo,'-','')),8) In cItensTXT Replace Produto With Leftc(Padn(Alltrim(STRTRAN(cItensTXT.codigo,'-','')),8),6) In cItensTXT Endif Endif EndFor Select cItensTXT sCodigo = FiltroIN('cItensTXT','codigo') SSql = "Select Codigo, produto From Barras Where Codigo in "+sCodigo ExecutaBD(SSql, 'cBarras') Select cBarras Scan Update cItensTXT Set Codigo_Seta = cBarras.Produto, Produto=Leftc(cBarras.Produto,6) Where Alltrim(Upper(cItensTXT.codigo))==Alltrim(Upper(cBarras.codigo)) Endscan *-------------------------------------------------------------------* * Valida se todos os Codigo_Seta existem * *-------------------------------------------------------------------* Local cProdutoValid as Cursor _sSql = [ Select Codigo, Grade From Produtos Where Desativar=False And Codigo In ] + FiltroIN('cItensTXT','Produto') If ExecutaBD(_sSql, 'cProdutoValid') == .T. *-------------------------------------------------------* * Valida se o Código do produto existe * *-------------------------------------------------------* Select cProdutoValid Go Top In 'cProdutoValid' Scan Update cItensTXT Set lValid = .T., Grade = cProdutoValid.Grade Where Alltrim(Upper(cItensTXT.Produto))==Alltrim(Upper(cProdutoValid.Codigo)) Endscan *-------------------------------------------------------* * Valida se a Grade do Produto Existe * *-------------------------------------------------------* Select cItensTXT Scan If cItensTXT.lValid And !Right(cItensTXT.Codigo_Seta, 2)$Tamanhos(cItensTXT.Grade) && Verifica se Existe o Tamanho na Grade Replace lValid With .F. In cItensTXT Endif If Len(Alltrim(cItensTXT.Codigo_Seta))==8 And cItensTXT.lValid Replace Status With .T. In cItensTXT Endif If Vazio(cItensTXT.Quantidade) then replace cItensTXT.Quantidade With 1 In cItensTXT Endif Endscan Endif Delete From NFDetalhes Where Len(Alltrim(Produto))==0 *-------------------------------------------------------* * Adiciona os produtos na Grade * *-------------------------------------------------------* Select codigo, Sum(Quantidade) as Quantidade, Codigo_Seta, Status, lValid, Produto, Grade; From cItensTXT; Group By codigo,Codigo_Seta, Status, lValid, Produto, Grade; Into Cursor cItensTXT ReadWrite Select cItensTXT Go Top In 'cItensTXT' Scan If cItensTXT.Status == .T. Then Append Blank In NFDetalhes oForm.Grid.Produto.Text1.Value = cItensTXT.Codigo_Seta oForm.Grid.Produto.Text1.Alterou =.T. If oForm.Grid.Produto.Text1.Valid() If cItensTXT.Quantidade > 1 Then Go Bottom in NFDetalhes Replace NFDetalhes.Quantidade With cItensTXT.Quantidade In NFDetalhes oForm.Grid.Quantidade.Quantidade1.Value = NFDetalhes.Quantidade oForm.Grid.Quantidade.Quantidade1.Alterou = .T. oForm.Grid.Quantidade.Quantidade1.Valid() Endif Else Replace Status With .F. In cItensTXT Endif Endif Endscan *-----------------------------------------------------------------------* * Verifica se não encontrou algum item no cadastro de produtos * *-----------------------------------------------------------------------* Select cItensTXT Count For cItensTXT.Status == .F. To nFaltantes Wait Clear If nFaltantes > 0 If !Directory('C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\') Mkdir 'C:\SetaArquivos\Importação de Produtos Impressão NF\' Mkdir 'C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\' Endif Select cItensTXT sLog = '' Scan If !cItensTXT.Status sLog = sLog + Alltrim(cItensTXT.Codigo)+Chr(13)+Chr(10) Endif EndScan sLog = Chr(13)+Chr(10) + '------------ '+ttoc(Datetime())+' ------------'+Chr(13)+Chr(10)+sLog If File('C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\Produtos_'+Dtos(Date())+'.txt') Store sLog + Filetostr('C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\Produtos_'+Dtos(Date())+'.txt') To sLog Endif Strtofile(sLog ,'C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\Produtos_'+Dtos(Date())+'.txt') cMensagem = 'Alguns códigos informados no arquivo foram ignorados por não terem sido encontrados ' cMensagem = cMensagem + 'no Cadastro de Produtos ou devido a grade de tamanho não ter sido localizada.'+Chr(13)+Chr(13) cMensagem = cMensagem + 'Deseja abrir o diretório com os produtos não localizados?' If Confirma(cMensagem) OpenFolder('C:\SetaArquivos\Importação de Produtos Impressão NF\Divergências\') Endif Else Local nImportados as Integer Calculate Cnt() To nImportados For !Deleted() In 'cItensTXT' If nImportados > 0 Aviso('Arquivo de produtos importado com sucesso para a tela de Emissão de Notas Fiscais!') Else Aviso('Nenhum produto encontrado no arquivo.') EndIf Endif DestroiCursor('cBarras') DestroiCursor('cItensTXT') Go Top In NFDetalhes Wait Clear Endif Function OpenFolder Parameters tcFolderName As String Local loObject As Object m.lcFileName = m.tcFolderName m.loObject = CreateObject("Shell.Application") m.loObject.Open(m.lcFileName) EndFunc