;** SdEstq *********************************************************************
;*  Saldos de Itens  - Estoque                                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 24/01/2000 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/02/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 17/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Criar_Ficha Inativo
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ano Referencia"
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas (Fun‡oes Pr¢prias) 
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 02/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes de controle      
;Ultima Alteracao: 01/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando") 

;*******************************************************************************
;* Rotina para Selecionar Empresa                                              *
;*******************************************************************************
Proc Selecionar_Empresa()
Monta_Opcoes("Empresas","")
While True
  Moveto [Codigo da Empresa]
  TECLA="F1=Consulta  =Empresañ"
  
  MSGTELA="Informe a empresa !"
  
  SetaCorRegistro("Editando")
  AguardaTeclasPadrao()
                                                                    
  tmpretval=retval

  If Retval="F1"
     Then If Seleciona_Opcoes("Empresas","")
             Then [Nome Fantasia Empresa]=Registro_F1["Nome Fantasia Empresa"]
                  RetVal="ENTER"
          EndIf
  EndIf

 Switch
  Case RetVal=-94 : MsgTeclasPadrao()
  Case Retval="F5":
       Monta_Titulos()
  Case Retval="ESC":
       Return False
  Case Retval="UP"   Or
       Retval="HOME" Or
       Retval=-72    Or
       Retval=-75     :
       tmpretval=retval
       Moveto [Lookup_Empresa]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo da Empresa]) Or tmpRetval="HOME"
          Then HOME
          Else Moveto [Codigo da Empresa]
               Locate [SdMaster->Codigo da Empresa]
               Skip -1
               If BOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo da Empresa]=[Lookup_Empresa]
       Resynckey
  Case Retval="DOWN" Or
       Retval="END"  Or 
       Retval=-80    Or
       Retval=-77     :
       Moveto [Lookup_Empresa]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo da Empresa]) Or tmpRetval="END"
          Then End
          Else Moveto [Codigo da Empresa]
               Locate [SdMaster->Codigo da Empresa]
               Skip
               If EOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo da Empresa]=[Lookup_Empresa]
       Resynckey
  Case Retval="ENTER":
       If IsBlank([]) Then Loop EndIf
       []=ALINH()
       EMPRESA=[Codigo da Empresa]

       Moveto [Lookup_Empresa]
       Ativa_Lookup()
       Moveto [Codigo da Empresa]
       Locate EMPRESA
       If RetVal
          Then CopyToArray Registro_Empresas
               KeyPress "F2"
               [Nome Fantasia Empresa]=Registro_Empresas["Nome Fantasia Empresa"]
               NOMFANT=[Nome Fantasia Empresa]
               Return True
          Else KeyPress "ESC"
               Mensagem("Empresa ["+EMPRESA+"] n„o cadastrada !")
               [Codigo da Empresa    ]=""
               [Nome Fantasia Empresa]=""
       EndIf
  EndSwitch
EndWhile
EndProc  ; (Selecionar_Empresa)

;*******************************************************************************
;* Rotina para Selecionar Item                                                *
;*******************************************************************************
Proc Selecionar_Item()
Resynckey
While True
  Moveto [Codigo do Item]

  TECLA="F1=Consulta  =Itemñ  F4=Criar Ficha"
   
  AguardaTeclasPadrao()

  tmpretval=retval

  If Retval="F1"
     Then Moveto [Lookup_Item]
          If ConsultaF1()
             Then [Codigo do Item]=[Lookup_Item]
                  RetVal="ENTER"
          EndIf
          Moveto [Codigo do Item]
  EndIf

  Switch
  Case RetVal=-94 : MsgTeclasPadrao()  
  Case Retval="F4":
       [Codigo do Item   ]=""
       [Descricao do Item]=""
       [Lookup_Item      ]=""
       Resynckey
       Echo Normal
       Echo Off
       Criar_Ficha()
  Case Retval="F5":
       Monta_Titulos()
  Case Retval="ESC":
       Return False
  Case Retval="UP"   Or
       Retval="HOME" Or
       Retval=-72    Or
       Retval=-75     :
       Moveto [Lookup_Item]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo do Item]) Or tmpRetval="HOME"
          Then HOME
          Else Moveto [Codigo do Item]
               Locate [SdMaster->Codigo do Item]
               Skip -1
               If BOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo do Item]=[Lookup_Item]
       Resynckey
  Case Retval="DOWN" Or
       Retval="END"  Or 
       Retval=-80    Or
       Retval=-77     :
       Moveto [Lookup_Item]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo do Item]) Or tmpRetval="END"
          Then End
          Else Moveto [Codigo do Item]
               Locate [SdMaster->Codigo do Item]
               Skip
               If EOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo do Item]=[Lookup_Item]
       Resynckey
  Case Retval="ENTER":
       If IsBlank([]) Then Loop EndIf
       []=ALINH()
       ITEM  =[Codigo do ITEM  ]

       Moveto [Lookup_Item  ]
       Ativa_Lookup()
       Moveto [Codigo do Item     ]
       Locate ITEM
       If RetVal
          Then CopyToArray Registro_ITEM
               KeyPress "F2"
               Return True
          Else KeyPress "ESC"

               Moveto "SdEstq"
               If RecordStatus("New")
                  Then Mensagem("Item ["+ITEM+"] n„o cadastrado !")
                       Moveto "SdMaster"
                       [Codigo do Item      ]=""
                       [Descricao do Item   ]=""
                       [Unidade Interna     ]=""
                       [Lookup_Item         ]=""
                  Else MSG="Item ["+ITEM+"] n„o cadastrado !//"
                       MSG=MSG+"Este item esta com movimenta‡Æo !// //"
                       MSG=MSG+"Se item foi excluido, excluir informa‡„o //"
                       MSG=MSG+"a partir do Mˆs que n„o ser  mais controlado ! // //"
                       MSG=MSG+"Informar no Controle a Data de Inatividade !"
                       MENSAGEM(MSG)
                       Moveto "SdMaster"
                       Return True
               EndIf
       EndIf
  EndSwitch
EndWhile
EndProc  ; (Selecionar_Item)

;*******************************************************************************
;* Rotina para Criar Ficha Financeira                                          *
;*******************************************************************************
Proc Criar_Ficha()
REF=1
INICIO_DIALOG=TRUE
CHAVEI=1
Opcao_ver=False

Showdialog "Mes Referente" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea",
    "HOME","END","PGDN","PGUP","F9"
     @ 09,19 height 10 width 45
     @ 00,00 ?? "Cria Ficha de Estoque para todos os itens"
     @ 02,01 ?? "EMPRESA : "+EMPRESA +"  "+NOMFANT
     @ 03,01 ?? "ANO     : "+ANOREF
     Label  @ 04,00 "MES     :" For "I_Mes_Referencia"
     Accept @ 04,11 Width 05 "A2" picture "#*#" Tag "I_Mes_Referencia" to VSD_I_Mes_Referencia
    Pushbutton @ 06,11 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 06,21 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

EndDialog
If Not Retval
   Then Return
EndIf
Do_It!

AGUARDE("Criando fichas de estoque")
{Ask} {TpItem}
Moveto [Tipo do Item     ] Example "tipi"
Moveto [Controla Estoque ] TypeIn "SIM"
{Ask} {Itens} Check
Moveto [Tipo do Item     ] Example "tipi"
Moveto [Inativo          ] TypeIn "Not S"
Do_It!
ClearAll

NR = NRecords("Answer")

View "SdEstq"
Coedit "Answer"
Scan
 Barra(NR, RecNo())
 Aguarde("Aguarde, criando fichas "+EMPRESA+"-"+VSD_I_Mes_Referencia+"/"+ANOREF+" "+BARRA_STRING)

 Moveto "SdEstq"
 Locate EMPRESA,[Answer->Codigo do Item],ANOREF,VSD_I_Mes_Referencia
 If Not Retval
    Then End Down
         [Codigo da Empresa] = EMPRESA
         [Codigo do Item   ] = [Answer->Codigo do Item]
         [Ano Referencia   ] = ANOREF
         [Mes Referencia   ] = VSD_I_Mes_Referencia
         UnLockRecord
 EndIf
 Moveto "Answer"
EndScan
Do_it!

Coedit "SdMaster"
OPCAO_FORM_MASTER="F"
PickForm OPCAO_FORM_MASTER
LimpAguarde()
Mensagem ("Fichas de estoque criadas !")

EndProc ;(Criar_Ficha)

;*******************************************************************************
;* Rotina para Selecionar Mes/Ano                                              *
;*******************************************************************************
Proc Selecionar_Ano()
Resynckey
While True
  Moveto [Ano Referencia]
  
  TECLA="=Anoñ  F5=Exibi‡„o"
  
  MSGTELA="Informe o ano !"
  
  AguardaTeclasPadrao()
                                                                    
  Switch
  Case RetVal=-94 : MsgTeclasPadrao()
  Case Retval="F5":
       Monta_Titulos()
  Case Retval="ESC":
       Return False
  Case Retval="ENTER":
       If NumVal([Ano Referencia])<=1980 Or NumVal([Ano Referencia])>=2013
          Then [Ano Referencia]=SubStr(Format("D13",Today()),7,4)
       EndIf
       If IsBlank([Ano Referencia])
          Then [Ano Referencia]=SubStr(Format("D13",Today()),7,4)
       EndIf                              
       []=ALINH()
       ANOREF=[Ano Referencia]
       Return True
  Case Retval="UP" Or Retval=-72  :
       [Ano Referencia]=StrVal(NumVal([Ano Referencia])+1)
  Case Retval="DOWN" Or Retval=-80:
       [Ano Referencia]=StrVal(NumVal([Ano Referencia])-1)
  EndSwitch 
  Resynckey
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao do Complemento                                        *
;*******************************************************************************
Proc DIGITA_COMP()
Moveto "Estqprm"
SetHighLight Current Record 23 Field 31
If RecordStatus("New")
   Then CHAVEI=1
   Else CHAVEI=0
EndIf
CopyToArray Registro_PARAM

Moveto [Estoque Minimo]
While True

      TECLA=" Esc=Retornar  "

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

      Prompt TECLA

      MSGCAMPO=Field()
      SetaCorRegistro("Editando")
      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case Retval="ESC":
           Switch
           Case Field()="Estoque Minimo":
                If CHAVEI=1
                   Then Del
                   Else CopyFromArray Registro_PARAM
                EndIf
                CHAVEI=9
                QuitLoop
           Case Field()="Ponto de Reposicao" Or
                Field()="Estoque Maximo":
                Up
           Case Field()="Quantidade Comprada":
                Moveto [Ponto de Reposicao]
           Case Field()="Data da Ultima Saida" Or
                Field()="Quantidade Empenhada":
                Up
           Case Field()="Data de Inatividade":
                Moveto [Data da Ultima Saida]
           OtherWise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEI=0
              Then MSG="Deseja excluir esta ficha de estoque ?"
                   CONFGERAL(MSG)
                   If OK="S"
                      Then Exclusao_Item()
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Estoque Minimo" Or
                Field()="Estoque Maximo":
                Down
           Case Field()="Ponto de Reposicao":
                Moveto [Quantidade Comprada]
           Case Field()="Quantidade Comprada" Or
                Field()="Quantidade Empenhada":
                Down
           Case Field()="Data da Ultima Saida":
                Moveto [Data de Inatividade]
           Case Field()="Data de Inatividade":
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
SetaCorRegistro("Padrao")
EndProc

;*******************************************************************************
;*  Ver meses do ano                                                           *
;*******************************************************************************
Proc Meses_Item()
EDITAR="N"
EXCLUIR="N"
If RecordStatus("New")
   Then MENSAGEM("Ano sem Registros !")
EndIf

ImageRights ReadOnly
While True
  TECLA="Ins=Novo  F4=Controle  =Mover"
   
  SetaCorRegistro("Paginar")
  AguardaTeclasPadrao()

   Switch
      Case RetVal=-94 : MsgTeclasPadrao()
      Case Retval="F5":
           Monta_Titulos()
      Case Retval="F4":
           CHAVEI=7
           QuitLoop
      Case Retval="INS":
           Opcao_Ver=False
           CHAVEI=1
           QuitLoop
      Case Retval="ENTER":
           If Not ISBlank([Mes Referencia])
              Then Opcao_Ver=False
                   CHAVEI=0
                   QuitLoop
           EndIf
      Case Retval="F3":
           Opcao_Ver=True
           CHAVEI=0
           Inicia_Registro()
           DigitaI()
      Case Retval="ESC" Or RetVal="PGDN":
           CHAVEI=9
           QuitLoop 
      Case Retval=-72 : Up
      Case Retval=-80 : Down
      Case Retval=-75 : Up 
      Case Retval=-77 : Down
   EndSwitch
EndWhile
ImageRights
SetaCorRegistro("Padrao")
EndProc    ; (Meses_Item)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True

If INICIO_DIALOG
   Then If CHAVEI=1
           Then Campo="I_Mes_Referencia"
           Else Campo="I_Saldo_Inicial"
        EndIf
        INICIO_DIALOG=False
EndIf

If Opcao_Ver=True Then Campo="I_Mes_Referencia" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   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
                  Case Evento["KeyCode"] = -67:
                       Mover_Reg=False
                       Opcao_Ver=False
                       INICIO_DIALOG=True
                       Campo="I_Saldo_Inicial"
                EndSwitch
                If Mover_Reg=True
                   Then MESREF=[Mes Referencia]
                        Inicia_Registro()
                EndIf
            EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then Confirma()
                    If OK="S"
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = 27:
            Switch
             Case Campo="I_Mes_Referencia" And REF=1 : Campo="NO"
             Case Campo="I_Mes_Referencia" And REF=0: CancelDialog
             Case Campo="I_Saldo_Inicial":
                  If CHAVEI=1
                     Then Campo="I_Mes_Referencia"
                     Else CancelDialog
                  EndIf
             Case Campo="I_Custo_Total_Inicial": Campo="I_Saldo_Inicial"
             Case Campo="I_Saldo_Atual"        : Campo="I_Custo_Total_Inicial"
             Case Campo="I_Custo_Total_Atual"  : Campo="I_Saldo_Atual"
             Case Campo="I_Preco_Custo"        : Campo="I_Custo_Total_Atual"
             Case Campo="I_Data_Preco_Custo"   : Campo="I_Preco_Custo"
             Case Campo="YES" Or Campo="NO"    : Campo="I_Mes_Referencia"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Mes_Referencia":
                  VSD_I_Mes_Referencia=AlinhM(ControlValue("I_Mes_Referencia"),2)
                  If VSD_I_Mes_Referencia<"01" Or
                     VSD_I_Mes_Referencia>"12"
                     Then Mensagem("Mes invalido !")
                     Else If REF<>1
                             Then Del
                                  Moveto [Mes Referencia]
                                  Locate [SdMaster->Codigo da Empresa],
                                         [SdMaster->Codigo do Item   ],
                                         [SdMaster->Ano Referencia   ],
                                         VSD_I_Mes_Referencia
                                  If Not RetVal
                                     Then End Down
                                          [Codigo da Empresa]=[SdMaster->Codigo da Empresa]
                                          [Codigo do Item   ]=[SdMaster->Codigo do Item   ]
                                          [Ano Referencia   ]=[SdMaster->Ano Referencia   ]
                                          [Mes Referencia   ]=VSD_I_Mes_Referencia
                                     Else CHAVEI=0
                                          Inicia_Registro()
                                  EndIf
                                  Campo="I_Saldo_Inicial"
                              Else Campo="YES"
                         EndIf
                  EndIf
             Case Campo="I_Saldo_Inicial":
                  VSD_I_Saldo_Inicial=ControlValue("I_Saldo_Inicial")
                  Campo="I_Custo_Total_Inicial"
             Case Campo="I_Custo_Total_Inicial":
                  VSD_I_Custo_Total_Inicial=ControlValue("I_Custo_Total_Inicial")
                  VSD_I_Custo_Inicial=NDecimal(VSD_I_Custo_Total_Inicial/VSD_I_Saldo_Inicial,5)
                  Campo="I_Saldo_Atual"
             Case Campo="I_Saldo_Atual":
                  VSD_I_Saldo_Atual=ControlValue("I_Saldo_Atual")
                  Campo="I_Custo_Total_Atual"
             Case Campo="I_Custo_Total_Atual":
                  VSD_I_Custo_Total_Atual=ControlValue("I_Custo_Total_Atual")
                  VSD_I_Custo_Atual=NDecimal(VSD_I_Custo_Total_Atual/VSD_I_Saldo_Atual,5)
                  Campo="I_Preco_Custo"
             Case Campo="I_Preco_Custo":
                  VSD_I_Preco_Custo=ControlValue("I_Preco_Custo")
                  Campo="I_Data_Preco_Custo"
             Case Campo="I_Data_Preco_Custo":
                  VSD_I_Data_Preco_Custo=ControlValue("I_Data_Preco_Custo")
                  AcceptDialog
             Case Campo="YES" : AcceptDialog
             Case Campo="NO"  : CancelDialog

           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="******"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

Switch
  Case Campo="I_Mes_Referencia":
       MSGCAMPO="Mes Referente"
  Case Campo="I_Saldo_Inicial":
       MSGCAMPO="Saldo no inicio do mes"
  Case Campo="I_Custo_Total_Inicial":
       MSGCAMPO="Custo Total no inicio do mes"
  Case Campo="I_Saldo_Atual":
       MSGCAMPO="Saldo no final do mes"
  Case Campo="I_Custo_Total_Atual":
       MSGCAMPO="Custo Total no final do mes"
  Case Campo="I_Preco_Custo":
       MSGCAMPO="Ultimo custo unitario"
  Case Campo="I_Data_Preco_Custo":
       MSGCAMPO="Data do ultimo custo unitario"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  F9=Editar  Home/End/PgDn/PgUp=Paginar  "
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
RefreshDialog
Return TEMP
EndProc   ; (Item_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Mes Referencia        ]=VSD_I_Mes_Referencia
       [Saldo Inicial         ]=VSD_I_Saldo_Inicial
       [Custo Total Inicial   ]=VSD_I_Custo_Total_Inicial
       [Ultimo Custo Inicial  ]=VSD_I_Ultimo_Custo_Inicial
       [Saldo Atual           ]=VSD_I_Saldo_Atual
       [Custo Total Atual     ]=VSD_I_Custo_Total_Atual
       [Ultimo Custo Atual    ]=VSD_I_Ultimo_Custo_Atual
       [Preco de Custo        ]=VSD_I_Preco_Custo
       [Data do Preco de Custo]=VSD_I_Data_Preco_Custo
  Case Funcao_Registro="Ler":
       VSD_I_Mes_Referencia      =[Mes Referencia        ]
       VSD_I_Saldo_Inicial       =[Saldo Inicial         ]
       VSD_I_Custo_Total_Inicial =[Custo Total Inicial   ]
       VSD_I_Custo_Inicial       =NDecimal([Custo Total Inicial   ]/[Saldo Inicial],5)
       VSD_I_Ultimo_Custo_Inicial=[Ultimo Custo Inicial  ]
       VSD_I_Saldo_Atual         =[Saldo Atual           ]
       VSD_I_Custo_Total_Atual   =[Custo Total Atual     ]
       VSD_I_Custo_Atual         =NDecimal([Custo Total Atual     ]/[Saldo Atual  ],5)
       VSD_I_Ultimo_Custo_Atual  =[Ultimo Custo Atual    ]
       VSD_I_Preco_Custo         =[Preco de Custo        ]
       VSD_I_Data_Preco_Custo    =[Data do Preco de Custo]
EndSwitch
EndProc    ;(Registro_Item)

;*******************************************************************************
;* Rotina para Inicializar DigitaI                                             *
;*******************************************************************************
Proc Inicia_Registro()
REF=0
ImageRights

;Switch
;  Case [Situacao]="T":
;       VSD_I_SITUACAO="TRANSFERIDO"
;  Case [Situacao]="F":
;       VSD_I_SITUACAO="FECHADO"
;  OtherWise:
;       VSD_I_SITUACAO=""
;EndSwitch

If CHAVEI=1
   Then KeyPress "INS"
EndIf
CopyToArray RegItem
INICIO_DIALOG=True
Registro_Item("Ler")
EndProc   ;(Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
REF=0
Showdialog "Dados do Mes" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea",
    "HOME","END","PGDN","PGUP","F9"
     @ 11,1 height 09 width 77

   Label  @ 00,00 "Mes " For "I_Mes_Referencia"
   Accept @ 00,05 Width 05 "A2" picture "#*#" Tag "I_Mes_Referencia" to VSD_I_Mes_Referencia

   Frame Single From 01,00 to 06,45
   @ 01,16 ?? " Inicial "
   @ 01,31 ?? " Final "
   @ 02,01 ?? "Saldo"
   @ 03,01 ?? "Custo Total"
   @ 04,01 ?? "Custo Medio"
   @ 05,01 ?? "Ult. Cto Medio"
   Accept @ 02,16 Width 14 "N" picture "[-]#*#.[###]" Tag "I_Saldo_Inicial" to VSD_I_Saldo_Inicial
   Accept @ 03,16 Width 14 "$" picture "[-]#*#.[##]"  Tag "I_Custo_Total_Inicial" to VSD_I_Custo_Total_Inicial
   Accept @ 04,16 Width 14 "N" picture "[-]#*#.#####" Tag "I_Custo_Inicial" to VSD_I_Custo_Inicial
   Accept @ 05,16 Width 14 "N" picture "[-]#*#.#####" Tag "I_Ultimo_Custo_Inicial" to VSD_I_Ultimo_Custo_Inicial

   Accept @ 02,31 Width 14 "N" picture "[-]#*#.[###]" Tag "I_Saldo_Atual" to VSD_I_Saldo_Atual
   Accept @ 03,31 Width 14 "$" picture "[-]#*#.[##]"  Tag "I_Custo_Total_Atual" to VSD_I_Custo_Total_Atual
   Accept @ 04,31 Width 14 "N" picture "[-]#*#.#####" Tag "I_Custo_Atual" to VSD_I_Custo_Atual
   Accept @ 05,31 Width 14 "N" picture "[-]#*#.#####" Tag "I_Ultimo_Custo_Atual" to VSD_I_Ultimo_Custo_Atual

   Frame Single From 01,47 to 04,74
   @ 01,48 ?? " Ultima Entrada "
   @ 02,48 ?? "Cto Unitario"
   @ 03,48 ?? "Data"
   Accept @ 02,61 Width 13 "N" picture "#*#.[#####]" Tag "I_Preco_Custo" to VSD_I_Preco_Custo
   Accept @ 03,61 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Data_Preco_Custo" to VSD_I_Data_Preco_Custo

;  Frame Single From 04,47 to 06,74
;  Label  @ 04,48 "Situa‡„o " For "I_Situacao"
;  Accept @ 05,49 Width 25 "A20" picture "!*!" Tag "I_Situacao" to VSD_I_Situacao

EndDialog
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc    ; (DigitaI)

;*******************************************************************************
;* Rotina para Finalizar Digitacao DigitaI                                     *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
        UnLockRecord
   Else Moveto "SdEstq"
        If CHAVEI=0 Or CHAVEI=8
           Then CopyFromArray RegItem
        EndIf
        If CHAVEI=1 Or CHAVEI=8
           Then Del
        EndIf
EndIf
ImageRights ReadOnly
EndProc     ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Montar Titulos na Form                                          *
;*******************************************************************************
Proc Exclusao_Item()
Moveto "SdEstq"
While RecordStatus("New")=False
  Del
EndWhile

Moveto "EstqPrm"
Del
CHAVEI=8
EndProc

;*******************************************************************************
;* Rotina para Montar Titulos na Form                                          *
;*******************************************************************************
Proc Monta_Titulos()
WV=WV+1
If WV=4 Then WV=1 EndIf
Switch
  Case WV=1:
       MSGC1="   Saldo Inicial"   MSGC3="     Saldo Final"
       MSGC2="CtTotal Inicial"    MSGC4="  CtTotal Final"
  Case WV=2:
       MSGC1="   Saldo Inicial"   MSGC3="Ct Medio Inicial"
       MSGC2="CtTotal Inicial"    MSGC4="UltCtMd Inicial"
  Case WV=3:
       MSGC1="     Saldo Final"   MSGC3="  Ct Medio Final"
       MSGC2="  CtTotal Final"    MSGC4="  UltCtMd Final"
EndSwitch
resynckey
EndProc

;*******************************************************************************
;* Rotina aguarda teclas padrao                                                *
;*******************************************************************************
Proc AguardaTeclasPadrao()

BarraPadrao()

Wait Field
  Until "ESC","ENTER","DOWN","DEL","FIELDVIEW","LEFT","RIGHT",
        "HOME","END","UP","PGDN","PGUP","INS","F35","ZOOM","ZOOMNEXT",
        -94,-33,-22,
        "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12",-72,-80,-75,-77,
        -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140

ClearSpeedBar      

IsTeclaAtalho()
Endproc

;*******************************************************************************
;* Rotina Barra Funcoes                                                        *
;*******************************************************************************
Proc BarraPadrao()
If Not IsAssigned(TECLA) Then TECLA="" EndIf

Prompt TECLA 
SpeedBar "["+Chr(254)+"]" :"ESC",
         "~Novo~"         :"INS",
         "~Exibi‡„o~"     :"F5",
         "~Ficha/Lista~"  :"F3",
         "~?~"            :-94
Endproc

;*******************************************************************************
;* Rotina Mensagem Teclas Padrao                                               *
;*******************************************************************************
Proc MsgTeclasPadrao()
MSG=    "    Esc= Voltar Menu                 //"
MSG=MSG+" Insert= Novo registro               //"
MSG=MSG+"     F5= Exibi‡„o                    "
MsgHelp("Teclas/Fun‡”es",MSG)
Endproc

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf

CoEdit "SdMaster"
OPCAO_FORM_MASTER="F"
PickForm OPCAO_FORM_MASTER
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

Executa = True
WV=0
Monta_Titulos()
Moveto "Estqprm"
SetHighLight Current Record 23 Field 112
Moveto "SdMaster"

While True
  End
  SeqMaster=[Sequencia]+1
  PgDn
  [Sequencia]=SeqMaster
  LockRecord
  If RetVal Then QuitLoop EndIf
EndWhile

[Codigo da Empresa   ]=SYS_EMPRESA_DEFAULT
If Executa
   Then [Ano Referencia]=StrVal(Year(Today()))
        [Mes Referencia]=AlinhM(StrVal(Month(Today())),2)
        [Mes]=MesExt(Month(Today()))
EndIf

While Executa
  If Not Selecionar_Empresa() Then QuitLoop EndIf
  If Not Selecionar_Ano()     Then Loop EndIf
  While Executa
    If Not Selecionar_Item() Then QuitLoop     EndIf
    While Executa
      Moveto "SdEstq"
      Meses_Item()
      If CHAVEI=9
         Then QuitLoop
      EndIf
      If CHAVEI=7
         Then Digita_Comp()
              If CHAVEI=8 Then QuitLoop EndIf
         Else Inicia_Registro()
              DigitaI()
      EndIf
    EndWhile

    Moveto "SdMaster"
    PickForm OPCAO_FORM_MASTER
  EndWhile

  [Codigo do Item   ]=""
  [Descricao do Item]=""
  [Lookup_Item      ]=""
  Resynckey
EndWhile

;** Deletando Registro Master **
Moveto "SdMaster"
[Codigo da Empresa     ]=""
[Codigo do Item        ]=""
Del
Do_It!
ClearAll
Release Vars All
Release Procs All
