Nesse manual explicaremos como realizar a configuração do Ponto de ajuste que realiza a importação dos produtos em uma promoção no Seta através de um arquivo .xls ou .txt que contenham os códigos como exemplificado no tutorial a seguir: 


https://www.youtube.com/watch?v=4iLOjAYl0lM&list=PLA5L72HPAjLBUTfPbc34yctaecYZffDAP&index=15&t=46s 



Acesse o Módulo Retaguarda  > Configurações > Pontos de Ajuste 


Módulo: Promocoes

Método: ImportarLista




Copie esse P.A e cole na janela que se abrirá ao clicar em Editar Ponto de Ajuste


*---------------------------------------------------------------------------*
*        Defini as Colunas de onde vai ser pego as informações                *
*---------------------------------------------------------------------------*
sColReferencia     = 'A' && Coluna com a Referencia do Produto

nLinhaInicial     = 2 && Primeira linha que o sistema começara a importar os registros

*---------------------------------------------------------------------------*
*        Verifica se as empresas foram seleciondas                            *
*---------------------------------------------------------------------------*
If Vazio(PROMOCOES_MOTOR.Empresas.codigo) == .T. Then
    Aviso('Nesta 1º Etapa:'+Chr(13)+Chr(13)+'Escolha as Empresas que farão parte desta promoção.')
    =PROMOCOES_MOTOR.ButtonEmpresas.Click()
    If Vazio(PROMOCOES_MOTOR.Empresas.codigo) == .T. Then
        Return Falso('Nenhuma Empresa foi escolhida.'+Chr(13)+'Se desejar, importe o arquivo novamente!')
    Endif
Endif

*---------------------------------------------------------------------------*
*        Seleciona o Arquivo a ser importado                                    *
*---------------------------------------------------------------------------*
Aviso('Na 2º Etapa:'+Chr(13)+Chr(13)+'Selecione o arquivo no formato Excel (XLSX) ou Texto (TXT) com itens que seram importados para a campanha.')

sFile = Getfile('', '', 'Importar', 0, 'Localize o arquivo de produtos a ser importado')
If Vazio(sFile) Then
    Return .T.
Endif

sTFile = Getwordnum(sFile,OCCURS('.', sFile)+1,'.')

Do Case

    Case sTFile = 'XLS' OR sTFile = 'XLSX'

         msWait('Aguarde... Verificando informações do arquivo XLSX.', 'nowait', 'noclear')
        oExcel = Createobject('Excel.Application')
        oExcel.DisplayAlerts=.T.
        oExcel.Visible = .F.
        oExcel.Workbooks.Open(sFile)

        Create Cursor cReferencias (codigo c(6), lAchei L)

        Index On Alltrim(Upper(codigo)) To ref

        For i = nLinhaInicial To 60000
            sReferencia         = oExcel.Sheets(1).Range(sColReferencia+Alltrim(Str(i))).Value
            if vartype(sReferencia) == 'N' then
                sReferencia = alltrim(str(sReferencia))
            endif
            If !Vazio(sReferencia)
                Append Blank In cReferencias
                Replace codigo With sReferencia In cReferencias
                Replace lAchei With .F.    In cReferencias
                If nLinhaInicial == I Then
                    Wait clear
                    sMensagem = 'Verifique as informações:'+Chr(13)+Chr(13)+;
                    'Código: ' + Alltrim(Upper(cReferencias.codigo))+Chr(13)+;
                    [Essas informações acima, condizem com a primeira linha do arquivo selecionado?]
                    If !Confirma(sMensagem) Then
                        oExcel.Quit
                        Release oExcel    
                        DestroiCursor('cReferencias')
                        Return falso('Importação cancelada!')
                    Else
                        msWait('Aguarde... Verificando informações do arquivo XLSX.', 'nowait', 'noclear')
                    Endif
                Endif
            Else
                Exit
            Endif
        Endfor
        oExcel.Quit
        Release oExcel

    Case sTFile = 'TXT'
        sAjuste= ''
            
        Store Filetostr(sFile) To sAjuste
        
        Create Cursor cReferencias (codigo c(6), lAchei L)
        
        For I = 1 To Alines(linha, sAjuste)
            IF !vazio(Alltrim(Getwordnum(linha(I),1,';')))
                Append Blank In cReferencias
                Replace cReferencias.codigo With Alltrim(Getwordnum(linha(I),1,';')) In cReferencias
                Replace cReferencias.lAchei With .F.    In cReferencias
     EndIf
        Endfor
    
    OtherWise
        Aviso('ARQUIVO SELECIONADO INVÁLIDO. IMPORTAÇÃO CANCELADA')
        return
EndCase

Select * From cReferencias where len(alltrim(Codigo)) = 6 Group By Codigo,lAchei Into Cursor cReferencias ReadWrite
Index On Alltrim(Upper(codigo)) To ref2

Select cReferencias
Go Top

*-------------------------------------------------------------------*
*        Busca todos os Produtos com esses códigos    *
*-------------------------------------------------------------------*

sFiltroIN = FiltroIN('cReferencias','codigo')
sSql = [Select P.Codigo, P.Descricao, P.Corx, P.Referencia, P.Preco, P.grade, '*'::Char(1) as Tipo, ]+;
    [ Sum(Case When PP.Codigo Is Null Then 0 Else 1 End)::Numeric(3) as Promocoes ]+;
    [ From Produtos P ]+chr(13)+;
    [ Left Join Promocoes_Produtos PP On Substr(PP.Codigo,1,6)::char(6)=P.Codigo And Right(PP.Codigo,2)::Char(2) In ] + PROMOCOES_MOTOR.Empresas.codigo+Chr(13)+;
    [Where P.Codigo in ] + sFiltroIN+Chr(13)+;
    [Group by P.Codigo, P.Descricao, P.Corx, P.Referencia, P.Preco, P.grade, Tipo ]+Chr(13)
    
= ExecutaBD(sSql ,"cProdutosTemp",'Aguarde... Buscando Lista de Produtos no Banco de Dados')
nRegItens = Reccount('cProdutosTemp')

*-------------------------------------------------------------------*
*        Verifica se encontrou todos os produtos da planilha            *
*-------------------------------------------------------------------*
nitensEnviados = 0
Go Top In cProdutosTemp
Scan While Eof() <> .T.
    nitensEnviados = nitensEnviados + 1
    Seek Alltrim(Upper(cProdutosTemp.codigo)) In cReferencias
    If Alltrim(Upper(cProdutosTemp.codigo)) == Alltrim(Upper(cReferencias.codigo)) Then
        Replace cReferencias.lAchei With .T. In cReferencias
    Endif
    Select cProdutosTemp
Endscan


*-------------------------------------------------------------------*
*        Salva os produtos na cProdutos para visualizar na grade        *
*-------------------------------------------------------------------*
Select * From cProdutosTemp Group By Codigo,Descricao,Referencia Into Cursor cProdutosTemp ReadWrite
Select cProdutosTemp
Go Top In cProdutosTemp
Scan While Eof() <> .T.
    
    append blank in cProdutos
    replace Codigo with cProdutosTemp.Codigo in cProdutos
    replace Descricao with cProdutosTemp.Descricao in cProdutos
    replace Cor with cProdutosTemp.Corx in cProdutos
    replace Referencia with cProdutosTemp.Referencia in cProdutos
    replace Preco with cProdutosTemp.Preco in cProdutos
    replace Tipo with cProdutosTemp.Tipo in cProdutos
    replace Grade with cProdutosTemp.grade in cProdutos
    replace Promocoes with cProdutosTemp.Promocoes in cProdutos
    
Endscan

Select cProdutos
PROMOCOES_MOTOR.Grid.Refresh()
PROMOCOES_MOTOR.Grid.setfocus()


cRefNaoEncontrados = ''
Select cReferencias
Go Top
Scan While Eof() <> .t.
    If cReferencias.lAchei == .F.
        cRefNaoEncontrados = cRefNaoEncontrados + Iif(Len(cRefNaoEncontrados)>0,', ','') + Alltrim(Upper(cReferencias.Codigo))
    Endif
Endscan

Wait clear

If Len(cRefNaoEncontrados) > 0 Then
    Aviso('De todos os produtos inseridos na campanha, as referências abaixo não foram encontradas no cadastro de produtos: '+Chr(13)+Chr(13)+cRefNaoEncontrados)
    _cliptext = cRefNaoEncontrados
Else
    Aviso('Os produtos foram importados com sucesso!')
Endif

DestroiCursor('cTemp')
DestroiCursor('cReferencias')
DestroiCursor('cProdutosTemp')

Return .T.