;** Itens **********************************************************************
;*  Manutencao Cadastro de Item de Estoque                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 30/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Iten_Cor
;Ultima Alteracao: 13/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Campos Tipo_Codificacao/Tamanho/Tipo Codigo_Barras
;Ultima Alteracao: 03/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DTamanho
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Campos MVAÝs + Codigo MVA                                             
;Ultima Alteracao: 18/11/2009 por Bruno Carvalho
;Motivo Alteracao: Adicionado Campos Codigo e Descricao da Simbologia  
;Ultima Alteracao: 25/03/2009 por Cleber Alves
;Motivo Alteracao: Adicionado Campos C.Servico
;Ultima Alteracao: 08/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria Grade/Cor TpCdBarr/CdBarr regerar                        
;Ultima Alteracao: 01/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CdBarr J_EAN13 = 78+Codigo do Item
;Ultima Alteracao: 17/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novos Campos e Ajustes Layout
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novo Campo CSOSN e Ajustes Layout
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 11/11/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Peso Variavel
;Ultima Alteracao: 21/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tributacao ISSQN                    
;Ultima Alteracao: 22/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grade Isabela Garcia
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas   
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;Ultima Alteracao: 29/03/2011 por Bruno Carvalho
;Motivo Alteracao: Add Op‡Æo para Bloqueio de Itens no Pedido ** 0222 **
;Ultima Alteracao: 27/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Grade Isabela Garcia
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 05/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Inativo/Grades da Referencia            
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 13/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Campo CSOSN
;Ultima Alteracao: 15/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHAVE=0 Editar Classifica‡Æo..     
;Ultima Alteracao: 25/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_CST() PIS/Cofins p/ Saida    
;Ultima Alteracao: 20/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes F3 e ESC edi‡Æo especial
;Ultima Alteracao: 02/02/2012 por Karina Andrade
;Motivo Alteracao: Ajustes F3 e ESC edi‡Æo especial
;Ultima Alteracao: 02/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: InclusÆo Tipo do Item substituir dados     
;Ultima Alteracao: 26/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes digita‡Æo itens com tribcst 20 e 70  
;Ultima Alteracao: 29/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina de codigo de barras, add verifica‡Æo do mesmo.  
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_CSOSN2(), PegaTipoTributacao()     
;Ultima Alteracao: 15/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes CODIGO_CLIENTE "0243"     
;Ultima Alteracao: 30/08/2012 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo do Layout do "Cadastro de Itens"
;Ultima Alteracao: 03/10/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes no campo "Tipo Tributacao" 
;Ultima Alteracao: 07/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: InclusÆo Gera_gradeCor para item de terceiros
;Ultima Alteracao: 14/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de campos, exclusao campo NBM
;Ultima Alteracao: 08/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes travar sequencia cor = codigo cor SYS_CODIGO_CLIENTE=0342,0338
;Ultima Alteracao: 11/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Itens propriedade de terceiros 
;Ultima Alteracao: 16/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Enter campo=Codigo de Barras
;Ultima Alteracao: 18/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando")                 
;Ultima Alteracao: 20/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes, Item pai referencia limpa codigo cor_tecido
;Ultima Alteracao: 28/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes, Item pai referencia travar se estrutura errada
;Ultima Alteracao: 19/03/2013 por Bruno Carvalho
;Motivo Alteracao: Add na rotina de gera‡Æo de cores o campo LOCALIZACAO
;Ultima Alteracao: 05/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes, Item pai referencia travar se estrutura errada
;Ultima Alteracao: 08/06/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao TIBPT               
;Ultima Alteracao: 10/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IBPT 0.0.6         
;Ultima Alteracao: 16/07/2013 por Karina Andrade
;Motivo Alteracao: Adicionado FornProd na proc ATUALIZA() e EXCLUSAO()
;Ultima Alteracao: 08/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tecla INS proximo codigo de barras
;Ultima Alteracao: 24/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes inclusao FCI
;Ultima Alteracao: 05/11/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado "ANP_Codigo_Combustivel" e "ANP_UF_Consumo"
;Ultima Alteracao: 11/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Tipo Codigo de Barras" EAN14 
;Ultima Alteracao: 11/12/2013 por Andrey Fillipe
;Motivo Alteracao: Ajustes Alt+F/Troca de Dados
;Ultima Alteracao: 13/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ informar sobre o cadastro de cor na sequencia 9 e "EAN14" Variante Logistica
;Ultima Alteracao: 28/01/2014 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo na MSGCAMPO quando field "Edita Descricao do Item"
;Ultima Alteracao: 02/12/2014 por Luis Gustavo
;Motivo Alteracao: Implementado na Proc Pega_AliqIBPT(), para buscar o estado da empresa padrao do sistema

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
Private CodLivre,Opcaoc

INSERT_ESPECIAL=False
While True
  Moveto [Codigo do Item]
  End
  SEQ=[Codigo do Item]
  If OP_FORM="4"
     Then Down
     Else PgDn PgDn PgDn  
  Endif

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()                            

      If Retval=-33
         Then
           ShowPopup " Fun‡”es " CENTERED
            "Editar Classi~f~ica‡„o"       : " Altera‡„o Descri‡„o\\Unidades\\Tipo Item\\Familia\\Grupo\\Cor/Tecido" : "CLASSIFICACAO",
            "Editar C.~B~arras/Referˆncia" : " Altera‡„o\\Inclus„o de C¢digo de Barras"                              : "CDBARRAS",
            "Editar Locali~z~a‡Æo"         : " Altera‡„o\\Inclus„o de Localiza‡Æo "                                  : "LOCAL",
            "C¢digo de ~L~ivre"            : " Novo C¢digo livre"                                                    : "CDLIVRE",
            "~T~roca de Dados "            : " Troca de Dados"                                                       : "TROCA",
            "~I~nsere Especial"            : " Insere Especial"                                                      : "IESPECIAL",
            "~C~ancelar"                   : " Cancelar a Opera‡„o"                                                  : "CANCELAR"
           EndMenu
            To MenuVar
           echo off

           If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Del
                    QuitLoop
           EndIf

           If MenuVar="CLASSIFICACAO" OR MenuVar="CDBARRAS" OR MenuVar ="LOCAL"
             Then Del
                  CHAVE=0
                  Editar(MenuVar)
                  CHAVE=5
                  Return
           EndIf
           If MenuVar="CDLIVRE"
              Then Retval="F4"
           EndIf
           If MenuVar="IESPECIAL"
              Then Del
                   INICIO_INSERT  =True
                   INSERT_ESPECIAL=True
                   CHAVE=4
                   Return
           EndIf
           If MenuVar="TROCA"
             Then If Checa_Supervisor()
                     Then Del
                          TrocaDados()
                          CHAVE=5
                          Return
                  EndIf
           EndIf
      EndIf

      If Retval="F4"
         Then Del
              Home
              CodLivre=NumVal([Codigo do Item])
              While True
                 If CodLivre=NumVal([Codigo do Item])
                    Then CodLivre=NumVal([Codigo do Item])+1
                         Skip
                    Else echo normal
                         ins
                         [Codigo do Item]=Alinhm(StrVal(CodLivre),10)

                         ShowPopup " C¢digo Livre " CENTERED
                          "~A~ceitar"  : " Aceitar o c¢digo: "+[Codigo do Item] : "ACEITAR",
                          "~P~r¢ximo"  : " Pr¢ximo c¢digo dispon¡vel"           : "PROXIMO",
                          "~C~ancelar" : " Cancelar a Opera‡„o      "           : "CANCELAR"
                         EndMenu
                          To MenuVar

                         echo off
                         If MenuVar="CANCELAR" or MenuVar="Esc"
                             Then Del
                                  RetVal="F4"
                                  QuitLoop
                         EndIf

                         If MenuVar="ACEITAR"
                            Then RetVal="ENTER"
                                 QuitLoop
                            Else Del
                                 CodLivre=CodLivre+1
                         EndIf
                 EndIf
                 If EOT()
                    Then Mensagem("Fim dos codigos livres!!")
                         RetVal="F4"
                         QuitLoop
                 EndIf
              EndWhile
              If RetVal="F4"
                 Then QuitLoop
              EndIf

      EndIf

   Switch
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OP_FORM="4"
              Then OP_FORM="F"
              Else OP_FORM="4"
           Endif
           Del
           CHAVE=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
            If OP_FORM="4"
               Then PAGINA("Itens","MR")
               Else PAGINA("Itens","MT")
            EndIf
            If EDITAR="S"
               Then If OP_FORM="4"
                       Then PickForm "F"
                    Endif
                    CODIGO=[Codigo do Item]
                    CHAVE=0
                    Controla_EdicaoC()
               Else If EXCLUIR="S"
                       Then EXCLUSAO(True)
                       Else QuitLoop     
                    EndIf
            EndIf
            SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVE=9
           If RecordStatus("New")
              Then Del
           Endif
           Return

           If OP_FORM="4"
              Then PAGINA("Itens","MR")
              Else PAGINA("Itens","MT")
           Endif
      Case Retval="ENTER":
           If IsBlank([])
               Then If IsBlank(SEQ)
                       Then SEQ="1"
                       Else SEQ=StrVal(NumVal(SEQ)+1)
                    EndIf
                    []=SEQ
            EndIf
            []=ALINH()
            CODIGO=[]
            Del
            If OP_FORM="4"
               Then PickForm "F"
            Endif
            Locate CODIGO
            If Retval
               Then CHAVE=0
               Else CHAVE=1
                    End
                    PgDn PgDn PgDn
                    [Codigo do Item]=CODIGO
            EndIf
            If IsLockRecord()
               Then If OP_FORM="4"
                       Then PickForm "4"
                    Endif
                    QuitLoop
            EndIf
            Return
      EndSwitch
  EndWhile
EndWhile
EndProc     ; (Chave)

;*******************************************************************************
;* Rotina para Localizar Registro 2                                            *
;*******************************************************************************
Proc CHAVE2()
INSERT_ESPECIAL=True

If INICIO_INSERT
   Then INICIO_INSERT=False
   Else If Item_Localizado
           Then Moveto [Codigo do Item]
                Locate CODIGOINSERT
                If RetVal
                   Then Down
                EndIf
        EndIf

        Moveto Field Campo_Cursor
EndIf
While True
   ImageRights ReadOnly

   Prompt " F3=Retornar  Ins=Incluir  Enter=Editar  Del=Excluir  "

   Wait Table
     Until "F3","F1","F2","F9","F35","ENTER","DEL","Down","Up","FIELDVIEW","ZOOM","ZOOMNEXT","INS","ESC"

     If RetVal = "ESC"
        Then Mensagem("Para finalizar utilize a tecla F3!")
     EndIf

     If RetVal = "F1"
        Then Loop
     EndIf

     If RetVal = "ZOOM"
        Then PESQUISA()
             Loop
     EndIf
     If RetVal = "ZOOMNEXT"
        Then PESQUISACON()
             Loop
     EndIf
     If Retval = "F3"
        Then INSERT_ESPECIAL=False
             CHAVE=4
             QuitLoop

     EndIf
     If Retval = "Down"
        Then If AtLast()
                Then ImageRights
             EndIf
             Down
             ImageRights ReadOnly
     EndIf
     If Retval = "Up"
        Then Up
     EndIf
     If Retval = "F9" Or Retval = "F2" Or Retval = "ENTER"
        Then If Not IsLockRecord()
                Then ImageRights
                     Campo_Cursor=Field()
                     Item_Localizado=False
                     If OP_FORM="4"
                        Then PickForm "F"
                     Endif
                     CHAVE=0
                     CODIGO=[Codigo do Item]
                     Return
             EndIf
     EndIf

     If Retval = "INS"
        Then Campo_Cursor=Field()
             Up
             CopytoDynarray Registro
             ImageRights
             Down
             Ins

             Moveto [Codigo do Item]

             Prompt " Esc=Cancelar "

             Wait Field
                  Until "ESC","ENTER"

             Switch
             Case Retval="ESC": 
                  Item_Localizado=False
                  Del
             Case Retval="ENTER":
                  If IsBlank([])
                     Then If IsBlank(SEQ)
                             Then SEQ="1"
                             Else SEQ=StrVal(NumVal(SEQ)+1)
                          EndIf
                  EndIf
                  []=ALINH()
                  CODIGO=[]
                  Item_Localizado=True
                  Del
                  If OP_FORM="4"
                     Then PickForm "F"
                  Endif
                  Locate CODIGO
                  If Retval
                     Then CHAVE=0
                     Else CHAVE=1
                          End
                          PgDn PgDn PgDn
                          [Codigo do Item]=CODIGO
                  EndIf
                  If IsLockRecord()
                     Then If OP_FORM="4"
                             Then PickForm "4"
                          Endif
                          QuitLoop
                  EndIf
                  CODIGOINSERT=CODIGO
                  Return
             EndSwitch
     EndIf
     If Retval = "DEL"
        Then If Not IsLockRecord()
                Then If QuerExcluir("")
                        Then ImageRights
                             EXCLUSAO(True)
                     EndIf
             EndIf
     EndIf
EndWhile
ImageRights
EndProc

;*******************************************************************************
;* Rotina para Localizar Codigo de Barras J  Existente                         *
;*******************************************************************************
Proc Localiza_CdBar(TIPO)
Private TIPO, COD_ANT, COD_IT_CB,COD_LOC

NAO_INCLUI_CB=False

If IsBlank([Tipo Codigo_Barras]) Or IsBlank([Codigo de Barras])
   Then Return 
EndIf              
                         
Switch
  Case TIPO="ATUALIZA"  : [Tipo Codigo_Barras] = TIP_COD
                          [Codigo de Barras  ] = COD_BAR
  Case TIPO="VERIFICAR" : COD_LOC=[Codigo de Barras]
                          [Codigo de Barras]=""
                          UnLockRecord
                          Do_It!
                          COD_IT_CB=""
                          COD_ANT=[Codigo do Item] 
                          
                          Moveto [Codigo de Barras]
                          Locate COD_LOC
                          If RetVal And [Codigo do Item]<>COD_ANT
                             Then COD_IT_CB=[Codigo do Item]
                                  NAO_INCLUI_CB=True
                          EndIF                     
                          
                          Moveto [Codigo do Item]
                          Locate COD_ANT
                          
                          CoeditKey
                          UnLockRecord
                          
                          If NAO_INCLUI_CB
                             Then Moveto [Codigo de Barras]
                                  If COD_BAR=""
                                     Then [Codigo de Barras  ]=""
                                     Else [Tipo Codigo_Barras]=TIP_COD
                                          [Codigo de Barras  ]=COD_BAR
                                  EndIf
                             Else [Codigo de Barras]=COD_LOC          
                          EndIf        
                          
                          If NAO_INCLUI_CB
                             Then Mensagem("C¢digo de Barras j  existente! //C¢digo do Item "+
                                          COD_IT_CB+" est  utilizando este c¢digo de barras!")
                          EndIf
                          
                          Switch
                            Case NAO_INCLUI_CB : Moveto [Codigo de Barras]
                            OtherWise          : If Not IsAssigned(Opcao) Then Opcao="" EndIf
                                                 If Checa_CdBarras("Codigo")
                                                    Then If Opcao="CDBARRAS"
                                                            Then Moveto [Referencia]
                                                            Else Moveto [Unidade Entrada] 
                                                         EndIf

                                                         If Opcao="" Then Moveto [Inativo] EndIf

                                                    Else If Opcao="CDBARRAS" 
                                                            Then Moveto [Tipo Codigo_Barras]
                                                         EndIf

                                                         If Opcao="" Then Moveto [Codigo de Barras] EndIf     
                                                 EndIf        
                          EndSwitch              
                          Release Vars COD_ANT, COD_IT_CB, COD_LOC
EndSwitch

EndProc ;Localiza_CdBar() 

;*******************************************************************************
;* Rotina Mensagem Teclas Padrao                                               *
;*******************************************************************************
Proc MsgTeclasPadrao()
MSG=    "    Esc= Voltar Menu                      //"
MSG=MSG+"  Alt+F= Fun‡”es                          //"
MSG=MSG+"     Ctrl+"+Chr(26)+"= Avan‡ar p gina "+Chr(16)+">                   //"
MSG=MSG+"     Ctrl+"+Chr(27)+"= Voltar p gina  <"+Chr(17)+"                   //"
MSG=MSG+"  Page Down= Finalizar      ["+Chr(16)+"]   *Confirma/Gravar//"
MSG=MSG+"  Ctrl+F1= Ajuda/Teclas   [?]                 "
MsgHelp("Teclas/Fun‡”es",MSG)
Endproc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()

If CHAVE=0 
   Then CopyToArray DIGITA_ITEM  
EndIf

TIP_COD=[Tipo Codigo_Barras]
COD_BAR=[Codigo de Barras]

If Tecla_Funcao=""
   Then Moveto Field CAMPO
   Else Moveto [Tipo do Item]
        Verifica_Tela(Field())
EndIf   

SpeedBar "~Fun‡”es~"      :-33,
         Chr(060)+Chr(17) :-115,
         Chr(16)+Chr(062) :-116,
         "~?~"            :-94,
         "["+Chr(16)+"]"  :"PGDN"

While True

  If Field()="Tipo do Item"           Or
     Field()="Codigo da Familia"      Or
     Field()="Codigo do Grupo"        Or
     Field()="Codigo da Simbologia"   Or
     Field()="Codigo da Marca"        Or
     Field()="Codigo do Departamento" Or
     Field()="Codigo da Cor_Tecido"   Or
     Field()="Tipo Tributacao"        Or
     Field()="Unidade Fiscal"         Or
     Field()="Unidade Interna"        Or
     Field()="Unidade Entrada"        Or
     Field()="Unidade Embalagem"      Or
     Field()="Codigo da Grade"        Or
     Field()="NCM"                    Or
     Field()="ANP_Codigo_Combustivel" Or
     Field()="Tipo Codigo_Barras"     Or
     Field()="Pais"                   Or
     Field()="Codigo MVA"             Or
     Field()="Codigo_Servico"         Or
     Field()="IPI_CST"                Or
     Field()="PIS_CST"                Or
     Field()="COFINS_CST"             Or
     Field()="CSOSN"
     Then TECLA="F1=Tabelas  "
     Else TECLA="            "
  EndIf

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

  If Field()="Codigo de Barras" And
     ([Tipo Codigo_Barras]="A-EAN13" or
      [Tipo Codigo_Barras]="B-EAN8")
     Then TECLA=TECLA+"INS=Pr¢x.CB  "
     Else TECLA=TECLA+"             "
  EndIf

  TECLA=TECLA+"PgDn=Finalizar  "

  MSGCAMPO=Field()

  If Field()="Inativo"
     Then STATUS_INATIVO=[Inativo]
  EndIf
                         
  Switch
    Case Field()="Edita Descricao do Item"   : MSGCAMPO="Editar descri‡„o do item no pedido/NF/F¢rmula? (S/N)"
    Case Field()="NCM"                       : MSGCAMPO="Codifica‡„o da nomenclatura comum do mercosul"
    Case Field()="ANP_Codigo_Combustivel"    : MSGCAMPO="Informe o c¢digo do produto da ANP (Combust¡veis e Lubrificantes)"
    Case Field()="ANP_UF_Consumo"            : MSGCAMPO="Informe a UF de consumo do produto da ANP (Combust¡veis e Lubrificantes)"
    Case Field()="Codigo_Servico"            : MSGCAMPO="Informe c¢digo conforme lista LC 116/03"
    Case Field()="Peso Variavel"             : MSGCAMPO="Produto Vari vel? Sim ou N„o"
    Case Field()="Producao Esgotada"         : MSGCAMPO="Produ‡„o Esgotada? Sim ou N„o (Travamento de novos pedidos)"
    Case Field()="Indice Preco de Venda"     : MSGCAMPO="Indice sobre custo de entrada para c lculo do pre‡o de venda"
    Case Field()="Unidade Fiscal"            : MSGCAMPO="Unidade fiscal/venda"
    Case Field()="Unidade Embalagem"         : MSGCAMPO="Unidade da embalagem/estocagem"
    Case Field()="Unidade Interna"           : MSGCAMPO="Unidade p/ controle de estoque"
    Case Field()="Unidade Entrada"           : MSGCAMPO="Unidade padr„o para compra"
    Case Field()="Fator de Conversao"        : MSGCAMPO="Fator de convers„o padr„o para Compra"
    Case Field()="Fator de Conversao Saida"  : MSGCAMPO="Fator de convers„o fiscal/venda"
    Case Field()="Fator Conversao Embalagem" : MSGCAMPO="Fator de convers„o embalagem/estocagem"
    Case Field()="Codigo da Simbologia"      : MSGCAMPO="Codigo da s¡mbologia"
    Case Field()="Codigo Fornecedor"         : MSGCAMPO="Codigo do fornecedor"
    Case Field()="Codigo Concentrador"       : MSGCAMPO="Codigo do produto concentrador"
    Case Field()="Vendagem"                  : MSGCAMPO="Bom, Regular, Pessimo"
    Case Field()="Inativo"                   : MSGCAMPO="Sim, N„o"
    Case Field()="Situacao"                  : MSGCAMPO="L=Em Linha, F=Fora de Linha"
    Case Field()="Fracionado"                : MSGCAMPO="Sim, N„o"
    Case Field()="Composto"                  : MSGCAMPO="Sim, N„o"
    Case Field()="Desconto Maximo"           : MSGCAMPO="Desconto m ximo do item"
    Case Field()="Quantidade Maxima Venda"   : MSGCAMPO="Quantidade m xima que pode ser vendida"
    Case Field()="Referencia"                : MSGCAMPO="C¢digo de referˆncia do produto"
    Case Field()="Codigo da Grade"           : MSGCAMPO="C¢digo de grade do produto"
    Case Field()="Tipo Codigo_Barras"        : MSGCAMPO="Tipo de c¢digo de barras a utilizar"
    Case Field()="Tipo_Codificao"            : MSGCAMPO="Define a estrutura de c¢digo p/ uso da grade"
    Case Field()="Pais"                      : MSGCAMPO="Informe o pais  de origem"
    Case Field()="Codigo MVA"                : MSGCAMPO="C¢digo do grupo de produtos c/ %MVA p/ c lculo Subst.Tribut ria"
    Case Field()="Propriedade_Terceiro"      : MSGCAMPO="Propriedade de terceiro? Sim ou N„o [Informe a Marca p/ o Terceiro]"

    Case Field()="Tributacao de ICMS"        : MSGCAMPO="Debitado, Isento, Outros, N„o_Tributado, Substitui‡Æo"
    Case Field()="Tributacao de IPI"         : MSGCAMPO="Debitado, Isento, Outros, N„o_Tributado"
    Case Field()="Tributacao de ISSQN"       : MSGCAMPO="Debitado, N„o_Tributado, Isenta, Substituta, Retida"

    Case Field()="Tipo Tributacao"           : MSGCAMPO="Codigo da situa‡„o tribut ria/ICMS"
    Case Field()="IPI_CST"                   : MSGCAMPO="Codigo da situa‡„o tribut ria/IPI"
    Case Field()="PIS_CST"                   : MSGCAMPO="Codigo da situa‡„o tribut ria/PIS"
    Case Field()="COFINS_CST"                : MSGCAMPO="Codigo da situa‡„o tribut ria/COFINS"
    Case Field()="Genero"                    : MSGCAMPO="Gˆnero do Produto ou Servi‡o (NCM)"
    Case Field()="EX_TIPI"                   : MSGCAMPO="C¢digo EX da TIPI"

    Case Field()="Aliquota Reduzida BCICMS"  : MSGCAMPO="Aliquota de redu‡„o p/ base de c lculo ICMS"
    Case Field()="PIS_Aliquota"              : MSGCAMPO="Aliquota de PIS"
    Case Field()="COFINS_Aliquota"           : MSGCAMPO="Aliquota de COFINS"
    Case Field()="CSOSN"                     : MSGCAMPO="C¢digo de situa‡Æo da opera‡Æo no Simples Nacional - ICMS"
    Case Field()="FCI"                       : MSGCAMPO="C¢digo (GUID) da Ficha de Conte£do de Importa‡Æo"
    Case Field()="Flag"                      : MSGCAMPO="ENTER=PROSSEGUIR"
  EndSwitch

  Prompt TECLA

Wait Field
  Message MSGCAMPO
  Until "ESC","ENTER","PGDN","INS",
        -94,-33,-115,-116,-133,-134,
        "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"

    If Retval=-33
      Then
       If CHAVE=1 And INSERT_ESPECIAL
          Then ShowPopup " Fun‡”es " CENTERED
                "~O~bserva‡„o          " : " Observa‡Æo                                       "  : "F5"    ,
                "~C~opiar Registro     " : " Copiar do Registro Anterior                      "  : "COPIAR",
                "Co~r~es               " : " Rela‡„o de Cores                                 "  : "CORES",
                "Carga tribut ria      " : " Consultar carga tribut ria IBPT                  "  : "IBPT",
                Separator,
                "~G~era Grade/Cor [P/S]" : " Gera Itens com Grade/Cor - Acabado e Semi-Acabado"  : "GRADE/COR",
                "~G~era Grade/Cor [M]  " : " Gera Itens com Grade/Cor - Materia Prima         "  : "GRADE/CORM",
                "~G~era Grade/Cor [T]  " : " Gera Itens com Grade/Cor - Iten de Terceiros     "  : "GRADE/CORT",
                "~G~era Cor       [T]  " : " Gera Itens com Cor       - Iten de Terceiros     "  : "CORT",
                Separator,
                "~C~ancelar            " : " Cancelar a Opera‡„o                              "  : "CANCELAR"
               EndMenu
                To MenuVar
          Else ShowPopup " Fun‡”es " CENTERED
                "~O~bserva‡„o          " : " Observa‡Æo                                       "  : "F5"    ,
                "Co~r~es               " : " Rela‡„o de Cores                                 "  : "CORES",
                "Carga tribut ria      " : " Consultar carga tribut ria IBPT                  "  : "IBPT",
                Separator,
                "~G~era Grade/Cor [P/S]" : " Gera Itens com Grade/Cor - Acabado e Semi-Acabado"  : "GRADE/COR",
                "~G~era Grade/Cor [M]  " : " Gera Itens com Grade/Cor - Materia Prima         "  : "GRADE/CORM",
                "~G~era Grade/Cor [T]  " : " Gera Itens com Grade/Cor - Iten de Terceiros     "  : "GRADE/CORT",
                "~G~era Cor       [T]  " : " Gera Itens com Cor       - Iten de Terceiros     "  : "CORT",
                Separator,
                "~C~ancelar            " : " Cancelar a Opera‡„o                              "  : "CANCELAR"
               EndMenu
               To MenuVar
       EndIf
       echo off

       If MenuVar="CANCELAR" or MenuVar="Esc"
           Then Loop
       EndIf

       If MenuVar="CORES"
          Then If [Tipo do Item]<>"D"
                  Then Mensagem("Tipo do item inv lido para esta Fun‡„o !")
                       Loop
               EndIf
               Cores()
               Loop
       EndIf        

       If MenuVar="GRADE/COR"
          Then If [Tipo do Item]<>"D"
                  Then Mensagem("Tipo do item inv lido para esta Fun‡„o !")
                       Loop
               EndIf
               If Grade_Cor("P")
                  Then CHAVE=9
                       Return
                  Else Loop
               EndIf
       EndIf        
       If MenuVar="GRADE/CORM"
          Then If [Tipo do Item]<>"D"
                  Then Mensagem("Tipo do item inv lido para esta Fun‡„o !")
                       Loop
               EndIf
               If Grade_Cor("M")
                  Then CHAVE=9
                       Return
                  Else Loop
               EndIf
       EndIf        
       If MenuVar="GRADE/CORT"
          Then If [Tipo do Item]<>"D"
                  Then Mensagem("Tipo do item inv lido para esta Fun‡„o !")
                       Loop
               EndIf
               If Grade_Cor("T")
                  Then CHAVE=9
                       Return
                  Else Loop
               EndIf
       EndIf        
       If MenuVar="CORT"
          Then If [Tipo do Item]<>"D"
                  Then Mensagem("Tipo do item inv lido para esta Fun‡„o !")
                       Loop
               EndIf
               If Cor("T")
                  Then CHAVE=9
                       Return
                  Else Loop
               EndIf
       EndIf        

       If MenuVar="COPIAR"
         Then Registro["Codigo do Item"]=CODIGO
              CopyfromDynarray Registro
              Loop
         Else RetVal=MenuVar
       EndIf

       If MenuVar="IBPT"
         Then IBPT()
              Loop
         Else RetVal=MenuVar
       EndIf
  EndIf

  Switch
   Case RetVal=-94 : MsgTeclasPadrao()
  
  Case RetVal=-115 Or RetVal=-116 :  
       If ((Field()<>"Codigo do Item"            And
            Field()<>"Descricao do Item"         And
            Field()<>"Tipo do Item"              And
            Field()<>"Referencia"                And
            Field()<>"Tipo Codigo_Barras"        And
            Field()<>"Codigo de Barras"          And
            Field()<>"Codigo da Grade"           And
            Field()<>"DTamanho"                  And
            Field()<>"Edita Descricao do Item"   And
            Field()<>"Inativo"                   And
            Field()<>"Descricao Complementar")   And
            CHAVE=1)                              Or
            CHAVE=0         
            Then CampoAnt=Field()
                 Tecla_Funcao=RetVal
                 Return
       EndIf

  Case RetVal="INS":
       If Field()="Codigo de Barras" And
          ([Tipo Codigo_Barras]="A-EAN13" or
           [Tipo Codigo_Barras]="B-EAN8")
          Then Pega_CDBarras(RTrim(SubStr([Tipo Codigo_Barras],3,5)))
       EndIf

  Case RetVal="F1":
       If Field()="Tipo do Item"           Or
          Field()="Codigo da Familia"      Or
          Field()="Codigo do Grupo"        Or
          Field()="Codigo da Simbologia"   Or          
          Field()="Codigo da Marca"        Or
          Field()="Codigo do Departamento" Or
          Field()="Codigo da Cor_Tecido"   Or
          Field()="Unidade Fiscal"         Or  
          Field()="Unidade Interna"        Or
          Field()="Unidade Entrada"        Or
          Field()="Unidade Embalagem"      Or
          Field()="NCM"                    Or
          Field()="ANP_Codigo_Combustivel" Or
          Field()="ANP_UF_Consumo"         Or
          Field()="Codigo da Grade"        Or
          Field()="Tipo_Codificacao"       Or
          Field()="Pais"                   Or
          Field()="Codigo MVA"             Or
          Field()="Codigo_Servico"
          Then CONSULTAF1()
       EndIf
       If Field()="Tipo Codigo_Barras"
          Then Checa_CdBarras("F1")
       EndIf
       If Field()="Tipo Tributacao"
          Then TribCST=Checa_CST("ICMS","","")
               If Not IsBlank(TribCST)
                  Then [Tipo Tributacao]=TribCST
               EndIf
       EndIf            
       If Field()="IPI_CST"
          Then TribCST=Checa_CST("IPI","S","")
               If Not IsBlank(TribCST)
                  Then [IPI_CST]=TribCST
               EndIf
       EndIf            
       If Field()="PIS_CST"
          Then TribCST=Checa_CST("PIS","S","")
               If Not IsBlank(TribCST)
                  Then [PIS_CST]=TribCST
               EndIf
       EndIf            
       If Field()="COFINS_CST"
          Then TribCST=Checa_CST("COFINS","S","")
               If Not IsBlank(TribCST)
                  Then [COFINS_CST]=TribCST
               EndIf
       EndIf            
       If Field()="CSOSN"
          Then TribCST=Checa_CSOSN2("","")
               If Not IsBlank(TribCST)
                  Then [CSOSN]=SubStr(TribCST,2,3)
               EndIf
       EndIf            

  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVE=0
          Then EXCLUSAO(True)
               DIGITA=False
               QuitLoop
       EndIf      
  Case Retval="F5":
       Edita_Memo("Observacao",08,01,15,76,"Observa‡”es")
  Case Retval="PGDN":
       If Checagem_Pagina("TODAS")
          Then Atualiza()
               Tecla_Funcao=""
               DIGITA=False
               ;Del
               Return
       EndIf
  Case Retval="ESC": 
       Switch
       Case Field()="Tipo do Item":
            If QuerDesfazer("")
               Then If CHAVE=1
                       Then EXCLUSAO(False)
                       Else If CHAVE=0
                               Then CopyFromArray DIGITA_ITEM
                               Else Undo
                            EndIf   
                            Atualiza()
                    EndIf
                    DIGITA=False
                    Tecla_Funcao=""
                    CHAVE=9
                    QuitLoop
            EndIf
       Case Field()="Codigo da Grade"        : Moveto [Tipo do Item]
       Case Field()="Tipo_Codificao"         : Moveto [Codigo da Grade]
       Case Field()="Referencia"             : Moveto [Codigo da Grade]
       Case Field()="Descricao do Item"      : Moveto [Referencia]
       Case Field()="Tipo Codigo_Barras"     : Moveto [Edita Descricao do Item]
       Case Field()="Codigo de Barras"       : Moveto [Tipo Codigo_Barras]
       Case Field()="Inativo"                : Moveto [Tipo Codigo_Barras]
       Case Field()="Descricao Complementar" : Moveto [Inativo]                                         
       Case Field()="Codigo da Familia"      : Moveto [Descricao Complementar]
       Case Field()="Codigo do Grupo"        : Moveto [Codigo da Familia]
       Case Field()="Codigo da Marca"        : Moveto [Codigo do Grupo]
       Case Field()="Codigo da Cor_Tecido"   : Moveto [Codigo da Marca]
       Case Field()="Codigo da Simbologia"   : Moveto [Codigo da Cor_Tecido]
       Case Field()="Codigo do Departamento" : Moveto [Codigo da Simbologia]
       Case Field()="Situacao"               : Moveto [Codigo do Departamento]
       Case Field()="Vendagem"               : Moveto [Situacao]
       Case Field()="Localizacao"            : Moveto [Vendagem]    
       Case Field()="Pais"                   : Moveto [Localizacao]
       Case Field()="Propriedade_Terceiro"   : Moveto [Pais]
       Case Field()="Codigo Fornecedor"      : Moveto [Propriedade_Terceiro]
       Case Field()="Codigo Concentrador"    : Moveto [Codigo Fornecedor]
                                             
       Case Field()="Unidade Entrada"        : Moveto [Codigo Concentrador]
       Case Field()="Unidade Interna"        : Moveto [Unidade Entrada]
       Case Field()="Unidade Embalagem"      : Moveto [Unidade Interna]
       Case Field()="Unidade Fiscal"         : Moveto [Unidade Embalagem]
         
       Case Field()="Peso Liquido"           : Moveto [Unidade Fiscal]
                                               Verifica_Tela(Field())
       Case Field()="Peso Embalagem"         : Moveto [Peso Liquido]
       Case Field()="Volumes"                : Moveto [Peso Embalagem]
       Case Field()="NCM"                    : Moveto [Volumes]
       Case Field()="Codigo_Servico"         : Moveto [NCM]
       Case Field()="Genero"                 : Moveto [Codigo_Servico]
       Case Field()="EX_TIPI"                : Moveto [Genero]
       Case Field()="Peso Variavel"          : Moveto [EX_TIPI]
       Case Field()="Comissao do Item"       : Moveto [Peso Variavel]
       Case Field()="Desconto Maximo"        : Moveto [Comissao do Item]
       Case Field()="Indice Preco de Venda"  : Moveto [Desconto Maximo]
       Case Field()="Producao Esgotada"      : Moveto [Indice Preco de Venda]
       Case Field()="ANP_Codigo_Combustivel" : Moveto [Producao Esgotada]
       Case Field()="ANP_UF_Consumo"         : Moveto [ANP_Codigo_Combustivel]
       
       
       Case Field()="Tipo Tributacao"        : Moveto [ANP_UF_Consumo]
                                               Verifica_Tela(Field())
       Case Field()="CSOSN"                  : Moveto [Tipo Tributacao]
       Case Field()="IPI_CST"                : Moveto [CSOSN]
       Case Field()="Tributacao de ISSQN"    : Moveto [IPI_CST]
       Case Field()="PIS_CST"                : 
            If [Tipo do Item]="C"
               Then Moveto [Tributacao de ISSQN]
               Else Moveto [IPI_CST]
            EndIf   
       Case Field()="COFINS_CST"             : Moveto [PIS_CST]
       Case Field()="Codigo MVA"             : Moveto [COFINS_CST]   
       Case Field()="FCI"                    : Moveto [Codigo MVA]   
       Case Field()="Flag"                   : Moveto [FCI]   
       OtherWise:
            Left
       EndSwitch

  Case Retval="ENTER": 
       If Field()="Descricao do Item"   Or
          Field()="Unidade Fiscal"      Or
          Field()="Unidade Interna"     Or
          Field()="Unidade Entrada"     Or
          Field()="Unidade Embalagem"   Or
          Field()="Tipo do Item"        Or
          Field()="Tributacao de ICMS"  Or
          Field()="Tributacao de IPI"   Or
          Field()="Tributacao de IR"    Or
          Field()="Tributacao de ISSQN" Or
          Field()="Tipo Tributacao"     Or
          Field()="IPI_CST"             Or
          Field()="PIS_CST"             Or
          Field()="COFINS_CST"          
          Then If IsBlank([]) Then Loop EndIf
       EndIf

       Switch
       ;************** CLASSIFICACAO ******************************************* 
       Case Field()="Tipo do Item"           :
            If CHAVE=0 
               Then If [Tipo do Item]<>DIGITA_ITEM["Tipo do Item"]
                       Then Atencao("Tipo")
                    EndIf   
            EndIf
            Moveto [Codigo da Grade]
       Case Field()="Codigo da Grade"        :
            If CHAVE=0 
               Then If [Codigo da Grade]<>DIGITA_ITEM["Codigo da Grade"]
                       Then Atencao("Grade")
                    EndIf   
            EndIf       
            If IsBlank([Codigo da Grade])
               Then [DTamanho        ]=""
                    [Tipo_Codificacao]=""
            EndIf
            Moveto [Referencia]
       Case Field()="Tipo_Codificacao"       :
            If Not IsBlank([Codigo da Grade])
               Then Moveto [Referencia]
            EndIf
       Case Field()="Referencia"             : Moveto [Descricao do Item ]
            ;If IsBlank([Codigo da Grade])
            ;   Then Moveto [DTamanho          ]
            ;   Else Moveto [Descricao do Item ]
            ;EndIf
       Case Field()="DTamanho"               :  Moveto [Descricao do Item ]
       Case Field()="Edita Descricao do Item":  Moveto [Tipo Codigo_Barras]
            If IsBlank([Edita Descricao do Item])
               Then [Edita Descricao do Item]="N"
            EndIf
       Case Field()="Tipo Codigo_Barras"     :
            If IsBlank([]) 
              Then  Moveto [Inativo] 
              Else If Checa_CdBarras("TipoCodigo")
                     Then If [Tipo Codigo_Barras]="G-EAN13" Or
                             [Tipo Codigo_Barras]="J-EAN13" Or               
                             [Tipo Codigo_Barras]="H-EAN8"  Or
                             [Tipo Codigo_Barras]="I-COD128"
                             Then Moveto [Inativo]         
                             Else Moveto [Codigo de Barras]
                          EndIf
                   EndIf       
            EndIf
       Case Field()="Codigo de Barras"       : 
            If IsBlank([]) Then Loop EndIf   
            Localiza_CdBar("VERIFICAR")

       Case Field()="Inativo":
            If IsBlank([]) Then []="N"   EndIf
            If []="S" And STATUS_INATIVO<>"S"
               Then MSG=    "Ao tornar este Item INATIVO observe:// //"
                    MSG=MSG+"- Os valores no Invent rio dever„o estar zerados,        //"
                    MSG=MSG+"- Informar a data de inatividade na FICHA DE ESTOQUE,    //"
                    MSG=MSG+"- Excluir seus lan‡amentos nas tabelas de pre‡os,        //"
                    MSG=MSG+"- Novos movimentos de entrada/saida n„o ser„o permitidos."
                    Mensagem(MSG)
            EndIf
            Moveto [Descricao Complementar]     
       Case Field()="Codigo da Familia":
            If IsBlank([])
               Then [Descricao da Familia]=""
            EndIf
            Moveto [Codigo do Grupo]
       Case Field()="Codigo do Grupo":
            If IsBlank([])
               Then [Descricao do Grupo]=""
            EndIf
            Moveto [Codigo da Marca]
       Case Field()="Codigo da Marca":
            If IsBlank([])
               Then [Descricao da Marca]=""
            EndIf
            Moveto [Codigo da Cor_Tecido]  
       Case Field()="Codigo da Cor_Tecido":
            If IsBlank([])
               Then [Descricao da Cor_Tecido]=""
            EndIf
            
            If [Tipo do Item]="D" And Not IsBlank([Codigo da Grade]) And SYS_CLIENTE_CONFEC<>""
               Then [Codigo da Cor_Tecido   ]=""
                    [Descricao da Cor_Tecido]=""
            EndIf   
            
            Moveto [Codigo da Simbologia]
       Case Field()="Codigo da Simbologia":
            If IsBlank([])
               Then [Descricao da Simbologia]=""
            EndIf
            Moveto [Codigo do Departamento]
       Case Field()="Codigo do Departamento":
            If IsBlank([])
               Then [Descricao do Departamento]=""
            EndIf
            Moveto [Situacao]
       Case Field()="Situacao":
            If IsBlank([]) Then []="L"   EndIf
            Moveto [Vendagem]
       Case Field()="Vendagem":
            If IsBlank([]) Then []="BOM" EndIf
            Moveto [Localizacao]
       Case Field()="Localizacao":
            Moveto [Pais]           
       Case Field()="Pais":
            If IsBlank([])
               Then [Pais]=""
            EndIf
            Moveto [Propriedade_Terceiro]
       Case Field()="Propriedade_Terceiro":
            If IsBlank([])
               Then [Propriedade_Terceiro]="N"
            EndIf
            Moveto [Codigo Fornecedor]
       Case Field()="Codigo Fornecedor":
            Moveto [Codigo Concentrador]
       Case Field()="Codigo Concentrador" : 
             Moveto [Unidade Entrada] 

       ;************** UNIDADES ************************************************             
       Case Field()="Unidade Entrada"        :  Moveto [Fator de Conversao]
       Case Field()="Fator de Conversao":
            If IsBlank([]) Then []=1 EndIf
            Moveto [Unidade Interna]
       Case Field()="Unidade Interna"        :  Moveto [Unidade Embalagem ]
       Case Field()="Unidade Embalagem"      :  Moveto [Fator Conversao Embalagem]
       Case Field()="Fator Conversao Embalagem":
            If IsBlank([]) Then []=1 EndIf
            Moveto [Unidade Fiscal]
       Case Field()="Unidade Fiscal"         :  Moveto [Peso Liquido]
                                                Verifica_Tela(Field())
       
       ;************** FATURAMENTO ********************************************* 
       Case Field()="Peso Liquido"          : Moveto [Peso Embalagem]
       Case Field()="Peso Embalagem"        : Moveto [Volumes]
       Case Field()="Volumes"               : Moveto [NCM           ]
            AliqIPI=[Aliquota de IPI]
       Case Field()="NCM"                   : Moveto [Codigo_Servico]
       Case Field()="Codigo_Servico"        : Moveto [Genero]
       Case Field()="Genero"                : Moveto [EX_TIPI]
       Case Field()="EX_TIPI"               : Moveto [Peso Variavel]
       Case Field()="Peso Variavel"         :
            If IsBlank([])
               Then []="N"
            EndIf   
            Moveto [Comissao do Item] 
       Case Field()="Comissao do Item"      : Moveto [Desconto Maximo]
       Case Field()="Desconto Maximo"       : Moveto [Indice Preco de Venda]
       Case Field()="Indice Preco de Venda" : Moveto [Producao Esgotada]
       Case Field()="Producao Esgotada"     :
            If IsBlank([])
               Then []="N"
            EndIf   
            Moveto [ANP_Codigo_Combustivel]
       Case Field()="ANP_Codigo_Combustivel":
            If IsBlank([])
               Then []="999999999"
            EndIf
            Moveto [ANP_UF_Consumo]
       Case Field()="ANP_UF_Consumo"            :          
            If [ANP_Codigo_Combustivel]<>""          And 
               [ANP_Codigo_Combustivel]<>"999999999" And
               []=""
               Then Mensagem("Informe a UF de consumo do produto da ANP (Combust¡veis e Lubrificantes) !") 
               Else Moveto [Tipo Tributacao]  
            EndIf 
            Verifica_Tela(Field())
            
       ;************** TRIBUTACAO **********************************************         
       Case Field()="Tipo Tributacao"     : 
             TribCST=Checa_CST("ICMS","",[Tipo Tributacao])
             If TribCST<>""                                                                          
                Then [Tributacao de ICMS]=Pega_TipoTributacao("ICMS",[Tipo Tributacao])
                     If SubStr([Tipo Tributacao],2,2)<>"00" And  
                        SubStr([Tipo Tributacao],2,2)<>"10" And
                        SubStr([Tipo Tributacao],2,2)<>"20" And  
                        SubStr([Tipo Tributacao],2,2)<>"70" And
                        SubStr([Tipo Tributacao],2,2)<>"90" 
                        Then [Aliquota de ICMS        ]=0
                             [Aliquota Reduzida BCICMS]=0
                             Moveto [CSOSN]
                        Else Moveto [Aliquota de ICMS ]     
                     EndIf
                Else Mensagem("CST ICMS inv lido, use F1 para consultar !")
                     Loop   
             EndIf
       Case Field()="Aliquota de ICMS"        : 
            If SubStr([Tipo Tributacao],2,2)="20" Or SubStr([Tipo Tributacao],2,2)="70"    
               Then Moveto [Aliquota Reduzida BCICMS]
               Else Moveto [CSOSN]
            EndIf
       Case Field()="Aliquota Reduzida BCICMS": Moveto [CSOSN]
       Case Field()="CSOSN"             :                      
             TribCST=Checa_CSOSN2("",SubStr([Tipo Tributacao],1,1)+[CSOSN])
             If TribCST<>""
                Then Moveto [IPI_CST]
                Else Mensagem("CSOSN inv lido, use F1 para consultar !")
                     Loop   
             EndIf
       Case Field()="IPI_CST"                 :
             TribCST=Checa_CST("IPI","S",[IPI_CST])
             If TribCST<>""
                Then [Tributacao de IPI]=Pega_TipoTributacao("IPI",[IPI_CST])
						         If [Tributacao de IPI]<>"D" And [Tributacao de IPI]<>"O"
                        Then [Aliquota de IPI]=0
                             Moveto [Tributacao de ISSQN]
                        Else Moveto [Aliquota de IPI]     
                     EndIf
                Else Mensagem("CST IPI inv lido, use F1 para consultar !")
                     Loop   
             EndIf
       Case Field()="Aliquota de IPI"    : Moveto [Tributacao de ISSQN]
       Case Field()="Tributacao de ISSQN":
            If Not IsBlank([])
               Then If []="D"
                       Then Moveto [Aliquota de ISSQN]
                       Else Moveto [PIS_CST]
                            [Aliquota de ISSQN]=0
                    EndIf
            EndIf
       Case Field()="Aliquota de ISSQN"  : Moveto [PIS_CST]
       Case Field()="PIS_CST"         :                      
             TribCST=Checa_CST("PIS","S",[PIS_CST])
             If TribCST<>""
                Then If TribCST="N"
                        Then [PIS_Aliquota]=0
                             Moveto [COFINS_CST]
                        Else Moveto [PIS_Aliquota]
                    EndIf
                Else Mensagem("CST PIS inv lido, use F1 para consultar !")
                     Loop   
             EndIf
       Case Field()="PIS_Aliquota"       : Moveto [COFINS_CST]                     
       Case Field()="COFINS_CST"         :                      
             TribCST=Checa_CST("COFINS","S",[COFINS_CST])
             If TribCST<>""
                Then If TribCST="N"
                        Then [COFINS_Aliquota]=0
                             Moveto [Codigo MVA]
                        Else Moveto [COFINS_Aliquota]
                    EndIf
                Else Mensagem("CST COFINS inv lido, use F1 para consultar !")
                     Loop   
             EndIf
       Case Field()="COFINS_Aliquota"    : Moveto [Codigo MVA]                     
       Case Field()="Codigo MVA":
            If IsBlank([])
               Then [MVA_1]=BlankNum()
                    [MVA_2]=BlankNum()
            EndIf
            Moveto [FCI]
       Case Field()="FCI":
            Moveto [Flag]
       Case Field()="Flag":           
            Atualiza()
            Tecla_Funcao="TELA_CLAS"
            TELA="TELA_CLAS"
            QuitLoop 

;      Case Field()="Fracionado":
;           If IsBlank([]) Then []="N"   EndIf
;           Moveto [Composto]
;      Case Field()="Composto":
;           If IsBlank([]) Then []="N"   EndIf
;           Moveto [Peso Variavel]
;      Case Field()="Peso Variavel":
;           If IsBlank([]) Then []="N"   EndIf
;           Moveto [Desconto Maximo]

       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc   ;(Digita)

;*******************************************************************************
;* Checagem de dados da pagina                                                 *
;*******************************************************************************
Proc Checagem_Pagina(TELA)
Private TELA
NCAMPO=Field()

CAMPOS_OK=True

Switch
  Case TELA = "TELA_CLAS" Or TELA = "TODAS":
       If IsBlank([Edita Descricao do Item])   Then [Edita Descricao do Item  ]="N" EndIf
       If IsBlank([Codigo da Marca])           Then [Descricao da Marca       ]=""  EndIf
       If IsBlank([Codigo do Departamento])    Then [Descricao do Departamento]=""  EndIf
       If IsBlank([Codigo da Cor_Tecido])      Then [Descricao da Cor_Tecido  ]=""  EndIf
       If IsBlank([Codigo do Grupo])           Then [Descricao do Grupo       ]=""  EndIf
       If IsBlank([Codigo da Simbologia])      Then [Descricao da Simbologia  ]=""  EndIf
       If IsBlank([Codigo da Familia])         Then [Descricao da Familia     ]=""  EndIf
       If IsBlank([Fator de Conversao])        Then [Fator de Conversao       ]=1   EndIf
       If IsBlank([Fator de Conversao Saida])  Then [Fator de Conversao Saida ]=1   EndIf
       If IsBlank([Fator Conversao Embalagem]) Then [Fator Conversao Embalagem]=1   EndIf
       If IsBlank([Situacao])                  Then [Situacao]="L"                  EndIf
       If IsBlank([Inativo ])                  Then [Inativo ]="N"                  EndIf
       If IsBlank([Vendagem])                  Then [Vendagem]="BOM"                EndIf
       
       ;*** Rotina para verifica‡Æo de c¢digo de barras existente ***
       Localiza_CdBar("VERIFICAR")
       If NAO_INCLUI_CB Then CAMPOS_OK=False EndIf     
       If Not CAMPOS_OK Then Return CAMPOS_OK EndIf 
EndSwitch

Switch
  Case TELA = "TELA_FAT" Or TELA = "TODAS":
       If IsBlank([Producao Esgotada]) Then [Producao Esgotada]="N"  EndIf
EndSwitch

Switch
  Case TELA = "TELA_TRIB" Or TELA = "TODAS":
       Switch
         Case Not IsBlank([Tipo Codigo_Barras]) And IsBlank([Codigo de Barras]) : 
              CAMPOS_OK=False
              Mensagem("C¢digo de Barras Inv lido!")  
         Case IsBlank([Tributacao de ICMS ])    :    
              CAMPOS_OK=False
              Mensagem("Tributa‡„o ICMS Invalida !")
         Case IsBlank([Tributacao de IPI  ])    :   
              CAMPOS_OK=False
              Mensagem("Tributa‡„o IPI Invalida !")
         ;Case IsBlank([Tributacao de IR   ])   :    Mensagem("Tributa‡„o IR Invalida !")
         ;Case IsBlank([Tributacao de ISSQN])   :    Mensagem("Tributa‡„o ISSQN Invalida !")
         ;Case IsBlank([Tributacao de INSS ])   :    Mensagem("Tributa‡„o INSS Invalida !")
       EndSwitch
EndSwitch

Return CAMPOS_OK
EndProc   ;  (Checagem_Pagina)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVE_CORES()

While True
  Moveto [Sequencia da Cor_Tecido]
  End
  ITEM = [Sequencia da Cor_Tecido]
  Down
  Moveto [Sequencia da Cor_Tecido]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While true

    Prompt " Esc=Retornar  F7=Paginar  "

    Wait Field
      Message "Informe a sequencia para a Cor"
         Until "ESC","ENTER","F7","HOME","UP","PGUP"

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         del
         While True
           Moveto [Sequencia da Cor_Tecido]

           PAGINA("Iten_Cor","MR")
           ITEM = [Sequencia da Cor_Tecido]
           If EDITAR="S"
              Then CHAVE_COR=0
                   Controla_EdicaoCor()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then Del
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVE_COR=9
         Del
         Return
    Case Retval="ENTER":     
         If Not Seta_Sequencia(ITEM,True)
            Then Del
                 QuitLoop
         EndIf
         ITEM=[]
         Del
         If ITEM>99
            Then Mensagem("Sequencia >99 !")
                 QuitLoop
         EndIf
         Locate CODIGO,ITEM
         If Retval
            Then CHAVE_COR=0
            Else CHAVE_COR=1
                 End Down
                 [Codigo do Item         ] = CODIGO
                 [Sequencia da Cor_Tecido] = ITEM
                 Locate CODIGO,ITEM
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina para Digitacao das Cores                                             *
;*******************************************************************************
Proc Digita_Cor()
Moveto [Codigo da Cor_Tecido]
While True
  TECLA=" Esc=Retornar  "

  If Field()="Codigo da Cor_Tecido"
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf

  Prompt TECLA

  Wait Field
       Message Field()
       Until "ESC","ENTER","F1"

  Switch
  Case RetVal="F1":
       If Field()="Codigo da Cor_Tecido"
          Then CONSULTAF1()
       EndIf
  Case Retval="ESC":
       If CHAVE_COR=1
          Then Del
          Else Undo
       EndIf
       QuitLoop
  Case Retval="ENTER":
       If IsBlank([])
          Then Loop
       EndIf
       
       If [Sequencia da Cor_Tecido]=9 And 
          [Codigo da Cor_Tecido]<>"" And 
          (Search("SORTID",Upper([Descricao da Cor_Tecido]))=0)
          Then ConfGeral("Sequˆncia reservada para cores SORTIDAS !////Deseja continuar a incluir esta cor nessa sequencia ?")
               If OK<>"S"
                  Then Loop
               EndIf    
       EndIf           
       
       If SYS_CODIGO_CLIENTE="0338" Or
          SYS_CODIGO_CLIENTE="0342"   
          Then If [Sequencia da Cor_Tecido]<>NumVal([Codigo da Cor_Tecido])
                  Then Mensagem("Sequencia deve ser igual ao codigo da cor !")
                       Loop
               EndIf
       EndIf                 
       
       QuitLoop
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao das Cores                                             *
;*******************************************************************************
Proc Cores()
Private Campo_Anterior

Campo_Anterior=Field()

UnLockRecord
PickForm "7"
IsLockRecord()

Moveto "Iten_Cor"
While True
  CHAVE_CORES()
  If CHAVE_COR=9
     Then QuitLoop
  EndIf
  Controla_EdicaoCor()
EndWhile

Moveto "Itens"
UnLockRecord
PickForm "F"
IsLockRecord()
Moveto Field Campo_Anterior

EndProc

;*******************************************************************************
;* Rotina para geracao das grades/cores                                        *
;*******************************************************************************
Proc Grade_Cor(Tipo)
Private Tipo,Campo_Anterior,i,CODANTERIOR, ns,s,paiok

If SYS_CLIENTE_CONFEC="" 
   Then Return False
EndIf   

If SYS_CLIENTE_CONFEC<>"" And [Tipo do Item]="D" And Tipo="P"
   Then
        paiok=True
           ns=[Codigo do Item]
            s=[Codigo do Item]

        Switch 
          Case SYS_CLIENTE_CONFEC="0185" Or    ;
               SYS_CLIENTE_CONFEC="0195" Or    ;
               SYS_CLIENTE_CONFEC="0196":      ;
               ns=SubStr(s,1,7)+"000"
               If SubStr([Codigo do Item],8,3)<>"000"  Then paiok=false EndIf
               If SubStr([Codigo do Item],1,2)<>"02"   Then paiok=false EndIf
               ns="02?????000"
        
          Case SYS_CLIENTE_CONFEC="0171":      ; PadrÆo Venus
               ns=SubStr(s,1,6)+"0000"
               If SubStr([Codigo do Item],7,4)<>"0000" Then paiok=false EndIf
               If SubStr([Codigo do Item],1,1)<>"1"    Then paiok=false EndIf
               ns="1?????0000"
        
          Case SYS_CLIENTE_CONFEC="0222":      ; PadrÆo Lupus
               ns=SubStr(s,1,6)+"0000"
               If SubStr([Codigo do Item],7,4)<>"0000" Then paiok=false EndIf
               If SubStr([Codigo do Item],1,2)<>"02"   Then paiok=false EndIf
               ns="02????0000"
        
          Case SYS_CLIENTE_CONFEC="0200" Or    ;
               SYS_CLIENTE_CONFEC="0204" Or
               SYS_CODIGO_CLIENTE="0322"  :
               ns=SubStr(s,1,8)+"00"
               If SubStr([Codigo do Item],9,2)<>"00"   Then paiok=false EndIf
               If SubStr([Codigo do Item],1,2)<>"02"   Then paiok=false EndIf
               ns="02??????00"
        
          Case SYS_CLIENTE_CONFEC="0079":     ; Isabela Garcia
               ns=SubStr(s,1,6)+"0000"
               If SubStr([Codigo do Item],7,4)<>"0000" Then paiok=false EndIf
               If SubStr([Codigo do Item],1,1)<>"2"    Then paiok=false EndIf
               ns="2?????0000"
        
        EndSwitch

        If Not paiok
           Then Mensagem("O c¢digo do item para pai da grade,// deve ter a seguinte estrutura: // // "+ns+"// //Verifique !")
                Return False
        EndIf
   
EndIf


MSG=    "Vc definiu corretamente:          //"
MSG=MSG+" - Tipo da Grade;                 //"
MSG=MSG+" - As cores;                      //"
MSG=MSG+" - Os demais dados est„o corretos.// //"
MSG=MSG+"Deseja gerar itens com Grade/Cor ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

If Not Monta_Array_Grade()
   Then Return False
EndIf 

Aguarde("Gerando Grades")

CopyToArray RegItem
CODITEM=[Codigo do Item]
UnLockRecord
FormKey

Moveto "Iten_Cor"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then While [Codigo do Item]=CODITEM
          Switch 
            Case SYS_CLIENTE_CONFEC="0185"  Or
                 SYS_CLIENTE_CONFEC="0195"  Or
                 SYS_CLIENTE_CONFEC="0196"  Or
                 SYS_CLIENTE_CONFEC="0222"  Or
                 SYS_CODIGO_CLIENTE="0003"  Or
                 SYS_CODIGO_CLIENTE="0079"  Or
                 SYS_CODIGO_CLIENTE="0243"   :
                 Cria_Grade(AlinhM(StrVal([Sequencia da Cor_Tecido]),2),[Codigo da Cor_Tecido],Completa([Sigla Cor_Tecido],4," "),Tipo)
          EndSwitch
           
          Moveto "Iten_Cor" 
          Skip
          If Eot()
             Then QuitLoop
          EndIf
        EndWhile
   Else Switch
          OtherWise: Cria_Grade("","","",Tipo)
        EndSwitch  
EndIf

Moveto "Itens"
UnLockRecord
FormKey

Moveto [Codigo do Item]
Locate CODITEM

LimpAguarde()
Return True
EndProc


;*******************************************************************************
;* Rotina Cria Grade                                                           *
;*******************************************************************************
Proc Cria_Grade(Cor,CodCor,SiglaCor,TipoItem)
Private CODNOVO,wi,i,cont,tpitem

Switch
  Case TipoItem="M": cont=1
  Case TipoItem="T": cont=1
  OtherWise        : cont=2
EndSwitch

tpitem=TipoItem

Moveto "Itens"
Moveto [Codigo do Item]


For i From 1 to 12
    If LTrim(RTrim(SubStr(Array_TM[i],4,2)))<>""
       Then tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))

            For wi From 1 to cont
              CODNOVO=CODITEM

              Switch
                Case wi=2:
                  TpItem ="S"
                  CODNOVO=MudaCodigoPara(CODNOVO,TpItem)
                  If CODNOVO=CODITEM
                     Then QuitLoop
                  EndIf   
              EndSwitch
                      
              CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm

              tpbar=RegItem["Tipo Codigo_Barras"]
              cdbar=RegItem["Codigo de Barras"]
              loc  =RegItem["Localizacao"]
              Moveto [Codigo do Item]
              Locate CODNOVO
              If Not RetVal
                 Then End
                      Down
                 Else tpbar=[Tipo Codigo_Barras]
                      cdbar=[Codigo de Barras  ]
                      loc  =[Localizacao       ]
                      If tpbar=""
                         Then tpbar=RegItem["Tipo Codigo_Barras"] 
                      EndIf   
              EndIf
              CopyFromArray regitem
              [Codigo do item   ]=CODNOVO
              If Len(SiglaCor)>0
                 Then [Descricao do item]=Completa(SubStr([Descricao do Item],1,23),23," ")+SiglaCor
                      If tm<>"0" And tm<>"00"
                         Then [Descricao do item]=[Descricao do item]
                                          +"/"+
                                          LTrim(RTrim(SuBstr(Array_TM[i],2,2)))
                      EndIf
                      [Codigo da Cor_Tecido]=CodCor
                 Else Switch
                        Case SYS_CLIENTE_CONFEC="0000":
                        OtherWise :
                           [Descricao do item]=Completa(SubStr([Descricao do Item],1,27),27," ")+
                                               "/"+LTrim(RTrim(SuBstr(Array_TM[i],2,2)))
                      EndSwitch                         
              EndIf
              [Tipo do Item      ]=TpItem
		          [Tipo Codigo_Barras]=tpbar
		          [Codigo de Barras  ]=cdbar
		          [Localizacao       ]=Loc
              [DTamanho          ]=LTrim(RTrim(SuBstr(Array_TM[i],2,2)))
              
              Switch
                Case [Tipo Codigo_Barras]="G-EAN13"      : [Codigo de Barras]=Mod11_CalcEAN13("CALC",[Codigo do Item])
                Case [Tipo Codigo_Barras]="J-EAN13"      : [Codigo de Barras]=Mod11_CalcEAN13("CALC","78"+[Codigo do Item])
                Case [Tipo Codigo_Barras]="H-EAN8"       : [Codigo de Barras]=Mod11_CalcEAN8("CALC",SubStr([Codigo do Item],04,07))
                Case [Tipo Codigo_Barras]="I-COD128"     : [Codigo de Barras]=[Codigo do Item]
              EndSwitch
              If TpItem="S"
                 Then [Tipo Codigo_Barras]=""
                      [Codigo de Barras  ]=""
              EndIf   
              unLockrecord

              If wi=2
                 Then tpitem=TipoItem
              Endif

            EndFor
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Monta Aray Grade                                                     *
;*******************************************************************************
Proc Monta_Array_Grade()
Private ii

DynArray Array_TM[]
If Not IsBlank([Codigo da Grade])
   Then Moveto [Codigo da Grade]
        If Not Busca_Lookup("Codigo da Grade",[Codigo da Grade],"")
           Then Return False
        EndIf
EndIf

Array_TM[1] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade1"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item1"]))
Array_TM[2] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade2"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item2"]))
Array_TM[3] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade3"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item3"]))
Array_TM[4] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade4"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item4"]))
Array_TM[5] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade5"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item5"]))
Array_TM[6] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade6"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item6"]))
Array_TM[7] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade7"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item7"]))
Array_TM[8] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade8"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item8"]))
Array_TM[9] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade9"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item9"]))
Array_TM[10]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade10"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item10"]))
Array_TM[11]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade11"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item11"]))
Array_TM[12]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade12"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item12"]))

Return True
EndProc


;*******************************************************************************
;* Rotina Cria Grade de Cores Item de Terceiros                                *
;*******************************************************************************
Proc Cor(TipoItem)
Private CODNOVO,tpitem

MSG=    "Vc definiu corretamente:          //"
MSG=MSG+" - As cores;                      //"
MSG=MSG+" - Os demais dados est„o corretos.// //"
MSG=MSG+"Deseja gerar itens com as Cores ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

Aguarde("Gerando Grades")

tpitem=TipoItem
CopyToArray RegItem
CODITEM=[Codigo do Item]
UnLockRecord
FormKey

Moveto "Iten_Cor"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then While [Codigo do Item]=CODITEM
          CodCor  =[Codigo da Cor_Tecido]
          SiglaCor=Completa([Sigla Cor_Tecido],4," ")
           
          CODNOVO=SubStr(CODITEM,1,6)+CodCor

          tpbar=RegItem["Tipo Codigo_Barras"]
          cdbar=RegItem["Codigo de Barras"]
          loc  =RegItem["Localizacao"]
           
          Moveto "Itens"
          Moveto [Codigo do Item]
          Locate CODNOVO
          If Not RetVal
             Then End
                  Down
             Else tpbar=[Tipo Codigo_Barras]
						      cdbar=[Codigo de Barras  ]
						      loc  =[Localizacao       ]
          EndIf
          CopyFromArray regitem
          [Codigo do item      ]=CODNOVO
          [Descricao do item   ]=Completa(SubStr([Descricao do Item],1,25),25," ")+"/"+SiglaCor
          [Codigo da Cor_Tecido]=CodCor
          [Tipo do Item        ]=TpItem
          [Tipo Codigo_Barras  ]=tpbar
          [Codigo de Barras    ]=cdbar
          [Localizacao         ]=Loc

          Switch
            Case [Tipo Codigo_Barras]="G-EAN13"      : [Codigo de Barras]=Mod11_CalcEAN13("CALC",[Codigo do Item])
            Case [Tipo Codigo_Barras]="J-EAN13"      : [Codigo de Barras]=Mod11_CalcEAN13("CALC","78"+[Codigo do Item])
            Case [Tipo Codigo_Barras]="H-EAN8"       : [Codigo de Barras]=Mod11_CalcEAN8("CALC",SubStr([Codigo do Item],04,07))
            Case [Tipo Codigo_Barras]="I-COD128"     : [Codigo de Barras]=[Codigo do Item]
          EndSwitch
          UnLockrecord

          Moveto "Iten_Cor" 
          Skip
          If Eot()
             Then QuitLoop
          EndIf
        EndWhile
   Else Mensagem("N„o existe cor definida !")
EndIf

Moveto "Itens"
UnLockRecord
FormKey

Moveto [Codigo do Item]
Locate CODITEM

LimpAguarde()
Return True
EndProc


;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(MostraMensagem)
Private MostraMensagem

If MostraMensagem
   Then MSG=    "Antes de excluir um ITEM observe:                      //"
        MSG=MSG+"  - N„o deve haver lan‡amentos de Entrada ou Saida,    //"
        MSG=MSG+"  - Os valores no Invent rio dever„o estar zerados,    //"
        MSG=MSG+"  - Informar a data de inatividade na FICHA DE ESTOQUE;//"
        MSG=MSG+"Automaticamente ser  excluido:                         //"
        MSG=MSG+"  - da consulta [ F1=Tabelas ],                        //"
        MSG=MSG+"  - das cota‡”es,                                      //"
        MSG=MSG+"  - seus lan‡amentos nas tabelas de pre‡os;            // //"
        MSG=MSG+"Excluir um Item se for extremamente necess rio !!      // //"
        MSG=MSG+"Tem certeza que deseja excluir este item ?"
        ConfGeral(MSG)
        If OK<>"S"
           Then Return
        EndIf
EndIf

Moveto "Itens"
UnLockRecord
FormKey

Moveto "Cotacao"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          Del
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "FornProd"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          Del
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "\\Sistemas\\Vendas\\TbPrIte"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          Del
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "Iten_Cor"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          Del
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "Itens_CB"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item   ]=""
          [Descricao do Item]=""
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "Itens"
FormKey
Del
EndProc

;*******************************************************************************
;* Atualiza Dados nos itens da mesma referencia                                *
;*******************************************************************************
Proc Atualiza_Referencias2(Cor,CodCor,SiglaCor,TipoItem)
Private CODNOVO,wi,i,cont,tpitem

Cont=2

Moveto "Itens"
Moveto [Codigo do Item]
For i From 1 to 12
    If LTrim(RTrim(SubStr(Array_TM[i],4,2)))<>""
       Then tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))

            For wi From 1 to cont
              CODNOVO=CODITEM

              Switch
                Case wi=2:
                  TpItem="S"
                  CODNOVO=MudaCodigoPara(CODNOVO,TpItem)
                  If CODNOVO=CODITEM
                     Then QuitLoop
                  EndIf
              EndSwitch
                      
              CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm

              Moveto [Codigo do Item]
              Locate CODNOVO
              If RetVal
                 Then [Inativo]=Regitem["Inativo"]
                      unLockrecord
              EndIf

              If wi=2
                 Then tpitem=TipoItem
              Endif

            EndFor
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Aten‡Æo para quando for altera‡Æo do tipo ou a grade do item                *
;*******************************************************************************
Proc Atencao(PARAM)
Private PARAM                           

COR_MENSAGEM="1"      

Switch
  Case PARAM="Grade" : 
    MSG="Se vocˆ alterar esta grade, observe:                     //"
  Case PARAM="Tipo" :                                      
    MSG="Se vocˆ alterar o tipo do item, observe:                 //"
EndSwitch      
    
MSG=MSG+" - como ficam as referˆncias j  cadastradas,             //"
MSG=MSG+" - como ficam os pedidos j  lan‡ados,                    //"
MSG=MSG+"   ** no caso de pedidos em aberto **                    // //"

MSG=MSG+"As referˆncias e pedidos devem ser corrigidos pois:      //"
MSG=MSG+" - o sistema n„o faz isso automaticamente,               //"
MSG=MSG+" - erros de itens n„o cadastrados v„o ocorrer,           //"
MSG=MSG+" - erros de grade da referˆncia v„o ocorrer,             // //"

MSG=MSG+" ** Ao criar nova grade fa‡a primeiro um planejamento    //"
MSG=MSG+"    para evitar maiores transtornos.                     // //"
MSG=MSG+"Para maiores esclarecimentos contacte o suporte da Vise !"

Mensagem(MSG)

EndProc ;Atencao()

;*******************************************************************************
;* Atualiza Dados nos itens da mesma referencia                                *
;*******************************************************************************
Proc Atualiza_Referencias()
Aguarde("Atualizando Grades da Referˆncia")

If Not Monta_Array_Grade()
   Then Return False
EndIf 

CopyToArray RegItem
CODITEM=[Codigo do Item]

Moveto "Iten_Cor"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then While [Codigo do Item]=CODITEM
          Switch 
            Case SYS_CLIENTE_CONFEC="0185"  Or
                 SYS_CLIENTE_CONFEC="0195"  Or
                 SYS_CLIENTE_CONFEC="0196"  Or
                 SYS_CLIENTE_CONFEC="0222"  Or
                 SYS_CODIGO_CLIENTE="0003"  Or
                 SYS_CLIENTE_CONFEC="0079"  Or
                 SYS_CODIGO_CLIENTE="0243"   :
                 Atualiza_Referencias2(AlinhM(StrVal([Sequencia da Cor_Tecido]),2),[Codigo da Cor_Tecido],Completa([Sigla Cor_Tecido],4," "),"P")
          EndSwitch
           
          Moveto "Iten_Cor" 
          Skip
          If Eot()
             Then QuitLoop
          EndIf
        EndWhile
   Else Switch
          OtherWise: Atualiza_Referencias2("","","","P")
        EndSwitch  
EndIf

EndProc

;*******************************************************************************
;* Atualiza Dados na Tabela de Preco                                           *
;*******************************************************************************
Proc Atualiza()
Moveto "Itens"
If IsBlank([Codigo da Marca])           Then [Descricao da Marca       ]=""  EndIf
If IsBlank([Codigo do Departamento])    Then [Descricao do Departamento]=""  EndIf
If IsBlank([Codigo da Cor_Tecido])      Then [Descricao da Cor_Tecido  ]=""  EndIf
If IsBlank([Codigo do Grupo])           Then [Descricao do Grupo       ]=""  EndIf
If IsBlank([Codigo da Simbologia])      Then [Descricao da Simbologia  ]=""  EndIf
If IsBlank([Codigo da Familia])         Then [Descricao da Familia     ]=""  EndIf
[Data da Manutencao ] =  Today()
[Hora da Manutencao ] =  Time()
[Chapa              ] =  SYS_CHAPA_USUARIO
UnLockRecord
FormKey

If CHAVE=0 And [Tipo do Item]="D" And [Codigo da Grade]<>"" And [Inativo]<>REG_ITEMANT["Inativo"]
   Then Atualiza_Referencias()
EndIf   

Moveto "Cotacao"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item]=""
          [Codigo do Item]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "FornProd"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item]=""
          [Codigo do Item]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "\\Sistemas\\Vendas\\TbPrIte"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item]=""
          [Codigo do Item]=[Itens->Codigo do Item]
          [Lookup_Item   ]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "\\Sistemas\\Vendas\\TbPrcit"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item]=""
          [Codigo do Item]=[Itens->Codigo do Item]
          [Lookup_Item   ]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Produto]=""
          [Codigo do Produto]=[Itens->Codigo do Item]
          [Lookup_Produto   ]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Material]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Material]=""
          [Codigo do Material]=[Itens->Codigo do Item]
          [Lookup_Material   ]=[Itens->Codigo do Item]
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf



Moveto "\\Sistemas\\Estoque\\Itens_CB"
Moveto [Codigo do Item]
Locate [Itens->Codigo do Item]
If RetVal
   Then While True
          [Codigo do Item   ]=""
          [Descricao do Item]=""
          UnLockRecord
          Skip
          If Eot()
             Then QuitLoop
          EndIf
          Locate Next [Itens->Codigo do Item]
          If Not RetVal
             Then QuitLoop
          Endif
        EndWhile
EndIf

If Not IsBlank([Itens->Codigo de Barras]) And
   ([Itens->Tipo Codigo_Barras]="A-EAN13" Or
    [Itens->Tipo Codigo_Barras]="B-EAN8")
   Then Moveto "\\Sistemas\\Estoque\\Itens_CB"
        Moveto [Tipo CdBarras]
        Locate RTrim(SubStr([Itens->Tipo Codigo_Barras],3,5)),[Itens->Codigo de Barras]
        If RetVal
           Then [Codigo do Item   ]=[Itens->Codigo do Item]
                UnLockRecord
        EndIf
EndIf

Moveto "Itens"

FormKey
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar(Opcao)
Private Opcao, ncampoedit

If Opcao="CLASSIFICACAO" Then PickForm "4" EndIf
If Opcao="CDBARRAS"      Then PickForm "5" EndIf
If Opcao="LOCAL"         Then PickForm "6" EndIf

Home
Moveto [Descricao do Item]

While True
      TIP_COD=[Tipo Codigo_Barras]
      COD_BAR=[Codigo de Barras]

      PegaPosForm()
      If Field()="Codigo do Item"
         Then ImageRights ReadOnly
         Else ImageRights
      EndIf

      TECLA=" F3=Retornar  "

      If Field()="Unidade Fiscal"         Or
         Field()="Unidade Interna"        Or
         Field()="Tipo do Item"           Or
         Field()="Codigo da Familia"      Or
         Field()="Codigo do Grupo"        Or
         Field()="Codigo da Simbologia"   Or         
         Field()="Codigo da Marca"        Or
         Field()="Codigo do Departamento" Or
         Field()="Codigo da Cor_Tecido"   Or
         Field()="Codigo da Grade"        Or
         Field()="Tipo Codigo_Barras"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      TECLA=TECLA+"Del=Excluir  "

      If Field()="Codigo de Barras"       And
         ([Tipo Codigo_Barras]="A-EAN13"  Or
          [Tipo Codigo_Barras]="B-EAN8")
         Then TECLA=TECLA+"INS=Pr¢x.C¢digo  "
      EndIf


      Prompt TECLA

      Wait Field
           Message Field()
           Until "ENTER","DEL","FIELDVIEW","F35","ZOOM","ZOOMNEXT","UP","DOWN","PGUP","PGDN",
                 "HOME","END","DEL","RIGHT","LEFT","F1","F3","INS","ESC"

      Switch
      Case RetVal="F1":
           If Field()="Unidade Fiscal"         Or
              Field()="Unidade Interna"        Or
              Field()="Tipo do Item"           Or
              Field()="Codigo da Familia"      Or
              Field()="Codigo do Grupo"        Or
              Field()="Codigo da Simbologia"   Or              
              Field()="Codigo da Marca"        Or
              Field()="Codigo do Departamento" Or
              Field()="Codigo da Cor_Tecido"   Or
              Field()="Codigo da Grade"
              Then CONSULTAF1()
           EndIf

           If Field()="Tipo Codigo_Barras"
              Then If Checa_CdBarras("F1")
                      Then Checa_CdBarras("TipoCodigo")
                           Moveto [Tipo Codigo_Barras]
                   EndIf
           EndIf
      Case RetVal="ZOOM":
           PESQUISA()                  
      Case RetVal="ZOOMNEXT":
           PESQUISACON()
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           PickForm "F"
           EXCLUSAO(True)
           If Opcao="CLASSIFICACAO" Then PickForm "4"  Endif
           If Opcao="CDBARRAS"      Then PickForm "5"  Endif
           If Opcao="LOCAL"         Then PickForm "6"  Endif
           If RecordStatus("New")
              Then QuitLoop
           EndIf
           SetaPosForm()
      Case RetVal="INS":
           If Field()="Codigo de Barras" And
              ([Tipo Codigo_Barras]="A-EAN13" or
               [Tipo Codigo_Barras]="B-EAN8")
              Then Pega_CDBarras(RTrim(SubStr([Tipo Codigo_Barras],3,5)))
           EndIf
      Case Retval="LEFT":
      
           If Opcao="CDBARRAS"   
              Then Switch
                     Case Field()="Referencia" : If IsBlank([Tipo Codigo_Barras])
                                                    Then Moveto [Tipo Codigo_Barras]
                                                    Else If [Tipo Codigo_Barras]="F-EAN14" Or
                                                            [Tipo Codigo_Barras]="G-EAN13" Or
                                                            [Tipo Codigo_Barras]="J-EAN13" Or               
                                                            [Tipo Codigo_Barras]="H-EAN8"  Or
                                                            [Tipo Codigo_Barras]="I-COD128"
                                                            Then Moveto [Tipo Codigo_Barras]
                                                            Else Moveto [Codigo de Barras] 
                                                         EndIf
                                                 EndIf     
                     OtherWise : Left
                   EndSwitch
              Else Left
           EndIf
      
         ;;If Field()="Descricao do Item"
         ;;   Then
         ;;        Switch
         ;;          Case Opcao="CLASSIFICACAO": Moveto [Codigo da Cor_Tecido]
         ;;          Case Opcao="CDBARRAS"     : Moveto [Codigo de Barras    ]
         ;;          Case Opcao="LOCAL"        : Moveto [Localizacao         ]
         ;;        EndSwitch
         ;;        Loop
         ;;EndIf
           
      Case Retval="ENTER" Or RetVal="RIGHT":
           If Field()="Fator de Conversao" And
              IsBlank([])
              Then []=1
           EndIf
                       
           If Opcao="CDBARRAS"            
              Then Switch
                     Case Field()="Tipo Codigo_Barras"  : If IsBlank([])
                                                             Then [Codigo de Barras]=""
                                                                  Moveto [Referencia]
                                                             Else If Checa_CdBarras("TipoCodigo")
                                                                     Then If [Tipo Codigo_Barras]="F-EAN14" Or
                                                                             [Tipo Codigo_Barras]="G-EAN13" Or
                                                                             [Tipo Codigo_Barras]="J-EAN13" Or               
                                                                             [Tipo Codigo_Barras]="H-EAN8"  Or
                                                                             [Tipo Codigo_Barras]="I-COD128"
                                                                             Then Moveto [Referencia]
                                                                             Else Moveto [Codigo de Barras]
                                                                          EndIf
                                                                  EndIf        
                                                          EndIf   
                     Case Field()="Codigo de Barras"    : If IsBlank([])
                                                            Then Moveto [Codigo de Barras]
                                                            Else If IsBlank([Tipo Codigo_Barras])
                                                                    Then Moveto [Codigo de Barras]
                                                                    Else Localiza_CdBar("VERIFICAR")
                                                                 EndIf
                                                          EndIf  
                     Otherwise                          : Right  
                   EndSwitch  
              Else Right
           EndIf
              
         ;;If Field()="Codigo da Cor_Tecido" Or
         ;;   Field()="Codigo da Grade" Or
         ;;   Field()="Localizacao"
         ;;   Then Moveto [Descricao do Item   ]
         ;;        Loop
         ;;EndIf
          
      OtherWise: 
           Tecla_Press=RetVal
           ncampoedit=Field()
           Switch
            Case Retval="F3":
                 If RecordStatus("Modified")
                      Then If Checa_CdBarras("TipoCodigo") And
                              Checa_CdBarras("Codigo")
                              Then Moveto Field ncampoedit
                                   Atualiza()
                              Else Moveto [Tipo Codigo_Barras]
                                   Loop
                           EndIf
                 EndIf
                 QuitLoop
            Case Retval="ESC": 
                 Mensagem("Para finalizar utilize a tecla F3!")
            OtherWise: 
                 If RecordStatus("Modified")
                    Then If Checa_CdBarras("TipoCodigo") And
                            Checa_CdBarras("Codigo")
                            Then Moveto Field ncampoedit
                                 Atualiza()
                            Else Moveto [Tipo Codigo_Barras]
                                 Loop
                         EndIf
                  EndIf
           EndSwitch
           KeyPress Tecla_Press
           If RecordStatus("New")
              Then Del
                   QuitLoop
           EndIf
      EndSwitch
EndWhile
ImageRights
EndProc

;*******************************************************************************
;* Rotina Substitui                                                            *
;*******************************************************************************
Proc Substitui()

{Ask} TypeIn "\\Sistemas\\Estoque\\Itens" Enter 
Moveto [Tipo do Item     ] TypeIn "~VSDGTPITEM.."
   
If Not IsBlank(VSDGFAMI2)
   Then If Not IsBlank(VSDGFAMI)
           Then Moveto [Codigo da Familia  ] TypeIn "~VSDGFAMI, changeto ~VSDGFAMI2"
                Moveto [Descricao da Famila] TypeIn "chengeto ~VSDGNOMFAMI2"
           Else Moveto [Codigo da Familia  ] TypeIn "changeto ~VSDGFAMI2"
                Moveto [Descricao da Famila] TypeIn "chengeto ~VSDGNOMFAMI2"
                EndIf
   Else Moveto [Codigo da Familia] TypeIn "~VSDGFAMI.."
EndIf    

If Not IsBlank(VSDGGRP2)
   Then If Not IsBlank(VSDGGRP)
           Then Moveto [Codigo do Grupo   ] TypeIn "~VSDGGRP, changeto ~VSDGGRP2"
                Moveto [Descricao do Grupo] TypeIn "chengeto ~VSDGNOMGRP2"
                Else Moveto [Codigo do Grupo   ] TypeIn "changeto ~VSDGGRP2"
                     Moveto [Descricao do Grupo] TypeIn "chengeto ~VSDGNOMGRP2"
                EndIf
   Else Moveto [Codigo do Grupo] TypeIn "~VSDGGRP.."
        EndIf

If Not IsBlank(VSDGMARCA2)
   Then If Not IsBlank(VSDGMARCA)
           Then Moveto [Codigo da Marca   ] TypeIn "~VSDGMARCA, changeto ~VSDGMARCA2"
                Moveto [Descricao da Marca] TypeIn "chengeto ~VSDGNOMMARCA2"
                Else Moveto [Codigo da Marca   ] TypeIn "changeto ~VSDGMARCA2"
                     Moveto [Descricao da Marca] TypeIn "chengeto ~VSDGNOMMARCA2"
                EndIf
   Else Moveto [Codigo da Marca] TypeIn "~VSDGMARCA.."
        EndIf

If VSDGOPCAO[1] And Not IsBlank(VSDGVALORA)
   Then Moveto [Comissao do Item     ] TypeIn "changeto ~VSDGVALORA" 
EndIf

If VSDGOPCAO[2] And Not IsBlank(VSDGVALORB)
   Then Moveto [Indice Preco de Venda] TypeIn "changeto ~VSDGVALORB" 
EndIf

If VSDGOPCAO[3] And Not IsBlank(VSDGVALORC)
   Then Moveto [Desconto Maximo      ] TypeIn "changeto ~VSDGVALORC" 
EndIf

Do_It!
ClearAll
LimpAguarde()
Mensagem("Opera‡„o Finalizada !")
EndProc ; (Substitui)

;*******************************************************************************
;* 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: 
          If Campo="TG_FAMI2" Or Campo="TG_GRP2" Or Campo="TG_MARCA2" 
             Then 
                  Dynarray WinArray5[]
                  Window Handle Dialog To JANELA_DIALOG
                  Window GetAttributes JANELA_DIALOG To WinArray5
                 
                  If Campo="TG_FAMI2" Then View "\\Sistemas\\Estoque\\Familia"  executarF1=True EndIf
                  If Campo="TG_GRP2" Then  View "\\Sistemas\\Estoque\\Grupos"  executarF1=True EndIf
                  If Campo="TG_MARCA2" Then View "\\Sistemas\\Estoque\\Marcas"  executarF1=True EndIf
     
                  If executarF1
                     Then
                     WinArray5["FLOATING"]=False
                     Window SetAttributes JANELA_DIALOG From WinArray5

                     If Consulta_Sem_F1()
                        Then Switch
                               Case Campo="TG_FAMI2":
                                    VSDGFAMI2    = [Codigo da Familia]
                                    VSDGNOMFAMI2 = [Descricao da Familia]
                               Case Campo="TG_GRP2":
                                    VSDGGRP2     = [Codigo do Grupo]
                                    VSDGNOMGRP2  = [Descricao do Grupo]
                               Case Campo="TG_MARCA2":
                                    VSDGMARCA2   = [Codigo da Marca]
                                    VSDGNOMMARCA2= [Descricao da Marca]
                       EndSwitch
                    EndIf
                   
                     Window Select JANELA_DIALOG
                     WinArray5["FLOATING"]=True
                     Window SetAttributes JANELA_DIALOG From WinArray5

                     ClearImage
                     Echo Normal
                     Echo Off                  
                  EndIf      
             Else Dialog_F1()
          EndIf     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_TPITEM"         : Campo="NO"
            Case Campo="TG_FAMI"           : Campo="TG_TPITEM"
            Case Campo="TG_FAMI2"          : Campo="TG_FAMI"
            Case Campo="TG_GRP"            : Campo="TG_FAMI2"
            Case Campo="TG_GRP2"           : Campo="TG_GRP"
            Case Campo="TG_MARCA"          : Campo="TG_GRP2"
            Case Campo="TG_MARCA2"         : Campo="TG_MARCA"
            Case Campo="TG_OPCOES"         : Campo="TG_MARCA2"
            Case Campo="TG_VALORA"         : Campo="TG_OPCOES"
            Case Campo="TG_VALORB"         : Campo="TG_OPCOES"
            Case Campo="TG_VALORC"         : Campo="TG_OPCOES"
            Case Campo="YES" Or Campo="NO" : Campo="TG_TPITEM"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_TPITEM"   : Campo="TG_FAMI"
                    Case Campo="TG_FAMI"     : Campo="TG_FAMI2"
                    Case Campo="TG_FAMI2"    : Campo="TG_GRP"
                         VSDGFAMI2=ControlValue("TG_FAMI2")
                         If Not IsBlank(VSDGFAMI2)
                            Then VSDGFAMI2=ALINHM(VSDGFAMI2,3)
                                 GetRecord "\\Sistemas\\Estoque\\Familia" VSDGFAMI2 To FAM
                                 If RetVal
                                    Then VSDGNOMFAMI2 = FAM["Descricao da Familia"]
                                    Else MENSAGEM("Familia n„o Cadastrada !")
                                         Campo="TG_FAMI2"
                                 EndIf   
                            Else VSDGNOMFAMI2=""
                         EndIf
                    Case Campo="TG_GRP"      : Campo="TG_GRP2"
                    Case Campo="TG_GRP2"     : Campo="TG_MARCA"
                         VSDGGRP2=ControlValue("TG_GRP2")
                         If Not IsBlank(VSDGGRP2)
                           Then VSDGGRP2=ALINHM(VSDGGRP2,3)
                                GetRecord "\\Sistemas\\Estoque\\Grupos" VSDGGRP2 To GRP
                                 If RetVal
                                    Then VSDGNOMGRP2 = GRP["Descricao do Grupo"]
                                    Else MENSAGEM("Grupo n„o Cadastrado !")
                                         Campo="TG_GRP2"
                                 EndIf
                           Else VSDGNOMGRP2=""
                         EndIf     
                    Case Campo="TG_MARCA"    : Campo="TG_MARCA2"
                    Case Campo="TG_MARCA2"   : Campo="TG_OPCOES"
                         VSDGMARCA2=ControlValue("TG_MARCA2")
                         If Not IsBlank(VSDGMARCA2)
                           Then VSDGMARCA2=ALINHM(VSDGMARCA2,3)
                                GetRecord "\\Sistemas\\Estoque\\Marcas" VSDGMARCA2 To MAR
                                 If RetVal
                                    Then VSDGNOMMARCA2 = MAR["Descricao da Marca"]
                                    Else MENSAGEM("Marca n„o Cadastrada !")
                                         Campo="VSDGMARCA2"
                                 EndIf
                           Else VSDGNOMMARCA2=""
                         EndIf
                    Case Campo="TG_OPCOES"   : 
                         If VSDGOPCAO[1]=True
                            Then Campo="TG_VALORA"
                            Else Campo ="YES"
                         EndIf   
                         If VSDGOPCAO[2]=True
                            Then Campo="TG_VALORB"
                         EndIf
                         If VSDGOPCAO[3]=True
                            Then Campo="TG_VALORC"
                         EndIf
                    Case Campo="TG_VALORA"   :
                         VSDGVALORA = ControlValue("TG_VALORA")
                         Campo ="YES"
                    Case Campo="TG_VALORB"   :
                         VSDGVALORB = ControlValue("TG_VALORB")
                         Campo ="YES"
                    Case Campo="TG_VALORC"   :
                         VSDGVALORC = ControlValue("TG_VALORC")
                         Campo ="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

If Campo="TG_FAMI2" Or Campo="TG_GRP2" Or Campo="TG_MARCA2"
   Then TECLA=TECLA+"F1=Consulta"
EndIf

Switch
 Case Campo="TG_OPCOES": MSG_CAMPO="Comissao do Item / Indice p/ Calculo Preco de Venda / Desconto Maximo"
 Case Campo="TG_VALORA": MSG_CAMPO="Informe a porcentagem (%)"
 Case Campo="TG_VALORB": MSG_CAMPO="Informe a porcentagem (%)"
 Case Campo="TG_VALORC": MSG_CAMPO="Informe a porcentagem (%)"
 Case Campo="TG_FAMI2" : MSG_CAMPO="Informe a nova Familia"
 Case Campo="TG_GRP2"  : MSG_CAMPO="Informe o novo Grupo"
 Case Campo="TG_MARCA2": MSG_CAMPO="Informe a nova Marca"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc

;*******************************************************************************
;* ROTINA TROCA DADDOS                                                         *
;*******************************************************************************
Proc TrocaDados()
Do_It!
ClearAll

VSDGTPITEM    =""
VSDGFAMI      =""
VSDGMARCA     =""
VSDGGRP       =""
VSDGNOMTPITEM =""
VSDGNOMFAMI   =""
VSDGNOMFAMI2  =""
VSDGNOMGRP    =""
VSDGNOMGRP2   =""
VSDGNOMMARCA  =""
VSDGNOMMARCA2 =""
VSDGOPCAO     =""
VSDGVALORA    = BlankNum()
VSDGVALORB    = BlankNum()
VSDGVALORC    = BlankNum()

Array VSDGOPCAO[3]

ShowDialog "Substitui‡„o de Dados" Proc "SD_Dialog"
Trigger "OPEN","ARRIVE"
Key "F1","ENTER","ESC","TAB"
@ 05,05   Height 17 Width 78

  Label  @ 00,03 "Tipo do Item"  For "TG_TPITEM"
  Accept @ 01,04 Width 04 "A1"  Picture "!" Tag "TG_TPITEM"      To VSDGTPITEM
  Accept @ 01,09 Width 28 "A20" Picture "!*!" Tag "TG_NOMTPITEM" To VSDGNOMTPITEM

  Label  @ 02,00 "Familia - Atual"  For "TG_FAMI"
  Accept @ 03,01 Width 07 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
  Accept @ 03,09 Width 28 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

  Label  @ 02,38 "Familia - Novo"  For "TG_FAMI2"
  Accept @ 03,39 Width 07 "A3"  Picture "#*#" Tag "TG_FAMI2" To VSDGFAMI2
  Accept @ 03,47 Width 28 "A25" Picture "!*!" Tag "TG_NOMFAMI2" To VSDGNOMFAMI2
  
  Label  @ 04,00 "Grupo - Atual"  For "TG_GRP"
  Accept @ 05,01 Width 07 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
  Accept @ 05,09 Width 28 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

  Label  @ 04,38 "Grupo - Novo"  For "TG_GRP2"
  Accept @ 05,39 Width 07 "A3"  Picture "#*#" Tag "TG_GRP2" To VSDGGRP2
  Accept @ 05,47 Width 28 "A25" Picture "!*!" Tag "TG_NOMGRP2" To VSDGNOMGRP2
                                             
  Label  @ 06,00 "Marca - Atual"  For "TG_MARCA"
  Accept @ 07,01 Width 07 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
  Accept @ 07,09 Width 28 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

  Label  @ 06,38 "Marca - Novo"  For "TG_MARCA2"
  Accept @ 07,39 Width 07 "A3"  Picture "#*#" Tag "TG_MARCA2"    To VSDGMARCA2
  Accept @ 07,47 Width 28 "A25" Picture "!*!" Tag "TG_NOMMARCA2" To VSDGNOMMARCA2
  
  Label @ 08,00 "Tipo de Opcoes"For "TG_OPCOES"
  CheckBoxes @ 09,01 Height 3 Width 41 Tag "TG_OPCOES"
    "%~C~omissao      " to VSDGOPCAO[1],
    "%Calc.~P~rVenda  " to VSDGOPCAO[2],
    "%~D~escto Maximo " to VSDGOPCAO[3]
  Accept @ 09,22 Width 8 "N"  Tag "TG_VALORA"  To VSDGVALORA
  Accept @ 10,22 Width 8 "N"  Tag "TG_VALORB"  To VSDGVALORB
  Accept @ 11,22 Width 8 "N"  Tag "TG_VALORC"  To VSDGVALORC

  Pushbutton @ 13,25 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
  Pushbutton @ 13,39 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
EndDialog
If RetVal
   Then Substitui()
EndIf
AbreTabelas()
EndProc  ; (TrocaDados)

;*******************************************************************************
;* Rotina checagem Codigo de Barras                                            *
;*******************************************************************************
Proc Checa_CdBarras(Tipo)
Private Tipo, Result

Result=True
Switch
  Case Tipo="F1":
       ShowPopup " Tipos " CENTERED
        "~A~-EAN13     " : " EAN13                                      " : "A-EAN13",
        "~B~-EAN8      " : " EAN8                                       " : "B-EAN8",
        "~D~-COD128    " : " COD128 Livre                               " : "D-COD128",
        "~F~-EAN14     " : " EAN14 (DUN-14)                             " : "F-EAN14",
        Separator,
        "~G~-EAN13 II  " : " EAN13 = 00+C¢digo do Item                  " : "G-EAN13",
        "~J~-EAN13 III " : " EAN13 = 78+C¢digo do Item                  " : "J-EAN13",
        "~H~-EAN8 II   " : " EAN8 = £ltimos 7 d¡gitos do C¢digo do Item " : "H-EAN8",
        "~I~-COD128 II " : " COD128 = C¢digo do Item                    " : "I-COD128",
        Separator,
        "~C~ancelar    " : " Cancelar a Opera‡„o "  : "CANCELAR"
       EndMenu
        To MenuVar

        echo off

       If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
           Then [Tipo Codigo_Barras]=MenuVar
           Else Return False
       EndIf

  Case Tipo="TipoCodigo":
       Switch
         Case [Tipo Codigo_Barras]=""             : Result=True
         Case [Tipo Codigo_Barras]="A-EAN13"      : Result=True
         Case [Tipo Codigo_Barras]="B-EAN8"       : Result=True
         Case [Tipo Codigo_Barras]="F-EAN14"      : Result=True
         Case [Tipo Codigo_Barras]="D-COD128"     : Result=True
         Case [Tipo Codigo_Barras]="G-EAN13"      : Result=True
              [Codigo de Barras]=Mod11_CalcEAN13("CALC",[Codigo do Item])
         Case [Tipo Codigo_Barras]="J-EAN13"      : Result=True
              [Codigo de Barras]=Mod11_CalcEAN13("CALC","78"+[Codigo do Item])
         Case [Tipo Codigo_Barras]="H-EAN8"       : Result=True
              [Codigo de Barras]=Mod11_CalcEAN8("CALC",SubStr([Codigo do Item],04,07))
         Case [Tipo Codigo_Barras]="I-COD128"     : Result=True
              [Codigo de Barras]=[Codigo do Item]
         OtherWise                                : Mensagem("Tipo de C¢digo de Barras inv lido !")
                                                    Result=False
       EndSwitch
  Case Tipo="Codigo":
       CDBAROk=True
       Switch
         Case [Tipo Codigo_Barras]="F-EAN14"  : 
           Switch
             Case Len([Codigo de Barras])<>14 :
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN14 diferente de 14 digitos !")
             Case NumVal(SubStr([Codigo de Barras],1,1))<1 Or NumVal(SubStr([Codigo de Barras],1,1))>8 :
               CDBAROK=False   
               Mensagem("O primeiro d¡gito esta incorreto para variante log¡stica!//Variante log¡stica deve ser compreendido entre 1 e 8!")
           EndSwitch    
         Case [Tipo Codigo_Barras]="A-EAN13"      :
           Switch
             Case Len([Codigo de Barras])>13:
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN13 >13 digitos !")
             Case Len([Codigo de Barras])<12:
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN13 <13 digitos !")
             Case Mod11_CalcEAN13("CHEC",SubStr([Codigo de Barras],1,12))="":
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN13 inv lido !")
             Case Mod11_CalcEAN13("CHEC",SubStr([Codigo de Barras],1,12))<>numVal(SubStr([Codigo de Barras],13,1)):
               CDBAROK=False
               Mensagem("Digito verificador inv lido !")
           EndSwitch

         Case [Tipo Codigo_Barras]="B-EAN8"       :
           Switch
             Case Len([Codigo de Barras])>8:
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN8 >8 digitos !")
             Case Len([Codigo de Barras])<8:
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN8 <8 digitos !")
             Case Mod11_CalcEAN8("CHEC",SubStr([Codigo de Barras],1,7))="":
               CDBAROK=False
               Mensagem("C¢digo de Barras EAN8 inv lido !")
             Case Mod11_CalcEAN13("CHEC",SubStr([Codigo de Barras],1,7))<>numVal(SubStr([Codigo de Barras],8,1)):
               CDBAROK=False
               Mensagem("Digito verificador inv lido !")
           EndSwitch

       EndSwitch

       If CDBAROK
          Then
               Moveto "Itens_CB"
               Moveto [Tipo CdBarras]
               Locate RTrim(SubStr([Itens->Tipo Codigo_Barras],3,5)),
                      [Itens->Codigo de Barras]
               If RetVal
                  Then If Not IsBlank([Codigo do Item]) And
                          [Codigo do Item]<>[Itens->Codigo do Item]
                          Then CDBAROK=False
                               MSG="J  existe o Item "+[Codigo do Item]+" com "+
                                   [Tipo CdBarras]+"="+[Codigo_Barras]
                               Mensagem(MSG)
                        Endif
               Endif

               Moveto "Itens"
       EndIf
       Result=CDBAROK
EndSwitch

Return Result
Endproc


;*******************************************************************************
;* Rotina Pega Codigo de Barras                                                *
;*******************************************************************************
Proc Pega_CdBarras(Tipo)
Private Tipo, CODBAR

Moveto "Itens_CB"
Moveto [Tipo CdBarras]
Locate Tipo
If Not RetVal
   Then Mensagem("N„o existe intervalo de c¢digo na tabela para "+Tipo)
        Moveto "Itens"
   Else CODBAR=""
        While [Tipo CdBarras]=Tipo
          If IsBlank([Codigo do Item])
             Then If Not IsLockRecord()
                     Then CODBAR          =[Codigo_Barras]

                          If Not ConfGeral("Confirma "+Tipo+"="+CODBAR+" para este Item ?")
                             Then UnLockRecord
                                  Moveto "Itens"
                                  Return
                          EndIf

                          [Codigo do Item]=[Itens->Codigo do Item]
                          UnLockRecord
                          QuitLoop
                     Else Loop
                  EndIf
          Endif

          Skip
          If EOT() Then QuitLoop EndIf

        EndWhile

        If IsBlank(CODBAR)
           Then Mensagem("N„o existe intervalo dispon¡vel na tabela para "+Tipo)
                Moveto "Itens"
           Else Moveto [Codigo do Item]
                Locate [Itens->Codigo do Item]
                If RetVal
                   Then While [Codigo do Item]=[Itens->Codigo do Item]
                          If [Codigo_Barras ]<>CODBAR
                             Then [Codigo do Item   ]=""
                                  [Descricao do Item]=""
                                  UnLockRecord
                          EndIf
                          Skip
                          If Eot()
                            Then QuitLoop
                          EndIf
                          Locate Next [Itens->Codigo do Item]
                          If Not RetVal
                             Then QuitLoop
                          Endif
                        EndWhile
                EndIf

                Moveto "Itens"
                [Codigo de Barras]=CODBAR

        EndIf

Endif

EndProc

;*******************************************************************************
;* Consulta IBPT                                                               *
;*******************************************************************************
Proc IBPT()
Private Aliq

UnLockRecord
FormKey
Switch
 Case [Tipo Tributacao]="C" :
   Aliq=Pega_AliqIBPT([Tipo Tributacao], [Tipo do Item], [Codigo_Servico], "")
 OtherWise                    : 
   Aliq=Pega_AliqIBPT([Tipo Tributacao], [Tipo do Item], [NCM           ], [EX_TIPI])
EndSwitch
LockRecord
FormKey

MSG=    Completa("Indice da carga tribut ria pela tabela IBPT:",60," ")+"// //"
MSG=MSG+Completa("        Item "+[Codigo do Item   ],60," ")+"//"
MSG=MSG+Completa("             "+[Descricao do Item],60," ")+"// //"
MSG=MSG+Completa("   ICMS CST: "+[Tipo Tributacao  ],60," ")+"//"
Switch
 Case [Tipo do Item]="C" :
   MSG=MSG+Completa(" (2) LC 116: "+StrVal([Codigo_Servico]),60," ")+"//"
 OtherWise                    : 
   MSG=MSG+Completa("    (1) NCM: "+[NCM    ],60," ")+"//"
   MSG=MSG+Completa("    EX TIPI: "+[EX_TIPI],60," ")+"//"
EndSwitch                     
MSG=MSG+"//"      
MSG=MSG+Completa("Indice IBPT:"+Format("W7.2,EIC",Aliq)+"%           ",60," ")
If Not IBPTOk
   Then MSG=MSG+"// //"
        MSG=MSG+Completa("Aliquota do total de tributos nÆo encontrado para este item,",60," ")+" //"
        MSG=MSG+Completa("conforme tabela IBPT. Verificar cadastro do item e a  tabela",60," ")+" //"
        MSG=MSG+Completa("IBPT.                                                       ",60," ")
EndIf    
Mensagem(MSG)
EndProc

;*******************************************************************************
;* Consulta IBPT                                                               *
;*******************************************************************************
Proc Pega_AliqIBPT(cst, tpitem, ncm, ex)
private cst, orig, tpitem, ncm, ex, codtab, optab, aliq, tabref  

tabref=table()
IBPTOk=False

VSDG_EMPRESA_PADRAO = "X"

Moveto "\\Sistemas\\Cadastro\\Empresas"
Moveto [Padrao do Sistema]
Locate VSDG_EMPRESA_PADRAO
If RetVal
   Then UF_PADRAO = [UF Empresa]
   Else UF_PADRAO = ""
EndIf

orig=SubStr(cst,1,1)
Switch
 Case orig="1" Or orig="2" Or       
      orig="6" Or orig="7"    : orig="I"  
 OtherWise                    : orig="N"
EndSwitch

aliq=0
Switch
 Case TpItem="C" :
    optab="2"
    If ncm>0
       Then codtab=StrVal(ncm)
       Else codtab=""
    EndIf
       ex=""
 OtherWise                    : 
    optab="0"
   codtab=ncm
EndSwitch

Moveto "\\Sistemas\\Vendas\\Tibpt"
Moveto [Codigo]
Locate codtab,ex,optab,UF_PADRAO
If RetVal
  Then Switch
         Case orig="N" : aliq=[AliqNac]  
         Case orig="I" : aliq=[AliqImp]  
       EndSwitch
       IBPTOk=True
EndIf
Moveto tabref

return aliq
EndProc

;*******************************************************************************
;* Implementa Tabelas                                                          *
;*******************************************************************************
Proc AbreTabelas()
CoEdit "Itens"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Return False
EndIf

{TableAdd} {Cotacao}
{TableAdd} {Iten_Cor}
{TableAdd} {Itens_CB}
{TableAdd} {FornProd}
{TableAdd} {\\Sistemas\\Cadastro\\Empresas}
{TableAdd} {\\Sistemas\\Vendas\\TbPrite}
{TableAdd} {\\Sistemas\\Vendas\\Tbprcit}
{TableAdd} {\\Sistemas\\Vendas\\Tibpt}
{TableAdd} {\\Sistemas\\Producao\\FormulaC}
{TableAdd} {\\Sistemas\\Producao\\FormulaI}
Moveto "Itens"
Return True
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Verifica_Tela(CAMPO)
Private CAMPO

Switch
  Case (CAMPO="Codigo do Item"            Or
       CAMPO="Tipo do Item"               Or
       CAMPO="Referencia"                 Or
       CAMPO="Tipo Codigo_Barras"         Or
       CAMPO="Codigo de Barras"           Or
       CAMPO="Codigo da Grade"            Or
       CAMPO="DTamanho"                   Or
       CAMPO="Edita Descricao do Item"    Or
       CAMPO="Inativo")                   Or
       CAMPO="Codigo da Familia"          Or
       CAMPO="Codigo do Grupo"            Or
       CAMPO="Codigo da Marca"            Or
       CAMPO="Codigo da Cor_Tecido"       Or
       CAMPO="Codigo da Simbologia"       Or
       CAMPO="Codigo do Departamento"     Or 
       CAMPO="Vendagem"                   Or
       CAMPO="Localizacao"                Or
       CAMPO="Pais"                       Or
       CAMPO="Codigo Fornecedor"          Or
       CAMPO="Codigo Concentrador"        Or
       CAMPO="Unidade Entrada"            Or
       CAMPO="Unidade Interna"            Or
       CAMPO="Unidade Emabalagem"         Or
       CAMPO="Unidade Fiscal"             Or
       CAMPO="Fator de Conversao"         Or
       CAMPO="Fator Conversao Emabalagem"  :  TELA="TELA_CLAS"
  
  Case CAMPO="Peso Liquido"               Or
       CAMPO="Peso Embalagem"             Or
       CAMPO="Volumes"                    Or
       CAMPO="NCM"                        Or
       CAMPO="Genero"                     Or
       CAMPO="EX_TIPI"                    Or
       CAMPO="Codigo_Servico"             Or
       CAMPO="Comissao do Item"           Or
       CAMPO="Desconto Maximo"            Or
       CAMPO="Indice Preco Venda"         Or
       CAMPO="Peso Variavel"              Or
       CAMPO="Producao Esgotada"          Or
       CAMPO="ANP_Codigo_Combustivel"     Or
       CAMPO="ANP_UF_Consumo"              : TELA="TELA_FAT"

  Case CAMPO="Tributacao de ICMS"         Or
       CAMPO="Tipo Tributacao"            Or
       CAMPO="Aliquota de ICMS"           Or
       CAMPO="Aliquota Reduzida BCICMS"   Or
       CAMPO="CSOSN"                      Or
       CAMPO="Tributacao de IPI"          Or
       CAMPO="IPI_CST"                    Or
       CAMPO="Aliquota de IPI"            Or
       CAMPO="Tributacao de ISSQN"        Or
       CAMPO="Aliquota de ISSQN"          Or
       CAMPO="PIS_CST"                    Or
       CAMPO="PIS_Aliquota"               Or
       CAMPO="COFINS_CST"                 Or
       CAMPO="COFINS_Aliquota"            Or
       CAMPO="Codigo MVA"                 Or
       CAMPO="MVA_1"                       : TELA="TELA_TRIB" 
  OtherWise                                : TELA=""     
EndSwitch

EndProc ;(Verifica_Tela)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoCor()
DIGITA_COR()
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc ;(Controla_EdicaoCor)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()

; Classifica‡Æo : "TELA_CLAS"
; Faturamento   : "TELA_FAT"
; Tributa‡Æo    : "TELA_TRIB"

STATUS_INATIVO=[Inativo]
CopyToArray REG_ITEMANT

DIGITA=True

CampoAnt=""
Tecla_Funcao="TELA_CLAS"

While DIGITA
  
  DIGITA() 
  If CHAVE=9 Then QuitLoop EndIf
                               
  While Not IsBlank(Tecla_Funcao)   
    TelaAnt=TELA
    Switch
      Case Tecla_Funcao=-116:
           Switch
             Case TELA="TELA_CLAS"   : TELA = "TELA_FAT"
						 Case TELA="TELA_FAT"    : TELA = "TELA_TRIB"
             Case TELA="TELA_TRIB"   : TELA = "TELA_CLAS"
             OtherWise               : TELA = ""
           EndSwitch
			Case Tecla_Funcao=-115:
           Switch
             Case TELA="TELA_CLAS"   : TELA="TELA_TRIB" 
						 Case TELA="TELA_FAT"    : TELA="TELA_CLAS"
             Case TELA="TELA_TRIB"   : TELA="TELA_FAT"
             OtherWise               : TELA=""
           EndSwitch  
    EndSwitch
    
    ;*********** Checagem de Pagina *******************************
    If (Tecla_Funcao=-116 And TELA<>"TELA_TRIB") Or
        Tecla_Funcao=-115  
        Then If Not Checagem_Pagina(TelaAnt)
                    Then TELA=TelaAnt
             EndIf
    EndIf              
                       
    Switch
      Case TELA="TELA_CLAS"         : CAMPO="Codigo da Familia"  
      Case TELA="TELA_FAT"          : CAMPO="Peso Liquido"
      Case TELA="TELA_TRIB"         : CAMPO="Tipo Tributacao"
      OtherWise                     : CAMPO="Codigo da Familia"                                       
    EndSwitch 
    Tecla_Funcao="" 
  EndWhile
EndWhile

If RecordStatus("Locked") Then UnLockRecord EndIf         
If OP_FORM="4"
   Then PickForm "4"
EndIf

SaveTables
EndProc ;(Controla_EdicaoC) 
      
;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Estoque\\Bib_Estq"
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf

If not AbreTabelas()
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

DynArray Registro[]

PickForm "4"
INSERT_ESPECIAL=False
OP_FORM="4"
While True
  If INSERT_ESPECIAL
     Then CHAVE2()
     Else CHAVE()
  EndIf
  If CHAVE=9
     Then QuitLoop
  EndIf
  If CHAVE=4
     Then Loop
  EndIf
  If CHAVE=5
     Then If OP_FORM="4"
             Then PickForm "4"
             Else PickForm "F"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
