;** re_gtin ********************************************************************
;*  Exporta‡Æo/ImportÆ‡Æo - GTIN                                               *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 30/01/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 01/02/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes Importa‡Æo e atualiza‡Æo do CNP
;Ultima Alteracao: 02/02/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes Importa‡Æo e atualiza‡Æo do CNP
;Ultima Alteracao: 07/02/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes Iten_com                             
;Ultima Alteracao: 09/02/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes sele‡Æo filtro                       
;Ultima Alteracao: 15/06/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes PegaValor() ; -> ,               
;Ultima Alteracao: 24/07/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes RE_EGTIN                         
;Ultima Alteracao: 14/08/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes sele‡Æo item ja existente      
;Ultima Alteracao: 28/08/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes layout importacao arquivo.csv          

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()

While True
  End
  Down
  Moveto [Codigo do Item]
  
  SetaCorRegistro("Editar")
  
  While True
  TECLA="Esc=Retornar  "
  BarraPadrao()
  
  Wait Field
   Message ""
    Until "ESC","ENTER",
          "HOME","UP","PGUP","DEL",
          -94,-33,-22, -18,
          "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12",-68,-60
          -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -133, -134, -139, -140

  MSGCAMPO=""

  If RetVal=-33
       Then 
            Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F5  ~L~impar             " : " Limpar lista de Itens                   " : "F5",
             "F6  ~S~ele‡„o            " : " Sele‡„o de Itens                        " : "F6",
             Separator,
             "F7  ~I~mporta‡Æo         " : " Importar arquivo CNP para atualiza‡Æo   " : "F7",
             "F8  ~A~tualizar          " : " Atualizar rela‡Æo do arquivo CNP        " : "F8",
             Separator,
             "F9  ~E~xporta‡Æo         " : " Gerar arquivo para cadastro CNP         " : "F9",
             Separator,
             "~C~ancelar               " : " Cancelar a Opera‡„o                     " : "CANCELAR"
            EndMenu
            To MenuVar
            Echo Off
            If MenuVar="CANCELAR" or MenuVar="Esc"
                Then Loop
            EndIf
            RetVal=MenuVar
  EndIf

  Switch
    Case RetVal="F1":
         If Field()="Codigo do Item"    
            Then Moveto [Lookup_Item]
                 if CONSULTAF1()
                    then [Codigo do Item]=[Lookup_Item]
                 endif
                 moveto [Codigo do Item]
         EndIf       
    Case RetVal="F3": SemFicha()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F5":
         Del
         ConfGeral("Confirma a exclus„o dos registro desta relac„o ?")
         If OK="S"
             Then Limpar()
         EndIf
         QuitLoop
    Case RetVal="F6":
         Del
         Selecao()
         QuitLoop

    Case RetVal="F7":
         Del
         Importa()
         QuitLoop

    Case RetVal="F8":
         Del
         ConfGeral("Confirma atualizar dados do CNP ?")
         If OK="S"
             Then Atualizar()
         EndIf
         QuitLoop

    Case RetVal="F9":
         Del
         ConfGeral("Confirma gerar arquivo para o CNP ?")
         If OK="S"
             Then Exporta()
         EndIf
         QuitLoop

    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           PAGINA("Re_GTIN","MR")
           If EDITAR="S"
              Then CHAVE=0
                   Controla_EdicaoC()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then DEL
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVE=9
         Del
         Return
    Case RetVal="ENTER": 
         If IsBlank([])Then Loop EndIf
         CODIGO = AlinhM([],10)
         Del                                        

         Locate CODIGO
         If Retval
            Then CHAVE=0
            Else CHAVE=1
                 End
                 Down
                 
                 Moveto [Lookup_Item]
                 if not Busca_Lookup("Codigo do Item",CODIGO,"Item nÆo cadastrado !")
                    Then Del 
                         QuitLoop
                    else if Reg_Busca_Lookup["Tipo do Item"      ] ="P"       
                            then
                                 ;ok
                            else 
                                 [Lookup_Item   ]=CODIGO
                                 [Codigo do Item]=CODIGO
                                 echo normal
                                 echo off

                                 Mensagem("//"+Reg_Busca_Lookup["Codigo do Item"]+" "+Reg_Busca_Lookup["Descricao do Item"]+"// //"+
                                          
                                          Reg_Busca_Lookup["Descricao Tipo do Item"]+"; "+
                                          Reg_Busca_Lookup["Tipo Codigo_Barras"    ]+"; "+
                                          Reg_Busca_Lookup["Codigo de Barras"      ]+"  // //"+
                                 
                                          "Item nÆo ‚ v lido: // //"+
                                          "- Item nÆo ‚ do tipo PRODUTO ACABADO  //")
                                 del
                                 quitloop
                         endif     
                                 
                 EndIf
                 
                 [Lookup_Item   ]=CODIGO
                 [Codigo do Item]=CODIGO
         EndIf
         If Not IsLockRecord()
            Then Return
            else if CHAVE=1 then Del endif
         EndIf
         Quitloop
    EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitar Quantidade                                              *
;*******************************************************************************
Proc DIGITA()

return

Moveto [Codigo de Barras ]
While True

  TECLA=" Esc=Retornar  "

  If CHAVE=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Until "ESC","ENTER","DEL","FIELDVIEW","F35"

  Switch
  Case Retval="ESC":
       If QuerDesfazer("")
          Then If CHAVE=1
                  Then Del
                  Else Undo
               EndIf
               CHAVE=9
               QuitLoop
       EndIf
  Case Retval="ENTER":
       Switch
         Case Field()="Codigo de Barras":
              QuitLoop
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVE=0
          Then If QuerExcluir("")
                  Then DEL
                       QuitLoop
               EndIf
       EndIf
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina Limpar Registros                                                     *
;*******************************************************************************
Proc Limpar()
Aguarde("Aguarde, Excluindo registros")
While RecordStatus("New")=False
  Del
EndWhile
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_FAMI"           : Campo="NO"
            Case Campo="TG_GRP"            : Campo="TG_FAMI"
            Case Campo="TG_MARCA"          : Campo="TG_GRP"
            Case Campo="TG_REFERENCIA"     : Campo="TG_MARCA"
            Case Campo="TG_STATUS"         : Campo="TG_REFERENCIA"
            Case Campo="TG_CODIGOI"        : Campo="TG_STATUS"
            Case Campo="TG_CODIGOF"        : Campo="TG_CODIGOI"
            Case Campo="YES" Or Campo="NO" : Campo="TG_FAMI" 
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_FAMI"        : Campo="TG_GRP"
                    Case Campo="TG_GRP"         : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo="TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"  : Campo="TG_STATUS"
                    Case Campo="TG_STATUS"      : Campo="TG_CODIGOI"
                    Case Campo="TG_CODIGOI"     : Campo="TG_CODIGOF"
                    Case Campo="TG_CODIGOF"     : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Filtrar Registros                                                    *
;*******************************************************************************
Proc Selecao()
LimpAguarde()
Do_It!
ClearAll
Echo Normal
Echo Off

VSDGFAMI        = ""
VSDGGRP         = ""
VSDGMARCA       = ""
VSDGREFERENCIA  = ""
VSDGCODIGOI     = ""
VSDGCODIGOF     = ""

While True
  ShowDialog "Sele‡„o de Registros a Incluir" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
    @ 01,01 Height 13 Width 72

    Label  @ 00,00 "Familia"  For "TG_FAMI"
    Accept @ 01,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 01,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 02,00 "Grupo"  For "TG_GRP"
    Accept @ 03,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 03,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 04,00 "Marca"  For "TG_MARCA"
    Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 05,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 06,00 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 07,01 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA"     To VSDGREFERENCIA

    Label  @ 00,35 "Status do Item" For "TG_STATUS"
    Accept @ 01,39 Width 04 "A1"  Picture "1,2,3" Tag "TG_STATUS" To VSDGSTATUS
    Accept @ 01,44 Width 25 "A12" Picture "!*!" Tag "TG_NOMSTATUS" To VSDGNOMSTATUS

    Label  @ 02,35 "Faixa de C¢digo de" For "TG_CODIGOI"
    Accept @ 03,36 Width 13 "A10"  Picture "#*#" Tag "TG_CODIGOI" To VSDGCODIGOI
    Label  @ 03,49 "at‚" For "TG_CODIGOF"
    Accept @ 03,54 Width 13 "A10"  Picture "#*#" Tag "TG_CODIGOF" To VSDGCODIGOF

    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If RetVal
     Then 
          LimpaRodape(0)
          Aguarde("Aguarde, Selecionando registros")
          ClearAll
          
          {Ask} {Itens}
          Moveto [Codigo do Item         ] Check
          Switch 
            Case VSDGCODIGOI=""  And VSDGCODIGOF<>""  : TypeIn "<=~VSDGCODIGOF"
            Case VSDGCODIGOF=""  And VSDGCODIGOI<>""  : TypeIn ">=~VSDGCODIGOI"
            Case VSDGCODIGOF<>"" And VSDGCODIGOI<>""  : TypeIn ">=~VSDGCODIGOI, <=~VSDGCODIGOF"
          EndSwitch
          Moveto [Tipo do Item      ] TypeIn "P"
          Moveto [Codigo da Familia ] TypeIn "~VSDGFAMI.."
          Moveto [Codigo do Grupo   ] TypeIn "~VSDGGRP.."
          Moveto [Codigo da Marca   ] TypeIn "~VSDGMARCA.."
          Moveto [Referencia        ] TypeIn "~VSDGREFERENCIA.."
          Moveto [Inativo]            
          Switch
            Case VSDGSTATUS="1": TypeIn "N"
            Case VSDGSTATUS="2": TypeIn "S"
          EndSwitch
          moveto [Tipo Codigo_Barras] typein "not \"A-EAN13\""
          Do_It!
          ClearAll

          {ask} {answer}
          Moveto [Codigo do Item         ] Check typein "02.."
          Do_It!
          ClearAll

          If IsEmpty("Answer")
             Then Mensagem("N„o exite registro conforme sele‡„o !")
             Else 
                  View "Re_GTIN"
                  CoEdit "Answer"
                  Scan
                    Moveto "Re_GTIN"
                    End Down
                    [Lookup_Item       ]=[Answer->Codigo do Item]
                    [Codigo do Item    ]=[Answer->Codigo do Item]
                    if isLockrecord()
                       then Del
                    endif   

                    Moveto "Answer"
                  EndScan
                  Do_It!
                  ClearAll
          EndIf
    Else ClearAll
         QuitLoop
  EndIf
  ClearAll
  QuitLoop

EndWhile

CoEdit "Re_GTIN"
PickForm OPCAO_FORM_PADRAO
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Exporta()
private regitens,ARQ,ARQTEMP,NR,
        segmento,familia,classe,subclasse,gtin,
        marca,numerodomodelo,descricaodoproduto,ncm,paisdestino,paisorigem,pesobruto,pesobrutokg,
        nomeurl1,url1,tipourl1,cdbarras,
        s

if not VerificaRelacao("Exporta")
   then return
endif   

Aguarde("Gerando arquivo")
Do_It!
ClearAll

empty("RE_EGTIN")

NR = NRecords("RE_GTIN")
gerarok=true

View   "RE_EGTIN"
CoEdit "RE_GTIN"
scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, gravando dados dos itens "+BARRA_STRING)

  getrecord "\\sistemas\\estoque\\itens" [Codigo do Item] to regitens
  if retval     
     then 
          segmento =""
          familia  =""
          classe   =""
          subclasse=""
          
          getrecord "\\sistemas\\estoque\\iten_com" [Codigo do Item] to iten_com
          if retval     
             then
                  segmento =iten_com["CNP_SEGMENTO" ]
                  familia  =iten_com["CNP_FAMILIA"  ]
                  classe   =iten_com["CNP_CLASSE"   ]
                  subclasse=iten_com["CNP_SUBCLASSE"]
          endif
          
          marca             =regitens["Descricao da Marca"]
          numerodomodelo    =regitens["Codigo do Item"]
          descricaodoproduto=regitens["Descricao do Item"]
          ncm               =regitens["NCM"]
          paisdestino       ="Brazil"
          paisorigem        ="Brazil"
          pesobruto         =ltrim(Format("W10.3",regitens["Peso Liquido"]+regitens["Peso Embalagem"]))
          pesobrutokg       ="KG"
          nomeurl1          =regitens["Descricao do Item"]
          url1              ="https://cnpblob.blob.core.windows.net/images/layout_placeholder.jpg"
          tipourl1          ="5"

          if regitens["Tipo Codigo_Barras"]="A-EAN13" or          
             regitens["Tipo Codigo_Barras"]="F-EAN14"   
             then gtin=regitens["Codigo de Barras"  ]
             else gtin=""
          endif   
                       
          ; -----
          ; ao definir novo cliente tem que fazer cobran‡a para implanta‡Æo deste mecanismo R$400,00
          ; -----
          
          moveto "RE_EGTIN"
          end
          down

          [A ]="Ativo"                      ;Status GTIN (*);
          [B ]=""+gtin                      ;GTIN;
          [C ]=""+marca                     ;Marca (*);
          [D ]=""+numerodomodelo            ;Nœmero do Modelo;
          [E ]=""+descricaodoproduto        ;Descri+’o do Produto (*);
          [F ]=""                           ;Data lan+amento mercado;
          [G ]=""+ncm                       ;NCM (*);
          [H ]=""                           ;CEST;
          [I ]=""+segmento                  ;Segmento Produto (*);
          [J ]=""+familia                   ;Fam­lia Produto (*);
          [K ]=""+classe                    ;Classe Produto (*);
          [L ]=""+subclasse                 ;Sub Classe Produto (*);
          [M ]=""                           ;Nœmero de Identifica+’o Alternativa 1;
          [N ]=""                           ;Ag^ncia Reguladora 1;
          [O ]=""                           ;Nœmero de Identifica+’o Alternativa 2;
          [P ]=""                           ;Ag^ncia Reguladora 2;
          [Q ]=""                           ;Nœmero de Identifica+’o Alternativa 3;
          [R ]=""                           ;Ag^ncia Reguladora 3;
          [S ]=""                           ;Nœmero de Identifica+’o Alternativa 4;
          [T ]=""                           ;Ag^ncia Reguladora 4;
          [U ]=""                           ;Nœmero de Identifica+’o Alternativa 5;
          [V ]=""                           ;Ag^ncia Reguladora 5;
          [W ]=""+paisdestino               ;Pa­s/Mercado de Destino (*);
          [X ]=""+paisorigem                ;Pa­s de Origem (*);
          [Y ]=""                           ;Estado;
          [Z ]=""                           ;Altura;
          [AA]=""                           ;Altura - UN Medida;
          [AB]=""                           ;Largura;
          [AC]=""                           ;Largura - UN Medida;
          [AD]=""                           ;Profundidade;
          [AE]=""                           ;Profundidade - UN Medida;
          [AF]=""                           ;Conteœdo L­quido;
          [AG]=""                           ;Cont. Liq. - UN Medida - UN Medida;
          [AH]=""+pesobruto                 ;Peso Bruto (*);
          [AI]=""+pesobrutokg               ;Peso Bruto - UN Medida (*);
          [AJ]=""                           ;Peso L­quido;
          [AK]=""                           ;Peso L­q. - UN Medida;
          [AL]=""                           ;Tempo m­nimo (dias) de vida œtil do produto ap½s produ+’o;
          [AM]=""                           ;Compartilha Dados?;
          [AN]=""                           ;Observa+’o;
          [AO]=""                           ;Tipo de Produto;
          [AP]=""                           ;Tipo de Pallet;
          [AQ]=""                           ;Fator de Empilhamento;
          [AR]=""                           ;Quantidade de Camadas por Pallet;
          [AS]=""                           ;Quantidade de Itens Comerciais em uma ‚nica Camada;
          [AT]=""                           ;Quantidade de Itens Comerciais uma Camada Completa;
          [AU]=""                           ;Quantidade de Camadas Completas em Item Comercial;
          [AV]=""                           ;GTIN Inferior;
          [AW]=""                           ;Quantidade;
          [AX]=""                           ;Al­quota de Impostos IPI;
          [AY]=""+nomeurl1                  ;Nome URL 1 (*);
          [AZ]=""+url1                      ;URL 1 (*);
          [BA]=""+tipourl1                  ;Tipo de URL 1 (*);
          [BB]=""                           ;Nome URL 2 (*);
          [BC]=""                           ;URL 2 (*);
          [BD]=""                           ;Tipo de URL 2 (*);
          [BE]=""                           ;Nome URL 3 (*);
          [BF]=""                           ;URL 3 (*);
          [BG]=""                           ;Tipo de URL 3 (*);
          [BH]=""                           ;Item Comercial ' um modelo;
          [BI]=""                           ;Unidade de Medida do Pedido;
          [BJ]=""                           ;Mœltiplo da Quantidade para Pedido;
          [BK]=""                           ;Quantidade M­nima para Pedido;
          [BL]=""                           ;Tipo da Embalagem;
          [BM]=""                           ;Temperatura M­nima de Armazenamento/manuseio;
          [BN]=""                           ;Unidade de Medida da Temperatura de Armazenamento/manuseio M­nima;
          [BO]=""                           ;Temperatura Mÿxima de Armazenamento/manuseio;
          [BP]=""                           ;Unidade de Medida da Temperatura Armazenamento/manuseio Mÿxima;
          [BQ]=""                           ;Indicador de Mercadorias Perigosas          

  endif

  moveto "RE_GTIN"
endscan
Do_It!
ClearAll
limpAguarde()

DIREPORT   ="\\Sistemas\\Exporta\\Dados\\"
VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA  =SubStr(Directory(),1,2)+DIREPORT
ARQUIVO    ="GERAGTIN"
Tipo_Docto =2
Tipo_Ext   ="*.XLS"
Dispositivo=4
DISPOSITIVO_OPCAO="A"

if gerarok 
   then
        If IsFile(DIREPORT+ARQUIVO+SubStr(Tipo_Ext,2,4))
          Then MSG="Na pasta "+DIREPORT+" //"
               MSG=MSG+"j  contem um arquivo chamado '"+ARQUIVO+SubStr(Tipo_Ext,2,4)+"' ! //  //"
               MSG=MSG+"Deseja substituir o arquivo existente ?"
               ConfGeral(MSG)
               If OK="S"
                  Then 
                       Deleta_Arquivo(DIREPORT+ARQUIVO+SubStr(Tipo_Ext,2,4))
                  Else 
                       LimpAguarde()
                       gerarok=false
               EndIf
        EndIf
EndIf

if gerarok
   then 
        Abrir_Arquivo(VSDGDRIVE+"\\Sistemas\\Estoque\\GTIN-13.xlsx")
        Sleep 1000
        
        Tabela_cnv=Cria_Temp(PrivDir())
        Copy "RE_EGTIN" Tabela_cnv

        Comando="c:\\vise\\Vpxc.exe "+
        TABELA_CNV+".db "+DIREPORT+ARQUIVO+".xlsx /open"
        Executa_Programa(comando)
        Sleep 1000
         
        msg=    "Situa‡äes para a exporta‡Æo:// //"  
        msg=msg+" Ajustar o cabe‡alho da planilha conforme padrÆo CNP !// //"

        msg=msg+Completa(" - Copie o cabe‡alho da planilha do CNP          ",60," ")+"//"
        msg=msg+Completa("   "+VSDGDRIVE+"\\Sistemas\\Estoque\\GTIN-13.xlsx",60," ")+"//"

        msg=msg+Completa("   e cole na planilha gerada                     ",60," ")+"//"
        msg=msg+Completa("   "+VSDGDRIVE+DIREPORT+ARQUIVO+".xlsx e salvar  ",60," ")+"// //"

        msg=msg+Completa(" - Abra o SITE do CNP e importe o arquivo        ",60," ")+"//"
        msg=msg+Completa("   "+VSDGDRIVE+DIREPORT+ARQUIVO+".xlsx"           ,60," ")+"//"
        mensagem(msg)

endif   


CoEdit "RE_GTIN"
PickForm OPCAO_FORM_PADRAO

Endproc







;*******************************************************************************
;* Rotina Converte DB                                                          *
;*******************************************************************************
Proc Syncroniza(Tp)
ClearAll

Switch
  Case Tp="Importa":
       Aguarde("Aguarde, Convertendo "+ARQ_TEMP)

       Empty("gtinOut")
       If IsAssigned(varinner) Then release vars varinner  EndIf

       FileRead ARQ_TEMP to varinner
       Edit "gtinOut"
       pos=1
       While True
         posf=searchFrom("\n",varinner,pos)
         if posf=0 then quitLoop endif
         [Texto]=substr(varinner,pos,(posf-pos))
         Down
         pos=posf+1
       EndWhile
       Do_It!
       ClearAll

       If IsAssigned(varinner) Then release vars varinner  EndIf

  Case Tp="Renomeia":
       Aguarde("Aguarde, Renomeando "+ARQ)

       ARQLido=VSDGDRIVE+VSDGPASTA+"\\Importado "+ARQUIVO

       FileWrite        PrivDir()+"funcao1.txt" From "REN|"+ARQ+"|"+ARQLido+"\n"
       ExecVisecf(PrivDir()+"funcao1.txt","")

EndSwitch
Return True
EndProc

Proc PegaValor(numcampo)

posi=1
For i From 1 To numcampo
;  Pos=SearchFrom(";",[GtinOut->Texto],posi)

  Pos=SearchFrom(",",[GtinOut->Texto],posi)
  If pos=0 then pos=500 EndIf
  Valor=UPPER(RTrim(SubStr([GtinOut->Texto],posi,(pos-posi))))
  posi=pos+1
EndFor

Return Valor
EndProc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc CarregarLista()

DynArray Array_Registro[]

Wcs=0
If IsFile(PrivDir()+"Dir.Txt")
   Then Deleta_Arquivo(PrivDir()+"Dir.Txt")
EndIf
                          
Lista_DiretorioF(VSDGDRIVE+VSDGPASTA,"Export_produtos_gs1_*.CSV")

For i from 1 to 7
  If Not IsFile(PrivDir()+"Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open PrivDir()+"Dir.Txt"
          If ErrorCode()=27
             Then Sleep 1000
                  Loop
          EndIf
          
          While True
            Extrair_Linha()
            If IsBlank(ELinha) Then QuitLoop EndIf
            wcs=wcs+1
            Array_Registro[wcs] = Completa(SubStr(ELINHA,1,Len(ELINHA)-1),40," ")+" "
          EndWhile
          CancelEdit

          QuitLoop
  EndIf
EndFor
                              
Endproc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc PegaNomeArquivo(indice)
Private indice

Return  RTrim(SubStr(Array_Registro[Indice],1,100))
EndProc


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc VerificaRelacao(tp)
Private tp, gerarok

Aguarde("Verificando rela‡Æo !!")

gerarok=true
moveto "re_gtin"
scan
 
  switch
    case tp="Exporta":
      if [Inativo]="I" ; item que foi importado gtin
         then mensagem("Rela‡Æo inv lida, consta item j  importado do CNP !")
              gerarok=false
              quitloop
      endif    
      if [Inativo]="A" ; item que foi atualizado gtin
         then mensagem("Rela‡Æo inv lida, consta item j  atualizado pelo CNP !")
              gerarok=false
              quitloop
      endif    

    
    case tp="Importa":
      if [Inativo]="A" ; item que foi atualizado gtin
         then mensagem("Rela‡Æo inv lida, consta item j  atualizado pelo CNP !")
              gerarok=false
              quitloop
      endif    
      if [Inativo]="I" ; item que foi importado gtin
         then mensagem("Rela‡Æo inv lida, consta item j  importado do CNP !")
              gerarok=false
              quitloop
      endif    
    

    case tp="Atualiza":
      if [Inativo]="A" ; item que foi atualizado gtin
         then mensagem("Rela‡Æo inv lida, consta item j  atualizado pelo CNP !")
              gerarok=false
              quitloop
      endif    
      if [Inativo]<>"I" ; item que foi importado gtin
         then mensagem("Rela‡Æo inv lida, consta item nÆo importado do CNP !")
              gerarok=false
              quitloop
      endif    

      if [Tipo Codigo_Barras]<>"A-EAN13" and [Tipo Codigo_Barras]<>"F-EAN14"        
         then mensagem("Rela‡Æo inv lida, consta item com tipo de c¢digo de barras inv lido !")
              gerarok=false
              quitloop
      endif    

      if ([Tipo Codigo_Barras]="A-EAN13" and len([Codigo de Barras  ])<>13) or    
         ([Tipo Codigo_Barras]="F-EAN14" and len([Codigo de Barras  ])<>14)       
         then mensagem("Rela‡Æo inv lida, consta item com c¢digo de barras inv lido !")
              gerarok=false
              quitloop
      endif    

  endswitch
  
endscan

LimpAguarde()

return gerarok
EndProc



;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_DialogImp(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
                                    
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
          Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Registro"      : Campo="NO"
            Case Campo="YES" Or Campo="NO": Campo="TG_Registro"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_Registro": Campo="YES"
                  EndSwitch
          EndIf                     
   EndSwitch 
EndIf

Switch  
  Case Campo="TG_Registro":
       MSG_CAMPO="Selecione o arquivo"
       TECLA=""
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Importa()
private ARQ,NR,impok,contreg

if not VerificaRelacao("Importa")
   then return
endif   

msg=    "Situa‡äes para a importa‡Æo:// //"  
msg=msg+" * no arquivo a ser importado geralmente cont‚m todos os itens do CNP !// //"
msg=msg+" - se deseja importar todos os itens contidos  no  arquivo, limpe antes//"
msg=msg+"   esta rela‡Æo;                                                       // //"
msg=msg+" - se deseja importar apenas os itens contidos  nesta  rela‡Æo  se  foi//"
msg=msg+"   referente a £ltima exporta‡Æo, continue o processo.                 //"
if not Confgeral(msg+"Deseja continuar a importa‡Æo ?")
   then return
endif   

Aguarde("Aguarde checagem")
Do_It!
ClearAll

impok=true
while impok

  LimpaRodape(0)
  
  VSDGDRIVE = SubStr(Directory(),1,2)
  VSDGPASTA = "\\Sistemas\\Exporta\\Dados"
  
  CarregarLista()
  
  ShowDialog "Arquivos dispon¡veis" Proc "SD_DialogImp"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",32,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 02,12   Height 14 Width 72
  
  @ 00,00 ?? "Lista de arquivos"
  PickDynArray @01,00 Height 08 width 69
   Columns 1
    Array_Registro
     Tag "TG_Registro"
      To ArrayElement
  
    Pushbutton @ 10,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 10,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  EndDialog
  
  If Not RetVal Then QuitLoop EndIf
  LimpaRodape(0)
  
  If DynArraySize(Array_Registro)=0
     Then Mensagem("NÆo existe arquivo selecionado !")
          Loop
  EndIf
  
  ARQUIVO=PegaNomeArquivo(ArrayElement)
  If IsBlank(ARQUIVO)
     Then Mensagem("Nome do arquivo a ler inv lido !")
          Loop
  EndIf

  AGUARDES("Convertando arquivo "+ARQUIVO)
  
  ARQ     =VSDGDRIVE+VSDGPASTA+"\\"+ARQUIVO
  ARQ_TEMP=VSDGDRIVE+VSDGPASTA+"\\gtinout.txt"
  Deleta_Arquivo(ARQ_TEMP)

  FileWrite        PrivDir()+"funcao1.txt" From "COP|" +ARQ+"|"+ARQ_TEMP+"\n"
  ExecVisecf(PrivDir()+"funcao1.txt","")
  
  If Not IsFile(ARQ_TEMP)
     Then MSG="Arquivo p/ importa‡„o n„o encontrado !// //"
          MSG=MSG+"Arquivo em '"+ARQ+"'// //"
          MSG=MSG+"Verifique !"
          Mensagem(MSG)
          Loop
  EndIf

  Syncroniza("Importa")

  If IsEmpty("gtinout")
     Then Mensagem("N„o exite registro conforme sele‡„o !")
     Else
          LimpaRodape(0)

          NRRI = NRecords("Re_GTIN")
          NR   = NRecords("gtinout")
          
          contreg=0 
          View "Itens"
          View "Re_GTIN"
          CoEdit "gtinout"
          Scan
            Barra(NR, RecNo())
            Aguarde("Aguarde, gravando dados dos itens "+BARRA_STRING)

            contreg=contreg+1
            
            status =PegaValor(5)
            coditem=PegaValor(10)
            codbar =PegaValor(8)
            
            if contreg>1 and status="ATIVO" and len(coditem)=10
               then
                    getrecord "\\sistemas\\estoque\\itens" coditem to regitens
                    if retval
                       then 
                            gravarok=true

                            Moveto "Re_GTIN"
                            moveto [Codigo do Item    ]
                            locate coditem
                            if not retval
                               then
                                    if NRRI=0
                                       then 
                                            End Down
                                            [Codigo do Item    ]=coditem
                                            [Lookup_Item       ]=coditem
                                       else
                                            gravarok=false
                                    endif   
                            endif
                            
                            if gravarok
                               then
                                    if len(codbar)=13 
                                       then [Tipo Codigo_Barras]="A-EAN13"
                                            [Codigo de Barras  ]=codbar    
                                    endif           
                                    if len(codbar)=14 
                                       then [Tipo Codigo_Barras]="F-EAN14"           
                                            [Codigo de Barras  ]=codbar    
                                    endif           

                                    [Inativo           ]="I"          
                                    UnLockRecord
                            endif        
                    endif
            endif

            Moveto "gtinout"
          EndScan
          Do_It!
          ClearAll
          
          Syncroniza("Renomeia")
          impok=false
          
          Mensagem("Processo Concluido !// //Conferir os itens desta rela‡Æo !")
          
  EndIf
  LimpaRodape(0)

endwhile

CoEdit "RE_GTIN"
PickForm OPCAO_FORM_PADRAO
endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Atualizar()
private ARQ,NR,impok,contreg,atuaok

if not VerificaRelacao("Atualiza")
   then return
endif   

Aguarde("Aguarde atualiza‡Æo")
Do_It!
ClearAll

NR = NRecords("RE_GTIN")
atuaok=true

View   "Itens"
CoEdit "RE_GTIN"
scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, atualizando dados dos itens "+BARRA_STRING)

  moveto "Itens"
  moveto [Codigo do Item]
  locate [RE_GTIN->Codigo do Item]
  if retval
     then
          [Codigo de Barras  ]=[RE_GTIN->Codigo de Barras  ]
          [Tipo Codigo_Barras]=[RE_GTIN->Tipo Codigo_Barras]          
          unlockrecord

          moveto "RE_GTIN"
          [Inativo]="A"
          unlockrecord

  endif

  moveto "RE_GTIN"
endscan
Do_It!
ClearAll
limpAguarde()

if atuaok
   then Mensagem("Processo Concluido !// //Conferir dados no cadastro de itens !")
endif

CoEdit "Re_GTIN"
PickForm OPCAO_FORM_PADRAO
EndProc



;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
If RecordStatus("Locked") Then UnLockRecord EndIf
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf
If Not Isassigned(ROTINA_LIBERADA)   Then ROTINA_LIBERADA   = False  EndIf

Sys_Valor()

          ; -----
          ; ao definir novo cliente tem que fazer cobran‡a para implanta‡Æo deste mecanismo R$300,00
          ; -----
          
Switch                                                                                      
  Case SYS_CODIGO_CLIENTE="0227" Or SYS_CHAPA_USUARIO="9999" : ROTINA_LIBERADA = True
EndSwitch

If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf   

OPCAO_FORM_PADRAO = "F"

View "Itens"
CoEdit "Re_GTIN"
PickForm OPCAO_FORM_PADRAO
While True
  CHAVE()
  If CHAVE=9 Then QuitLoop EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All
