;** Tab_InvC********************************************************************
;*  Digitacao do Balan‡o                                                       *
;*******************************************************************************
;;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") 

;*******************************************************************************
;*  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       ]
    
  If OPCAO_FORM="F"
     Then Down PickForm "F"
     Else PgDn PickForm "1"
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  TECLA=""
  While True
        QUANTTOTAL=BlankNum()
        QUANTITENS=BlankNum()
        VRLTOTAL  =BlankNum()
        MSGCAMPO=Field()
  
        AguardaTeclasPadrao()      
        
        If RetVal=-33 
          Then Echo Normal
               Echo Off
               ShowPopup " Fun‡”es " CENTERED
                "~F8~ Acerto - Impress„o p/ Conferˆncia " : " Somente os itens com diferen‡a " : "F8",
                "~F9~ Acerto - Finalizar Balan‡o        " : " Gerar Requisi‡„o de Acerto     " : "F9",
                "~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="F1":
               If Field()="Codigo da Empresa" 
                  Then CONSULTAF1()
               Endif
          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       ] 

                   Switch
                     Case EDITAR="S":
                          PickForm "1"
                          Echo Normal
                          Echo Off
                          CHAVEC=0
                          Controla_EdicaoC()
                     Case EXCLUIR="S":
                          PickForm "1"
                          Echo Normal
                          Echo Off
                          If 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="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 
                           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\\")                                    
                             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) 
                     EndIf
                   EndScan
                   Do_It!
               EndIf
               CHAVEI=9
               Return

          Case Retval="ESC":
               If Field()="Numero do Lancamento"
                  Then CHAVEC=9
                       Del
                       Return
               EndIf        
               If Field()="Codigo da Empresa"
                  Then If QuerDesfazer("")
                         Then del
                              PickForm "F"
                              CHAVEC=9
                              QuitLoop
                       EndIf               
               EndIf 
               If Field()="Data_Inclusao"
                  Then End Down  
                       Moveto [Codigo da Empresa]
               EndIf
               
          Case Retval="ENTER":
               Switch 
                 Case Field()="Numero do Lancamento": 
                       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 Echo Normal
                               Echo Off
                        EndIf
                        If OPCAO_FORM="F"
                          Then PickForm "1"
                        EndIf
                        Moveto [Codigo da Empresa]
                        SetaCorRegistro("Editando")
                
                 Case Field()="Codigo da Empresa":
                        If IsBlank([Codigo da Empresa])
                          Then Loop
                        EndIf
                        EMPRESA=[]
                        Moveto [Data_Inclusao]
                 
                 Case Field()="Data_Inclusao":
                        If IsBlank([Data_Inclusao]) 
                          Then [Data_Inclusao]=Today()
                        EndIf
                        DATA=[] 
                        Return
                 QuitLoop
               EndSwitch               
        EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveC)

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

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        
        Switch
          Case LOCALIZAR_POR="CodFor" : MODO="Por Fornecedor" 
          OtherWise                   : MODO="Por Item"
        EndSwitch  
        
        Prompt " Esc=Retornar  F7=Paginar  Alt+F=Fun‡”es  PgDn=Finalizar  Loc="+MODO

        Wait Field
             Until "ESC","ENTER","F1","F2","F4","F5","F6","F7","F9","HOME","UP","PGUP","PGDN",-33

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                  "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras             " : "F9",
                  "F4  ~A~ltera Localiza‡„o  " : " Altera forma de localizar o item           " : "F4", 
                  "F5  ~O~bserva‡„o          " : " Observa‡Æo                                 " : "F5",
                  "F6  ~I~mprimir            " : " Imprimir                                   " : "F6",
                  "~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 = "F4" :
             ShowPopup " Alterar Forma de Localizar o Item " CENTERED
               "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
               "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
               Separator,
               "~C~ancelar                 " : " Cancelar a Opera‡„o                       " : "CANCELAR"
             EndMenu
             To MenuVar
             Echo Off

             If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Return
             EndIf                                         
             RetVal=MenuVar
             LOCALIZA_CODIGO = MenuVar
             
             Switch 
               Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
               Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor"   
             EndSwitch                
        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="ESC":
             Del
             Moveto [Sequencia] 
             If RecordStatus("New")=True
                Then CHAVEF=9
                Else CHAVEF=8 
             EndIf
             CHAVEI=9
             Return
       Case Retval="F6":
             del 
             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
                       DIGITAI()
                  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 para Digitar Item                                                    *
;*******************************************************************************
Proc DIGITAI()


If CHAVEI=0
   Then Moveto [Quantidade            ]
   Else Moveto [Codigo_Item_Fornecedor]
EndIf
                     
While True
   
    MSGCAMPO=Field()
    TECLA=" Esc=Retornar  "
    
    If CHAVEI=0
       Then TECLA=TECLA+"Del=Excluir  "
    EndIf

    If Field()="Codigo_Item_Fornecedor    "
       Then TECLA=TECLA+"F1=Tabelas  "
    Endif

    Prompt TECLA
    SetaCorRegistro("Editando")
    Wait Field
         Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35"
    
    Switch  
    Case Retval="F1" : 
         If Field()="Codigo_Item_Fornecedor"
              Then Moveto [Lookup_Item]
                   CONSULTAF1()
                   [Codigo do Item]=[] 
                   CODIGO=[Codigo do Item]
                   If LOCALIZAR_POR="CodFor"
                      Then Ativa_Lookup()
                           Moveto [Codigo do Item]
                           Locate CODIGO
                           FORNEC=[Codigo Fornecedor] 
                           KeyPress "ESC"
                           [Codigo do Item        ]=CODIGO
                           [Codigo Fornecedor     ]=FORNEC
                           [Codigo_Item_Fornecedor]=FORNEC
                      Else [Codigo do Item        ]=[] 
                           [Codigo_Item_Fornecedor]=[]
                   EndIf                   
                   []=""       
                   Moveto [Codigo_Item_Fornecedor]       
           EndIf 
    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
                Switch
                  Case LOCALIZAR_POR="CodFor" : COD_PESQ = []
                                                CMP_PESQ = "Codigo Fornecedor"
                                                MSG_PESQ = "C¢digo do Fornecedor Inv lido !"
                  OtherWise                   : COD_PESQ = AlinhM([],10) 
                                                CMP_PESQ = "Codigo do Item"
                                                MSG_PESQ = "C¢digo do Item Inv lido !" 
                EndSwitch
                Moveto [Lookup_Item]
                Ativa_Lookup()
                Moveto Field CMP_PESQ
                Locate COD_PESQ
                If Not RetVal
                  Then Mensagem(MSG_PESQ)
                       KeyPress "ESC"
                       Moveto [Codigo_Item_Fornecedor]
                       Loop
                EndIf
                FORNEC =[Codigo Fornecedor]
                CODIGO =[Codigo do Item   ]
                INATIVO=[Inativo          ]
                UNIDADE=[Unidade Interna  ] 
                KeyPress "ESC"
                Moveto [Codigo_Item_Fornecedor]
                
                Switch
                  Case LOCALIZAR_POR="CodFor" : COD_ITEM = FORNEC 
                  OtherWise                   : COD_ITEM = CODIGO
                EndSwitch
                
                [Codigo_Item_Fornecedor] = COD_ITEM
                [Codigo do Item        ] = CODIGO
                [Lookup_Item           ] = CODIGO
                [Codigo Fornecedor     ] = FORNEC
                If INATIVO="S"
                  Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                  Else [Unidade]=UNIDADE
                       MES=ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
                       ANO=ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)
                       
                       Moveto "SdEstq"
                       Moveto [Codigo da Empresa]
            
                       Locate [Tab_InvC->Codigo da Empresa], 
                              [Tab_InvI->Codigo do Item], ANO, MES
                       If Not RetVal
                         Then If Not Cria_Ficha([Tab_InvC->Codigo da Empresa],[Tab_InvI->Codigo do Item],False)
                                Then Moveto "Tab_InvI"
                                     Temp=False
                                     Return TEMP
                              EndIf
                       EndIf
                       CUSTOMEDIO=NDECIMAL([Custo Total Atual]/[Saldo Atual],3)
                       If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
                         Then CUSTOMEDIO=NDecimal([Ultimo Custo Atual],3)
                       
                       EndIf  
            
                       Moveto "Tab_InvI"
                       [Custo Unitario]=Round(CUSTOMEDIO,3)
                       Moveto [Quantidade]
                EndIf
                Echo Off
           Case Field()="Quantidade":
                CHAVEF=1
                If IsBlank ([])
                    Then Loop
                    Else If [Quantidade]<=0
                            Then Mensagem("Quantidade Inv ida! //Valor deve ser maior que zero!")
                                 [Quantidade]=BlankNum()
                                 Loop
                            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()

While True

  End
  ITEM = [Sequencia  ]
  Down
  Moveto [Sequencia]

  Seta_Sequencia(ITEM,False)

  If Not Ler_CDBarras(22,00)
     Then Del
          Return False 
     Else If Dados_QTD<=0
             Then Mensagem("Quantidade tem que ser > ou = 1 !")
                  Del
                  Loop
          EndIf
  EndIf   
   
  ITOK=True 

  If Len(Dados_Item)>0
     Then CODIT=Dados_Item

         While True
          ITOk =True
          
          Moveto [Lookup_Item]
          Ativa_Lookup()
          If Len(CODIT)<=10
             Then Moveto [Codigo do Item]
                  Locate ALINHM(CODIT,10)
             Else Moveto [Codigo de Barras]
                  Locate IndexOrder by "cod_barras" CODIT
          EndIf
          If RetVal
             Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                  VSD_I_UN            =[Unidade Interna  ]
                  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"
          Echo Off
          Del
          If Not ITOK
             Then QuitLoop
          EndIf

          Moveto [Codigo do Item]
          Locate VSD_I_Codigo_Item
          If RetVal
             Then [Quantidade]= [Quantidade] + Dados_QTD

                   QUANTTOTAL = QUANTTOTAL+Dados_QTD

             Else 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
                  [Lookup_Item           ]=VSD_I_Codigo_Item
                  [Codigo do Item        ]=VSD_I_Codigo_Item
                  [Codigo_Item_Fornecedor]=VSD_I_Codigo_Item
                  [Quantidade            ]=Dados_QTD
                  [Unidade               ]=VSD_I_UN
                    
                  MES=ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
                  ANO=ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)
                 
                  Moveto "SdEstq"
                  Moveto [Codigo da Empresa]
      
                  Locate [Tab_InvC->Codigo da Empresa], 
                         [Tab_InvI->Codigo do Item], ANO, MES
                  If Not RetVal
                    Then If Not Cria_Ficha([Tab_InvC->Codigo da Empresa],[Tab_InvI->Codigo do Item],False)
                            Then Moveto "Tab_InvI"
                                Temp=False
                                Return TEMP
                         EndIf
                  EndIf
                  CUSTOMEDIO=NDECIMAL([Custo Total Atual]/[Saldo Atual],3)
                  If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
                    Then CUSTOMEDIO=NDecimal([Ultimo Custo Atual],3)
                  EndIf  
     
                  Moveto "Tab_InvI"
                  [Custo Unitario]=Round(CUSTOMEDIO,3)
                  
                  QUANTTOTAL = QUANTTOTAL +[Quantidade    ] 
                  QUANTITENS = QUANTITENS +1 
                  
          EndIf       
          UnlockRecord
          Moveto "Tab_InvI"

          QuitLoop
         EndWhile
  EndIf
EndWhile

EndProc ;Ler_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    ",
           "~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 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
Moveto [Sequencia ] Check
Moveto [Quantidade] Check TypeIn "Calc Sum as Quantidade"
Do_It!
Clearall

If Opcaoc="Alfabetica"
  Then Sort "Answer" on "Descricao do Item"
  Else Sort "Answer" on "Codigo do Item"
EndIf

CopyReport "Tab_InvI" "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 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_InvC"
SetaCorRegistro("Padrao")
While True
  Moveto "Tab_InvI"
  While True
    CHAVEI()
    If CHAVEI=9 Then QuitLoop EndIf
    DIGITAI() 
  EndWhile
  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                                                                      *
;*******************************************************************************
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"] = -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_FAMI"    Or
             Campo="TG_GRP"     Or
             Campo="TG_MARCA"
             Then Dialog_F1()
          EndIf   

     Case Evento["KeyCode"] =  27: 
          Temp=False
          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_COMPLEMENTO"   : Campo="TG_MARCA" 
            Case Campo="TG_OPRELCODALF"   : Campo="TG_COMPLEMENTO"
            Case Campo="TG_OPOF"          : Campo="TG_OPRELCODALF"
            Case Campo="TG_OPITEM"        : Campo="TG_OPOF"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     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 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"
                                      Campo="TG_FAMI"
                                 Else If VSDGCONSISTD="2"
                                        Then VSDGDESCCONSD="CONSISTIR DIFEREN€AS"
                                        Else VSDGDESCCONSD="CONSISTIR TODOS"
                                             VSDGCONSISTD="1"
                                      EndIf
                                      Campo="TG_FAMI"
                              EndIf             
                    Case Campo="TG_FAMI"        : Campo="TG_GRP"
                    Case Campo="TG_GRP"         : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo="TG_COMPLEMENTO"
                    Case Campo="TG_COMPLEMENTO" : Campo="TG_OPRELCODALF"
                         VSD_COMPLEMENTO=ControlValue("TG_COMPLEMENTO")
                         Switch
                           Case VSD_COMPLEMENTO="C": VSD_DESCCOMP="COM COMPLEMENTO"
                           OtherWise:
                                VSD_COMPLEMENTO="S"
                                VSD_DESCCOMP="SEM COMPLEMENTO"
                         EndSwitch
                           
                    Case Campo="TG_OPRELCODALF" : 
                         VSD_OPRELCODALF=ControlValue("TG_OPRELCODALF")
                         If IsBlank(VSD_OPRELCODALF) 
                            Then VSD_OPRELCODALF="1"
                                 VSD_NOMOPRELCODALF="C¢digo"
                                 Campo="TG_OPOF"
                            Else If VSD_OPRELCODALF="2"
                                   Then VSD_NOMOPRELCODALF="Alfab‚tica"
                                   Else VSD_NOMOPRELCODALF="C¢digo"
                                        VSD_OPRELCODALF="1"
                                 EndIf
                                 Campo="TG_OPOF"
                         EndIf            
                    Case Campo="TG_OPOF"        : Campo = "TG_OPITEM"
                         VSD_OPOF=ControlValue("TG_OPOF")
                         Switch
                           Case VSD_OPOF="N": VSD_NOMOPOF="NAO"
                           OtherWise:
                                VSD_OPOF="S"  VSD_NOMOPOF="SIM"
                         EndSwitch
                    Case Campo="TG_OPITEM"        : Campo = "YES"
                  EndSwitch
          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_COMPLEMENTO":
       MSG_CAMPO="C=Com Complemento, S=Sem Complemento"
  Case Campo="TG_OPOF":
       MSG_CAMPO="Incluir Ordem de Faturamento n„o emitida (Sim/N„o)"          
  Case Campo="TG_OPITEM":
       MSG_CAMPO="Selecione uma ou mais op‡oes se desejar !"
       TECLA    ="=Mover  Barra de espa‡o=Marca/Desmarca  "
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   = ""
VSDGDTREF     = BlankDate()
EXECUTA       = False

Array VSDGOPITEM[7]

While True

  Showdialog "Dados do Balan‡o" Proc "Acerto_Dialog"
     Trigger "OPEN","ARRIVE"
     Key "F1","ENTER","ESC","TAB","ReverseTab"
     @ 05,12 height 21 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  @ 00,47 "Tipo do Balan‡o" For "TG_ZERAEST"
      Accept @ 01,48 Width 15 "A10"  Picture "COMPLETO,PARCIAL" Tag "TG_ZERAEST" To VSDGZERAEST
      
      Label  @ 02,00 "Consistir Diferen‡as"  For "TG_CONSISTD"
      Accept @ 03,01 Width 07 "A1"  Picture "1,2" Tag "TG_CONSISTD" To VSDGCONSISTD         
      Accept @ 03,09 Width 23 "A20"  Tag "TG_DESCCONSD" To VSDGDESCCONSD 
      
      Label  @ 04,00 "Familia"  For "TG_FAMI"
      Accept @ 05,01 Width 07 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
      Accept @ 05,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI
  
      Label  @ 06,00 "Grupo"  For "TG_GRP"
      Accept @ 07,01 Width 07 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
      Accept @ 07,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP
  
      Label  @ 08,00 "Marca"  For "TG_MARCA"
      Accept @ 09,01 Width 07 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
      Accept @ 09,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA
      
      Label  @ 04,32 "Op‡„o de Complemento" For "TG_COMPLEMENTO"
      Accept @ 05,33 Width 04 "A1"  Picture "S,C" Tag "TG_COMPLEMENTO" To VSD_COMPLEMENTO
      Accept @ 05,38 Width 23 "A25"  Picture "!*!" Tag "TG_DESCCOMP" To VSD_DESCCOMP
      
      Label  @ 06,32 "Op‡„o de Ordem" For "TG_OPRELCODALF"
      Accept @ 07,33 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSD_OPRELCODALF
      Accept @ 07,38 Width 23 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSD_NOMOPRELCODALF
  
      Label  @ 08,32 "Op‡„o de Ordem Fatura" For "TG_OPOF"
      Accept @ 09,33 Width 04 "A1"  Picture "S,N" Tag "TG_OPOF" To VSD_OPOF
      Accept @ 09,38 Width 23 "A3"  Picture "!*!" Tag "TG_NOMOPOF" To VSD_NOMOPOF
   
      Frame Single From 11,00 to 16,60
      Label  @ 11,01 "Op‡”es de item " For "TG_OPITEM"
      CheckBoxes @12,01 Height 4 Width 55 Tag "TG_OPITEM"
      "T - Produto de terceiros" to VSDGOPITEM[1],
      "P - Produto acabado     " to VSDGOPITEM[2],
      "S - Semi acabado        " to VSDGOPITEM[3],
      "M - Materia prima       " to VSDGOPITEM[4],
      "A - Aviamento           " to VSDGOPITEM[5],
      "E - Embalagem           " to VSDGOPITEM[6],
      "O - Outros              " to VSDGOPITEM[7] 
  
      Pushbutton @ 17,18 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
      Pushbutton @ 17,32 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
      
  Enddialog
  Mouse Show
  
  If RetVal 
     Then
          VSDGTIPOEST     = ""      ; tipo de estoque
          For wwjit From 1 to 7
            If VSDGOPITEM[wwjit]
               Then s=""
                    Switch
                      Case wwjit=1 : s="T" 
                      Case wwjit=2 : s="P" 
                      Case wwjit=3 : s="S" 
                      Case wwjit=4 : s="M" 
                      Case wwjit=5 : s="A" 
                      Case wwjit=6 : s="E" 
                      Case wwjit=7 : s="O" 
                    EndSwitch
                    If Not IsBlank(s)
                       Then If IsBlank(VSDGTIPOEST)
                               Then VSDGTIPOEST=s
                               Else VSDGTIPOEST=VSDGTIPOEST+" Or "+s
                            EndIf   
                    EndIf   
            EndIf   
          EndFor

          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 !")   
            Case IsBlank(VSD_OPOF)        : EXECUTA=False  Mensagem("Informe op‡Æo da ordem de faturamento!")   
            ;Case IsBlank(VSDGTIPOEST)     : EXECUTA=False  Mensagem("Informe o tipo de item !")
          EndSwitch

          If Not EXECUTA Then Loop EndIf
  EndIf
  
  QuitLoop
EndWhile

Return EXECUTA
EndProc  ;  (SD_Acerto)

;*******************************************************************************
;* 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"
Array_Tabelas[10]="Pecassd"

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 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 "Tab_InvC"
PickForm "F"
OPCAO_FORM="F"

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
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()

LOCALIZAR_POR="CodItem"

CHAVEC=""
CHAVEF=""
CHAVEI=""
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
