;** Tab_InvC********************************************************************
;*  Digitacao do Balan‡o - Simples                                             *
;*******************************************************************************
;;Autor          : Vise Informatica (VISERP)
;Desenvolvido    : 23/12/2010 por Karina Andrade
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas  
;Ultima Alteracao: 11/01/2011 Karina 
;Motivo Alteracao: Ajustes Ordem Impressao 
;Ultima Alteracao: 01/02/2011 Karina 
;Motivo Alteracao: Ajustes novos campos
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras  
;Ultima Alteracao: 21/11/2011 Karina Andrade 
;Motivo Alteracao: Add campo Lookup_Item
;Ultima Alteracao: 28/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sele‡Æo tipo do item       
;Ultima Alteracao: 30/01/2012 Karina Andrade 
;Motivo Alteracao: Ajustes ShowDialog/ASK, adcionado op‡Æo p/ Desfazer o Balan‡o
;                  Ajustes Report RM_1002  
;Ultima Alteracao: 20/04/2012 Karina Andrade 
;Motivo Alteracao: Ajustes OK - Dispositivo()
;Ultima Alteracao: 13/06/2012 Karina Andrade 
;Motivo Alteracao: Ajustes Tipo do Balan‡o
;Ultima Alteracao: 20/06/2012 Karina Andrade 
;Motivo Alteracao: Ajustes inclusÆo de itens por codigo de barras
;Ultima Alteracao: 04/09/2012 Bruno Carvalho 
;Motivo Alteracao: Incluido Localiza‡Æo por CodFornecedor "DigitaI()" e ajustado campo "Codigo do Item"
;Ultima Alteracao: 05/09/2012 Bruno Carvalho 
;Motivo Alteracao: Ajustado GeraRelatorio() para imprimir CodFornecedor se MODO ativado para tal
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 21/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() totalizar itens e quantidades
;Ultima Alteracao: 02/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes ControlaEdicaoC()
;Ultima Alteracao: 14/01/2013 por Bruno Carvalho
;Motivo Alteracao: Agrupa itens de mesmo codigo na imapressÆo
;Ultima Alteracao: 25/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes opcao Consistir diferencas ou nao consistir
;Ultima Alteracao: 01/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando") 
;Ultima Alteracao: 22/10/2013 por Andrey Fillipe
;Motivo Alteracao: Incluido op‡Æo de custo  
;Ultima Alteracao: 24/10/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes quando para quandor for pre‡o da formula GETRECORD
;Ultima Alteracao: 27/01/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Referencia" para localiza‡Æo do item 
;Ultima Alteracao: 27/03/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando item nao controla estoque na digitacao dos itens 
;Ultima Alteracao: 09/06/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes Bloquear mais de 1 quant por item(Parametro da requisicao)  
;Ultima Alteracao: 27/05/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado Op‡Æo paara filtrar balan‡os de um determinado item mostrando os lan‡amentos
;Ultima Alteracao: 11/05/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao ModoLocalizarItem()     
;Ultima Alteracao: 29/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao incluir item na digita‡Æo dos itens -> "Data_Inclusao" e "Codigo da Empresa" 
;Ultima Alteracao: 05/10/2016 por Rafael/Kamila
;Motivo Alteracao: Ajustes variavel MODO nÆo estava recebendo valor antes de imprimir 
;Ultima Alteracao: 30/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes permitir informar quantidade 0              
;Ultima Alteracao: 30/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controla_EdicaoC(), inclusÆo DigitaC()
;Ultima Alteracao: 15/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSGCAMPO
;Ultima Alteracao: 21/12/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_COR_TECIDO e PARAM_DADOS_ITEM_RESUMO p/ #0388# e #0390# e #0345#
;Ultima Alteracao: 29/12/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Lookup_Iten_Cor     
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_COR_TECIDO e PARAM_DADOS_ITEM_RESUMO p/ #0396#
;Ultima Alteracao: 28/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar o item/referˆncia ao inserir a cor do tecido p/ itens semi-acabados
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()         
;Ultima Alteracao: 26/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ #0388# um nova tentativa ao localizar o item pelo tipo do item "P"
;Ultima Alteracao: 04/07/2017 por Bruno Carvalho
;Motivo Alteracao: Incomplet Field no ShowDialog dos Itens Resumidos, setando a vari vel LOCALIZAR_POR
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Monta_Opcoes_Cor() e Seleciona_Opcoes_Cor()  p/ Bibliot
;Ultima Alteracao: 25/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes em GETRECORD onde o RetVal estava sendo omitido e ajustado edi‡Æo de item conforme PARAM_DADOS_ITEM_RESUMO="S"  
;Ultima Alteracao: 30/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao executar Item_Localizador() onde nÆo h  a necessidade de 
;                  alinhamento VSD_I_Codigo_Item, pois esta proc j  realiza este processo
;Ultima Alteracao: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0419#
;Ultima Alteracao: 20/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#                                                                                
;Ultima Alteracao: 31/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no processo para localizar codbar da proc CDBarras()
;Ultima Alteracao: 29/07/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes Item_Dialog() -> Quando item nÆo ‚ localizado no cadastro de itens
;Ultima Alteracao: 08/10/2019 por Bruno Carvalho
;Motivo Alteracao: Comentado TECLA="F4" -> PARAM_DADOS_ITEM_RESUMO="S" **Permitindo uso apenas por ShowDialog
;Ultima Alteracao: 08/10/2019 por Bruno Carvalho
;Motivo Alteracao: Removido do FORM "Tab_InvI" [Lookup_Item] *Alterado por [codigo do item] que tambem estava incluso no FORM
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444# 
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 07/02/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado F4 sele‡Æo de itens para zerar estoque
;Ultima Alteracao: 27/04/2020 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 29/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 13/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_COMPLEMENTO, CheckTG_COMPLEMENTO[1]
;Ultima Alteracao: 13/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CheckTG_OPOF[1]
;Ultima Alteracao: 20/05/2020 por Bruno Carvalho
;Motivo Alteracao: Alterado CopyReport "...\\Estoque\\Tab_InvI" p/ "...\\Estoque\\RM_0036"
;Ultima Alteracao: 12/06/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo para pegar ultimo valor de compora conforme tabela "Cotacao"  
;Ultima Alteracao: 12/06/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar ultimo valor de compra/fator conversao  
;Ultima Alteracao: 30/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes usar tpest  
;Ultima Alteracao: 04/08/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes ask tipo do item nova fun‡Æo
;Ultima Alteracao: 06/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes padrozinado rotina PegarCustoOpcao(), disparado de momentos diferentes 
;Ultima Alteracao: 09/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes para avisar a execu‡Æo do FechaMes
;Ultima Alteracao: 27/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0051 CDBarras(), qtd cdbarras fatro conversao embalagem 
;Ultima Alteracao: 29/10/2020 Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ bloquear tentativa de conexÆo de usu rio ao acessor sistema em fase de execu‡Æo de processos
;Ultima Alteracao: 06/11/2020 Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_Usuario() ao chamar a op‡Æo "F9"
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero
;Ultima Alteracao: 28/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Estoque com Terceiro" e Pessoa -> "Do informante em poder de terceiros" 
;Ultima Alteracao: 09/03/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opera‡Æo PARCIAL           

;*******************************************************************************
;*  Rotina para Localizar Registro Cabeca                                      *
;*******************************************************************************
Proc CHAVEC()

CHAVEC=0
INICIO_PAGINA=True

While True
  
  Moveto "Tab_InvC"
  End 
  Moveto [Numero do Lancamento]
  
  LANCTO  = [Numero do Lancamento]
  EMPRESA = [Codigo da Empresa   ]
  DATA    = [Data_Inclusao       ]
  CUSTO   = [Tipo_Custo          ]
    
  If OPCAO_FORM="F"
     Then Down PickForm "F"
     Else PgDn PickForm "1"
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  MSGCAMPO=""
  TECLA=""
  While True
        MSGCAMPO=""

        QUANTTOTAL=BlankNum()
        QUANTITENS=BlankNum()
        VRLTOTAL  =BlankNum()

        AguardaTeclasPadrao()      
        
        If RetVal=-33 
          Then Echo Normal
               Echo Off
               ShowPopup " Fun‡”es " CENTERED
                "~F5~ Localizar Item                    " : " Localiza o item do balan‡o     " : "F5",
                Separator,
                "~F8~ Acerto - Impress„o p/ Conferˆncia " : " Somente os itens com diferen‡a " : "F8",
                Separator,
                "~F9~ Acerto - Finalizar Balan‡o        " : " Gerar Requisi‡„o de Acerto     " : "F9",
                Separator,
                "~C~ancelar                             " : " Cancelar a Opera‡„o            " : "CANCELAR"
                EndMenu
                To MenuVar
                Echo Off
                If MenuVar="CANCELAR" or MenuVar="Esc"
                   Then Loop
                EndIf
               RetVal=MenuVar
        EndIf
        
        Switch
          Case RetVal=-94 : MsgTeclasPadrao()        
          Case RetVal="F3":
                 If OPCAO_FORM="F"
                    Then OPCAO_FORM="1"
                    Else OPCAO_FORM="F"
                 EndIf
                 Del
                 CHAVEC=5
                 Return
          Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
                 Del
                 While True
                   QUANTTOTAL=BlankNum()
                   QUANTITENS=BlankNum()
                   VRLTOTAL  =BlankNum()
                   COPIOU_REGISTRO=False
                   INICIO_PAGINA=True
                   FACA_DIGITAC =True
    
                   If OPCAO_FORM="F"
                      Then PAGINA("Tab_InvC","MR")
                      Else PAGINA("Tab_InvC","MT")
                   EndIf
                   LANCTO  = [Numero do Lancamento]
                   EMPRESA = [Codigo da Empresa   ] 
                   DATA    = [Data_Inclusao       ] 
                   CUSTO   = [Tipo_Custo          ]

                   Switch
                     Case EDITAR="S":
                          PickForm "1"
                          Echo Normal
                          Echo Off
                          CHAVEC=0
                          Controla_EdicaoC()
                     Case EXCLUIR="S":
                          PickForm "1"
                          Echo Normal
                          Echo Off
                          If [Situacao]="ABERTO" and QuerExcluir("")
                             Then EXCLUSAO()
                              Else UnLockRecord
                          EndIf
                     OtherWise: QuitLoop
                   EndSwitch
                   If OPCAO_FORM="1"
                      Then PickForm "1"
                      Else PickForm "F"
                   EndIf
                   SetaPosForm()
                 EndWhile
                 QuitLoop
          Case Retval="F8": 
                ;Diferen‡a
                PickForm "F"
                Del
                End PgDn
                DIFERENCA=True ;vai mostrar opcao de ver as diferencas
                CHAVEC=5
                MSG="Antes de executar esta rotina,//reprocessar estoque "
                MSG=MSG+"da Empresa/Ano/Mˆs desejado !//Deseja continuar?"
                If ConfGeral(MSG)
                   Then SD_Acerto() 
                        If EXECUTA
                          Then Moveto [Codigo da Empresa]
                               Locate IndexOrder by "cod_emp" VSDGEMPRESA,VSDGDTREF,"ABERTO"
                               If Retval 
                                 Then AGUARDE("Aguarde, Conferindo os Dados")
                                      DISPOSITIVO()
                                      If OK<>""
                                        Then REQUISICAO=False
                                             Play "RM_0011B"
                                      EndIf       
                                 Else Mensagem("NÆo existe registros a processar !")     
                               EndIf
                        EndIf
                        CHAVEC=8 
                EndIf
                CHAVEI=9
                Return
          Case Retval="F5": 
               PickForm "F"
               Del
               End PgDn
               CHAVEC=5
               MSG="Antes de executar esta rotina,//reprocessar estoque "
               MSG=MSG+"da Empresa/Ano/Mˆs desejado !//Deseja continuar?"
               If ConfGeral(MSG)
                  Then LOCALIZA_ITEM = True
                       Localizar_Item()
                       CHAVEC=8
               EndIf
               CHAVEI=9
               Return
          Case Retval="F9": 
               ;Requisi‡Æo
                PickForm "F"
                Del
                End PgDn
                DIFERENCA=False ; nao tem opcao de mostrar diferencas
                CHAVEC=5
                ReqOK=False
                
                MSG="Antes de executar esta rotina,//reprocessar estoque da Empresa/Ano/Mˆs desejado.// " 
                MSG=MSG+"//Ao CONFIRMAR esta rotina, n„o ser  possivel a edi‡„o do Balan‡o!// //Deseja continuar?"
                If ConfGeral(MSG)
                 Then SD_Acerto()
                      If EXECUTA
                        Then Arquivo_Conexao("Bloqueia","Balanco") 
                             Moveto [Codigo da Empresa]
                             Locate IndexOrder by "cod_emp" VSDGEMPRESA,VSDGDTREF,"ABERTO"
                             If Retval 
                               Then AGUARDE("Aguarde, Conferindo os Dados") 
                                    ListadeTabelasE()
                                    If (BloqueiaTabelas("\\Sistemas\\Estoque\\"))
                                      Then ListadeTabelasV()
                                          If (BloqueiaTabelas("\\Sistemas\\Vendas\\"))
                                             Then REQUISICAO=True
                                                  Play "RM_0011B"
                                          EndIf
                                    EndIf                  
                                    ListadeTabelasE()
                                    DesbloqueiaTabelas("\\Sistemas\\Estoque\\")
                                    ListadeTabelasV()
                                    DesbloqueiaTabelas("\\Sistemas\\Vendas\\")
                                    Arquivo_Conexao("Desbloqueia","Balanco")                                    
                               Else Mensagem("NÆo existe registros a processar !")
                             EndIf
                      EndIf
                      CHAVEC=8
               EndIf
               
               If ReqOK
                 Then 
                   Coedit "Tab_InvC"
                   Scan 
                     If VSDGEMPRESA=[Codigo da Empresa] And VSDGDTREF=[Data_Inclusao]
                       Then [Situacao    ]="CONFIRMADO"
                            [Zera_Estoque]=Substr(VSDGZERAEST,1,1)
                            unlockrecord 
                     EndIf
                   EndScan
                   Do_It!
               EndIf
               CHAVEI=9
               Return

          Case Retval="ESC":
               If Field()="Numero do Lancamento"
                  Then CHAVEC=9
                       Del
                       Return
               EndIf        
                              
          Case Retval="ENTER":
               If IsBlank([])
                 Then If IsBlank(LANCTO)
                         Then LANCTO="1"
                         Else LANCTO=StrVal(NumVal(LANCTO)+1)
                      EndIf
                      []=LANCTO
                EndIf
                []=ALINH()
                LANCTO=[]
                Del
                PickForm "1"
                Locate LANCTO
                If Retval
                  Then CHAVEC=0
                  Else CHAVEC=1
                       End PgDn
                       Moveto [Numero do Lancamento]
                       []=LANCTO
                       [Situacao] = "ABERTO" 
                EndIf
                If not IsLockRecord()
                  Then return
                endif  
                if CHAVEC=1
                   then del
                EndIf

                If OPCAO_FORM="F"
                  Then PickForm "1"
                EndIf
                quitloop
        EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveC)


;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

If CHAVEC=1
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And INICIO_PAGINA
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        Moveto [Codigo da Empresa]
        INICIO_PAGINA=False         
   Else 
        EMPRESA = [Codigo da Empresa   ] 
        DATA    = [Data_Inclusao       ] 
        CUSTO   = [Tipo_Custo          ]

        CHAVEF=1
        return
        
        ;;Moveto [Data_Inclusao]
EndIf

SetaCorRegistro("Editando")
While True
  TECLA=" Esc=Retornar  "
  If CHAVEC=0
     Then TECLA=TECLA+" Del=Excluir  F8/=Itens  "
  EndIf

  If Field()="Codigo da Empresa"      
     Then Monta_Opcoes("Empresas","")     
  EndIf 
   
  MSGCAMPO=Field()
  Switch
    Case Field()="Data_Inclusao"        : MSGCAMPO="Data Referente ao balan‡o" 
    Case Field()="Tipo_Custo"           : MSGCAMPO="Tipo de custo a utilizar"  
    Case Field()="Estoque_com_Terceiro" : MSGCAMPO="Do informante em poder de terceiros: Sim/NÆo"
  EndSwitch   
   
  If Field()="Codigo da Empresa"  Or
     Field()="Tipo_Custo"         Or
     Field()="Codigo"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf
   
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

  Switch
  Case RetVal="F1":
       Switch
         Case Field()="Codigo" : CONSULTAF1() 
         Case Field()="Codigo da Empresa" : Seleciona_Opcoes("Empresas","CR")
         Case Field()="Tipo_Custo"        :       
              MSGCAMPO=""          
              
              Echo Normal
              Echo Off
              ShowPopup " Tipo do Custo " CENTERED
                "Custo ~M~‚dio   " : " Utilizar o custo m‚dio        " : "M",
                "Custo ~A~tual   " : " Utilizar o ultimo custo atual " : "A",
                "Custo ~F~ormula " : " Utilizar o custo da formula   " : "F",
                "~U~ltima Compra " : " Utilizar o valor da £ltima compra " : "U",
                separator,
                "~C~ancelar      " : " Cancelar a Opera‡„o           " : "CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              []=MenuVar 
       EndSwitch        
  Case RetVal="F8" Or RetVal="DOWN":
       If CHAVEC=0
          Then CHAVEF=1
               QuitLoop
       EndIf
  Case Retval="ESC": 
       Switch
       Case Field()="Codigo da Empresa":
            If QuerDesfazer("")
               Then EXCLUSAO()
                    CHAVEC=9
                    QuitLoop
            EndIf
       Case Field()="Data_Inclusao" :
            If CHAVEC=0 And QuerDesfazer("")
               Then Undo
                    CHAVEC=9
                    QuitLoop
            EndIf
       
            Moveto [Codigo da Empresa]
       Case Field()="Estoque_com_Terceiro" :
            Moveto [Data_Inclusao]
       Otherwise:
            Left
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("desta requisi‡„o")
                  Then If Checa_Supervisor()
                          Then EXCLUSAO()
                               CHAVEC=9
                               QuitLoop
                       EndIf        
               EndIf
       EndIf
  Case Retval="ENTER":
       Switch
       Case Field()="Codigo da Empresa": 
            If Not Checa_Opcoes("Empresas",[])
               Then fastmsg("Empresa inv lida !")
                    Loop     
               Else EMPRESA=[] 
                    moveto [Data_Inclusao]
            EndIf              
       Case Field()="Data_Inclusao":
            If IsBlank([])
               Then []=Today()
            EndIf
            DATA=[]                         

            Moveto [Tipo_Custo]
       Case Field()="Tipo_Custo" :
            If IsBlank([])
               Then fastmsg("Tipo inv lido !")
                    Loop
            EndIf
            CUSTO=[] 
            
            If PARAM_ESTOQUE_COM_TERCEIRO
               Then Moveto [Estoque_com_Terceiro]
               Else CHAVEF=0
                    QuitLoop
            EndIf   
       Case Field()="Estoque_com_Terceiro" :
            If IsBlank([]) Then []="N" EndIf
            If []="N"
               Then CHAVEF=0
                    QuitLoop
               Else Moveto [Codigo]      
            EndIf
       Case Field()="Codigo" :
            If Not IsBlank([])
               Then CHAVEF=0
                    QuitLoop
            EndIf   
       EndSwitch
  EndSwitch
EndWhile
EndProc   ; (DigitaC)

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

While True
  
  Moveto [Quantidade    ] QUANTTOTAL = ImageCSum()
  Moveto [Sequencia     ] QUANTITENS = ImageCCount()
  
  End
  ITEM = [Sequencia  ]
  Down
  Moveto [Sequencia]
  Opcao_Ver=False
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True  
        MSGCAMPO=""
        
        Prompt " F7=Paginar  Alt+F=Fun‡”es  PgDn=Finalizar  "
        Wait Field
             Until "ESC","ENTER","F1","F2","F3","F4","F5","F6","F7","F8","F9","HOME","UP","PGUP","PGDN",-33

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                  "F3  ~V~er Ficha             " : " Ver itens modo ficha                       " : "F3",
                  "F4  ~S~ele‡Æo Itens->Zerar  " : " Sele‡Æo de itens para zerar estoque        " : "F4",
                  "F5  ~O~bserva‡„o            " : " Observa‡Æo                                 " : "F5",
                  "F6  ~I~mprimir              " : " Imprimir                                   " : "F6",
                  "F8  Altera C~u~sto          " : " Altera custo dos itens                     " : "F8",
                  "F9  Ativa CD~B~arras        " : " Ativa Leitura Codigo de Barras             " : "F9",
                  separator,
                  "~C~ancelar                  " : " Cancelar a Opera‡„o                        " : "CANCELAR"
                EndMenu
                To MenuVar
                Echo Off
                If MenuVar="CANCELAR" or MenuVar="Esc"
                   Then Loop
                EndIf

                RetVal=MenuVar
        EndIf

        Switch
        Case Retval="F2" Or Retval="F9":
             Del
             CDBarras()
             QuitLoop
        Case RetVal="PGDN":   
             Del
             Moveto [Sequencia]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item ! ")
                Quitloop
             EndIf
             CHAVEI=9
             Return
        Case RetVal="F3":
             SetaCorRegistro("Padrao")
             Del
             Moveto [Sequencia]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEI=0
             Home
             SEQIT=[Sequencia]
             Inicia_Registro()
             DigitaI_Resumo()   
             QuitLoop        
        Case Retval = "F8":    
             ;;alterar custo dos itens de acordo com a necessidade
            AUX_CUSTO = [Tab_InvC->Tipo_Custo]
            Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "Custo ~M~‚dio   " : " Alterar os itens com o custo m‚dio        " : "M",
              "Custo ~A~tual   " : " Alterar os itens com o ultimo custo atual " : "A",
              "Custo ~F~ormula " : " Alterar os itens com o custo da formula   " : "F",
              "~U~ltima Compra " : " Alterar os itens com o valor da £ltima compra" : "U",
              separator,
              "~C~ancelar      " : " Cancelar a Opera‡„o                       " : "CANCELAR"
            EndMenu
            To MenuVar
            Echo Off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf
            
            If [Tab_invc->Tipo_Custo]<>MenuVar
               Then MSG="Tem certeza que deseja alterar o "
                    Switch
                       Case AUX_CUSTO="M" : MSG=MSG+"custo Medio para o "         
                       Case AUX_CUSTO="A" : MSG=MSG+"custo Atual para o "
                       Case AUX_CUSTO="F" : MSG=MSG+"custo da Formula para o "
                       Case AUX_CUSTO="U" : MSG=MSG+"£ltima compra para o "
                    EndSwitch 
               Else MSG=("Deseja atualizar o custo ")
            EndIf
            
            Switch
              Case MenuVar="M" : MSG=MSG+"custo Medio ?"         
              Case MenuVar="A" : MSG=MSG+"custo Atual ?" 
              Case MenuVar="F" : MSG=MSG+"custo da Formula ?"
              Case MenuVar="U" : MSG=MSG+"£ltima compra ?" 
            EndSwitch
            
            ConfGeral(MSG)
            If OK="S"
               Then Del 
                    Moveto "Tab_invc"
                    [Tipo_Custo]=MenuVar 
            
                    Moveto "Tab_InvI"
                    Scan
                      PegarCustoOpcao([Tab_InvI->Codigo do Item])
                    EndScan
                    QuitLoop
            EndIf          
        
        Case Retval="F5":
             Del 
             Moveto "Tab_InvC" 
             Prompt " Esc=Cancelar  F2/Enter=Gravar"
             Edita_Memo("Observacao",08,01,15,76,"Observa‡”es")
             Moveto "Tab_InvI"
             QuitLoop

        Case Retval="F4":
             Del
             INSERI()
             QuitLoop

        Case Retval="ESC":
             Del
             Moveto [Sequencia] 
             If RecordStatus("New")=True
                Then CHAVEF=9
                Else quitloop 
             EndIf
             CHAVEI=9
             Return
       Case Retval="F6":
             del
             Switch
                Case LOCALIZAR_POR="CodFor" : MODO="Por Fornecedor" 
                OtherWise                   : MODO="Por Item"
              EndSwitch 
             IMPRIME()
             CHAVEI=9
             Return 
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             del
             While True
               Moveto [Sequencia     ] QUANTITENS = ImageCCount()
               Moveto [Quantidade    ] QUANTTOTAL = ImageCSum()

               PAGINA("Tab_InvI","MR")
               ITEM = [Sequencia]
               If EDITAR="S"
                  Then CHAVEI=0
                       If PARAM_DADOS_ITEM_RESUMO="S"
                          Then DIGITAI()
                          Else INICIO_DIALOG=True
                               DigitaI_Resumo()
                       EndIf   
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER" : 
             If Not Seta_Sequencia(ITEM,True) 
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate LANCTO,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Numero do Lancamento] = LANCTO
                     [Codigo da Empresa   ] = EMPRESA
                     [Data_Inclusao       ] = DATA
                     [Sequencia           ] = ITEM
                     Locate LANCTO,ITEM
             EndIf
             Return        
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc PegarCustoOpcao(cditem)
private result, cditem

result=false

while true

  MES  = ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
  ANO  = ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)
  CUSTO=0
  ;
  Switch
   Case [Tab_InvC->Tipo_Custo]="M" or [Tab_InvC->Tipo_Custo]="A" : 
        Moveto "SdEstq"
        Moveto [Codigo da Empresa]
  
        Locate [Tab_InvC->Codigo da Empresa],cditem, ANO, MES
        If Not RetVal
          Then If Not Cria_Ficha([Tab_InvC->Codigo da Empresa],cditem,False)
                  Then quitloop   
               EndIf
        EndIf                        
         
        Switch
           Case [Tab_InvC->Tipo_Custo]="M" :
                CUSTO=NDECIMAL([Custo Total Atual]/[Saldo Atual],3)

           Case [Tab_InvC->Tipo_Custo]="A" :
                CUSTO=NDecimal ([Preco de Custo],3) 

        EndSwitch
   Case [Tab_InvC->Tipo_Custo]="U" :
        CUSTO = Pega_Preco_Cotacao([Tab_InvI->Codigo do Item])

   OtherWise :
        GetRecord "\\Sistemas\\Producao\\FormulaC" cditem,"","" To DynArray Teste
        If RetVal  
           Then CUSTO=NDecimaL(Teste["Custo Unitario"],3)
        EndIf
  EndSwitch

  result=true
  quitloop
endwhile
Moveto "Tab_InvI" 
[Custo Unitario]=Round(CUSTO,3)

return result

endproc

;*******************************************************************************
;* Rotina para Digitar Item                                                    *
;*******************************************************************************
Proc DIGITAI()

If CHAVEI=0
   Then Moveto [Quantidade            ]
   Else Moveto [Codigo_Item_Fornecedor]
EndIf
                     
While True
    Switch
      Case Field()="Codigo_Item_Fornecedor" : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
      OtherWise                             : MSGCAMPO=Field()
    EndSwitch   
    TECLA=" Esc=Retornar  "
    
    If CHAVEI=0
       Then TECLA=TECLA+"Del=Excluir  "
    EndIf

    Prompt TECLA
    SetaCorRegistro("Editando")
    Wait Field
         Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","F7"
            
    Switch  
    Case Retval="F1" : 
         If Field()="Codigo_Item_Fornecedor"
              Then Moveto [Codigo do Item]
                   CONSULTAF1()
                   CODIGO = [Codigo do Item]
                   Moveto [Codigo do Item]
                   Ativa_Lookup()
                   Moveto [Codigo do Item]
                   Locate CODIGO
                   If RetVal
                      Then CODFOR = [Codigo Fornecedor]
                           CODIGO = [Codigo do Item]
                           Switch
                             Case LOCALIZA_CODIGO = "LOC_CODITE" : COD_PESQUISA = [Codigo do Item   ]
                             Case LOCALIZA_CODIGO = "LOC_CODFOR" : COD_PESQUISA = [Codigo Fornecedor]
                             Case LOCALIZA_CODIGO = "LOC_CODREF" : COD_PESQUISA = [Referencia       ]
                             Case LOCALIZA_CODIGO = "LOC_CODBAR" : COD_PESQUISA = [Codigo de Barras ] 
                           EndSwitch
                           KeyPress "ESC"
                           [Codigo do Item         ]=CODIGO
                           [Codigo Fornecedor      ]=CODFOR
                           [Codigo_Item_Fornecedor ]=COD_PESQUISA
                           [Codigo do Item         ]=CODIGO
                      Else KeyPress "ESC"      
                   EndIf       
                   Moveto [Codigo_Item_Fornecedor]                   
           EndIf 
    Case Retval = "F7" :
         ModoLocalizarItem("SELECAO","","TAB_INVC")                 
    Case Retval="ESC":
         Switch
          Case Field()="Codigo_Item_Fornecedor":
                 del 
                 QuitLoop      
          Case Field()="Quantidade":
                 If QuerDesfazer("")
                    Then If CHAVEI=1
                            Then Del
                            Else Undo
                         EndIf
                         CHAVEI=9
                         QuitLoop
                 EndIf
          Case Field()="Custo Unitario":
                 Moveto [Quantidade]
         EndSwitch      
    Case Retval="ENTER": 
         Switch
           Case Field()="Codigo_Item_Fornecedor" : 
                If IsBlank([]) Then Loop EndIf
                CopyToArray REG_INVI
                CODIGO = []
                MSG_BALANCO = ""
                If LOCALIZA_CODIGO = "LOC_CODBAR"
                   Then Dados_Item = CODIGO
                        AUX_SEQ    = [Sequencia]
                        If Pega_Dados_CdBarras()
                           Then CODIGO = REG_ITEM["Codigo do Item"]
                           Else MSG_BALANCO = ""
                                CODIGO      = ""
                        EndIf
                   Else LOC_RETORNO_CODITEM = True
                        Moveto [Codigo do Item]   
                        Ativa_Lookup()
                        ModoLocalizarItem("LOCALIZAR",CODIGO,"")
                        CODIGO = LOC_CODIGO_ITEM
                        If CODIGO=""
                           Then MSG_BALANCO="Item/Referˆncia n„o localizado !"
                        EndIf    
                EndIf
                
                Del
                If CODIGO=""
                   Then If MSG_BALANCO <> "" Then Mensagem(MSG_BALANCO) EndIf
                        Moveto [Codigo_Item_Fornecedor]
                        QuitLoop
                EndIf
                
                GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO To REG_ITEM
                If Not RetVal
                   Then Mensagem("Item "+CODIGO+" n„o foi localizado no cadastro de itens!")
                        QuitLoop
                EndIf   
                If Not TipoItem_ControlaEstoque(REG_ITEM["Tipo do Item"])
                   Then Mensagem("Este item n„o pode ser adicionado ! // //Tipo do Item nÆo controla estoque !")
                        Moveto [Codigo_Item_Fornecedor]
                        QuitLoop
                EndIf
                CODFOR = REG_ITEM["Codigo Fornecedor"]
                CODIGO = REG_ITEM["Codigo do Item"]
                End
                SEQ = [Sequencia]
                If SEQ = BlankNum() Then SEQ = 0 EndIf
                SEQ = SEQ + 1
                If [Codigo_Item_Fornecedor]<>"" Then Down EndIf
                CopyFromArray REG_INVI
                [Sequencia              ]=SEQ  
                [Codigo do Item         ]=CODIGO
                [Codigo Fornecedor      ]=CODFOR
                [Codigo_Item_Fornecedor ]=CODIGO
                [Data_Inclusao          ]=DATA
                [Sequencia              ]=ITEM
                If REG_ITEM["Inativo"] = "S"
                  Then Mensagem("Este item: //"+REG_ITEM["Codigo do Item"]+"//"+REG_ITEM["Descricao do Item"]+"// // esta inativo !")
                       Del
                       Moveto [Codigo_Item_Fornecedor]
                       QuitLoop
                  Else [Unidade]=REG_ITEM["Unidade Fiscal"]
                  
                       if not PegarCustoOpcao([Tab_InvI->Codigo do Item])
                          then
                               Temp=False
                               Return TEMP
                       endif
                       Moveto [Quantidade]
                           
                EndIf
                Echo Off
           Case Field()="Quantidade":
                CHAVEF=1
                If IsBlank ([])
                    Then fastmsg("Valor inv lido !")
                         Loop
                    Else If [Quantidade]=0
                            Then [Custo Unitario]=0
                                 UnLockRecord
                                 QuitLoop
                            Else Moveto [Custo Unitario]     
                         EndIf
                EndIf
           Case Field()="Custo Unitario":         
                If IsBlank ([])
                    Then Mensagem("O Custo Unit rio ficar  incorreto!")
                EndIf  
                UnLockRecord
                QuitLoop
         EndSwitch
    Case Retval="FIELDVIEW" or Retval="F35":
         EDITFIELD()
    Case Retval="DEL":
         If CHAVEI=0
            Then If QuerExcluir("")
                    Then DEL
                         QuitLoop
                 EndIf
         EndIf
    EndSwitch
EndWhile

EndProc ;DIGITAI

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

ESTQ_MES=ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
ESTQ_ANO=ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mˆs anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
        Mensagem(MSG)
EndIf

Moveto "EstqPrm"
Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM
If Not RetVal
   Then End Down
        [Codigo da Empresa   ]=ESTQ_EMPRESA
        [Codigo do Item      ]=ESTQ_ITEM
        UnLockRecord
EndIf

Moveto "SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private PEGA_DADOS_CODITEM

GetRecord "\\Sistemas\\Estoque\\P_Requis" EMPRESA To PARAMCDBAR
If Not RetVal
   Then Mensagem("N„o h  parƒmetros na requisi‡„o cadastrados para a empresa "+EMPRESA+"!")
        Return
EndIf   

While True

  End
  ITEM = [Sequencia  ]
  Down
  Moveto [Sequencia]

  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  If Not Ler_CDBarras(22,00)
     Then Del
          Return False 
     Else If Dados_QTD<=0
             Then Mensagem("Quantidade tem que ser maior ou = 1 !")
                  Del
                  Loop
             Else If PARAMCDBAR["Qtd_CDBAR"]="N" And Dados_QTD > 1
                     Then Mensagem("Quantidade nÆo pode ser maior que 1 !//Conferir nos parametros da requisi‡Æo !")
                          Del
                          Loop
                  EndIf             
          EndIf
  EndIf   
   
  ITOK=True
  If Len(Dados_Item)>0
     Then While True
          If Pega_Dados_CdBarras()
             Then VSD_I_Codigo_Item   =REG_ITEM["Codigo do Item" ]
                  VSD_I_UN            =REG_ITEM["Unidade Interna"]
                  If REG_ITEM["Inativo"]="S"
                     Then Mensagem("Este item: //"+REG_ITEM["Codigo do Item"]+"//"+REG_ITEM["Descricao do Item"]+"// // esta inativo !")
                          ITOK=False
                     Else
                          If Not TipoItem_ControlaEstoque(REG_ITEM["Tipo do Item"])
                             Then Mensagem("Este item n„o pode ser adicionado ! // //Tipo do Item nÆo controla estoque !")
                                  ITOK=False
                          EndIf      
                  EndIf
             Else ITOK=False
          EndIf          
          KeyPress "ESC"
          Echo Off
          Del
          If Not ITOK
             Then QuitLoop
          EndIf

          Moveto [Codigo do Item]
          
          While True
            Moveto [Sequencia]
            End
            ITEM = [Sequencia]
            Down
            Moveto [Sequencia]
            Seta_Sequencia(ITEM,False)
            If IsLockRecord()
               Then Del
                    Loop
            EndIf
            QuitLoop
          EndWhile

          ITEM  = [Sequencia]
          [Codigo da Empresa     ] = EMPRESA
          [Data_Inclusao         ] = DATA
          [Codigo do Item        ]=VSD_I_Codigo_Item
          [Codigo_Item_Fornecedor]=VSD_I_Codigo_Item
          [Unidade               ]=VSD_I_UN
          
          switch
            case sys_codigo_cliente="0051" and REG_ITEM["Fator Conversao Embalagem"]>1: 
              [Quantidade]=( Dados_QTD * REG_ITEM["Fator Conversao Embalagem"] )
              
            otherwise                      : 
              [Quantidade]=  Dados_QTD
          endswitch

          if not PegarCustoOpcao([Tab_InvI->Codigo do Item])
             then
                  Temp=False
                  Return TEMP
          endif   
          
          QUANTTOTAL = QUANTTOTAL +[Quantidade    ] 
          QUANTITENS = QUANTITENS +1 
                  
          UnlockRecord
          Moveto "Tab_InvI"

          QuitLoop
         EndWhile
  EndIf
EndWhile

EndProc ;Ler_CDBarras

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_CdBarras()

ITOK = True

Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo de Barras]
Locate Dados_Item
If RetVal
   Then Moveto [Codigo do Item]
        PEGA_DADOS_CODITEM = [Codigo do Item] 
   Else If Codigo_Barras2(Dados_Item,"")
           Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
           Else PEGA_DADOS_CODITEM = Dados_Item
        EndIf
        Moveto [Codigo do Item]
        Locate PEGA_DADOS_CODITEM
EndIf
If RetVal
    Then CopyToArray REG_ITEM
         VSD_I_Codigo_Item=[Codigo do Item]
         If [Inativo]="S"
            Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                 ITOK=False
         EndIf
    Else Mensagem("Item n„o Cadastrado !")
         ITOK=False
EndIf
KeyPress "ESC"

Return ITOK

EndProc ;Pega_Dados_CdBarras()

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

Moveto "Tab_InvI"
While RecordStatus("New")=False
     Del
EndWhile
Moveto "Tab_InvC"
Del
EndProc

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON
Opcaoc="Alfab‚tica"
        Echo Normal
        Echo Off
        ShowPopup " Relatorio por Ordem " CENTERED
           "~A~lfab‚tica " : " Imprime em ordem Alfab‚tica          " : "Alfabetica",
           "~C~¢digo     " : " Imprime em ordem de C¢digo           " : "Codigo    ",
           "~S~equencia  " : " Imprime em ordem da Sequˆncia do Item" : "Sequencia ",
           Separator,
           "~C~ancelar  "  : " Cancelar a Opera‡„o         " : "Cancelar"
        EndMenu
        To Opcaoc

        Echo off
                                
        If OPCAOC="Cancelar" or OPCAOC="Esc"
           Then Return
        EndIF

        Do_It!
        Dispositivo()
        If OK=""
           Then CoEditKey 
                Return 
        EndIf

        GeraRelatorio()          

        If IsEmpty("Answer")
           Then MENSAGEM("N„o existem registros a processar")
           Else IMPRIREL("Answer","R")
        EndIf
        
ClearAll

Carrega_Tabelas()
EndProc ;Imprime

;*******************************************************************************
;* Rotina para pegar ultimo custo da tabela cotacao                            *
;*******************************************************************************
Proc Pega_Preco_Cotacao(PARAM)
Private PARAM,TAB_ANT,PRECO_AUX

TAB_ANT   = Table()
PRECO_AUX = 0

Moveto "Cotacao"
Home
Moveto [Codigo do Item]
Locate IndexOrder by "Ind_Cot02" Pattern PARAM
If RetVal
   Then DATA_COMPRA=BlankDate() 
        While [Codigo do Item]=PARAM
          If [Data de Compra] > DATA_COMPRA
             Then DATA_COMPRA=[Data de Compra]
                  PRECO_AUX=NDecimaL([Valor Unitario]/[Fator de Conversao],3)
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate IndexOrder by "Ind_Cot02" Next Pattern PARAM
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

Moveto TAB_ANT
Return PRECO_AUX

EndProc ;Pega_Preco_Cotacao()

;*******************************************************************************
;* Rotina de GeraRelatorio                                                     *
;*******************************************************************************
Proc GeraRelatorio()
                    
If IsTable("Answer")
        Then Delete "Answer"
     EndIf    

{Ask} {Tab_InvC}
Moveto [Numero do Lancamento ] Example "num"    TypeIn ", ~LANCTO"
{Ask} {Tab_InvI}  Check
Moveto [Numero do Lancamento ] Example "num"  
Do_IT!       
ClearAll

If MODO="Por Fornecedor"
   Then {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item   ] Example "CodI" 
        Moveto [Codigo Fornecedor] Example "CodF"  
        {Ask} {Answer}
        Moveto [Codigo do Item   ] Example "CodI" TypeIn " ,Changeto _CodF"  
        Do_IT!       
        ClearAll 
EndIf 

; *** Agrupa os Itens de mesmo Codigo e Valor Unitario Igual *******************
{Ask} {Answer} Check
If Opcaoc<>"Sequencia "
   Then Moveto [Sequencia] Check
EndIf   
Moveto [Quantidade] Check TypeIn "Calc Sum as Quantidade"
Do_It!
Clearall

Switch
  Case Opcaoc="Alfabetica" : Sort "Answer" on "Descricao do Item"
  Case Opcaoc="Sequencia " : Sort "Answer" on "Sequencia"
  OtherWise                : Sort "Answer" on "Codigo do Item"
EndSwitch

CopyReport "\\Base\\Sistemas\\Estoque\\RM_0036" "R" "Answer" "R"
     
EndProc

;*******************************************************************************
;* Rotina para Desfazer Requisi‡äes e alterar situa‡Æo do Balan‡o               *
;*******************************************************************************
Proc Desfazer()
Private CODEMP,DTREF

CODEMP=[Codigo da Empresa ] 
DTREF =[Data_Inclusao     ]
Do_It!
ClearAll

EXCLUIR=False

Coedit "RqItem","RqCabeca"
For wx From 1 To 3
  Switch
    Case wx=1 or wx=2: REQ="ZERAMENTO"
    Case wx=3: REQ="BALANCO"
  EndSwitch  
  
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "balanco" EMPRESA,DATA,REQ
  If Retval
    Then If IsLockRecord()
           Then QuitLoop
           Else NUMLANC=[Numero do Lancamento]
                Moveto "RqItem"
                Moveto [Numero do Lancamento]
                Locate NUMLANC
                If Retval
                  Then While NUMLANC=[Numero do Lancamento] Del EndWhile
                EndIf
                Moveto "RqCabeca"
                Del
         EndIf
          
         EXCLUIR=True                     
  EndIf 
  Moveto "RqCabeca"
EndFor
Do_It!
ClearImage
ClearImage

Carrega_Tabelas()
MSG=""

If EXCLUIR
  Then Scan 
        If CODEMP=[Codigo da Empresa] And DTREF=[Data_Inclusao]
          Then [Situacao    ]="ABERTO"
               [Zera_Estoque]=""
        EndIf
       EndScan
  
       MSG=MSG+"Opera‡Æo finalizada! // // "
       MSG=MSG+"Verifique a exclusÆo das requisi‡äes e //"
       MSG=MSG+"reprocesse o estoque da Empresa/Ano/Mˆs desejado."
  
  Else MSG=MSG+"Opera‡Æo CANCELADA! // //"
       MSG=MSG+"Verifique a existˆncia das requisi‡äes //"
       MSG=MSG+"referente ao Balan‡o da Empresa Dia/Ano/Mˆs desejado."
EndIf                
Mensagem(MSG)

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Acerto_Dialog(Disparo,Campo,Evento,Elemento)

Temp=True
MSG_CAMPO=""
TECLA=""

If INICIO_DIALOG
   Then Campo="TG_EMPRESA"
        INICIO_DIALOG=False
EndIf

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9  : Temp=False
     Case Evento["KeyCode"] = -60 Or 
          Evento["KeyCode"] = "F2" : If Campo="TG_TIPOEST"                     
                                        Then ListaRegra_F2() 
                                     EndIf     
     Case Evento["KeyCode"] = -59: 
          If Campo="TG_ZERAEST"
            Then   
                 op=VSDGZERAEST
                 Echo Normal
                 Echo Off
                 ShowPopup " Tipo do Balan‡o " CENTERED
                  "~C~ompleto " : " Balan‡o COMPLETO, corre‡Æo de saldo/custos de TODOS os itens. " : "COMPLETO",
                  "~P~arcial  " : " Balan‡o PARCIAL, corre‡Æo de saldo/custos dos ITENS LAN€ADOS. " : "PARCIAL"
                  EndMenu
                  To MenuVar
                  Echo Off
                  If MenuVar="Esc"
                     Then MenuVar=op
                  EndIf
                  VSDGZERAEST=MenuVar
                  
          EndIf
          If Campo="TG_CONSISTD"
            Then   
                 op=VSDGCONSISTD
                 Echo Normal
                 Echo Off
                 ShowPopup " Consistir Diferen‡as " CENTERED
                  "~1~  Consistir todos           " : " Consistir todos os itens                        " : "1",
                  "~2~  Consistir diferen‡as      " : " Consistir apenas itens com Diferen‡as           " : "2"
                  EndMenu
                  To MenuVar
                  Echo Off
                  If MenuVar="Esc"
                     Then MenuVar=op
                  EndIf
                  VSDGCONSISTD=MenuVar
                  
          EndIf
          If Campo="TG_EMPRESA" Or
             Campo="TG_ITEM"    Or
             Campo="TG_FAMI"    Or
             Campo="TG_GRP"     Or
             Campo="TG_MARCA"   Or
             Campo="TG_TIPOEST"             
             Then Dialog_F1()
          EndIf   

     Case Evento["KeyCode"] =  27: 
          Temp=False
          If LOCALIZA_ITEM
             Then Switch
                    Case Campo="TG_EMPRESA"       : Campo="NO" 
                    Case Campo="TG_DTREF"         : Campo="TG_EMPRESA"
                    Case Campo="TG_ITEM"          : Campo="TG_DTREF"
                    Case Campo="TG_OPRELCODALF"   : Campo="TG_ITEM" 
                    Case Campo="TG_OPCOES"        : Campo="TG_OPRELCODALF"                    
                    Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
                  EndSwitch   
             Else Switch
                    Case Campo="TG_EMPRESA"       : Campo="NO"
                    Case Campo="TG_DTREF"         : Campo="TG_EMPRESA"
                    Case Campo="TG_ZERAEST"       : Campo="TG_DTREF"
                    Case Campo="TG_CONSISTD"      : Campo="TG_ZERAEST"
                    Case Campo="TG_FAMI"          : 
                         If DIFERENCA=False 
                            Then Campo="TG_ZERAEST"
                            Else Campo="TG_CONSISTD"
                         EndIf
                    Case Campo="TG_GRP"           : Campo="TG_FAMI"
                    Case Campo="TG_MARCA"         : Campo="TG_GRP"
                    Case Campo="TG_TIPOEST"       : Campo="TG_MARCA"                    
                    Case Campo="TG_OPRELCODALF"   : Campo="TG_TIPOEST"
                    Case Campo="TG_OPOF"          : Campo="TG_OPRELCODALF"
                    Case Campo="TG_COMPLEMENTO"   : Campo="TG_OPOF"
                    Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
                  EndSwitch
           EndIf       
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13: 
          Temp=False
          If Checa_TAG()
             Then If LOCALIZA_ITEM
                     Then Switch
                            Case Campo="TG_EMPRESA"       : 
                                 VSDGEMPRESA=ControlValue("TG_EMPRESA")
                                 If IsBlanK(VSDGEMPRESA)
                                  Then VSDGNOMEMP = ""
                                       Campo="TG_EMPRESA"
                                  Else VSDGEMPRESA=AlinhM(VSDGEMPRESA,4)
                                       Campo="TG_DTREF"
                                 EndIf
                                 Echo Off
                            Case Campo="TG_DTREF"         : Campo="TG_ITEM"
                                 VSDGDTREF=ControlValue("TG_DTREF")
                                 If IsBlank(VSDGDTREF)
                                    Then VSDGNOMITEM=""
                                         Mensagem("Data Referente Invalida !")
                                         Campo="TG_DTREF"
                                 EndIf
                            Case Campo="TG_ITEM"          : Campo="TG_OPRELCODALF"
                                 VSDGITEM=ControlValue("TG_ITEM")
                                 If Not IsBlank(VSDGITEM)
                                    Then VSDGITEM = AlinhM(VSDGITEM,10)
                                 EndIf          
                            Case Campo="TG_OPRELCODALF"     : Campo="TG_OPCOES"
                                 VSD_OPRELCODALF=ControlValue("TG_OPRELCODALF")
                                 Switch
                                   Case VSD_OPRELCODALF="2" : VSD_NOMOPRELCODALF = "ALFABETICA"
                                   Case VSD_OPRELCODALF="3" : VSD_NOMOPRELCODALF = "SEQUENCIA DO ITEM"
                                   OtherWise                : VSD_OPRELCODALF    = "1"
                                                              VSD_NOMOPRELCODALF = "CODIGO"
                                 EndSwitch
                                 If Isblank(VSDGITEM) Then Campo="YES" EndIf
                            Case Campo="TG_OPCOES"          : Campo="YES"          
                          EndSwitch  
                     Else Switch
                            Case Campo="TG_EMPRESA"      : 
                                 VSDGEMPRESA=ControlValue("TG_EMPRESA")
                                 If IsBlanK(VSDGEMPRESA)
                                  Then Campo="TG_EMPRESA"                           
                                  Else VSDGEMPRESA=AlinhM(VSDGEMPRESA,4)
                                       Campo="TG_DTREF"
                                 EndIf
                                 Echo Off
                            Case Campo="TG_DTREF"       :  
                                 VSDGDTREF=ControlValue("TG_DTREF")
                                 If IsBlank(VSDGDTREF)
                                    Then Mensagem("Data Referente Invalida !")
                                    Else Campo="TG_ZERAEST"
                                 EndIf
                            Case Campo="TG_ZERAEST"     :   
                                 VSDGZERAEST=ControlValue("TG_ZERAEST")
                                 If VSDGZERAEST="PARCIAL"
                                    Then VSDGZERAEST="PARCIAL"
                                    Else VSDGZERAEST="COMPLETO"
                                 EndIf  
                                 If DIFERENCA=False 
                                    Then Campo="TG_FAMI"
                                    Else Campo="TG_CONSISTD"
                                 EndIf
                            Case Campo="TG_CONSISTD"     : Campo="TG_FAMI"  
                                 VSDGCONSISTD=ControlValue("TG_CONSISTD")     
                                 If IsBlank(VSDGCONSISTD) 
                                         Then VSDGCONSISTD="1"
                                              VSDGDESCCONSD="CONSISTIR TODOS"
                                         Else If VSDGCONSISTD="2"
                                                Then VSDGDESCCONSD="CONSISTIR DIFEREN€AS"
                                                Else VSDGDESCCONSD="CONSISTIR TODOS"
                                                     VSDGCONSISTD="1"
                                              EndIf
                                      EndIf             
                            Case Campo="TG_FAMI"        : Campo="TG_GRP"
                            Case Campo="TG_GRP"         : Campo="TG_MARCA"
                            Case Campo="TG_MARCA"       : Campo="TG_TIPOEST"
                            Case Campo="TG_TIPOEST"     : Campo="TG_OPRELCODALF"
                            Case Campo="TG_OPRELCODALF"     : Campo="TG_OPOF"
                                 VSD_OPRELCODALF=ControlValue("TG_OPRELCODALF")
                                 Switch
                                   Case VSD_OPRELCODALF="2" : VSD_NOMOPRELCODALF = "ALFABETICA"
                                   OtherWise                : VSD_OPRELCODALF    = "1"
                                                              VSD_NOMOPRELCODALF = "CODIGO"
                                 EndSwitch      
                            Case Campo="TG_OPOF"            : Campo = "TG_COMPLEMENTO"
                            Case Campo="TG_COMPLEMENTO"     : Campo="YES"   
                          EndSwitch
                  EndIf
          EndIf
          Temp=False
   EndSwitch
EndIf

Switch
  Case Campo="TG_ZERAEST":
       MSG_CAMPO="Completo=TODOS os itens, Parcial=Itens lan‡ados"
       TECLA=TECLA+"F1=Consulta  "
  Case Campo="TG_CONSISTD":
       MSG_CAMPO="1=TODOS os itens, 2=Consistir DIFEREN€AS"
       TECLA=TECLA+"F1=Consulta  "
  Case Campo="TG_DTREF":
       MSG_CAMPO="Informe a Data do Balanco"
       TECLA="            "
  Case Campo="TG_OPRELCODALF" :
       If LOCALIZA_ITEM
          Then MSG_CAMPO="Op‡”es: 1=C¢digo  2=Alfab‚tica  3=Sequˆncia dos Itens"
          Else MSG_CAMPO="Op‡”es: 1=C¢digo  2=Alfab‚tica"
       EndIf             
  Case Campo="TG_OPITEM":
       MensagemCheckBoxes()
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
RefreshDialog

Return TEMP
EndProc ;(Acerto_Dialog)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc SD_Acerto()
Echo Normal
Echo Off
Do_It!
INICIO_DIALOG = True
VSDGEMPRESA   = ""
VSDGITEM      = ""       
VSDGTIPOEST   = ""
VSDGDTREF     = BlankDate()
EXECUTA       = False
LOCALIZA_ITEM = False
VSDGCONSISTD  = ""

Array CheckTG_COMPLEMENTO[1] CheckTG_COMPLEMENTO[1]=False
Array CheckTG_OPOF[1]        CheckTG_OPOF[1]       =False ; False=+OF, True=-OF

ListaRegra_Funcao("ListaRegra_TGAtivado","[TG_TIPOEST]")

While True
  Showdialog "Dados do Balan‡o" Proc "Acerto_Dialog"
     Trigger "OPEN","ARRIVE"
     Key "F1","ENTER","ESC","TAB","ReverseTab","F2",-60
     @ 05,12 height 17 width 72
  
      Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
      Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
      Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

      Label  @ 02,00 "Data Referente" For "TG_DTREF"
      Accept @ 03,01 Width 14 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

      Label  @ 02,15 "Tipo do Balan‡o" For "TG_ZERAEST"
      Accept @ 03,16 Width 18 "A10"  Picture "COMPLETO,PARCIAL" Tag "TG_ZERAEST" To VSDGZERAEST
      
      Label  @ 04,00 "Consistir Diferen‡as"  For "TG_CONSISTD"
      Accept @ 05,01 Width 07 "A1"  Picture "1,2" Tag "TG_CONSISTD" To VSDGCONSISTD         
      Accept @ 05,09 Width 25 "A20"  Tag "TG_DESCCONSD" To VSDGDESCCONSD 
      
      Label  @ 06,00 "Familia"  For "TG_FAMI"
      Accept @ 07,01 Width 07 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
      Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI
  
      Label  @ 08,00 "Grupo"  For "TG_GRP"
      Accept @ 09,01 Width 07 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
      Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP
  
      Label  @ 10,00 "Marca"  For "TG_MARCA"
      Accept @ 11,01 Width 07 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
      Accept @ 11,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA
      
      Label  @ 00,35 "Tipo do Estoque"  For "TG_TIPOEST"
      Accept @ 01,39 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
      Accept @ 01,44 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

      Label  @ 02,35 "Op‡„o de Ordem" For "TG_OPRELCODALF"
      Accept @ 03,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSD_OPRELCODALF
      Accept @ 03,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSD_NOMOPRELCODALF
  
      CheckBoxes @ 05,35 Height 1 Width 33 Tag "TG_OPOF"  "Ignorar OFïs nÆo emitidas"  to CheckTG_OPOF[1]
      CheckBoxes @ 06,35 Height 1 Width 33 Tag "TG_COMPLEMENTO"  "Com descri‡Æo complementar"  to CheckTG_COMPLEMENTO[1] 

      Pushbutton @ 13,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
      Pushbutton @ 13,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  Enddialog
  Mouse Show
  If Not RetVal Then Quitloop EndIf
  If Not Verifica_Usuario() Then Loop EndIf
  
  If RetVal 
     Then 
          EXECUTA=True
          Switch
            Case IsBlank(VSDGEMPRESA)     : EXECUTA=False  Mensagem("Informe a empresa !") 
            Case IsBlank(VSDGDTREF)       : EXECUTA=False  Mensagem("Informe a data referente !")   
           ;Case IsBlank(VSD_COMPLEMENTO) : EXECUTA=False  Mensagem("Informe op‡Æo de complemento !")   
            Case IsBlank(VSD_OPRELCODALF) : EXECUTA=False  Mensagem("Informe op‡Æo da ordem !")   
          EndSwitch

          If Not EXECUTA Then Loop EndIf
  EndIf
  
  QuitLoop
EndWhile

Return EXECUTA
EndProc  ;  (SD_Acerto)

;*******************************************************************************
;* Rotina para Localiza‡Æo do Item                                             *
;*******************************************************************************
Proc Localizar_Item()

Echo Normal
Echo Off
Do_It!

VSDGEMPRESA        = ""
VSDGNOMEMP         = ""
VSDGDTREF          = BlankDate()
VSDGITEM           = ""
VSDGNOMITEM        = ""
VSD_OPRELCODALF    = ""
VSD_NOMOPRELCODALF = ""
VSDGZERAEST        = ""
VSDGCONSISTD       = ""
VSDGFAMI           = ""
VSDGGRP            = ""
VSDGMARCA          = ""
VSDGREFERENCIA     = ""

Array TG_OPCOES[1]
TG_OPCOES[1]="Mostrar todos os itens do(s) lan‡amento(s) em que o"

Array CheckTG_TG_OPCOES[ArraySize(TG_OPCOES)]
CheckTG_TG_OPCOES[1]=False

While True
  EXECUTA        = False
  INICIO_DIALOG  = True
  VSDGZERAEST    = ""
  VSDGCONSISTD   = ""
  VSDGFAMI       = ""
  VSDGGRP        = ""
  VSDGMARCA      = ""
  VSDGREFERENCIA = ""
  Showdialog "Dados do Balan‡o" Proc "Acerto_Dialog"                               
     Trigger "OPEN","ARRIVE"                                                      
     Key "F1","ENTER","ESC","TAB","ReverseTab"
     @ 05,12 height 14 width 66
  
      Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
      Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
      Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP
  
      Label  @ 00,32 "Data Referente" For "TG_DTREF"
      Accept @ 01,33 Width 14 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

      Label  @ 02,00 "Item"  For "TG_ITEM"
      Accept @ 03,01 Width 13 "A10" Picture "#*#" Tag "TG_ITEM"    To VSDGITEM                      
      Accept @ 03,15 Width 37 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM
      
      Label  @ 04,00 "Op‡„o de Ordem" For "TG_OPRELCODALF"
      Accept @ 05,01 Width 04 "A1"  Picture "1,2,3" Tag "TG_OPRELCODALF" To VSD_OPRELCODALF
      Accept @ 05,06 Width 26 "A23"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSD_NOMOPRELCODALF      
      
      CheckBoxes @ 07,00 Height 1 Width 63 Tag "TG_OPCOES" 
      TG_OPCOES[1] to CheckTG_TG_OPCOES[1]
      @ 08,05 ?? "item informado est  vinculado ?                  "                
  
      Pushbutton @ 10,18 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
      Pushbutton @ 10,32 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  Enddialog
  Mouse Show
  If Not RetVal Then QuitLoop EndIf
                                                                
  Switch
    Case IsBlank(VSDGEMPRESA) : Mensagem("Informe a empresa !")  
    Case IsBlank(VSDGDTREF)   : Mensagem("Informe a data referente !")
    OtherWise                 : EXECUTA = True
  EndSwitch
  If Not EXECUTA Then Loop EndIf
   
  If CheckTG_TG_OPCOES[1]
     Then TODOS_ITENS = True     
     Else TODOS_ITENS = False
  EndIf
  
  GetRecord "\\Sistemas\\Estoque\\Itens" VSDGITEM To REG_ITEM 
  If RetVal
     Then VSDGTIPOEST = REG_ITEM["Tipo do Item"]
     Else VSDGTIPOEST = ""
  EndIf  

  If EXECUTA
     Then Moveto [Codigo da Empresa]
          Locate IndexOrder by "cod_emp" VSDGEMPRESA,VSDGDTREF,"ABERTO"
          If Retval 
             Then AGUARDE("Aguarde, Conferindo os Dados")
                  DISPOSITIVO()
                  If OK<>""
                     Then REQUISICAO=False
                          AGUARDE("Aguarde, gerando a impress„o do relat¢rio ")
                          Play "RM_0011B"                                  
                  EndIf       
             Else Mensagem("NÆo existe registros a processar !")     
          EndIf
  EndIf 
  
  Carrega_Tabelas()
  If OPCAO_FORM="F"
     Then PickForm "F"
     Else PickForm "1"
  EndIf
  Echo Normal
  Echo Off
  Do_It!
EndWhile

EndProc ;Localizar_Item()

;*******************************************************************************
;* Rotina para Pegar Dados do Item                                             *
;*******************************************************************************                              
Proc Pega_Dados(AUX_ITEM)
Private AUX_ITEM,REG_ITEM

GetRecord "\\Sistemas\\Estoque\\Itens" AUX_ITEM To REG_ITEM
If Not Retval
   Then Mensagem("Item "+AUX_ITEM+" n„o foi localizado no cadastro de itens!")
        Return False 
EndIf   
VSD_I_REFERENCIA = REG_ITEM["Referencia"]
CODFOR = REG_ITEM["Codigo Fornecedor"]
CODIGO = REG_ITEM["Codigo do Item"]
[Codigo do Item         ]=CODIGO
[Codigo_Item_Fornecedor ]=CODIGO
[Codigo Fornecedor      ]=CODFOR
[Unidade                ]=REG_ITEM["Unidade Fiscal"]
[Data_Inclusao          ]=[tab_InvC->Data_Inclusao]

If REG_ITEM["Inativo"] = "S"
   Then FastMsg("Este item: //"+REG_ITEM["Codigo do Item"]+"//"+REG_ITEM["Descricao do Item"]+"// // esta inativo !")
        Moveto [Codigo_Item_Fornecedor]
        Return False
   Else 
        if not PegarCustoOpcao([Tab_InvI->Codigo do Item])
           then Return False
        endif   
        Moveto [Quantidade]
        VSD_I_Preco_Unitario=[Custo Unitario]
        Campo="I_Codigo_Cor_Tecido"
EndIf
Echo Off
Return True

EnDProc ;Pega_Dados()                              
                              
;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private Janela, WinArray5  ;

TECLA=" Esc=Retornar  "
MSGCAMPO=""
Temp=True

Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="I_Quantidade"
           Else Campo="I_Codigo_Item"
        EndIf
        INICIO_DIALOG=False   
EndIf 

If Disparo="OPEN"
   Then TiraSombraShowDialog()
EndIf        

If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED 
           "F7 Alterar Modo ~L~ocalizar ": " Alterar Modo de Localizar o Item   " :"F7",
           Separator, 
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar<>"CANCELAR" and MenuVar<>"Esc"
             Then Evento["KeyCode"]=MenuVar
          EndIf 
   EndIf
    
   Switch
     Case Opcao_Ver=True:
          Temp=False   
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch               
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Sequencia]
                      Inicia_Registro()
              EndIf
          EndSwitch             
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"   
             Then Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"        Then Moveto [Codigo do Item]            EndIf
                  
                  ConsultaF1()
                  
                  Window Select JANELA
                  WinArray5["FLOATING"]=True
                  Window SetAttributes JANELA From WinArray5

                  Echo Normal
                  Echo off
                  
                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item        = [Codigo do Item   ]
                          VSD_I_Descricao_Item     = [Descricao do Item]
                          VSD_I_UN_Item            = [Unidade          ]
                  EndIf 
         EndIf                                                    
         If Campo="I_Codigo_Cor_Tecido"  
            Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Seleciona_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Moveto [Codigo do Item]
         EndIf        
         Temp=False
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","TAB_INVC")    
     Case Evento["KeyCode"] = 27: 
          Temp=False
          Switch
            Case Campo="I_Codigo_Item"        : CancelDialog
            Case Campo="I_Codigo_Cor_Tecido"  : Campo="I_Codigo_Item"
            Case Campo="I_Quantidade": 
                 If CHAVEI=1
                    Then If LOCALIZA_CODIGO = "LOC_CODREF"
                            Then Campo="I_Codigo_Cor_Tecido"
                            Else Campo="I_Codigo_Item"
                         EndIf   
                    Else CancelDialog
                 EndIf
            Case Campo="I_Preco_Unitario"            : If PARAM_ESTOQUE_COM_TERCEIRO
                                                          Then Campo="I_UN_Item" 
                                                          Else Campo="I_Quantidade"
                                                       EndIf        
            Case Campo="I_UN_Item"                  Or
                 Campo="I_Preco_Total"               : Campo="I_Quantidade"
            Case Campo="I_Flag"                      : Campo="I_Preco_Unitario"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13 :  
          Switch
            Case Campo="I_Codigo_Item" : 
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then FastMsg("Valor inv lido !")
                    Else ;Caso seja necess rio a verifica‡Æo da duplicidade de item 
                         PARAM_DUPLICIDADE_ITEM=False
                         ;--------------------------------------------------------- 
                         MSG_BALANCO       = ""
                         ITEM_DUPLICADO    = False
                         NITEM             = [Sequencia]
                         VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                         While True
                           Achou_Item=False
                           CopyToArray REGISTRO
                           Del
                           Moveto [Codigo do Item]
                           Ativa_Lookup()
                           ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
                           If RetVal
                              Then Achou_Item           = True
                                   CODITEM2             = [Codigo do Item]
                                   VSD_I_Codigo_Item    = CODITEM2
                                   VSD_I_Descricao_Item = [Descricao do Item]
                                   VSD_I_TIPO_ITEM      = [Tipo do Item]
                                   KeyPress "ESC"  
                              Else If LOCALIZA_CODIGO="LOC_CODBAR"
                                      Then KeyPress "ESC" 
                                           Dados_Item = VSD_I_Codigo_Item
                                           If Pega_Dados_CdBarras()
                                              Then Achou_Item=True
                                              Else MSG=""
                                           EndIf
                                     Else KeyPress "ESC"      
                                   EndIf
                                   If Achou_Item
                                      Then End Down
                                           If NITEM<>1 Then Down EndIf
                                           [Sequencia]=NITEM 
                                      
                                           MSG_BALANCO          = ""
                                           CODITEM2             = REG_ITEM["Codigo do Item"   ]
                                           VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                           VSD_I_REFERENCIA     = REG_ITEM["Referencia"       ]
                                           VSD_I_TIPO_ITEM      = REG_ITEM["Tipo do Item"     ]                 
                                           Del
                                      Else MSG_BALANCO="Item/Referˆncia "+VSD_I_Codigo_Item+" n„o localizado!"      
                                   EndIf
                           EndIf
                           Release Vars Tab_Ant
                           If Achou_Item
                              Then If VSD_I_TIPO_ITEM="D" Or VSD_I_TIPO_ITEM="I" Or VSD_I_TIPO_ITEM="F" Or 
                                      VSD_I_TIPO_ITEM="H" Or VSD_I_TIPO_ITEM="G" Or VSD_I_TIPO_ITEM="C"
                                      Then MSG_PESQ=""
                                           Switch
                                             Case VSD_I_TIPO_ITEM="D" : MSG_PESQ="APLICACAO DIRETA"
                                             Case VSD_I_TIPO_ITEM="I" : MSG_PESQ="BENS EM GERAL"
                                             Case VSD_I_TIPO_ITEM="F" : MSG_PESQ="FRETE"
                                             Case VSD_I_TIPO_ITEM="H" : MSG_PESQ="MAQUINAS E EQUIPAMEMTOS"
                                             Case VSD_I_TIPO_ITEM="G" : MSG_PESQ="MOVEIS E UTENSILIOS"
                                             Case VSD_I_TIPO_ITEM="C" : MSG_PESQ="PRESTACAO DE SERVICO" 
                                           EndSwitch   
                                           Mensagem("Este item n„o pode ser adicionado! //Item do tipo "+MSG_PESQ)
                                           End Down
                                           CopyFromArray REGISTRO
                                           QuitLoop
                                   EndIf   
                                   Moveto [Codigo do Item]
                                   Locate CODITEM2
                                   If RetVal And PARAM_DUPLICIDADE_ITEM
                                      Then End Down
                                           CopyFromArray REGISTRO
                                           MSG_BALANCO="O Item ["+CODITEM2+"] j  est  lan‡ado nesta OF !"
                                           ITEM_DUPLICADO=True
                                           QuitLoop
                                      Else End 
                                           If NITEM<>1 Then Down EndIf
                                           CopyFromArray REGISTRO
                                   EndIf
                                   If Not ITEM_DUPLICADO
                                      Then If Pega_Dados(CODITEM2)
                                              Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                                                   Registro_Item("Ler")
                                                   GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To AUX_REG_ITEM
                                                   If Retval
                                                      Then VSD_I_REFERENCIA = AUX_REG_ITEM["Referencia"]
                                                           If AUX_REG_ITEM["Tipo do Item"]="D"
                                                              Then Campo="I_Codigo_Cor_Tecido"
                                                              Else Campo="I_Quantidade"
                                                           EndIf   
                                                   EndIf    
                                              Else MSG_BALANCO="AUTOMATICA"
                                           EndIf
                                   EndIf                         
                           EndIf    
                           QuitLoop  
                         EndWhile
                         If MSG_BALANCO<>""
                            Then If MSG_BALANCO<>"AUTOMATICA" Then FastMsg(MSG_BALANCO) EndIf                                 
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf
                         Release Vars PARAM_DUPLICIDADE_ITEM,MSG_BALANCO,ITEM_DUPLICADO,REGISTRO
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" : 
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then PROCESSA_COR=False
                         ;---- Verifica se a Sigla foi inserida ----------------
                         If Type(NumVal(Rtrim(VSD_I_Codigo_Cor_Tecido)))<>"N"
                            Then VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                 For i From 1 To DynArraySize(Opcoes)
                                   If VSD_I_Sigla_Cor_Tecido = Ltrim(RTrim(SubStr(Opcoes[i],29,05)))
                                      Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                           VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                           PROCESSA_COR=True
                                           QuitLoop
                                   EndIf
                                 EndFor
                                 If Not PROCESSA_COR
                                    Then FastMsg("Sigla do Tecido n„o Localizada!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                 EndIf
                            Else PROCESSA_COR=True         
                         EndIf
                         If PROCESSA_COR
                            Then Achou_Item=True
                                 VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4)
                                 GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                                 If RetVal
                                    Then Achou_Item=True
                                         VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                         VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]                                
                                         Moveto [Codigo do Item]
                                         Ativa_Lookup()
                                         Moveto [Referencia]
                                         If SubStr(VSD_I_Codigo_Item,1,2)="03" 
                                            Then TIPO_ITEM = "S"
                                            Else If SYS_CODIGO_CLIENTE="0388" Or 
                                                    SYS_CODIGO_CLIENTE="0427" Or 
                                                    SYS_CODIGO_CLIENTE="0390" Or 
                                                    SYS_CODIGO_CLIENTE="0345" Or 
                                                    SYS_CODIGO_CLIENTE="0396" Or 
                                                    SYS_CODIGO_CLIENTE="0419" Or
                                                    SYS_CODIGO_CLIENTE="0444" Or 
                                                    SYS_CODIGO_CLIENTE="0429" 
                                                    Then TIPO_ITEM = "T"   
                                                    Else TIPO_ITEM = "P"    
                                                 EndIf   
                                         EndIf
                                         Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                         
                                         ;---- 2¦ Tentativa ao localizar o item pelo tipo do item ----------------
                                         If Not RetVal And (SYS_CODIGO_CLIENTE="0388" Or SYS_CODIGO_CLIENTE="0427" Or SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429" Or
                                                            SYS_CODIGO_CLIENTE="0444")  
                                            Then TIPO_ITEM = "P"
                                                 Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                         EndIf
                                         
                                         
                                         If RetVal
                                            Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To AUX_REG_ITEM
                                                 If Retval
                                                    Then If AUX_REG_ITEM["Tipo do Item"]<>"D"
                                                            Then Moveto [Codigo do Item]
                                                                 Locate VSD_I_Codigo_Item
                                                                 If Retval
                                                                    Then If VSD_I_REFERENCIA        = [Referencia  ] And
                                                                            TIPO_ITEM               = [Tipo do Item] And
                                                                            VSD_I_Codigo_Cor_Tecido = [Codigo da Cor_Tecido]
                                                                            Then CopyToArray REG_ITEM
                                                                                 KeyPress "ESC"
                                                                                 Pega_Dados(VSD_I_Codigo_Item)  
                                                                                 Campo="I_Quantidade"
                                                                            Else KeyPress "ESC"
                                                                                 Achou_Item=False
                                                                         EndIf          
                                                                    Else KeyPress "ESC"
                                                                         Achou_Item=False              
                                                                 EndIf
                                                            Else CopyToArray REG_ITEM
                                                                 VSD_I_Codigo_Item    = REG_ITEM["Codigo do Item"]
                                                                 VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                                                 KeyPress "ESC"
                                                                 Pega_Dados(VSD_I_Codigo_Item)  
                                                                 Campo="I_Quantidade"
                                                         EndIf
                                                    Else KeyPress "ESC"
                                                         Achou_Item=False     
                                                 EndIf
                                            Else KeyPress "ESC"
                                                 Achou_Item=False                     
                                         EndIf
                                    Else Achou_Item=False
                                 EndIf
                                 If Not Achou_Item
                                    Then FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                 EndIf        
                         EndIf   
                    Else If Not PARAM_COR_TECIDO
                            Then Campo="I_Quantidade"
                         EndIf   
                 EndIf
                 Echo Off
            Case Campo="I_Quantidade":  
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                 If RetVal
                    Then If FRACIONADO["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                            Else [Quantidade]=VSD_I_Quantidade
                                 If PARAM_ESTOQUE_COM_TERCEIRO
                                    Then Campo="I_UN_Item" 
                                    Else Campo="I_Preco_Unitario"
                                 EndIf    
                         EndIf
                 EndIf
                 Release Vars FRACIONADO
            Case Campo="I_UN_Item"       :
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Campo="I_Preco_Unitario"
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 VSD_I_Preco_Total   =VSD_I_Preco_Unitario*VSD_I_Quantidade
                 Campo="I_Flag"
            Case Campo="I_Flag":
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item" Or Campo="I_Codigo_Cor_Tecido"                  
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  Case Campo="I_Flag"                   : MSGCAMPO="Pausa para continuar"
  Case Campo="I_Codigo_Item"            : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  OtherWise                             : MSGCAMPO=""
EndSwitch

If CHAVEI=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
    Else TECLA=TECLA+"                  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  "           
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp

EndProc ;Item_Dialog()

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI_Resumo()

Echo Normal
Echo Off

CopyToArray RegItem
MSGCAMPO=""
ModoLocalizarItem("","","")
Registro_Item("Ler")

Showdialog "Dados do Item [         ]" Proc "Item_Dialog"
   Trigger "OPEN"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F5","F6","F7","F8","F9",-33,-147,"ClearArea","HOME","END","PGDN","PGUP"
     @ 00,00 height 06 width 80

   Accept @ -01,41 Width 9 "A6" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 ">" For "I_Codigo_Item"
   Accept @ 01,01 Width 15 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   
   @ 00,02 ?? LOCALIZAR_POR
   
   Label  @ 00,16 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,17 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   ;Label  @ 00,59 "UN" For "I_UN_Item"
   ;Accept @ 01,60 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 00,59 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 01,60 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido                               
   Accept @ 01,67 Width 10 "A10" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   
   Label  @ 02,00 "Quantidade" For "I_Quantidade"
   Accept @ 03,01 Width 15 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 02,16 "UN" For "I_UN_Item"
   Accept @ 03,17 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 02,22 "Custo Unit." For "I_Preco_Unitario"
   Accept @ 03,23 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,35 "Custo Total" For "I_Preco_Total"
   Accept @ 03,36 Width 13 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
   
   Accept @ 03,44 Width 3 "A1" picture "#*#" Tag "I_Flag" to VSD_I_Flag
                
EndDialog
Mouse Show

If RetVal
   Then Registro_Item("Gravar")
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                EndIf
        EndIf
        CHAVEI=9
EndIf

EndProc  ;DigitaI_Resumo()

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro, regitem
Switch
  Case Funcao_Registro="Gravar":
       [Codigo do Item             ]=VSD_I_Codigo_Item
       [Codigo_Item_Fornecedor     ]=VSD_I_Codigo_Item
       [Descricao do Item          ]=VSD_I_Descricao_Item
       [Codigo da Empresa          ]=[Tab_InvC->Codigo da Empresa]
       [Quantidade                 ]=VSD_I_Quantidade
       [Unidade                    ]=VSD_I_UN_Item
       [Custo Unitario             ]=VSD_I_Preco_Unitario
       GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM 
       If RetVal
          Then [Codigo Fornecedor  ]=REG_ITEM["Codigo Fornecedor"]
       EndIf
       UnLockRecord
       SaveTables
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia                 ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       
       VSD_I_Codigo_Cor_Tecido      =""
       VSD_I_Descricao_Cor_Tecido   =""
       If VSD_I_Codigo_Item<>""
          Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM 
               If RetVal
                  Then VSD_I_Codigo_Cor_Tecido      = REG_ITEM["Codigo da Cor_Tecido"   ]
                       VSD_I_Descricao_Cor_Tecido   = REG_ITEM["Descricao da Cor_Tecido"]
               EndIf
       EndIf            
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade                   ]
       VSD_I_Preco_Unitario         =[Custo Unitario            ]
       If VSD_I_Preco_Unitario>0
          Then VSD_I_Preco_Total = VSD_I_Preco_Unitario*VSD_I_Quantidade
          Else VSD_I_Preco_Total = BlankNum()
       EndIf
       ;VSD_I_Referencia             =[Referencia                ]
       
       If IsAssigned(LOCALIZA_CODIGO)
          Then Switch
                 Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="C¢d item Fornecedor"
                 Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Referˆncia"
                 Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="C¢digo Barras"
                 otherwise:
                      LOCALIZA_CODIGO="LOC_CODITE"   LOCALIZAR_POR="C¢digo Item"
               EndSwitch
       EndIf
       
EndSwitch

EndProc   ;  (Registro_Item)

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

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

switch
  case Campo="" : MSG_CAMPO=""
endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_TBPRECO()

;*******************************************************************************
;* Inserir Itens Automaticamente                                               *
;*******************************************************************************
Proc INSERI()
private novosok, ANT_OPCAO_FORM, seqI, ItemJaExiste, regtab_invc, nitensgravados,nitensexistem

Moveto "Tab_InvC"
copytoarray regtab_invc

LimpaRodape(0)

Do_It!
ClearAll
LimpAguarde()

VSDGTIPOEST     = ""
VSDGFAMI        = ""
VSDGGRP         = ""
VSDGMARCA       = ""
VSDGDEPART      = ""
VSDGREFERENCIA  = ""

novosok=false

ListaRegra_Funcao("ListaRegra_TGAtivado","[TG_TIPOEST]")

While True
  ShowDialog "Sele‡Æo de de Itens" Proc "SD_INSERI"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB","F2",-60
    @ 05,12   Height 17 Width 72

    Label  @ 00,00 "Tipo do Estoque"  For "TG_TIPOEST"
    Accept @ 01,04 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
    Accept @ 01,09 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

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

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

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

    Label  @ 08,00 "Departamento"  For "TG_DEPART"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_DEPART"    To VSDGDEPART
    Accept @ 09,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMDEPART" To VSDGNOMDEPART    

    Label  @ 10,00 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 11,01 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA"     To VSDGREFERENCIA
    
    Pushbutton @ 13,22 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 13,36 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal 
     Then QuitLoop 
  EndIf

  Aguarde("Aguarde, adicionando itens")
  
  {Ask} {\\Sistemas\\Estoque\\Itens} Check
  Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
  Ask_EstoqueTpItem("") 
  Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
  Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar !")
          Loop
  EndIf

  nitensgravados=0
  nitensexistem =0   
  NR = NRecords("Answer")

  View "Tab_InvI"
  CoEdit "Answer"
  Scan
     Barra(NR, RecNo())
     Aguarde("Aguarde, adicionando itens"+BARRA_STRING)

     if [Inativo     ]="S" then  Loop endif
     if [Tipo do Item]="D" then  Loop endif
     
     
     
     ItemJaExiste=False
     Moveto "Tab_InvI"
     Moveto [Numero do Lancamento]
     Locate regtab_invc["Numero do Lancamento"]
     If Not RetVal
        Then 
             SEQI=1 
        else 
             while [Numero do Lancamento]=regtab_invc["Numero do Lancamento"]
               if [Codigo do Item]=[Answer->Codigo do Item] 
                  then ItemJaExiste=true 
                       nitensexistem=nitensexistem+1 
                       quitloop 
               endif               
               SEQI=[Sequencia]
               skip
               if eot() then quitloop endif
             endwhile
             SEQI=SEQI+1
     EndIf
     if not ItemJaExiste
        then
             End Down
             [Numero do Lancamento  ] = regtab_invc["Numero do Lancamento"]
             [Sequencia             ] = SEQI
             [Codigo do Item        ] = [Answer->Codigo do Item   ]
             [Lookup_Item           ] = [Answer->Codigo do Item   ]
             [Codigo_Item_Fornecedor] = [Answer->Codigo do Item   ]
             [Unidade               ] = [Answer->Unidade Interna  ]
             [Codigo de Barras      ] = [Answer->Codigo de Barras ]
             [Codigo Fornecedor     ] = [Answer->Codigo Fornecedor]
             [Quantidade            ] = 0
             [Custo Unitario        ] = 0
             [Codigo da Empresa     ] =regtab_invc["Codigo da Empresa"]
             [Data_Inclusao         ] =regtab_invc["Data_Inclusao"    ]
             UnlockRecord

             nitensgravados=nitensgravados+1
     endif
     
     Moveto  "Answer"
  EndScan
  Do_It!
  ClearAll

  Mensagem("Processo concluido !// //"+
           Format("W06,EIC",nitensgravados)+" itens inseridos    //"+
           Format("W06,EIC",nitensexistem )+" itens j  existentes")
  
  QuitLoop
EndWhile
ClearAll

ANT_OPCAO_FORM=OPCAO_FORM
Carrega_Tabelas()
OPCAO_FORM=ANT_OPCAO_FORM

Moveto "Tab_InvC"
PickForm "1"
Moveto [Numero do Lancamento]
Locate regtab_invc["Numero do Lancamento"]

Moveto "Tab_InvI"

LimpAguarde()

return novosok
EndProc  ;Inseri()

;*******************************************************************************
;* Rotina Bloqueia Tabelas da Pasta                                            *
;*******************************************************************************
Proc BloqueiaTabelas(Pasta)
Private MSG, Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then Lock Pasta+Array_Tabelas[i] FL
          If Not RetVal
             Then MSG="O usu rio "+Upper(ErrorUser())+" esta usando uma//"
                  MSG=MSG+"rotina do sistema que atualiza o Estoque !// //"
                  MSG=MSG+Completa("- Contact -lo para liberar esta rotina;",40," ")+"//"
                  MSG=MSG+Completa("- Esta rotina ser  abortada.",40," ")+"//"
                  Mensagem(MSG)
                  Return False
          EndIf
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then UnLock Pasta+Array_Tabelas[i] FL
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasE()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="Notaec"
Array_Tabelas[02]="Notaei"
Array_Tabelas[03]="Rqcabeca"
Array_Tabelas[04]="Rqitem"
Array_Tabelas[05]="Rqmatpri"
Array_Tabelas[06]="Itens"
Array_Tabelas[07]="Sdestq"
Array_Tabelas[08]="Estqprm"
Array_Tabelas[09]="Reproces"

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasV()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="Notac"
Array_Tabelas[02]="Notai"
Array_Tabelas[03]="Faturac"
Array_Tabelas[04]="Faturai"
Array_Tabelas[05]="Faturaid"
Array_Tabelas[06]="Destin"

EndProc

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate LANCTO,SEQIT
CopyToArray RegItem
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

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

If [Situacao]="CONFIRMADO"
   Then 
        Echo Normal
        Echo Off
        OpcaoC=""

        ShowPopup " Balan‡o CONFIRMADO " CENTERED
             "~I~mprimir" : " Imprimir listagem para conferˆncia                                     ":"Imprimir",
             "~D~esfazer" : " Desfazer Requisi‡äes geradas e alterar situa‡Æo do Balan‡o para ABERTO ":"Desfazer",
              Separator,
              "~S~air   " : " Ignorar op‡äes                                                         ":"Cancela"

        EndMenu
        To Opcaoc

        echo off

        If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
           Then CHAVEI=9
                Return
        EndIf   
        
        If Opcaoc="Imprimir" 
           Then
              Switch
                Case LOCALIZAR_POR="CodFor" : MODO="Por Fornecedor" 
                OtherWise                   : MODO="Por Item"
              EndSwitch
              IMPRIME() 
          EndIf
        
        If Opcaoc="Desfazer" 
          Then If Checa_Supervisor() 
                Then Desfazer() 
               EndIf
        EndIf   
        CHAVEI=9
        Return
EndIf           

Moveto "Tab_InvI"
SetaCorRegistro("Padrao")

Moveto "Tab_InvC"
SetaCorRegistro("Padrao")
While True
  DIGITAC()
  If CHAVEC=9 Then quitloop EndIf
  SetaCorRegistro("Padrao")
   
  Moveto "Tab_InvI"
  While True
    CHAVEI()
    If CHAVEI=9 Then QuitLoop EndIf
    If PARAM_DADOS_ITEM_RESUMO="S"
       Then DIGITAI()
       Else INICIO_DIALOG=True
            While True
              DigitaI_Resumo()
              If CHAVEI=9 Then QuitLoop EndIf
              INICIO_DIALOG=True
              
              while true
                End
                ITEM = [Sequencia]
                Down
                Moveto [Sequencia]
                Seta_Sequencia(ITEM,False)
                If IsLockRecord()
                   Then Del
                      Loop
                EndIf
                quitloop
              endwhile  
              
              SetaCorRegistro("Editar")     
            EndWhile  
    EndIf 
  EndWhile
  SetaCorRegistro("Padrao")

  Moveto "Tab_InvC"
  If CHAVEF=9 Then del EndIf
  If CHAVEF=8 or CHAVEI=9 Then QuitLoop EndIf
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

EndProc ; Controla_EdicaoC

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc Carrega_Tabelas()
ClearAll
                                                      
CoEdit NoWindow "Tab_InvC"

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        Return
EndIf

PickForm "1"
Moveto "SdEstq"   SetHighLight Current Record 51 Field 51
Moveto "EstqPrm"  SetHighLight Current Record 51 Field 51
Moveto "Cotacao"  SetHighLight Current Record 51 Field 51

Moveto "Tab_InvC"
PickForm "F"
OPCAO_FORM="F"

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"

SYS_VALOR()

MSG=""
COR_MENSAGEM="PRETO"

{Ask} {Tab_InvC} 
Moveto [Numero do Lancamento] Typein "Calc Count as Qtde"
Moveto [Data_Inclusao       ] Typein "<(today-547)"
Moveto [Situacao            ] TypeIn "CONFIRMADO"
Do_it!
if not IsEmpty("Answer")
   then If [Qtde]>0 
           Then MSG=MSG+"Existe(m) "+strval([Qtde])+" Balan‡o(s) lan‡ado(s) !   // //"
                MSG=MSG+"Para melhor seguran‡a e desempenho do Sistema,//"
                MSG=MSG+"recomendamos que fa‡a o fechamento mensal  das//"
                MSG=MSG+"mais antigas. Recomendamos manter apenas 1 ano//"
                MSG=MSG+"em aberto!                                    // //"
                MSG=MSG+"Verificar com o supervisor fechamento mensal !"
        EndIf        
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif
Release Vars COR_MENSAGEM,MSG 

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA   ="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
LimpAguarde()

;---- M‚todo p/ Localizar o Item -----------------------------------------------
If IsFile(PrivDir()+"TAB_INVC.ini")
   Then LeiaINI(PrivDir()+"TAB_INVC.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

;---- Digita‡Æo do Item --------------------------------------------------------
;If IsFile(PrivDir()+"TAB_INVC.ejf")
;   Then LeiaINI(PrivDir()+"TAB_INVC.ejf","PARAM_DADOS_ITEM_RESUMO.S.null")
;   Else If SYS_CODIGO_CLIENTE="0388" Or 
;           SYS_CODIGO_CLIENTE="0427" Or 
;           SYS_CODIGO_CLIENTE="0390" Or 
;           SYS_CODIGO_CLIENTE="0345" Or 
;           SYS_CODIGO_CLIENTE="0396" Or
;           SYS_CODIGO_CLIENTE="0419" Or
;           SYS_CODIGO_CLIENTE="0444" Or
;           SYS_CODIGO_CLIENTE="0429"
;           Then PARAM_DADOS_ITEM_RESUMO="S"
;           Else PARAM_DADOS_ITEM_RESUMO="N"
;        EndIf  
;EndIf

PARAM_DADOS_ITEM_RESUMO="N"

If SYS_CODIGO_CLIENTE="0388" Or 
   SYS_CODIGO_CLIENTE="0427" Or 
   SYS_CODIGO_CLIENTE="0390" Or 
   SYS_CODIGO_CLIENTE="0345" Or 
   SYS_CODIGO_CLIENTE="0396" Or
   SYS_CODIGO_CLIENTE="0419" Or
   SYS_CODIGO_CLIENTE="0444" Or
   SYS_CODIGO_CLIENTE="0429"
   Then PARAM_COR_TECIDO = True
   Else PARAM_COR_TECIDO = False      
EndIf   

If SYS_CODIGO_CLIENTE="0353"
   Then PARAM_ESTOQUE_COM_TERCEIRO = True
   Else PARAM_ESTOQUE_COM_TERCEIRO = False
EndIf    
      
CHAVEC            = ""
CHAVEF            = ""
CHAVEI            = ""
LOCALIZA_ITEM     = False
QUANTTOTAL        = BlankNum()
QUANTITENS        = BlankNum()
VRLTOTAL          = BlankNum()

Carrega_Tabelas()
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=8  
    Then Carrega_Tabelas()
         CHAVEC=5 
  EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
