;** ExpedIL ********************************************************************
;*  Digitacao de Ordem de Expedicao de Lote                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 24/07/2020 por Bruno Carvalho                
;Ultima Alteracao: 27/08/2020 por Bruno Carvalho                             
;Motivo Alteracao: Adicionado processo p/ ativar lan‡amento na tela onde os itens/lotes sÆo inseridos 
;Ultima Alteracao: 31/08/2020 por Bruno Carvalho                             
;Motivo Alteracao: Ajutes p/ exibir uma coluna com o ultimo lote bipado  
;Ultima Alteracao: 09/10/2020 por Anivel Augusto Rodrigues                       
;Motivo Alteracao: Ajustes aviso para fazer fechames
;Ultima Alteracao: 13/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes na cor da mensagem do aviso para fazer fechames
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero
 
;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Expedicao                           *
;*******************************************************************************
Proc CHAVEC()
FACA_DIGITAC  = True
FACA_CHAVEI   = True
INICIO_PAGINA = True

While True
  Moveto "ExpedC"
  Moveto [Numero da OE]
  End
  Moveto [Numero da OE]
  ORDEXP=[Numero da OE]

  If OPCAO_FORM=FORMRELACAO
    Then Down
    Else CtrlPgDn 
  EndIf
  Moveto [Numero da OE]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM=FORMRELACAO
            Then OPCAO_FORM=FORMMANUTENCAO
            Else OPCAO_FORM=FORMRELACAO
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           If OPCAO_FORM=FORMRELACAO
              Then PAGINA("ExpedC","MR")
              Else PAGINA("ExpedC","MT")
           EndIf
           INICIO_PAGINA=True
           ORDEXP=[Numero da OE]
           Switch
             Case EDITAR="S":
                  PickForm FORMMANUTENCAO
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          FACA_DIGITAC=True
                          FACA_CHAVEI =True
                          INICIO_PAGINA=True

                          ORDEXP=[Numero da OE]
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  PickForm FORMMANUTENCAO
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If [Situacao da OE]="FATURADO"
                             Then Mensagem("Esta Ordem de Expedi‡„o n„o pode ser excluida !// J  foi FATURADO !")
                                  UnLockRecord
                             Else If Verifica_Sistema_Gerador("EXCLUSAO")
                                     Then If QuerExcluir("")
                                             Then GRAVA_LOG=True
                                                  EXCLUSAO()
                                             Else UnLockRecord
                                          EndIf
                                     Else UnLockRecord     
                                  EndIf
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM=FORMMANUTENCAO
              Then PickForm FORMMANUTENCAO
              Else PickForm FORMRELACAO
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If Numero_Lancamento("","9")
            Then ORDEXP = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC    
            Else QuitLoop
         EndIf
         PickForm FORMMANUTENCAO
         Moveto [Numero da OE]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC=1
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return
                    Else OPCAO_FORM=FORMRELACAO 
                 EndIf
         EndIf  
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM=FORMRELACAO
            Then PickForm FORMRELACAO
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

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

If CHAVEC=0
   Then Moveto "ExpedI"
        Calc_Itens()
        Home End
        SetaCorRegistro("Padrao")
        Moveto "ExpedC"
EndIf        

If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
        EndIf
        If [Situacao da OE]="FATURADO"
           Then MSG_T="Esta Ordem de Expedi‡„o j  foi FATURADO !//"
                Mensagem(MSG_T)
                If Not CHECA_SUPERVISOR()
                   Then CHAVEC=9
                        Return
                EndIf
        EndIf
EndIf 
 
If CHAVEC=0 Or Not INICIO_PAGINA
   Then Carrega_Parametros()
        FACA_CHAVEI=True
        INICIO_PAGINA=False
        Return
   Else FACA_CHAVEI=True
        INICIO_PAGINA=False
        Moveto [Codigo da Empresa]
        ;Moveto [Numero do Pedido]
EndIf     
 
While True
  
  TECLA=" Esc=Retornar  "
  If Field()="Codigo da Empresa"   Or       
     Field()="Numero do Pedido"    Or      
     Field()="Codigo"         
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf
  TECLA=TECLA+"F8=Observa‡„o  "
  
  MSGCAMPO=Field()
  Switch
    Case Field()="Razao Social"        : MSGCAMPO="Observa‡Æo"
    Case Field()="Tipo de Operacao"    : MSGCAMPO="Opera‡Æo: (E)ENTRADA  (S)SAIDA" 
  EndSwitch

  Prompt TECLA
  Wait Field
       ;Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F8","F35","Down"
  
  Switch
  Case RetVal="F1":
       If Field()="Codigo da Empresa"   Or
          Field()="Numero do Pedido"    Or      
          Field()="Codigo"         
          Then CONSULTAF1()
        EndIf
  Case Retval="F8":
       Observacao()
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="Down":
       If CHAVEC=0
          Then QuitLoop
       EndIf
  Case Retval="DEL":
       If CHAVEC=0
          Then If Verifica_Sistema_Gerador("EXCLUSAO")
                  Then If QuerExcluir("")
                          Then GRAVA_LOG=True
                               EXCLUSAO()
                               CHAVEC=9
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Empresa"  :   
            If QuerDesfazer("")
               Then EXCLUSAO()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero do Pedido"   : Moveto [Codigo da Empresa]
       Case Field()="Tipo de Operacao"   : Moveto [Numero do Pedido]
       Case Field()="Codigo"             : 
            If CHAVEC=1
               Then Moveto [Tipo de Operacao]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Razao Social": Moveto [Codigo]
       OtherWise                  : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
       Case Field()="Codigo da Empresa":
            If IsBlank([]) 
               Then If Not IsBlank(SYS_EMPRESA_DEFAULT)
                       Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                    EndIf
            EndIf
            If IsBlank([]) Then Loop EndIf 
            If Not IsBlank([Codigo da Empresa])
               Then If Not Carrega_Parametros()
                       Then Loop
                    EndIf
            EndIf
            Moveto [Numero do Pedido]
       Case Field()="Numero do Pedido":
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then If PARAM_PEDIDO_POREXPED
                               Then ACHOU_OE=""
                                    NPED = [Numero do Pedido]
                                    Moveto "ExpedC"
                                    UnLockRecord
                                    FormKey
                                    Moveto [Numero do Pedido]
                                    Locate NPED
                                    If RetVal
                                       Then While True
                                              If ORDEXP<>[Numero da OE]
                                                 Then ACHOU_OE=[Numero da OE]
                                                      QuitLoop
                                              EndIf
                                              Skip
                                              If Eot() Then QuitLoop EndIf
                                              Locate Next NPED
                                              If Not RetVal
                                                 Then QuitLoop
                                              EndIf   
                                            EndWhile
                                    EndIf                                       
                                    Moveto "ExpedC"
                                    Moveto [Numero da OE]
                                    Locate ORDEXP
                                    FormKey
                                    IsLockRecord()
                                    Moveto [Numero do Pedido]
                                    If ACHOU_OE<>""
                                       Then Mensagem("Pedido "+[Numero do Pedido]+" foi localizado na Expedi‡„o "+ACHOU_OE+"!")
                                            Loop
                                    EndIf   
                            EndIf
                            GetRecord "\\Sistemas\\Vendas\\PedidoC" [Numero do Pedido] To REG_PEDICO
                            If RetVal
                               Then If [Codigo da Empresa] <> REG_PEDICO["Codigo da Empresa"]
                                       Then Mensagem("Empresa "+[Codigo da Empresa]+" difere da empresa do pedido "+REG_PEDICO["Codigo da Empresa"]+"!")
                                            Loop
                                    EndIf   
                               Else Mensagem("Pedido "+[Numero do Pedido]+" inv lido! ")  
                                    Loop
                            EndIf    
                            Release Vars REG_PEDICO
                       
                            If [Situacao do Pedido]<>"ABERTO"
                               Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+[Situacao do Pedido])
                                    Loop
                            EndIf
                            
                            If SYS_CODIGO_CLIENTE="0112"
                               Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] To REG_CLI
                                    If RetVal 
                                       Then If Search("21",Upper(REG_CLI["Codigo do Cobrador"]))>0
                                               Then COR_MENSAGEM="ALERTA"
                                                    Mensagem("** SELAR PRODUTO **")
                                            EndIf
                                    EndIf
                            EndIf
                            
                            If [Situacao do Pedido]<>"ABERTO"
                               Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+[Situacao do Pedido])
                                    Loop
                            EndIf
                            
                            If Not Carrega_Parametros()
                               Then Loop
                            EndIf
                              
                            If SYS_CODIGO_CLIENTE = "0171" ;VENUS MODAS
                               Then Verifica_Duplicidade([Numero do Pedido])
                            EndIf
                            Mensagem_Expedicao() 
                    EndIf
                    [Tipo de Operacao]="S"
                    QuitLoop
               Else Moveto [Tipo de Operacao]
            EndIf
       Case Field()="Tipo de Operacao" :
            If IsBlank([])
               Then If IsBlank([Numero do Pedido])
                       Then []="E"
                       Else []="S" 
                    EndIf
            EndIf        
            Moveto [Codigo]
       Case Field()="Codigo":
            If IsBlank([])
               Then Moveto [Razao Social]
               Else If CHAVEC=1
                       Then If Cliente_Inativo([Codigo])
                               Then Loop
                            EndIf   
                    EndIf
                    Mensagem_Expedicao()               
                    QuitLoop
            EndIf   
       Case Field()="Razao Social":
            QuitLoop
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile

EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina de Dialogo da Referencia                                             *
;*******************************************************************************
Proc Observacao()
private tabela, campo

tabela=table()
campo = field()

MOveto "ExpedC"
Moveto [Observacao]

Edita_Memo("Observacao",10,01,13,76,"Observa‡”es")

moveto tabela
moveto field campo

endproc

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()

Moveto "ExpedC"
SetaCorRegistro("Padrao")

Moveto "ExpedI"
While True
  Calc_Itens() 

  Moveto [Codigo do Item]
  End
  If Not IsBlank([Codigo do Item])
     Then Down
  EndIf   
  
  SetaCorRegistro("Editar")
  While True
    TECLA=" PgDn=Finalizar  "
    MSGCAMPO=""
    AguardaTeclasPadraoIt2()

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F2  ~A~tiva lan‡amentos   " : " Ativa lan‡amentos                              " : "F2",
              "F4  ~V~olume              " : " Volume                                         " : "F4",
              "F5  ~R~ecarregar Pedido   " : " Recarregar itens do Pedido                     " : "F5",
              "F6  ~I~mprimir            " : " Imprimir Rela‡„o de Itens                      " : "F6",              
              "F8  ~O~bserva‡äes         " : " Observa‡äes                                    " : "F8",
              "F11 ~L~iberar Ordem       " : " Ordem de Expedi‡„o Liberada                    " : "F11",
              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 = -115:      
         Del
         FACA_CHAVEV = False
         FACA_CHAVEL = True
         CHAVEI      = 9
         Return
    Case RetVal = -116:
         Del
         FACA_CHAVEV = True
         FACA_CHAVEL = False
         CHAVEI      = 9
         Return
    Case RetVal="F1"  :                                      
         If Field()="Codigo do Item"         
            Then CONSULTAF1()
         EndIf
    Case Retval="F2":
         Del
         CDBarras("ExpedI")
         QuitLoop
         
    Case Retval="F4" Or RetVal=-62:
         Del
         FACA_CHAVEV=True
         CHAVEI     = 9
         Return
    
    Case Retval="F8":
         Del
         Observacao()
         QuitLoop   
            
    Case Retval="F5":
         Del
         Carrega_Pedido()
         QuitLoop
    
    Case RetVal="F6" :
         Del
         If IMPRIME()
            Then FACA_CHAVEI =False
                 FACA_DIGITAC=False
                 CHAVEI=9
                 Return
                 Quitloop
            Else Quitloop 
         EndIf
    
    Case Retval="PGDN":
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Expedi‡„o deve ter pelo menos 1(um) Item Ok !")
                 Loop
         EndIf         
         SaveTables
         FACA_CHAVEI =False
         FACA_CHAVEV =False
         FACA_CHAVEL =False
         FACA_DIGITAC=False
         CHAVEI=9
         CHAVEC=8
         Return
         
    Case Retval="F11" or retval=-133: 
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Expedi‡„o deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         Moveto "ExpedC"
         [ExpedC->Situacao da OE]="LIBERADO"
         [Data_Liberacao]=Today()
         [Hora_Liberacao]=Time()
         
         Moveto "ExpedI"
         FACA_CHAVEI =False
         FACA_DIGITAC=False
         CHAVEC=8
         CHAVEI=9   
         Return
         
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           PAGINA("ExpedI","MR")
           If EDITAR="S"
              Then CHAVEI=0
                   Mensagem("Edi‡„o n„o permitida !")
                   UnLockRecord 
              Else ;If EXCLUIR="S" And [Quantidade_Pedido]<=0
                   ;   Then If QuerExcluir("")
                   ;           Then CHAVEI=8
                   ;                GRAVA_LOG=True
                   ;                EXCLUSAO_I()
                   ;                Release Vars GRAVA_LOG
                   ;                Calc_Itens()
                   ;           Else UnLockRecord
                   ;        EndIf
                   ;   Else QuitLoop
                   ;EndIf
                   QuitLoop
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop         
    Case Retval="ESC":   
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then If QuerExcluir("")
                    Then FACA_CHAVEI =False
                         FACA_CHAVEV =False
                         FACA_CHAVEL =False
                         FACA_DIGITAC=False
                    Else Loop
                 EndIf  
         EndIf   
         CHAVEI=9
         CHAVEC=8
         Return
   Case Retval="ENTER":
   EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Localizar Registro Item - RqMatPri                              *
;*******************************************************************************
Proc CHAVEL()

;Verifica existˆncia de lotes
Moveto "ExpedIL"
Moveto [Sequencia]
If RecordStatus("New")=True
   Then If FACA_CHAVEV
          Then FACA_CHAVEI=False      
          Else FACA_CHAVEV=True
              ;FACA_CHAVEI=True
        EndIf  
        CHAVEL=9
        Return
EndIf                 
                  
While True
  Moveto "ExpedIL"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  
  SetaCorRegistro("Editar")
  While True
       TECLA=" PgDn=Finalizar  "
       MSGCAMPO=""
       AguardaTeclasPadraoIt2()
                                                                                         
       If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "F2  ~A~tiva lan‡amentos   " : " Ativa lan‡amentos                              " : "F2",
                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=-115 Or Retval="ESC":   
              Del
              FACA_CHAVEI = False
              FACA_CHAVEV = True
              FACA_CHAVEL = False
              CHAVEL      = 9
              Return            
         Case Retval=-116 Or Retval="PGDN" :  
              Del
              FACA_CHAVEI = True
              FACA_CHAVEV = False
              FACA_CHAVEL = False
              CHAVEL      = 9
              Return
         Case Retval="F2": 
              Del
              CDBarras("Expedil")
              QuitLoop
         Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
              Del
              While True
                PAGINA("ExpedIL","MR")
                CHAVEL=0
                If EDITAR="S"
                   Then Mensagem("Edi‡„o n„o permitida !")
                        UnLockRecord 
                   Else If EXCLUIR="S" 
                           Then Mensagem("ExclusÆo n„o permitida !")
                                UnLockRecord
                           Else QuitLoop
                        EndIf
                EndIf
                SetaPosForm()
              EndWhile
              QuitLoop  
         Case RetVal="ENTER" : 
              Loop 
       EndSwitch
  EndWhile      
EndWhile  

EndProc ;CHAVEV()   

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC

If RecordStatus("New")=True
   Then Mensagem("A Ordem de Expedi‡„o deve ter pelo menos 1(um) Item Ok !")  
        Return False
EndIf

Moveto "ExpedC"
Echo Normal
Echo Off
ShowPopup " Impress„o " CENTERED
  "Quantidade do P~e~dido/Expedi‡„o          " : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o    " : "IRP",
  "Quantidade ~P~endente da Expedi‡„o        " : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o " : "IRPP",
  "~C~ancelar                                " : " Cancelar a Opera‡„o                             " : "Cancelar" 
EndMenu
To Opcaoc
echo off

If OPCAOC="Cancelar" or OPCAOC="Esc"
   Then Return false
EndIf

If Opcaoc="IRP"
   Then Echo Normal
        Echo Off
        ShowPopup " Impress„o " CENTERED
          "Modo ~S~imples"        : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Simples       " : "IRPMS",
          "Modo ~G~rade  "        : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Grade         " : "IRPMG",
          "Modo Grade p/ C~o~r  " : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Grade por Cor " : "IRPMGC",
          "~C~ancelar    "        : " Cancelar a Opera‡„o                                                " : "Cancelar" 
        EndMenu
        To Opcaoc
        echo off
         
        If OPCAOC="Cancelar" or OPCAOC="Esc"
           Then Return False
        EndIF
      
           Do_It!
           Dispositivo()
           If OK=""
              Then CoEditKey
                   Return False
           EndIf
        
           If Opcaoc="IRPMS"  Then Play(PARAM_EXPED_E_IMP_SIMPLES) EndIf
           If Opcaoc="IRPMG"  Then Play(PARAM_EXPED_E_IMP_GRADE) EndIf
           If Opcaoc="IRPMGC" Then Play(PARAM_EXPED_E_IMP_GRDCOR) EndIf
EndIf

If Opcaoc="IRPP" 
   Then Echo Normal
        Echo Off
        ShowPopup " Impress„o " CENTERED
          "Modo ~S~imples"        : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Simples       " : "IRPPMS",
          "Modo ~G~rade  "        : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Grade         " : "IRPPMG",
          "Modo Grade p/ C~o~r  " : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Grade por Cor " : "IRPPMGC",
          "~C~ancelar    "        : " Cancelar a Opera‡„o                                                   " : "Cancelar" 
        EndMenu
        To Opcaoc
        Echo off
    
     If OPCAOC="Cancelar" or OPCAOC="Esc"
        Then Return False
     EndIf
     
     Do_It!
     Dispositivo()
     If OK=""
        Then CoEditKey
             Return False
     EndIf
 
     If Opcaoc="IRPPMS"  Then Play(PARAM_EXPED_P_IMP_SIMPLES) EndIf
     If Opcaoc="IRPPMG"  Then Play(PARAM_EXPED_P_IMP_GRADE)   EndIf
     If Opcaoc="IRPPMGC" Then Play(PARAM_EXPED_P_IMP_GRDCOR)  EndIf
EndIf
Do_It!
ClearAll

Carrega_Tabelas()

Return True

EndProc ;Imprime

;*******************************************************************************
;* Rotina para Digita Item                                                     *
;*******************************************************************************
Proc DigitaI()
;Moveto [Quantidade_Expedida]
While True

      TECLA=" Esc=Retornar  "

      If CHAVEI=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSGCAMPO=Field()

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case Retval="ESC":
           If Field()="Quantidade_Expedida"
              Then If QuerDesfazer("")
                      Then If CHAVEI=1
                              Then Del
                              Else Undo
                           EndIf
                           QuitLoop
                   EndIf
              Else Left
           EndIf
      Case Retval="ENTER":
           If Field() = "Quantidade_Expedida"
              Then If [Quantidade_Expedida]>1000
                      then Mensagem("Quantidade Inv lida !")
                           Loop
                   EndIf
                   [Quantidade_Diferenca]=[Quantidade_Expedida]-[Quantidade_Pedido]
                   If [Quantidade_Diferenca]=0
                      Then [Quantidade_Diferenca]=BlankNum()
                   EndIf
                   If [Quantidade_Diferenca]>0
                      Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
                      Else [Quantidade_Fora_Pedido]=BlankNum()
                   EndIf
                   If [Quantidade_Expedida]=0
                      Then [Quantidade_Expedida]=BlankNum()
                   EndIf
									 UnLockRecord
                   QuitLoop
              Else Right
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEI=0 And [Quantidade_Pedido]<=0
              Then If QuerExcluir("")
                      Then DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile

EndProc   ; (DigitaI)

;*******************************************************************************
;* Rotina para digita‡Æo do Volume                                             *
;*******************************************************************************
Proc DIGITAV()

Moveto "ExpedC"
Moveto [Numero Ordem de Volumes]
SetaCorRegistro("Editar")

While True
  TECLA=" Esc=Retornar  "

  MSGCAMPO=Field()
  AguardaTeclasPadraoIt2()

  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "F3  ~C~alcular Volumes    " : " Calcular Volumes   " : "F3",
            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 = -115 :
       FACA_CHAVEI = True
       FACA_CHAVEV = False
       FACA_CHAVEL = False
       CHAVEV      = 9
       Return
  Case RetVal = -116 :
       FACA_CHAVEV = False
       FACA_CHAVEL = True
       CHAVEV      = 9
       Return       
  Case RetVal = "F3" : CALC_VOLUMES("EXPED")
  Case Retval="ESC"  :
       If Field()="Numero Ordem de Volumes"
          Then If QuerDesfazer("")
                  Then CHAVEV=9
                       FACA_CHAVEI=True
                       FACA_CHAVEV=False
                       Undo
                       QuitLoop
               EndIf
          Else Left
       EndIf
  Case Retval="ENTER" : Right
       If Field() = "Situacao do Pedido" 
          Then CHAVEV=9
               FACA_CHAVEV=False
               QuitLoop
       EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  EndSwitch
EndWhile

EndProc ;DIGITAV()               

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras(TABELA)
Private TABELA,REG_P_PEDIDO,cc, LocalizadoItemSortido, regitemexpedicao, coditsortido
               
If Not IsAssigned(PARAM_INCLUI_ITEM)
   Then GetRecord "\\Sistemas\\Vendas\\P_Pedido" [Expedc->Codigo da Empresa] To REG_P_PEDIDO
        PARAM_INCLUI_ITEM = REG_P_PEDIDO["Inclui_Item_Expedic"]
EndIf            
 
While True
  switch
    case SISTEMA_GERADOR="LT" And [ExpedC->Tipo de Operacao]="E" :
      If Not Ler_CDBarras2(22,00)
         Then Return False
      EndIf
    case sys_Codigo_Cliente="0377"  :
      If Not Ler_CDBarras2(22,00)
         Then Return False
      EndIf
    otherwise:
      If Not Ler_CDBarras(22,00)
         Then Return False
      EndIf

  endswitch

  CODIT=Dados_Item
  ITOK=True
  
  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo de Barras]
  Locate IndexOrder by "cod_barras" CODIT
  If Not Retval
     Then If Codigo_Barras2(Dados_Item,"")
             Then CODIT = CODIGO_BARRA2
             Else ;Ser  o pr¢prio c¢digo do item 
          EndIf
          Moveto [Codigo do Item]
          Locate CODIT
  EndIf
  
  If RetVal And ITOK
     Then CopyToArray REG_BUSCA_LOOKUP
          CODIT=[Codigo do Item   ]
          If [Inativo]="S"
             Then
                  MSG=    "Este item: //"
                  MSG=MSG+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
                  MSG=MSG+"Com status = INATIVADO !"
                  Mensagem(MSG)
                  ITOK=False
          EndIf
     Else
          MSG=    "Este item: //"
          MSG=MSG+" - "+CODIT+"// //"
          MSG=MSG+"NÆo cadastrado !"
          Mensagem(MSG)
          ITOK=False
  EndIf
  
  Moveto "ExpedI"
  If Not ITOK 
     Then Moveto TABELA
          Loop 
  EndIf
  
  LancarItem(TABELA)
EndWhile

EndProc
                
;*******************************************************************************
;* Rotina para lancar o item                                                   *
;*******************************************************************************
Proc LancarItem(TABELA)
private ITOK, cl, INCLUI, CODITANT,TABELA,
        regitemexpedicao, qtddif, qtdref, qtdpermetida,REG_ITEM,PROCESSA_ITEM,LOTE_ITEM,FAZ_PROCESSO

GetRecord "\\Sistemas\\Estoque\\Itens" CODIT To REG_ITEM
If Not Retval
   Then Mensagem("Item "+CODIT+" nÆo foi localizado no cadastro de itens!")
        Return False
EndIf  
 
PROCESSA_ITEM=BlankNum()
FAZ_PROCESSO =True
CODITANT     =CODIT
ITOK         =False
Moveto [Codigo do Item]
Locate CODIT
If RetVal
   Then ITOK=True
        CopyToArray regitemexpedicao 
EndIf

Switch
    Case Not ITOK And Dados_QTD<0:
      MSG="Nesta expedi‡Æo n„o tem o Item informado !// //"
      MSG=MSG+"Item: "+REG_ITEM["Referencia"]+" - "+REG_ITEM["Descricao do Item"]+" - "+CODIT+"// //"
      MSG=MSG+"Subtra‡Æo ignorada !"
      Mensagem(MSG)
    Case IsBlank([Expedc->Numero do Pedido]): 
      Switch
        Case Not ITOK and Dados_QTD>0:
          PROCESSA_ITEM=Dados_QTD
          End Down
          [Codigo do Item      ]=CODIT
          [Quantidade_Expedida ]=[Quantidade_Expedida]+Dados_QTD
          AcertarLocalizarItem()                   
    
        Case ITOK And Dados_QTD>0:
          PROCESSA_ITEM=Dados_QTD
          [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
          AcertarLocalizarItem()
    
        Case ITOK And Dados_QTD<0:
          ;If [ExpedC->Tipo de Operacao]="E" 
          ;   Then Mensagem("Informe uma quantidade maior que 0!") 
          ;        Moveto "ExpedI"
          ;        SaveTables
          ;        Return True 
          ;EndIf 
          PROCESSA_ITEM=Dados_QTD*-1
          If [Quantidade_Expedida ]<=(Dados_QTD*-1)
             Then If ConfGeral("Item: "+regitemexpedicao["Referencia"]+" - "+regitemexpedicao["Descricao do Item"]+" - "+CODIT+"// //"+
                               "A quantidade a ser deduzida ["+StrVal(Dados_QTD*-1)+
                               "]// ‚ igual ou maior "+
                               "a quantidade j  expedida ["+StrVal([Quantidade_Expedida])+"]. // //"+
                               "Deseja exluir o item "+CODIT+"?")
                      Then Del
                      Else FAZ_PROCESSO=False
                  EndIf                    
             Else [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
          EndIf  
          AcertarLocalizarItem()
      EndSwitch
    Case Not IsBlank([Expedc->Numero do Pedido]):   
      Switch
        Case Not ITOK and Dados_QTD>0:
          MSG="Neste Pedido n„o tem o Item informado !// //"
          MSG=MSG+"Item: "+REG_ITEM["Referencia"]+" - "+REG_ITEM["Descricao do Item"]+" - "+CODIT+"// //"
          If PARAM_INCLUI_ITEM="S"
             Then MSG=MSG+"Confirma inclus„o deste Item ?"
           	      If ConfGeral(MSG)
                    Then PROCESSA_ITEM=Dados_QTD
                         End Down
                         [Codigo do Item     ]=CODIT
                         [Quantidade_Expedida]=[Quantidade_Expedida]+Dados_QTD
                         AcertarLocalizarItem()                
                  EndIf
             Else FAZ_PROCESSO=False
                  MSG=MSG+"InclusÆo bloqueada !"
                  Mensagem(MSG)
          EndIf
        
        Case ITOK And Dados_QTD>0:
          [Quantidade_Expedida]=[Quantidade_Expedida]+Dados_QTD
          Acerta_Item()
    
          qtdpermetida=true 
          If [Quantidade_Diferenca]>0
            Then MSG="Item: "+regitemexpedicao["Referencia"]+" - "+regitemexpedicao["Descricao do Item"]+" - "+CODIT+"// //"
                 MSG=MSG+" inseriu "+StrVal([Quantidade_Diferenca])+" a mais que quantidade pedida ["+Strval(regitemexpedicao["Quantidade_Pedido"])+"]!// //"
                 If PARAM_ALTERA_QTDE="S"
                    Then If Not ConfGeral(MSG+"Deseja realmente informar a mais ?")
                            Then qtdpermetida=False
                         EndIf
                    Else FAZ_PROCESSO=False
                         Mensagem(MSG+"InclusÆo bloqueada!")
                         qtdpermetida=False
                 EndIf
          EndIf
          
          If Not qtdpermetida
             Then [Quantidade_Expedida]=[Quantidade_Expedida]-Dados_QTD
             Else PROCESSA_ITEM=Dados_QTD
          EndIf
          AcertarLocalizarItem()
          
        Case ITOK And Dados_QTD<0:
          qtdref=regitemexpedicao["Quantidade_Expedida"]    
          qtddif=Dados_QTD+qtdref   
          If qtddif<0
             Then FAZ_PROCESSO=False
                  MSG="Item: "+regitemexpedicao["Referencia"]+" - "+regitemexpedicao["Descricao do Item"]+" - "+CODIT+"// //"
                  MSG=MSG+" subtraindo "+StrVal(qtddif*-1)+" a mais da quantidade expedida ["+Strval(qtdref)+"]!// //"
                  Mensagem(MSG+"Esta subtra‡Æo de [ "+Strval(Dados_QTD)+" ], nÆo permitida!")
             Else PROCESSA_ITEM=Dados_QTD*-1
                  [Quantidade_Expedida]=[Quantidade_Expedida]+Dados_QTD
                  If (Isblank([Quantidade_Expedida]) or [Quantidade_Expedida]=0) And
                     (Isblank([Quantidade_Pedido  ]) or [Quantidade_Pedido  ]=0)
                     Then Del
                  Endif
          EndIf
          AcertarLocalizarItem()
      EndSwitch
EndSwitch        
                
If PROCESSA_ITEM>0 And FAZ_PROCESSO
   Then Atualiza_Lote(TABELA)
   Else Moveto TABELA 
EndIf
      
Return True

EndProc ;LancarItem()

;*******************************************************************************
;* Rotina para atualizar o saldo do lote                                       *
;*******************************************************************************
Proc Atualiza_Lote(TABELA)  
Private TABELA 
   
MSG = ""
Switch
  Case [ExpedC->Tipo de Operacao]="E" :
       Moveto "\\Sistemas\\Estoque\\SdLote"
       Moveto [LoteNumero]  
       Locate VSDGNLOTE 
       If Not RetVal
          Then Mensagem("Lote "+StrVal(VSDGNLOTE)+" nÆo foi localizado no SALDO DO LOTE!")
               Moveto "ExpedI"
               If [Quantidade_Expedida]-PROCESSA_ITEM=0
                  Then Del
                  Else [Quantidade_Expedida] = [Quantidade_Expedida] - PROCESSA_ITEM
                       UnLockRecord
               EndIf
               Moveto "ExpedI"
               SaveTables
               Moveto TABELA
               Return
       EndIf
       If Dados_QTD<0
          Then ;---- Quantidade Negativa ---------------------------------------
               Moveto "ExpedIL"
               Moveto [Codigo do Item]
               Locate CODIT
               If RetVal
                  Then SEQ=0
                       While [Codigo do Item]=CODIT
                         If [LoteNumero] = VSDGNLOTE
                            Then SEQ = [Sequencia]
                                 QuitLoop
                         EndIf       
                         Skip
                         If Eot() Then QuitLoop EnDIf
                         Locate Next CODIT
                         If Not RetVal Then QuitLoop EndIf
                       EndWhile
                       If SEQ=0
                          Then MSG = "NÆo foi localizado o lote "+StrVal(VSDGNLOTE)+" na rela‡Æo dos LOTES para o item "+CODIT+"!"
                          Else SALDO_LOTE = 0
                               Moveto "ExpedIL"
                               Moveto [Sequencia]
                               Locate SEQ
                               If PROCESSA_ITEM > [LoteQuantidade]
                                  Then MSG =       Completa("A quantidade informada ‚ superior a quantidade dispon¡vel no lote",65," ")
                                       MSG = MSG + "////"
                                       MSG = MSG + Completa(Format("W6",[LoteQuantidade])+" Quantidade do Lote",65," ")+"//"
                                       MSG = MSG + Completa(Format("W6",[LoteSaldo])+" Saldo do Lote",65," ")+"//"
                                       MSG = MSG + Completa(Format("W6",PROCESSA_ITEM)+" Quantidade Informada",65," ")+"//"
                                       MSG = MSG + Completa("------",65," ")+"//"
                                       MSG = MSG + Completa(Format("W6",([LoteQuantidade]-([LoteSaldo]+PROCESSA_ITEM))*-1)+
                                                                   " Quantidade indispon¡vel no Lote",65," ")
                                         
                                       SALDO_LOTE = [LoteQuantidade]
                                       PROCESSA_ITEM = PROCESSA_ITEM - [LoteQuantidade]
                                       [LoteQuantidade] = 0
                                                                                                                                                                                
                                  Else SALDO_LOTE = PROCESSA_ITEM
                                       [LoteQuantidade] = [LoteQuantidade] - PROCESSA_ITEM
                                       PROCESSA_ITEM = 0
                               EndIf
                               If SALDO_LOTE > 0
                                  Then LANCTO = [Numero do Lancamento]
                                       Moveto "\\Sistemas\\Estoque\\SdLote" 
                                       Moveto [Numero do Lancamento]
                                       Locate LANCTO
                                       If RetVal
                                          Then If [LoteSaldo] - SALDO_LOTE <0
                                                  Then [LoteSaldo] = BlankNum()
                                                  Else [LoteSaldo] = [LoteSaldo] - SALDO_LOTE
                                                       If [LoteSaldo] = 0
                                                          Then [LoteSaldo] = BlankNum()
                                                       EndIf  
                                               EndIf                                                                                                                       
                                               If [LoteSaldo]=0 Or [LoteSaldo]=BlankNum()  
                                                  Then [LoteStatus] = "E"
                                               EndIf 
                                               UnLockRecord   
                                          ELse ;Mensagem("NÆo foi localizado o saldo do lote do lan‡amento "+StrVal(LANCTO)+"!")
                                       EndIf   
                               EndIf
                               Moveto "ExpedIL"
                               If [LoteQuantidade]=0 
                                  Then Del 
                               EndIf
                               UnLockRecord
                       EndIf      
                                     
               EndIf
          Else ;---- Quantidade Positiva ------------------------------
               ACHOU_ITEM_LOTE=False
               While [LoteNumero] = VSDGNLOTE
                 If [Codigo do Item] = CODIT
                    Then FAZ_PROCESSO    = True
                         ACHOU_ITEM_LOTE = True
                         If [LoteSaldo] + PROCESSA_ITEM > [LoteQuantidade]
                            Then ;Verifica se a quantidade informada ‚ maior que o saldo do lote dispon¡vel 
                                 MSG = Completa("A quantidade informada ‚ superior a quantidade dispon¡vel no lote",65," ")
                                 MSG = MSG +"////"
                                 MSG = MSG + Completa(Format("W6",[LoteQuantidade])+" Quantidade do Lote",65," ")+"//"
                                 MSG = MSG + Completa(Format("W6",[LoteSaldo])+" Saldo do Lote",65," ")+"//"
                                 MSG = MSG + Completa(Format("W6",PROCESSA_ITEM)+" Quantidade Informada",65," ")+"//"
                                 MSG = MSG + Completa("------",65," ")+"//"
                                 MSG = MSG + Completa(Format("W6",([LoteQuantidade]-([LoteSaldo]+PROCESSA_ITEM))*-1)+" Quantidade indispon¡vel no Lote",65," ")
                                 
                                 ;-----------------------------------------------------------
                                 FAZ_PROCESSO=False
                                 Moveto "ExpedI"
                                
                                 ;If FAZ_PROCESSO
                                 ;   Then ;Quando Quantidade extrapolar o limite do Saldo
                                 ;        PROCESSA_ITEM = [LoteQuantidade] - [LoteSaldo]
                                 ;        SALDO_LOTE    = PROCESSA_ITEM 
                                 ;        CopyToArray LOTE_ITEM
                                 ;        [LoteSaldo] = [LoteQuantidade]   
                                 ;        If [LoteSaldo] > 0 And [LoteStatus] = "E" 
                                 ;            Then [LoteStatus] = ""
                                 ;        EndIf
                                 ;        UnLockRecord
                                 ;EndIf
                                 ;-----------------------------------------------------------
                                 
                            Else SALDO_LOTE = 0
                                 CopyToArray LOTE_ITEM
                                 [LoteSaldo] = [LoteSaldo] + PROCESSA_ITEM  
                                 If [LoteSaldo] > 0 And [LoteStatus] = "E" 
                                     Then [LoteStatus] = ""
                                 EndIf
                                 UnLockRecord      
                         EndIf  
                         
                         If FAZ_PROCESSO
                            Then ACHOU_ITEM_LOTE = False
                                 Moveto "ExpedIL"
                                 Moveto [Codigo do Item]
                                 Locate CODIT
                                 If RetVal
                                    Then While [Codigo do Item]= CODIT
                                           If [LoteNumero] = VSDGNLOTE
                                              Then [LoteQuantidade] = [LoteQuantidade] + PROCESSA_ITEM 
                                                   ACHOU_ITEM_LOTE = True
                                                   QuitLoop
                                           EndIf        
                                           Skip
                                           If EoT() Then QuitLoop EndIf
                                           Locate Next CODIT
                                           If Not RetVal Then QuitLoop EndIf
                                         EndWhile
                                 EndIf
                                 If Not ACHOU_ITEM_LOTE
                                    Then ACHOU_ITEM_LOTE=True
                                         Home
                                         End
                                         If IsBlank([Sequencia])
                                            Then SEQ = 0
                                            Else Moveto [Sequencia] SEQ=ImageCMax()
                                         EndIf
                                         Moveto "ExpedIL"
                                         Down
                                         Moveto [Sequencia]
                                         Seta_Sequencia(SEQ,False)
                                         [Codigo do Item        ] = CODIT
                                         [Numero do Lancamento  ] = LOTE_ITEM["Numero do Lancamento"] 
                                         [LoteNumero            ] = LOTE_ITEM["LoteNumero"        ]    
                                         [LoteQuantidade        ] = PROCESSA_ITEM
                                         [LoteDataFabricacao    ] = LOTE_ITEM["LoteDataFabricacao"]
                                         [LoteDataValidade      ] = LOTE_ITEM["LoteDataValidade"  ]
                                         UnLockRecord
                                 EndIf
                                 Moveto "ExpedIL"
                                 SaveTables   
                                 
                                 PROCESSA_ITEM = SALDO_LOTE
                         EndIf
                         QuitLoop
                 EndIf   
                 Skip
                 If Eot() Then QuitLoop EndIf
                 Locate Next VSDGNLOTE
                 If Not RetVal Then QuitLoop EndIf
               EndWhile
               If Not ACHOU_ITEM_LOTE
                  Then MSG = "NÆo h  saldo para o item "+CODIT+" no lote "+StrVal(VSDGNLOTE)+"!"
               EndIf
       EndIf
       If MSG<>""
          Then Mensagem(MSG)
               Moveto "ExpedI"
               If Dados_QTD<0
                  Then [Quantidade_Expedida] = [Quantidade_Expedida] + PROCESSA_ITEM
                       [LoteNumero] = VSDGNLOTE
                  Else If [Quantidade_Expedida]-PROCESSA_ITEM=0
                          Then Del
                          Else [Quantidade_Expedida] = [Quantidade_Expedida] - PROCESSA_ITEM
                       EndIf
               EndIf
       EndIf        
       Moveto "ExpedI"
       SaveTables 
  Case Dados_QTD<0 :  
       ACHOU_ITEM_LOTE = True
       While True
          Moveto "ExpedIL"
          Home
          Moveto [Codigo do Item]
          Locate CODIT
          If Retval
             Then SEQ = [Sequencia]
                  While [Codigo do Item]=CODIT
                    If [Sequencia]>SEQ 
                       Then SEQ = [Sequencia]    
                    EndIf       
                    Skip
                    If Eot() Then QuitLoop EnDIf
                    Locate Next CODIT 
                    If Not RetVal Then QuitLoop EndIf
                  EndWhile
                  SALDO_LOTE = 0
                  Moveto "ExpedIL"
                  Moveto [Sequencia]
                  Locate SEQ
                  If PROCESSA_ITEM > [LoteQuantidade]
                     Then SALDO_LOTE = [LoteQuantidade]
                          PROCESSA_ITEM = PROCESSA_ITEM - [LoteQuantidade] 
                          [LoteQuantidade] = 0
                     Else SALDO_LOTE = PROCESSA_ITEM
                          [LoteQuantidade] = [LoteQuantidade] - PROCESSA_ITEM
                          PROCESSA_ITEM = 0 
                  EndIf
                  If SALDO_LOTE > 0
                     Then LANCTO = [Numero do Lancamento]
                          Moveto "\\Sistemas\\Estoque\\SdLote" 
                          Moveto [Numero do Lancamento]
                          Locate LANCTO
                          If RetVal
                             Then [LoteSaldo] = [LoteSaldo] + SALDO_LOTE
                                  If [LoteSaldo] > 0 And [LoteStatus] = "E" 
                                     Then [LoteStatus] = ""
                                  EndIf 
                                  UnLockRecord   
                             ELse ;Mensagem("NÆo foi localizado o saldo do lote "+StrVal(LANCTO)+"!")
                          EndIf   
                  EndIf
                  Moveto "ExpedIL"
                  If [LoteQuantidade]=0 
                     Then Del 
                  EndIf
                  If PROCESSA_ITEM = 0 Then QuitLoop EndIf 
             Else QuitLoop      
          EndIf
       EndWhile
       SaveTables
       Moveto "ExpedIL"
       SaveTables    
       Moveto "ExpedI" 
  OtherWise : 
       FAZ_PROCESSO     = True
       TOTAL_SOLICITADO = Dados_QTD
       TOTAL_LOTE       = 0
       ACHOU_ITEM_LOTE  = False
       Moveto "\\Sistemas\\Estoque\\SdLote"
       Moveto [Codigo da Empresa]
       Locate [ExpedC->Codigo da Empresa],CODIT
       If Not Retval
          Then ;MSG = "NÆo foi localizado lote dispon¡vel para o item "+CODIT+"!"
               FAZ_PROCESSO=False
          Else While [Codigo da Empresa] = [ExpedC->Codigo da Empresa] And [Codigo do Item]=CODIT
                 If [LoteStatus]="" 
                    Then ACHOU_ITEM_LOTE=True
                         CopyToArray LOTE_ITEM
                         VSDGNLOTE = LOTE_ITEM["LoteNumero"]
                         Switch
                           Case PROCESSA_ITEM=[LoteSaldo] : ATIVA_LOOP   = False
                                                            ENCERRA_LOTE = True
                           Case PROCESSA_ITEM>[LoteSaldo] : ATIVA_LOOP   = True
                                                            ENCERRA_LOTE = True
                           OtherWise                      : ATIVA_LOOP   = False
                                                            ENCERRA_LOTE = False
                         EndSwitch
                         Moveto "ExpedIL"   
                         Moveto [Sequencia]
     
                         End
                         ITEM = [Sequencia]
                         Down
                         Moveto [Sequencia]
                         Seta_Sequencia(ITEM,False)
                         [Codigo do Item        ] = CODIT
                         [Numero do Lancamento  ] = LOTE_ITEM["Numero do Lancamento"] 
                         [LoteNumero            ] = LOTE_ITEM["LoteNumero"        ]    
                         If ENCERRA_LOTE
                            Then TOTAL_LOTE = TOTAL_LOTE + LOTE_ITEM["LoteSaldo"]
                                 [LoteQuantidade] = LOTE_ITEM["LoteSaldo"]
                                 PROCESSA_ITEM = PROCESSA_ITEM - LOTE_ITEM["LoteSaldo"] 
                            Else [LoteQuantidade] = PROCESSA_ITEM
                                 TOTAL_LOTE       = TOTAL_LOTE + PROCESSA_ITEM
                         EndIf
                         [LoteDataFabricacao    ] = LOTE_ITEM["LoteDataFabricacao"]
                         [LoteDataValidade      ] = LOTE_ITEM["LoteDataValidade"  ]
                         UnLockRecord
                          
                         If TOTAL_LOTE<0 Then TOTAL_LOTE = TOTAL_LOTE * -1 EndIf   
                         
                         Moveto "\\Sistemas\\Estoque\\SdLote" 
                         If ENCERRA_LOTE
                            Then [LoteSaldo ] = BlankNum()
                                 [LoteStatus] = "E"
                            Else [LoteSaldo ] = [LoteSaldo] - PROCESSA_ITEM    
                         EndIf
                         If Not ATIVA_LOOP 
                            Then PROCESSA_ITEM=0
                                 QuitLoop 
                         EndIf   
                 EndIf        
                 Skip
                 If Eot() Then QuitLoop EnDIf
               EndWhile
               UnLockRecord
               SaveTables
               Moveto "ExpedIL"
               SaveTables
               Moveto "ExpedI"             
       EndIf
       Switch
          Case Not FAZ_PROCESSO     :
          Case PROCESSA_ITEM>0      : MSG = Completa("NÆo h  quantidade total expedida dispon¡vel no saldo do lote.",62," ")
                                      If TOTAL_LOTE>0
                                         Then MSG = MSG +"////"
                                              MSG = MSG + Completa(Format("W6",TOTAL_SOLICITADO)+" Quantidade … Expedir",62," ")+"//"
                                              MSG = MSG + Completa(Format("W6",TOTAL_LOTE)+" Quantidade do Lote",62," ")+"//"
                                              MSG = MSG + Completa("------",62," ")+"//"
                                              MSG = MSG + Completa(Format("W6",PROCESSA_ITEM)+" Quantidade indispon¡vel no Lote",62," ")
                                      EndIf
                                      ;---- NÆo deixa expedir mais que o saldo do lote
                                      If [Quantidade_Expedida]-PROCESSA_ITEM=0
                                          Then Del
                                          Else [Quantidade_Expedida] = [Quantidade_Expedida] - PROCESSA_ITEM
                                      EndIf 
          Case Not ACHOU_ITEM_LOTE  : ;MSG = "NÆo foi localizado lote dispon¡vel para o item "+CODIT+"!"
          OtherWise                 : [LoteNumero] = VSDGNLOTE
                                      MSG = ""
       EndSwitch
       If MSG<>"" 
          Then Mensagem(MSG)
       EndIf                
EndSwitch            
Moveto TABELA    

EndProc ;Atualiza_Lote()  

;*******************************************************************************
;* Rotina para                                                                 *
;*******************************************************************************
Proc AcertarLocalizarItem()

Acerta_Item()

Calc_Itens()
If VSQTDF>=500
 Then Mensagem("NÆo expedir mais de 500 itens!// //Verificar !")
EndIf 
Moveto [Codigo do Item]
Locate CODIT

endproc

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Acerta_Item()
[Quantidade_Diferenca]=([Quantidade_Expedida]-[Quantidade_Pedido])+[Quantidade_Substituida]
if [Quantidade_Pedido]=0 or
   isblank([Quantidade_Pedido])
   then [Quantidade_Diferenca]=0
endif   

If [Quantidade_Diferenca]=0
  Then [Quantidade_Diferenca]=BlankNum()
EndIf

If [Quantidade_Diferenca]>0
   Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
   Else [Quantidade_Fora_Pedido]=BlankNum()
EndIf
If [Quantidade_Expedida]=0
  Then [Quantidade_Expedida]=BlankNum()
EndIf
If [Quantidade_Substituida]=0
  Then [Quantidade_Substituida]=BlankNum()
EndIf

If IsBlank([ExpedC->Numero do Pedido])
   Then [Quantidade_Diferenca  ]=BlankNum()
        [Quantidade_Fora_Pedido]=BlankNum()
        [Quantidade_Substituida]=BlankNum()
Endif   

EndProc ;CDBarras()

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Calc_Itens()

VSQTDF  = BlankNum() 
VSQTDFP = BlankNum()
VSQTDP  = BlankNum()
VSQTDE  = BlankNum()
VSQTDS  = BlankNum() 
VSQTDD  = BlankNum()
Moveto "ExpedI"
Scan
  If [Quantidade_Expedida]>0
     Then VSQTDF = VSQTDF + 1
  EndIf   
  VSQTDFP = VSQTDFP + [Quantidade_Fora_Pedido]
  VSQTDP  = VSQTDP  + [Quantidade_Pedido     ]
  VSQTDE  = VSQTDE  + [Quantidade_Expedida   ]
  VSQTDS  = VSQTDS  + [Quantidade_Substituida]
EndScan            

If Not IsBlank([ExpedC->Numero do Pedido])
   Then VSQTDD=(VSQTDE-VSQTDP)
   Else VSQTDD =BlankNum()
EndIf
  
If VSQTDF =0 Then VSQTDF =BlankNum() EndIf
If VSQTDP =0 Then VSQTDP =BlankNum() EndIf
If VSQTDFP=0 Then VSQTDFP=BlankNum() EndIf
If VSQTDE =0 Then VSQTDE =BlankNum() EndIf
If VSQTDS =0 Then VSQTDS =BlankNum() EndIf

EndProc   ; (Calc_Itens)

;*******************************************************************************
;* Rotina para Ajustar dados na cabe‡a                                         *
;*******************************************************************************
Proc Ajusta_Dados()

Moveto "ExpedI"
Calc_Itens()

Moveto "ExpedC"
[Quantidade_Pedido     ]=VSQTDP
[Quantidade_Expedida   ]=VSQTDE
[Quantidade_Diferenca  ]=VSQTDD
[Quantidade_Fora_Pedido]=VSQTDFP
[Quantidade_Substituida]=VSQTDS

EndProc   ; (Ajusta_Dados)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Moveto "ExpedI"
FACA_DIGITAF=True
Return
  
EndProc   ; (ChaveCdBar)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Verifica_Sistema_Gerador(PARAM)

If [Sistema Gerador]<>"" And [Sistema Gerador]<>SISTEMA_GERADOR
   Then MSG = Completa("Este lan‡amento pertence a rotina:",68," ")+"////"
        Switch
          Case [ExpedC->Sistema Gerador] = "IC" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 18. ORDEM DE EXPEDICAO - PEDIDO     ",68," ")
         ;Case [ExpedC->Sistema Gerador] = "LT" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 23. ORDEM DE EXPEDICAO - LOTE       ",68," ")
          Case [ExpedC->Sistema Gerador] = "IQ" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 17. ORDEM DE EXPEDICAO - ETIQUETA   ",68," ")
          Case [ExpedC->Sistema Gerador] = "IV" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 22. ORDEM DE EXPEDICAO - VARIA€åES  ",68," ")
          Case [ExpedC->Sistema Gerador] = "OF" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 21. ORDEM DE EXPEDICAO - FATURAMENTO",68," ")
          Case [ExpedC->Sistema Gerador] = "I3" : MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > ??. ORDEM DE EXPEDICAO",68," ") 
        EndSwitch
        If PARAM = "EXCLUSAO"
           Then MSG = MSG + "////"
                MSG = MSG + Completa("NÆo ‚ poss¡vel a exclusÆo deste registro!",68," ")
        EndIf
        Mensagem(MSG)
        CHAVEC=9
        Return False
EndIf

Return True

EndProc ;Verifica_Sistema_Gerador() 

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO()
Private ANT_GRAVA_LOG    

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

ANT_GRAVA_LOG = GRAVA_LOG
GRAVA_LOG     = False
                                        
Moveto "ExpedC"
Moveto [Numero da OE]
UnLockRecord
PickForm "10"

Moveto "ExpedI"  
While RecordStatus("New")=False
  ITEM=[Codigo do Item]
  ;ESTOQUE("Exclusao")
  Del
EndWhile      
       
Moveto "ExpedIL"
While RecordStatus("New")=False
  LOTE_SALDO = [LoteQuantidade      ]
  NLANC      = [Numero do Lancamento]
  Moveto "\\Sistemas\\Estoque\\SdLote"
  Moveto [Numero do Lancamento]
  Locate NLANC
  If RetVal
     Then If [ExpedC->Tipo de Operacao]="E"
             Then [LoteSaldo] = [LoteSaldo] - LOTE_SALDO 
                  If [LoteSaldo] = 0 Or [LoteSaldo]=BlankNum()
                     Then [LoteSaldo ] = BlankNum()
                          [LoteStatus] = "E"
                  EndIf
             Else [LoteSaldo] = [LoteSaldo] + LOTE_SALDO
                  If [LoteSaldo] > 0 And [LoteStatus] = "E"
                     Then [LoteStatus] = ""
                  EndIf
          EndIf                                                                      
          UnLockRecord 
  EndIf
  Moveto "ExpedIL"
  Del
EndWhile

Moveto "ExpedC"
GRAVA_LOG = ANT_GRAVA_LOG
If GRAVA_LOG Then Grava_LogEx("Expedic") EndIf
Del     

Release Vars GRAVA_LOG

EndProc  ; (Exclusao)

;*******************************************************************************
;* Rotina para Carregar Pedido                                                 *
;*******************************************************************************
Proc Carrega_Pedido()
Private codite

if isblank([ExpedC->Numero do Pedido])
   Then Moveto "ExpedI"
        Return
EndIf

Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate [ExpedC->Numero do Pedido]
If Not RetVal
   Then Moveto "ExpedI"
        Return
EndIf

Moveto "ExpedI"
Scan
  [Quantidade_Pedido]=BlankNum()
EndScan

while RecordStatus("New")=True
   Del
Endwhile        

Moveto "PedidoI"
While [Numero do Pedido]=[ExpedC->Numero do Pedido]

  If IsBlank([Quantidade Faturada]) Or
     [Quantidade Faturada]>=0
     Then
          SDPED=[Pedidoi->Quantidade]-[PedidoI->Quantidade Faturada]
          If SDPED>0
             Then
                  Moveto "ExpedI"
                  Moveto [Codigo do Item]
                  Locate [PedidoI->Codigo do Item]
                  If Not RetVal
                     Then End
                          If [Referencia]<>"" Or [Codigo do Item]<>""
                             Then Down
                          EndIf   
                          [Codigo do Item   ]=[PedidoI->Codigo do Item]
										 ;Else codite=[Codigo do Item]
										 ;	  [Codigo do Item   ]=""
										 ;	  [Codigo do Item   ]=codite
									EndIf        
                          
                  [Quantidade_Pedido]=[Quantidade_Pedido]+SDPED
                  UnLockRecord
                
                  Moveto "PedidoI"
          EndIf
  EndIf
  
  Skip
  If EOT() Then QuitLoop Endif
EndWhile

Moveto "ExpedI"
Scan
  Acerta_Item()
EndScan
Calc_Itens()

Getrecord "PedidoC" [ExpedC->Numero do Pedido] To REG_PEDC
If RetVal
  Then Moveto "ExpedC"
       If [Codigo da Empresa      ]<>REG_PEDC["Codigo da Empresa"]       Then [Codigo da Empresa      ]=REG_PEDC["Codigo da Empresa"]       EndIf
       If [Nome Fantasia Empresa  ]<>REG_PEDC["Nome Fantasia Empresa"]   Then [Nome Fantasia Empresa  ]=REG_PEDC["Nome Fantasia Empresa"]   EndIf
       If [Codigo                 ]<>REG_PEDC["Codigo"]                  Then [Codigo                 ]=REG_PEDC["Codigo"]                  EndIf
       If [Razao Social           ]<>REG_PEDC["Razao Social"]            Then [Razao Social           ]=REG_PEDC["Razao Social"]            EndIf
       If [Codigo do Representante]<>REG_PEDC["Codigo do Representante"] Then [Codigo do Representante]=REG_PEDC["Codigo do Representante"] EndIf
       If [Nome Fantasia Represent]<>REG_PEDC["Nome Fantasia Represent"] Then [Nome Fantasia Represent]=REG_PEDC["Nome Fantasia Represent"] EndIf
EndIf

Moveto "ExpedI"

EndProc ; (Carrega_Pedido)

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

PARAM_ALTERA_QTDE = ""
PARAM_INCLUI_ITEM = ""

If IsEmpty("P_Pedido")
   Then Mensagem("N„o est„o configurados os parametros de pedidos para digita‡„o !")
        Return False
   Else GetRecord "P_Pedido" [ExpedC->Codigo da Empresa] To REG_PEDIDO
        If RetVal
           Then PARAM_ALTERA_QTDE = REG_PEDIDO["Altera_Qtde_Expedic"]
                PARAM_INCLUI_ITEM = REG_PEDIDO["Inclui_Item_Expedic"]
           Else Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Return False
        EndIf
EndIf

PARAM_EXPED_E_IMP_SIMPLES = ""
PARAM_EXPED_E_IMP_GRADE   = ""
PARAM_EXPED_E_IMP_GRDCOR  = ""
PARAM_EXPED_P_IMP_SIMPLES = ""
PARAM_EXPED_P_IMP_GRADE   = ""
PARAM_EXPED_P_IMP_GRDCOR  = ""

If IsEmpty("P_Exped")
   Then Mensagem("N„o est„o configurados os parametros de expedicao para digita‡„o !")
        Return False
   Else GetRecord "P_Exped" [ExpedC->Codigo da Empresa] To REG_EXPED
        If RetVal
           Then PARAM_EXPED_E_IMP_SIMPLES = REG_EXPED["Script_E_Imp_Simples"]
                PARAM_EXPED_E_IMP_GRADE   = REG_EXPED["Script_E_Imp_Grade"]
                PARAM_EXPED_E_IMP_GRDCOR  = REG_EXPED["Script_E_Imp_GrdCor"]
                
                PARAM_EXPED_P_IMP_SIMPLES = REG_EXPED["Script_P_Imp_Simples"]
                PARAM_EXPED_P_IMP_GRADE   = REG_EXPED["Script_P_Imp_Grade"]
                PARAM_EXPED_P_IMP_GRDCOR  = REG_EXPED["Script_P_Imp_GrdCor"]
                
           Else Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Return False
        EndIf
EndIf


Return True

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Verifica Dulicidade                                                         *
;*******************************************************************************                      
Proc Verifica_Duplicidade(PARAM)
Private PARAM, CONT_LIMITE

CONT_LIMITE = 0
EXPED = [Numero da OE]
Pedido = ""

UnLockRecord
FormKey

Moveto [Numero do Pedido]
Locate PARAM
If RetVal
   Then GetRecord "\\Sistemas\\Vendas\\Expedc" EXPED To REG_EXPED
        While PARAM = [] 
           If EXPED <> [Numero da OE]
              Then Pedido = Pedido+"//"+Format("W61"," - "+[Numero da OE])
              ;---- Limite de caracteres p/ exibi‡Æo da MSG -------
              CONT_LIMITE = CONT_LIMITE + 1
              If CONT_LIMITE = 95 Then QuitLoop EndIF
           EnDIf
           Skip
           If EOT() Then Quitloop EndIf
           Locate Next PARAM
           If Not RetVal
              Then QuitLoop
           EndIf       
        EndWhile
EndIf

Moveto [Numero da OE]
Locate EXPED 
UnLockRecord
FormKey
If Pedido<>""
   Then Mensagem(Completa("O Pedido "+PARAM+" j  foi lan‡ado na(s) Expedi‡Æo(äes): ",60," ")+Pedido+"//")  
EndIf 
Release Vars Pedido
Return False
                       
EndProc ;Verifica_Duplicidade() 

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc, FORMMANUTENCAO

CoEdit NoWindow "ExpedC"
If FORMMANUTENCAO="4"
   Then ;Moveto [Quantidade_Pedido   ] Menu {Image} {Format} Enter {Fixed} {3}
        ;Moveto [Quantidade_Expedida ] Menu {Image} {Format} Enter {Fixed} {3}
        ;Moveto [Quantidade_Diferenca] Menu {Image} {Format} Enter {Fixed} {3}
EndIf

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll

        Release Vars All
        Release Procs All
        return false
EndIf

PickForm FORMMANUTENCAO
Moveto "\\Sistemas\\Estoque\\Itens" SetaCorRegistro("Invisivel")
Moveto "Pedidoi"                    SetHighLight Current Record 119 Field 119

Moveto "ExpedI" 

if FORMMANUTENCAO="4"
   then ;Moveto [Quantidade_Pedido   ] Menu {Image} {Format} Enter {Fixed} {3}
        ;Moveto [Quantidade_Expedida ] Menu {Image} {Format} Enter {Fixed} {3}
        ;Moveto [Quantidade_Diferenca] Menu {Image} {Format} Enter {Fixed} {3}
endif

Moveto "ExpedC"

Return True
EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para Verificar se Conteudo do Campo e Numero V lido                  *
;*******************************************************************************
Proc E_NumeroValidoV(Valor)
Private Valor,c,p,r      

If Len(Valor)=0
   Then Return False
EndIf

p=0
r=0

For c From 1 to Len(Valor)
 If SubStr(Valor,c,1)<"0" Or SubStr(Valor,c,1)>"9"
    Then If SubStr(Valor,c,1)=","
            Then p=p+1
            Else If SubStr(Valor,c,1)="-"  
                    Then r=r+1
                    Else Return False
                 EndIf   
         EndIf
 EndIf
EndFor

If p>1 or r>1
   Then Return False
EndIf

If r=1 And SubStr(Valor,1,1)<>"-"
   Then Return False
EndIf

p=searchfrom(",",valor,1)
If p>0
   Then If p=Len(Valor) Or
           p<(Len(Valor)-3)
           Then Return False
        EndIf
EndIf

Return True
EndProc

;*******************************************************************************
;* Rotina para Verificar se Conteudo do Campo e Numero V lido                  *
;*******************************************************************************
Proc Cnv_NumeroV(Valor)
Private Valor,c,s      

s=""
For c From 1 to Len(Valor)
  switch
    case substr(valor,c,1)="," : s=s+"."
    case substr(valor,c,1)="." : s=s+","
    otherwise                  : s=s+substr(valor,c,1) 
  endswitch
endfor

return numval(s)
EndProc

;*******************************************************************************
;* Rotina Dialog Leitura_Codigo_Barras 2                                         *
;*******************************************************************************
Proc SD_DialogLerCodBarra2(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA="// Esc=Retornar "
If Not IsAssigned(PARAM_QTD_CDBAR) Then PARAM_QTD_CDBAR="" EndIf
If Disparo="OPEN"
   Then INICIO_DIALOG=False
        Campo="TG_CODIGO"

        Dynarray WinArray_CDBarras[]
        Window handle Dialog To WinCDBarras
        Window GetAttributes WinCDBarras To WinArray_CDBarras
        WinArray_CDBarras["HASSHADOW"] = False
        WinArray_CDBarras["HASFRAME" ] = False
        Window SetAttributes WinCDBarras From WinArray_CDBarras

        Release vars WinCDBarras, WinArray_CDBarras 

EndIf        

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
             Case Campo="TG_CODIGO"         : CancelDialog
             Case Campo="TG_NLOTE"          : Campo="TG_CODIGO"   
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="TG_CODIGO"        : Campo="TG_NLOTE" 
                  Dados_Item=ControlValue("TG_CODIGO")
             Case Campo="TG_NLOTE"         :
                  VSDGNLOTE=ControlValue("TG_NLOTE")
                  If Not IsBlank(VSDGNLOTE)
                     Then AcceptDialog
                     Else Mensagem("Informe o n£mero do lote!")
                  EndIf             
           EndSwitch
   EndSwitch
EndIf
RefreshDialog

Switch
 Case Campo="TG_CODIGO"        : 
      If PARAM_QTD_CDBAR<>"N"
        Then MSG_CAMPO=" Informe s¢ [C¢digo] a [Quantidade]=1 ou informe [Quantidade]*[C¢digo] "
        Else MSG_CAMPO=" Informe s¢ [C¢digo] a [Quantidade]=1                                  "
      EndIf
 Case Campo="TG_NLOTE"         :
      MSG_CAMPO=" N£mero do Lote"  
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc Ler_CDBarras2(l,c)
Private l,c,Past,Pos, pesotxt, s, msg

If Not IsAssigned(PARAM_QTD_CDBAR) Then PARAM_QTD_CDBAR="" EndIf

While True                  
      INICIO_DIALOG=True
      
      Echo Normal
      Echo Off

      VSDGNLOTE = ""
      Dados_Item=""
      Dados_QTD =1

      If IsBlank([ExpedC->Tipo de Operacao]) Or [ExpedC->Tipo de Operacao]="S" 
         Then ShowDialog "Lendo C¢digo de Barras" Proc "SD_DialogLerCodBarra"
              Trigger "OPEN","ARRIVE"
              Key "ESC","ENTER"
               @ l,c Height 03 Width 82
                
                Label  @ 00,00 " Lendo Codigo de Barras -> "  For "TG_CODIGO"
                Accept @ 00,28 Width 36 "A33" Tag "TG_CODIGO" To Dados_Item
              EndDialog
              
         Else ShowDialog "Lendo C¢digo de Barras" Proc "SD_DialogLerCodBarra2"
              Trigger "OPEN","ARRIVE"
              Key "ESC","ENTER"
               @ 21,00 Height 04 Width 82
                
                Label  @ 00,00 "C¢digo de Barras" for "TG_CODIGO"
                Accept @ 01,01 Width 29 "A26" Tag "TG_CODIGO" To Dados_Item
                
                Label  @ 00,30 "N§ do Lote" for "TG_NLOTE"
                Accept @ 01,31 Width 15 "A12" picture "#*#" Tag "TG_NLOTE" to VSDGNLOTE          
              
              EndDialog
      EndIf
      Mouse Show
      If Not RetVal
         Then Return False
      EndIf

      If Len(Dados_Item)=0
         Then Loop
      EndIf
                       
      Past=SearchFrom("*",Dados_Item,1)
      If Past>0 And Not E_NumeroValido(SubStr(Dados_Item,1,Past-1))
         Then Mensagem("Quantidade invalida !")
              Loop
      Endif   

      Switch
        Case SISTEMA_GERADOR="LT" :
             If IsBlank(VSDGNLOTE)
                Then Mensagem("Informe o n£mero do lote!") 
                     Loop 
             EndIf
        Case Sys_Codigo_Cliente="0377" And Past=0 :
             pesotxt=substr(Directory(),1,2)+"\\Sistemas\\Vendas\\Balanca\\Pesos.txt"
             If IsFile(PrivDir()+"log_bal.Txt")
                Then LeiaINI(PrivDir()+"log_bal.txt","BALANCA.S.1")
                     Switch                
                       Case BALANCA="1" : pesotxt=substr(Directory(),1,2)+"\\Sistemas\\Vendas\\Balanca\\Pesos.txt"
                       Case BALANCA="2" : pesotxt=substr(Directory(),1,2)+"\\Sistemas\\Vendas\\Balanca\\Pesos2.txt"
                     EndSwitch   
             EndIf
         
             If Not isFile(pesotxt)
                Then msg=    "Erro balan‡a [Arquivo] !// //"
                     msg=msg+"Tente novamente, se persistir://"
                     msg=msg+"- Verificar cabo,                   //"
                     msg=msg+"- Verificar programa de comunica‡Æo://"
                     msg=msg+"-   Programa em execu‡Æo,           //"
                     msg=msg+"-   Porta serial,                   //"
                     msg=msg+"-   Arquivo txt (Pesos.TXT) na rede."
                     Mensagem(Msg)
                     loop
             EndIf   
              
             FileRead  pesotxt to conteudodoarquivo
             Filewrite pesotxt from ""
              
             s=substr(conteudodoarquivo,1,len(conteudodoarquivo)-1)
             If Not E_NumeroValidoV(s)
                Then Mensagem("Erro balan‡a [Peso] !// //Tente novamente, se persistir, verificar peso na balan‡a.")
                     Loop
             Endif
             Dados_QTD =Cnv_NumeroV(s)   
      EndSwitch
                   
      If Past>0                                                                                                    
        Then If PARAM_QTD_CDBAR<>"N"
                Then Dados_QTD=NumVal(SubStr(Dados_Item,1,Past-1))
                     Dados_Item=RTrim(SubStr(Dados_Item,Past+1,30))
                Else Mensagem("Fun‡ao [Quantidade]*[C¢digo] nÆo permitida!")
             EndIf
      EndIf          
      Echo Off
 
      If RetVal="ESC"
         Then Return False
         Else Return True                
      EndIf

EndWhile

EndProc ; Ler_CDBarras()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
DIGITAI()
Calc_Itens()
EndProc

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

FACA_DIGITAC = True
FACA_CHAVEI  = False
FACA_CHAVEV  = False
FACA_CHAVEL  = False

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Situacao da OE ]="EM ABERTO"
          [Sistema Gerador]="LT" 
          Carrega_Pedido()
  EndIf
  While True
    While FACA_CHAVEI
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile    
    While FACA_CHAVEV
      DIGITAV()
      If CHAVEV=9 Then QuitLoop EndIf
    EndWhile
    While FACA_CHAVEL
      CHAVEL()
      If CHAVEL=9 Then QuitLoop EndIf
    EndWhile
    If CHAVEC=8 Then QuitLoop EndIf
  EndWhile
EndWhile
Ajusta_Dados()
Moveto "ExpedC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM=FORMRELACAO
   Then PickForm FORMRELACAO
EndIf

SaveTables
EndProc              

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+        
        "\\Sistemas\\Vendas\\Bib_Bal,"+
        "\\Sistemas\\Vendas\\Bib_Vend"
        
SYS_VALOR()

MSG=""
COR_MENSAGEM="PRETO"

{Ask}{ExpedC}
Moveto [Numero da OE      ]       Typein "Calc Count as Qtde" 
Moveto [Data_Inclusao     ]       Typein "<(today-547)" 
do_it!
if not IsEmpty("Answer")
   then If [Qtde]>0
           Then MSG=MSG+"Existe(m) "+strval([Qtde])+" Ordem(s) de Expedi‡Æo(äes) criadas !   // //"
                MSG=MSG+"Para melhor seguran‡a e desempenho do Sistema,//"
                MSG=MSG+"recomendamos que fa‡a o fechamento mensal  das//"
                MSG=MSG+"mais antigas. Recomendamos manter apenas 1 ano//"
                MSG=MSG+"em aberto!                                    // //"
                MSG=MSG+"Verificar com o supervisor fechamento mensal !"
        EndIf
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif
Release Vars COR_MENSAGEM,MSG 

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""  EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""   EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""   EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""     EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""   EndIf
If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""           EndIf

SISTEMA_GERADOR       = "LT"
PARAM_PEDIDO_POREXPED = False
ROTINA_EXPEDICAO      = ""
FORMRELACAO           = "9"
FORMMANUTENCAO        = "10"
VSDG_DECIMAL          = "W5" 

Switch
  Case SYS_CODIGO_CLIENTE="0345" Or
       SYS_CODIGO_CLIENTE="0388" Or
       SYS_CODIGO_CLIENTE="0427" Or
       SYS_CODIGO_CLIENTE="0419" Or
       SYS_CODIGO_CLIENTE="0444"  : PARAM_PEDIDO_POREXPED = True
  Case SYS_CODIGO_CLIENTE="0377"  : VSDG_DECIMAL          = "W9.2"
EndSwitch

If Not Carrega_Tabelas()
   Then Return
EndIf   

Moveto "ExpedC"
PickForm FORMMANUTENCAO
Moveto "\\Sistemas\\Estoque\\SdLote" SetHighLight Current Record 51 Field 51

Moveto "ExpedC"
PickForm FORMRELACAO
OPCAO_FORM = FORMRELACAO

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM=FORMRELACAO
             Then PickForm FORMRELACAO
             Else PickForm FORMMANUTENCAO
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All