;** 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()

;*******************************************************************************
;*  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 
                           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        
                              
          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()
  if field()="Data_Inclusao" then MSGCAMPO="Data Referente ao balan‡o" endif
  if field()="Tipo_Custo"    then MSGCAMPO="Tipo de custo a utilizar"  endif
   
  If Field()="Codigo da Empresa"     Or
     Field()="Tipo_Custo"   
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf
   
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

  Switch
  Case RetVal="F1":
       If Field()="Codigo da Empresa"         
          Then Seleciona_Opcoes("Empresas","CR")
       Endif
       if Field()="Tipo_Custo"       
          then 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",
                 separator,
                 "~C~ancelar      " : " Cancelar a Opera‡„o                       " : "CANCELAR"
               EndMenu
               To MenuVar
               Echo Off
               If MenuVar="CANCELAR" or MenuVar="Esc"
                  Then Loop
               EndIf
               []=MenuVar 
        Endif         
  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]
       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=[] 

            CHAVEF=0
            QuitLoop     
       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",
                        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 custo "
                              Switch
                                 Case AUX_CUSTO="M" : MSG=MSG+"Medio para o custo "         
                                 Case AUX_CUSTO="A" : MSG=MSG+"Atual para o custo "
                                 Case AUX_CUSTO="F" : MSG=MSG+"da Formula para o custo "
                              EndSwitch 
                         Else MSG=("Deseja atualizar o custo ")
                      EndIf
                  
                      Switch
                        Case MenuVar="M" : MSG=MSG+"Medio ?"         
                        Case MenuVar="A" : MSG=MSG+"Atual ?" 
                        Case MenuVar="F" : MSG=MSG+"da Formula ?" 
                      EndSwitch
                      
                      ConfGeral(MSG)
                      If OK="S"
                         Then Moveto "Tab_invc"
                              [Tipo_Custo]=MenuVar 
                              Moveto "Tab_InvI"
                              Del    
                                     
                             If Not IsAssigned(MES) Or Not IsAssigned(ANO)
                                Then MES=ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
                                     ANO=ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)
                             EndIf
                    
                             Scan
                               CUSTO=0
                               If [Tab_InvC->Tipo_Custo]="F" 
                                  Then GetRecord "\\Sistemas\\Producao\\FormulaC" [Tab_InvI->Codigo do Item],"","" To DynArray Teste
                                       If RetVal  
                                          Then CUSTO=NDecimaL(Teste["Custo Unitario"],3)
                                       EndIf
                                  Else Moveto "SdEstq"
                                       Moveto [Codigo da Empresa]
                                       Locate [Tab_InvC->Codigo da Empresa],[Tab_InvI->Codigo do Item],ANO,MES
                                       If RetVal
                                          Then 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  
                                       EndIf
                                       Moveto "Tab_InvI"     
                               EndIf
                               [Custo Unitario]=Round(CUSTO,3)
                             EndScan
                             Home
                             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 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"]
                       MES = ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
                       ANO = ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)

                       If [Tab_InvC->Tipo_Custo]="M" or [Tab_InvC->Tipo_Custo]="A" 
                          Then 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                        
                               
                               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
                          ELse GetRecord "\\Sistemas\\Producao\\FormulaC" [Codigo do Item],"","" To DynArray Teste
                               If RetVal  
                                  Then CUSTO=NDecimaL(Teste["Custo Unitario"],3)
                                  Else CUSTO=0
                               EndIf
                       EndIf 
                       Moveto "Tab_InvI" 
                       [Custo Unitario]=Round(CUSTO,3)
                       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
          [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 
                  
          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 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 "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                                                                      *
;*******************************************************************************
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_ITEM"    Or
             Campo="TG_FAMI"    Or
             Campo="TG_GRP"     Or
             Campo="TG_MARCA"
             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_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
           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"
                                              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"     : 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_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
          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_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      = ""
VSDGDTREF     = BlankDate()
EXECUTA       = False
LOCALIZA_ITEM = 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 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 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 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 MES = ALINHM(StrVal(Month([Tab_InvC->Data_Inclusao])),2)
        ANO = ALINHM(StrVal(Year([Tab_InvC->Data_Inclusao])),4)

        If [Tab_InvC->Tipo_Custo]="M" or [Tab_InvC->Tipo_Custo]="A" 
           Then Moveto "SdEstq"
                Moveto [Codigo da Empresa]
    
                Locate [Tab_InvC->Codigo da Empresa],AUX_ITEM, ANO, MES
                If Not RetVal
                  Then If Not Cria_Ficha([Tab_InvC->Codigo da Empresa],AUX_ITEM,False)
                         Then Moveto "Tab_InvI"
                              Return False
                      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
           ELse GetRecord "\\Sistemas\\Producao\\FormulaC" [Codigo do Item],"","" To DynArray Teste
                If RetVal  
                   Then CUSTO=NDecimaL(Teste["Custo Unitario"],3)
                   Else CUSTO=0
                EndIf
        EndIf 
        Moveto "Tab_InvI"              
        VSD_I_Preco_Unitario=Round(CUSTO,3)
        [Custo Unitario]=Round(CUSTO,3)
        Moveto [Quantidade]
        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_UN_Item"                  Or
                 Campo="I_Preco_Unitario"           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
                                 Campo="I_Preco_Unitario" 
                         EndIf
                 EndIf
                 Release Vars FRACIONADO
            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"
  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 "Custo Unit." For "I_Preco_Unitario"
	 Accept @ 03,17 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,29 "Custo Total" For "I_Preco_Total"
   Accept @ 03,30 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
       [Custo Unitario             ]=VSD_I_Preco_Unitario
       GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM 
       If RetVal
          Then [Unidade                    ]=REG_ITEM["Unidade Fiscal"]
               [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"] =  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

While True
  ShowDialog "Sele‡Æo de de Itens" Proc "SD_INSERI"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB"
    @ 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_Estoque("Tipo do Item","Opcao") 
  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 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 "Tab_InvC"
PickForm "F"
OPCAO_FORM="F"

EndProc

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