;** Expedic ********************************************************************
;*  Digitacao de Ordem de Expedicao                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 18/02/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 08/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 24/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F7
;Ultima Alteracao: 17/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Pedido()
;Ultima Alteracao: 09/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item SORTIDO LUPUS
;Ultima Alteracao: 13/04/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes para Impress„o de Posi‡„o Expedi‡„o
;Ultima Alteracao: 12/05/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Relat¢rios Grade por Cor
;Ultima Alteracao: 03/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item SORTIDO LUPUS
;Ultima Alteracao: 24/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes expedicao sem PEDIDO
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Rotina de C¢digo de Barras
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 09/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sortidas para Isabela Garcia
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 21/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SORTIDOS Isabela Garcia
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras  
;Ultima Alteracao: 18/07/2011 por Karina Andrade
;Motivo Alteracao: Add controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 12/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 11/10/2011 por Karina Andrade
;Motivo Alteracao: Ajustes controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 26/01/2012 por Bruno Carvalho
;Motivo Alteracao: P_Pedido n estava sendo aberta ao carregar o form ap¢s impressÆo!  
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 12/07/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes #0232#
;Ultima Alteracao: 13/02/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado Campo Observacao
;Ultima Alteracao: 27/05/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes CDBarras() 
;Ultima Alteracao: 21/07/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado mensagem p/ quando cliente tiver um parƒmetro especial [Descricao do Cobrador] #0232#
;Ultima Alteracao: 16/09/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado SYS_CODIGO_CLIENTE="0222" para imprimir observacao
;Ultima Alteracao: 14/12/2015 por Kamila Gomes
;Motivo Alteracao: Adicionado Mensagem de duplicidade de pedido #0171#
;Ultima Alteracao: 24/03/2016 por Bruno Carvalho
;Motivo Alteracao: Add proc Adiciona_Referencia() onde ‚ possivel localizar item por referencia, apenas p/ #0274#
;Ultima Alteracao: 10/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes nos scripts da expedi‡Æo onde ir  ser verificados nos parametros [P_EXPED]
;Ultima Alteracao: 16/05/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Codigo da Empresa" no FORM 
;Ultima Alteracao: 17/06/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado novo processo de numero de lan‡amento 
;Ultima Alteracao: 09/09/2016 por Bruno Carvalho
;Motivo Alteracao: InclusÆo de um pocesso para atualizar dados no EXPEDC conforme o PEDIDOC -> Carrega_Pedido()
;Ultima Alteracao: 02/12/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes pocesso para atualizar dados no EXPEDC conforme o PEDIDOC -> Carrega_Pedido()
;Ultima Alteracao: 12/01/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes f8 observa‡äes, f11 liberar OE                           
;Ultima Alteracao: 12/01/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes chavei()                                                 
;Ultima Alteracao: 16/01/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes carregar formïs diferentes                               
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes TG_REFERENCIA
;Ultima Alteracao: 30/01/2017 por Anivel Augusto Rodrigues  
;Motivo Alteracao: Ajustes novo fomr e CDBarras()
;Ultima Alteracao: 03/02/2017 por Bruno Carvalho  
;Motivo Alteracao: Adicionado ajustes no DIGITAC para verificar se lan‡amento pertence a qual tipo de expedi‡Æo
;Ultima Alteracao: 09/02/2017 por Bruno Carvalho  
;Motivo Alteracao: Ajsutes na mensagem ao verificar qual processo utilizado (expedi‡Æo normal ou de etiquetas) na proc DIGITAC()
;Ultima Alteracao: 15/03/2017 por Bruno Carvalho  
;Motivo Alteracao: Ajustes Carrega_Pedido() ao inserir itens do pedidos   
;Ultima Alteracao: 10/04/2017 por Bruno Carvalho  
;Motivo Alteracao: Ajustes Carrega_Pedido() ao inserir o item na expedI, End Down
;Ultima Alteracao: 03/05/2017 por Bruno Carvalho  
;Motivo Alteracao: Adicionado op‡Æo "F4" para informar volumes
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()
;Ultima Alteracao: 11/07/2017 por Bruno Carvalho                          
;Motivo Alteracao: Adicionado p/ #0345# parƒmetro PARAM_PEDIDO_POREXPED -> Conforme ‚ feito para o #0388#
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 26/06/2018 por Anivel Augusto Rodrigues  
;Motivo Alteracao: Ajustes mensagem 0112
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho                          
;Motivo Alteracao: Adicionado p/ #0419# parƒmetro PARAM_PEDIDO_POREXPED -> Conforme ‚ feito para o #0388#
;Ultima Alteracao: 30/10/2018 por Bruno Carvalho
;Motivo Alteracao: Verifica se h  pelo menos 1 item lan‡ado na expedi‡Æo antes de realizar o processo de impressÆo -> IMPRIME()
;Ultima Alteracao: 30/10/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado SaveTables ao pressionar PGDN p/ finalizar o registro
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 16/01/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado op‡Æo "F7" para usuario escolher a balan‡a "1" ou "2" #0377#, escolha armazenada no privdir do usu rio -> Balanca()
;Ultima Alteracao: 12/02/2019 por Bruno Carvalho                          
;Motivo Alteracao: Adicionado processo p/ #0425#
;Ultima Alteracao: 28/02/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes procurar item sortido 2 digitos para cor
;Ultima Alteracao: 30/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo para localizar codbar da proc CDBarras()
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado ABA [Volumes]
;Ultima Alteracao: 06/06/2019 por Bruno Carvalho                                                                      
;Motivo Alteracao: Adicionado Verifica_Sistema_Gerador() onde ‚ verificado o Sistema Gerador e a permissÆo de acesso  
;Ultima Alteracao: 12/06/2019 por Bruno Carvalho                                                                      
;Motivo Alteracao: #0377# ao chamar esse SCRIPT, ser  redirecionado p/ o SCRIPT "ExpedOf"
;Ultima Alteracao: 03/07/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado vari vel para controlar casas decimais VSDG_DECIMAL "ExpedOfI" e ajustes na proc Calc_Itens()
;Ultima Alteracao: 03/07/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado proc Ajusta_Dados() p/ gravar valor total na cabe‡a quando concluir todo o processo
;Ultima Alteracao: 04/07/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Mensagem_Expedicao() p/ quando existir mensagem de expedi‡Æo por cliente ("DestExp" na Destinat)
;Ultima Alteracao: 06/11/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes mensagem maximo 500 itens expedidos
;Ultima Alteracao: 13/11/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado SetaItemSortido() e ajustado todas as regras de sortido nesta proc e ajustes p/ quando qtd expedida 
;                  maior que 1 nas procs Adiciona_Referencia() e CDBarras()
;Ultima Alteracao: 27/11/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ortografica observa‡äes
;Ultima Alteracao: 29/11/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Novas procs, nova logica ao lancar itens
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 12/02/2020 por Bruno Carvalho                          
;Motivo Alteracao: Adicionado processo p/ #0428#
;Ultima Alteracao: 06/05/2020 por Anivel Augusto Rodrigues                       
;Motivo Alteracao: Add ClienteUsaItemSortido(), PegaItemSortido() e IsCodigoItemSortido()
;Ultima Alteracao: 14/07/2020 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado parƒmetro para [Sistema Gerador]="LT" na proc Verifica_Sistema_Gerador() 
;Ultima Alteracao: 06/10/2020 por Anivel Augusto Rodrigues                       
;Motivo Alteracao: Ajustes Controla_EdicaoC(), nÆo permitir nova OE para o mesmo pedido da OE nÆo FATURADA #0232
;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: 27/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0051 CDBarras(), qtd cdbarras fatro conversao embalagem
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero 
;Ultima Alteracao: 19/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome Vise Sistemas
;Ultima Alteracao: 17/03/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado IMPRIME_ETIQUETA()
;Ultima Alteracao: 01/04/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0171 bloqueios leitura codigo de barras
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 
;Ultima Alteracao: 29/04/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes no filtro ao buscar a empresa -> Monta_Opcoes("Empresas","")

;*******************************************************************************
;* 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 PgDn 
  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_C()
                                             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("","F")
            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()

Moveto "ExpedC"
If CHAVEC=0
   Then If Not Verifica_Sistema_Gerador("") 
           Then CHAVEC=9
                Return
        EndIf         
EndIf           

;------------------------------------------------------------------------------- 
;Excluir este processo em 06/06/2020, pois processo acima realzia esta etapa de verifica‡Æo pelo SISTEMA GERADOR incluso em 06/06/2019
If CHAVEC=0 And [Sistema Gerador]=""
   Then If ROTINA_EXPEDICAO = "ETIQ"
           Then Moveto "ExpedIQ"
                If RecordStatus("New")=True
                   Then MSG =       Completa("Este lan‡amento pertence a rotina:",68," ")+"////"
                        MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 18. ORDEM DE EXPEDICAO",68," ")
                        Mensagem(MSG)
                        CHAVEC=9        
                        Return
                EndIf
           Else Moveto "ExpedI"
                If RecordStatus("New")=True
                   Then Moveto "ExpedC" 
                        MSG =       Completa("Este lan‡amento pertence a rotina:",68," ")+"////"
                        MSG = MSG + Completa("FATURAMENTO > EXPEDICAO > 17. ORDEM DE EXPEDICAO - ETIQUETA",68," ")
                        Mensagem(MSG)
                        CHAVEC=9        
                        Return
                EndIf        
        EndIf
        Moveto "ExpedC"
EndIf  
;-------------------------------------------------------------------------------

If CHAVEC=0
   Then Moveto "ExpedI"
        Calc_Itens()
        Home End
        SetaCorRegistro("Padrao")
        Moveto "ExpedC"
        If Not IsFile(PrivDir()+"log_bal.Txt") And SYS_CODIGO_CLIENTE="0377"
           Then Balanca()
        EndIf
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()
        Moveto [Numero_Carregamento]
   Else Moveto [Codigo da Empresa]
        ;Moveto [Numero do Pedido]
EndIf

FACA_CHAVEI=True
INICIO_PAGINA=False

While True
  
  TECLA=" Esc=Retornar  "
  If Field()="Codigo da Empresa"   Or       
     Field()="Numero do Pedido"    Or
     Field()="Numero_Carregamento" 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()="Numero_Carregamento" : MSGCAMPO="Numero do Carregamento"
  EndSwitch
  
  If Field()="Codigo da Empresa"      
     Then Monta_Opcoes("Empresas","")     
  EndIf

  Prompt TECLA
  Wait Field
       ;Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F8","F35","Down"
  
  Switch
  Case RetVal="F1":
      If Field()="Numero do Pedido"    Or       
         Field()="Numero_Carregamento" Or      
         Field()="Codigo"         
         Then CONSULTAF1()
       EndIf
       If Field()="Codigo da Empresa"         
          Then Seleciona_Opcoes("Empresas","CR")
       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_C()
                               CHAVEC=9
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Empresa"  :   
            If QuerDesfazer("")
               Then GRAVA_LOG=False
                    EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero do Pedido"   : Moveto [Codigo da Empresa]
       Case Field()="Numero_Carregamento":
            If CHAVEC=1
               Then Moveto [Numero do Pedido]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Codigo"      : Moveto [Numero_Carregamento]
       Case Field()="Razao Social": Moveto [Codigo]
       OtherWise                  : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
       Case Field()="Codigo da Empresa":
            If Not Checa_Opcoes("Empresas",[])
               Then Mensagem("Empresa inv lida !")
                    Loop
            EndIf
            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
            EndIf
            Moveto [Numero_Carregamento]
       Case Field()="Numero_Carregamento":
            If IsBlank([Numero do Pedido])
               Then Moveto [Codigo]
               Else QuitLoop
            EndIf   
       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 de Dialogo da Referencia                                             *
;*******************************************************************************
Proc SD_DialogRef(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""      

If Campo<>"TG_QUANTIDADE" And Campo<>"TG_FLAG"
   Then Campo="TG_QUANTIDADE"
EndIf  

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  9 : Temp=False
     Case Evento["KeyCode"] =  27:  
          Temp=False
          Switch
            Case Campo="TG_QUANTIDADE" : CancelDialog
            Case Campo="TG_FLAG"       : Campo="TG_QUANTIDADE"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13: 
          Temp=False
          Switch
            Case Campo="TG_QUANTIDADE" :
                 VSDGQUANTIDADE = ControlValue("TG_QUANTIDADE")
                 If VSDGQUANTIDADE<>0 And VSDGQUANTIDADE<>BlankNum()
                    Then Campo="TG_FLAG"
                 EndIf                
            Case Campo="TG_FLAG"      : AcceptDialog
                 VSDGFLAG = ControlValue("TG_FLAG")
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf  

Switch           
  Case Campo="TG_QUANTIDADE" :
       MSG_CAMPO="Informe a Quantidade"
  Case Campo="TG_FLAG" :
       MSG_CAMPO="Enter=Prosseguir"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_DialogRef

;*******************************************************************************
;* 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",
              "F7  ~B~alan‡a                 " : " Altera a Balan‡a                               " : "F7",              
              "F8  ~O~bserva‡äes             " : " Observa‡äes                                    " : "F8",
              "F9  ~E~tiqueta de Carregamento" : " Imprimir Etiqueta de Carregamento              " : "F9",
              "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 Or RetVal = -116:
         Del
         FACA_CHAVEV = True
         CHAVEI      = 9
         Return
    Case RetVal="F1"  :
         If Field()="Codigo do Item"         
            Then CONSULTAF1()
                 ;---- Controle por Referˆncia (Apenas com o F1)
                 If PARAM_REFERENCIA
                    Then GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
                         If RetVal
                            Then NAO_FAZ        = True
                                 Switch
                                   Case REG_ITEM["Inativo"]="S"       : Mensagem("Este item: //"+REG_ITEM["Codigo do Item"]+"//"+
                                                                        REG_ITEM["Descricao do Item"]+"// // esta inativo !")
                                   Case REG_ITEM["Tipo do Item"]<>"P" : Mensagem("Este item: //"+REG_ITEM["Codigo do Item"]+"//"+
                                                                        REG_ITEM["Descricao do Item"]+"// // n„o ‚ um produto acabado !")    
                                   OtherWise                          : 
                                         VSDGREFERENCIA = REG_ITEM["Referencia"]
                                         VSDGDSITITEM   = REG_ITEM["Descricao do Item"]
                                         VSDGQUANTIDADE = BlankNum()
                                         VSDGFLAG       = ""
                                         While True
                                           ShowDialog "Item ["+[Codigo do Item]+"]" Proc "SD_DialogRef"
                                           Trigger "OPEN","ARRIVE","UPDATE","CLOSE","SELECT"
                                           Key "F1","ENTER","ESC",
                                           -75, -77, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140, -147  
                                           @ 02,16   Height 05 Width 70
                
                                           Label  @ 00,00 "Referˆncia"  For "TG_REFERENCIA"
                                           Accept @ 01,01 Width 13 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA
                                           
                                           Label  @ 00,14 "Item"  For "TG_REFERENCIA"
                                           Accept @ 01,15 Width 33 "A30"  Picture "!*!" Tag "TG_DSITITEM"  To VSDGDSITITEM
                      
                                           Label  @ 00,48 "Quantidade" For "TG_QUANTIDADE"
                                           Accept @ 01,49 Width 10 "S"  Tag "TG_QUANTIDADE" To VSDGQUANTIDADE
                                           
                                           Accept @ 01,60 Width 3 "A1"  Tag "TG_FLAG" To VSDGFLAG
                                           EndDialog
                                           If Not RetVal Then QuitLoop EndIf
                                           NAO_FAZ = False
                                           QuitLoop
                                         EndWhile                    
                                 EndSwitch
                                 
                                 If Not NAO_FAZ
                                    Then Adiciona_Referencia()
                                    Else Del               
                                 EndIf
                                 
                                 Moveto [Codigo do Item]
                                 If RecordStatus("New")=True
                                    Then FACA_CHAVEI =False
                                         FACA_DIGITAC=False
                                         CHAVEC=8 
                                 EndIf
                                 CHAVEI=9
                                 Return   
                         EndIf 
                 EndIf   
         EndIf
    Case Retval="F2":
         Del
         CDBarras()
         QuitLoop
         
    Case Retval="F4" Or RetVal=-62:
         Del
         FACA_CHAVEV=True
         CHAVEI     = 9
         Return
    
    Case Retval="F7":
         Del
         If SYS_CODIGO_CLIENTE<>"0377"
            Then Mensagem("NÆo ‚ poss¡vel acessar essa fun‡Æo.//Verificar com o Suporte T‚cnico VISE SISTEMAS!")
            Else Balanca()
         EndIf    
         QuitLoop
    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="F9" :
         Del
         If SYS_CODIGO_CLIENTE<>"0227"
            Then MSG =       "NÆo h  configura‡Æo de parƒmetros para essa empresa!// //"
                 MSG = MSG + "Verificar com Suporte da Vise !"
                 Mensagem(MSG)
                 Quitloop
            Else If IMPRIME_ETIQUETA()
                    Then FACA_CHAVEI =False
                         FACA_DIGITAC=False
                         CHAVEI=9
                         Return
                         Quitloop
                    Else Quitloop 
                 EndIf   
         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 !")
                 Quitloop
         EndIf         
         SaveTables
         FACA_CHAVEI =False
         FACA_DIGITAC=False
         CHAVEI=9
         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
         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 !")
              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
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
         
    Case Retval="ESC":  
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then If QuerExcluir("")
                    Then FACA_CHAVEI =False
                         FACA_DIGITAC=False
                         CHAVEC=8
                    Else Loop
                 EndIf         
         EndIf   
         CHAVEI=9
         Return
         
   Case Retval="ENTER": 
        ;CODIT=[Codigo do Item]
        ;Del
        ;Locate ORDEXP,CODIT
        ;If Retval
        ;   Then CHAVEI=0
        ;        CODIT=[]
        ;   Else CHAVEI=1
        ;        End
        ;        Down
        ;        [Numero da OE  ]=ORDEXP
        ;        [Codigo do Item]=CODIT
        ;        UnLockRecord
        ;        Locate ORDEXP,CODIT
        ;EndIf
        ;Return 
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina de Impressao de Etiqueta de Carregamento                             *
;*******************************************************************************
Proc IMPRIME_ETIQUETA()

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

Moveto "ExpedC"
CopyToArray REG_EXPEDC
NUMPED = [Numero do Pedido       ]
NCOP   = [Numero Ordem de Volumes]

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

PARAM_ETIQUETA_CARREGAMENTO = "EV_0227"        
Play PARAM_ETIQUETA_CARREGAMENTO
           
Do_It!
ClearAll

Carrega_Tabelas()

Return True           

EndProc ;IMPRIME_ETIQUETA()

;*******************************************************************************
;* 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 Or RetVal = -116 Or Retval="PGDN":
       FACA_CHAVEV = False
       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_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 Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar()
Home
;Moveto [Quantidade_Expedida]
While True

      TECLA=" Del=Excluir   (Use as Teclas p/ mover)"
      MSGCAMPO=Field()

      VRANT=[Quantidade_Expedida]

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","UP","DOWN","PGUP","PGDN","HOME","END","DEL","RIGHT","LEFT"

      Switch
      Case Retval="ESC":
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL" And [Quantidade_Pedido]<=0:
           If QuerExcluir("")
              Then DEL
                   Calc_Itens()
                   If RecordStatus("New")
                      Then QuitLoop
                   EndIf
           EndIf
      OtherWise:
           TECLAPRESS=RetVal

           If [Quantidade_Expedida]<>VRANT
              Then [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
									 Acerta_Item()
                   Calc_Itens()
           EndIf      

           If TECLAPRESS="LEFT" And Field()="Quantidade_Expedida"
              Then Loop
           EndIf
           If (TECLAPRESS="ENTER" or  TECLAPRESS="RIGHT") And Field()="Quantidade_Expedida"
              Then Down
                   ;Moveto [Quantidade_Expedida]
              Else KeyPress TECLAPRESS
            EndIf
            If RecordStatus("New")
               Then Del
                    QuitLoop
            EndIf
      EndSwitch
EndWhile

EndProc ; (Editar)
                         
;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc Adiciona_Referencia()
Private REG_P_PEDIDO,cc

;NÆo  foi um unico processo  de  adicionar item, como a proc CDBarras(), por mais que as duas procs tenham semelhan‡a,
;pois o controle no codigo de barras ‚ continuo, utilizando um while para este controle, e no caso deste procedimento,
;‚  uma  unica vez, o lancamento e de item a item, assim como outros dados e comportamentos que teve que ser reescrito 
;e modificados para atender a essa necessidade.

If Not IsAssigned(PARAM_INCLUI_ITEM)
   Then If [Expedc->Codigo da Empresa]="" 
           Then AUX_EMP = SYS_EMPRESA_DEFAULT
           Else AUX_EMP = [Expedc->Codigo da Empresa] 
        EndIf
        GetRecord "\\Sistemas\\Vendas\\P_Pedido" AUX_EMP To REG_P_PEDIDO
        PARAM_INCLUI_ITEM = REG_P_PEDIDO["Inclui_Item_Expedic"]
        Release Vars AUX_EMP
EndIf            

Dados_QTD = VSDGQUANTIDADE
CODIT     = [Codigo do Item]
ITOK      = True
INCLUI    = False  
  
CopyToArray ITEM
Del 

LancarItem()

EndProc ;Adiciona_Referencia()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private 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 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 Loop
  EndIf
  
  switch
    case sys_codigo_cliente="0051" and REG_BUSCA_LOOKUP["Fator Conversao Embalagem"]>1: 
      Dados_QTD =( Dados_QTD * REG_BUSCA_LOOKUP["Fator Conversao Embalagem"] )
      
  endswitch
  
  LancarItem()
  
EndWhile

EndProc

;*******************************************************************************
;* Rotina para lancar o item                                                   *
;*******************************************************************************
Proc LancarItem()
private ITOK, cl, INCLUI, CODITANT,
        regitemexpedicao, qtddif, qtdref, qtdpermetida

CODITANT=CODIT
cl=0
While True
  cl=cl+1
  INCLUI               =False  
  LocalizadoItemSortido=False        

  ITOK=False
  Moveto [Codigo do Item]
  Locate CODIT
  If Not RetVal
     Then 
          switch
            case Not IsBlank([Expedc->Numero do Pedido]) : ;expedi‡Æo com pedido
              switch 
                case ClienteUsaItemSortido():
                  switch
                    case cl=1 and IsCodigoItemSortido() : ; nÆo faz nada

                    case cl=1                           : ; localizar item sortido
                      PegaItemSortido()
                      Loop
                      
                    case cl=2                           : ; nÆo existe item sortido
                      CODIT=CODITANT 
                      loop
                      
                  endswitch
              endswitch 
          endswitch
     Else
          switch
            case Not IsBlank([Expedc->Numero do Pedido]) : ;expedi‡Æo com pedido
              switch 
                case ClienteUsaItemSortido():
                  switch
                    case cl=1 and IsCodigoItemSortido()       : ;nÆo faz nada 

                    case cl=1 and IsBlank([Quantidade_Pedido]): ; localizar item sortido
                      PegaItemSortido()
                      Loop

                    case cl=2 : 
                      LocalizadoItemSortido=True         
                    
                  endswitch
              endswitch
          endswitch

          ITOK=True
          copytoarray regitemexpedicao 
  EndIf

	QuitLoop
EndWhile

Switch
    ;===========================================================================
    case Not ITOK And Dados_QTD<0:
      MSG="Nesta expedi‡Æo n„o tem o Item informado !// //"
      MSG=MSG+"Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
      MSG=MSG+"Subtra‡Æo ignorada !"
      Mensagem(MSG)

    ;===========================================================================
    case     IsBlank([Expedc->Numero do Pedido]):  ; expedi‡Æo sem pedido
      switch
        ;---------------------------------------------------------------------------
        case Not ITOK and Dados_QTD>0:
          End
          Down
          [Codigo do Item]=CODIT
          [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
          AcertarLocalizarItem()                   
    
        ;---------------------------------------------------------------------------
        Case ITOK And Dados_QTD>0:
          [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
          AcertarLocalizarItem()
    
        ;---------------------------------------------------------------------------
        Case ITOK And Dados_QTD<0:
          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
                  EndIf
            else [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
          EndIf  
          AcertarLocalizarItem()

      endswitch
    
    ;===========================================================================
    case not IsBlank([Expedc->Numero do Pedido]):  ; expedi‡Æo com pedido 
      switch
        ;---------------------------------------------------------------------------
        case Not ITOK and Dados_QTD>0:
          MSG="Neste Pedido n„o tem o Item informado !// //"
          MSG=MSG+"Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
          If PARAM_INCLUI_ITEM="S"
             Then MSG=MSG+"Confirma inclus„o deste Item ?"
           	      if ConfGeral(MSG)
                    Then End
                         Down
                         [Codigo do Item]=CODIT
                         [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
                         AcertarLocalizarItem()                
                  EndIf
             Else MSG=MSG+"InclusÆo bloqueada !"
                  Mensagem(MSG)
          EndIf
          
        ;---------------------------------------------------------------------------
        Case ITOK And Dados_QTD>0:
          if not LocalizadoItemSortido
             then [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
             else [Quantidade_Substituida]=[Quantidade_Substituida]+Dados_QTD
          endif   
          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 Mensagem(MSG+"InclusÆo bloqueada!")
                         qtdpermetida=false
                 EndIf
          EndIf
          if not qtdpermetida
             then
                  If not LocalizadoItemSortido
                     Then [Quantidade_Expedida   ]=[Quantidade_Expedida   ]-Dados_QTD
                     Else [Quantidade_Substituida]=[Quantidade_Substituida]-Dados_QTD
                  EndIf
             else
                  if LocalizadoItemSortido
                     then 
                          CODIT=CODITANT
                          Moveto [Codigo do Item]
                          Locate CODIT
                          if not retval
                             then End Down 
                                  [Codigo do Item]=CODIT
                          endif        
                          [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                  endif
          EndIf
          AcertarLocalizarItem()
    
        ;---------------------------------------------------------------------------
        Case ITOK And Dados_QTD<0:
          switch
            case     LocalizadoItemSortido: qtdref=regitemexpedicao["Quantidade_Substituida"]
            case Not LocalizadoItemSortido: qtdref=regitemexpedicao["Quantidade_Expedida"   ]
          endswitch
    
          qtddif=Dados_QTD+qtdref   
          If qtddif<0
             Then 
                  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
                  switch
                    case     LocalizadoItemSortido: 
                      [Quantidade_Substituida]=[Quantidade_Substituida]+Dados_QTD
                      Acerta_Item()
    
                      coditsortido=CODIT
                      
                      CODIT=CODITANT
                      Moveto [Codigo do Item]
                      Locate CODIT
                      if retval
                         then
                              [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                              Acerta_Item()
    
                              if (isblank([Quantidade_Expedida]) or [Quantidade_Expedida]=0) 
                                 and
                                 (isblank([Quantidade_Pedido  ]) or [Quantidade_Pedido  ]=0)
                                 then del
                                      CODIT=coditsortido               
                              endif
                      endif
                      
                    case Not LocalizadoItemSortido:
                      [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
                      
                  endswitch
          EndIf
          AcertarLocalizarItem()

      endswitch

EndSwitch

Return True
endproc

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

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
;NÆo vai ocorrer LOG de itens exclu¡dos se cabe‡a for exclu¡da
ANT_GRAVA_LOG = GRAVA_LOG
GRAVA_LOG     = False
     
Moveto "ExpedI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "ExpedC"
GRAVA_LOG = ANT_GRAVA_LOG
If GRAVA_LOG Then Grava_LogEx("Expedic") EndIf
Del
EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Moveto "ExpedI"
CODIT=[Codigo do Item]
If GRAVA_LOG Then Grava_LogEx("Item da Expedic") EndIf
Del
EndProc  ; (Exclusao_I)

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

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 p/ gerenciar as balan‡as                                             *
;*******************************************************************************
Proc Balanca()

If SYS_CODIGO_CLIENTE<>"0377"
   Then Return True
EndIf
                 
Echo Normal
Echo Off
ShowPopup " Balan‡a " CENTERED
  "~1~ Balan‡a 1  " : " Definir Balan‡a: 1 " : "BAL1",
  "~2~ Balan‡a 2  " : " Definir Balan‡a: 2 " : "BAL2",
  Separator,
  "~C~ancelar     " : " Cancelar a Opera‡„o" : "Cancelar" 
EndMenu
To Opcaoc
Echo Off

If OPCAOC="Cancelar" or OPCAOC="Esc"
   Then Return False
   Else log_bal=PrivDir()+"log_bal.Txt"
        If IsFile(log_bal)
           Then Deleta_Arquivo(log_bal)
        EndIf
        MSG = ""
        Switch
          Case OPCAOC = "BAL1" : MSG = "Balan‡a 1 definida com sucesso!"
                                 FileWrite PrivDir()+"log_bal.txt" From GravaExpressao("BALANCA","S","1")
          Case OPCAOC = "BAL2" : MSG = "Balan‡a 2 definida com sucesso!"
                                 FileWrite PrivDir()+"log_bal.txt" From GravaExpressao("BALANCA","S","2")
        EndSwitch
        If MSG <> "" Then FastMsg(MSG) EndIf
EndIf
Return True

EndProc ;Balanca()

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

      Dados_Item=""
      Dados_QTD =1

      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

      Mouse Show
      If Not RetVal
         Then Return False
      EndIf

      If Len(Dados_Item)=0
         Then Loop
      EndIf

      Past=SearchFrom("*",Dados_Item,1)

      switch
        case sys_Codigo_Cliente="0377"  :
          If Past>0 And Not E_NumeroValido(SubStr(Dados_Item,1,Past-1))
             Then Mensagem("Quantidade invalida !")
                  Loop
             else
             
                  if Past=0
                     then 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)
                  endif
          EndIf                
        
        otherwise:
          If Past>0 And Not E_NumeroValido(SubStr(Dados_Item,1,Past-1))
             Then Mensagem("Quantidade invalida !")
                  Loop
          endif   
      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()
private noeorigem, npdorigem, pedidoexiste

FACA_DIGITAC = True
FACA_CHAVEI  = False
FACA_CHAVEV  = False

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then 
          if not isblank([Numero do Pedido])
             then 
                  noeorigem   =[Numero da OE    ]
                  npdorigem   =[Numero do Pedido]
                  pedidoexiste=false
                  
                  moveto [Numero do Pedido]
                  locate npdorigem
                  while [Numero do Pedido]=npdorigem 
                    if retval
                       then if [Situacao da OE]<>"FATURADO" and [Numero da OE]<>noeorigem
                               Then echo Normal
                                    echo off
                                    Mensagem("J  existe uma ordem de expedi‡Æo "+[Numero da OE]+" "+[Situacao da OE]+
                                             ",//com o mesmo pedido "+[Numero do Pedido]+" nÆo FATURADO !// //Verificar !// //"+
                                             "Nova ordem de expedi‡Æo nÆo permitidada enquanto esta,//"+
                                             "nÆo for faturada para este pedido !                   ")
                                    pedidoexiste=true
                                    quitloop
                            endif   
                    endif
                    skip
                    if eot() then quitloop endif
                    locate next npdorigem
                  endwhile

                  moveto [Numero da OE]
                  locate noeorigem
                  if not retval
                     then 
                          CHAVEC=9  ; abortar !
                          quitloop
                     else 
                          if pedidoexiste
                             then
                                  CHAVEC   =8        ;excluir!
                                  GRAVA_LOG=False 
                                  quitloop
                          endif
                  endif
          endif
          
          Controle_Dia()
          [Situacao da OE ]="EM ABERTO"
          [Sistema Gerador] = "IC" 
          Carrega_Pedido()
  EndIf  
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile    
    While FACA_CHAVEV
      DIGITAV()
      If CHAVEV=9 Then QuitLoop EndIf
    EndWhile
  EndWhile
EndWhile
Ajusta_Dados()
Moveto "ExpedC"
If CHAVEC=8 Then EXCLUSAO_C() EndIf

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\\Cadastro\\Bib_Bloq,"+
        "\\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

If SYS_CODIGO_CLIENTE="0377"
   Then Release Vars All
        Release Procs All

        Play "ExpedOf"
        Return
EndIf   

SISTEMA_GERADOR       = "IC"
PARAM_PEDIDO_POREXPED = False
PARAM_REFERENCIA      = False
ROTINA_EXPEDICAO      = ""
FORMRELACAO           = "F"
FORMMANUTENCAO        = "1"
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="0274"  : PARAM_REFERENCIA = True

  Case SYS_CODIGO_CLIENTE="0377"  : VSDG_DECIMAL     = "W9.2"
                                    FORMRELACAO      = "F"
                                    FORMMANUTENCAO   = "4"
EndSwitch


Switch
  Case SYS_CODIGO_CLIENTE="0171"  : PARAM_QTD_CDBAR      ="N"       
                                    PARAM_BLOQMENOS_CDBAR="S" 

EndSwitch

If Not Carrega_Tabelas()
   Then Return
EndIf   

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
