;** RExpedic *******************************************************************
;*  Diferenca de Itens de Expedicao - Ordem de Expedicao X Pedido              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 04/07/2013 por Bruno Carvalho
;Ultima Alteracao: 05/07/2013 por Bruno Carvalho  
;Motivo Alteracao: Ajustes p/ expedi‡Ćo apenas com a situa‡Ćo EM ABERTO                
;Ultima Alteracao: 11/07/2013 por Bruno Carvalho  
;Motivo Alteracao: Ajustes p/ agrupar itens de mesma cor e tamanho 
;Ultima Alteracao: 15/07/2013 por Bruno Carvalho  
;Motivo Alteracao: Ajustes "SALDO ATUAL"
;Ultima Alteracao: 18/07/2013 por Bruno Carvalho  
;Motivo Alteracao: Ajustes rotina para pegar o Saldo Atual
;Ultima Alteracao: 01/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Incluido "I" no [Tipo de Operacao] para fornecer registros quando for requisi‡äes de entrada de Industrializa‡Ćo 
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Ćo para Impostos 
;Ultima Alteracao: 08/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Edit->Coedit                 
;Ultima Alteracao: 13/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CheckTG_OPOF[1]

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  Moveto [Sequencia]
  End
  CODIGO=[Sequencia]
  Down
  CODIGO=CODIGO+1
  [Sequencia]=CODIGO

  While true
      TECLA=""
      AguardaTeclasPadrao()
      
      If Retval=-33
         Then
           ShowPopup " Fun‡”es " CENTERED
            "~L~impar         [F3]": " Limpar rela‡„o"                       : "F3",
            "~I~mprimir       [F4]": " Imprimir rela‡„o"                     : "F4",
            "~O~rdenar        [F5]": " Ordenar rela‡Ćo"                      : "F5",
            "~S~ele‡„o        [F6]": " Selecionar Expedi‡Ćo"                 : "F6",
            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="F1"And Field()="Numero da OE":
          CONSULTAF1()
           
      Case RetVal="F3"And Field()="Sequencia":
           CONFIRMA()
           If OK="S"
              Then EXCLUSAO()
                   QuitLoop
           EndIf        
      Case RetVal="F4":
           If Field()="Sequencia"
              Then ShowPopup " Impress„o " CENTERED
                      "~R~ela‡„o de Itens  ":" Diferenca de Itens da Expedicao X Pedido " : "EXPEDIC",
                      Separator,
                      "~C~ancelar          ":" Cancelar Opera‡„o                        " : "CANCELAR"
                   EndMenu
                    To MenuVar
                    If Not Retval or (MenuVar="Cancelar") or (MenuVar="Esc")
                       Then Loop
                       Else Del 
                            IMPRIME()
                            QuitLoop
                    EndIf
           EndIf
       Case RetVal="F5": 
            Del
            Ordenar()
            QuitLoop          
       Case RetVal="F6":
            Del
            Selecao()
            QuitLoop
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Sequencia":
           Del 
           PAGINA("RExpedic","MR")
           If EDITAR="S"
              Then QuitLoop
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then DEL
                           EndIf
                   EndIf
           EndIf
           QuitLoop
      Case Retval="ESC":
           If Field()="Numero da OE"
              Then If CHAVE=1
                      Then Del
                   EndIf
                   QuitLoop
           EndIf
           CHAVE=9
           Del
           Return
      Case Retval="ENTER": 
           If Field()="Sequencia"
              Then If IsBlank([])
                      Then Loop
                   EndIf
                   CODIGO=[]
                   Del
                   Locate CODIGO
                   If Retval
                      Then CHAVE=0
                           Moveto [Numero da OE]
                           Loop
                      Else CHAVE=1
                           End Down
                           [Sequencia]=CODIGO
                   EndIf
                   If IsLockRecord()
                      Then End Down
                           Moveto [Sequencia]
                           Loop
                   EndIf
             Else Switch
                    Case Field()="Numero da OE" :
                         If IsBlank([])
                             Then Loop
                         Endif
                         
                         Moveto [Numero da OE]
                         Ativa_Lookup()
                         Moveto [Numero da OE]
                         Locate [Rexpedic->Numero da OE]
                         If RetVal
                            Then SITUACAO=[Situacao da OE]
                            Else KeyPress "Esc"
                                 Mensagem("Numero da OE nĆo localizado !") 
                                 QuitLoop
                         EndIf    
                         KeyPress "Esc"  
                          
                         If SITUACAO<>"EM ABERTO"
                            Then Del 
                                 Mensagem("A Situacao da Ordem de Expedi‡„o deve estar EM ABERTO !")
                                 QuitLoop 
                         EndIf  
                   
                         CopyToArray REG 
                         NUM_OE = [Numero da Oe]
                         Del Home
                         Locate NUM_OE
                         If RetvAl 
                            Then Mensagem("A Expedi‡Ćo "+NUM_OE+" j  consta na sua rela‡Ćo !")
                                 QuitLoop
                            Else End Down
                                 CopyFromArray REG     
                         EndIf    
                         QuitLoop
                  EndSwitch
        EndIf
        Right
      EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina De Exclusao                                                          *
;***************************************************+***************************
Proc EXCLUSAO()
Home
While RecordStatus("New")=False
  Del
EndWhile
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_PEDIDO"        : Campo="TG_EMPRESA"
						Case Campo="TG_DTINI"         : Campo="TG_PEDIDO"
						Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_PEDIDO"
                    Case Campo="TG_PEDIDO"  : 
                         If VSDGPEDIDO=""
                            Then Campo="TG_DTINI"
                            Else Campo="YES"
                         EndIf    
                    Case Campo="TG_DTINI"   : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   : Campo="YES"
									EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
	Case Campo="":
		 MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Filtrar Registros                                                    *
;*******************************************************************************
Proc Selecao()
LimpAguarde()
Do_It!
ClearAll
Echo Normal
Echo Off
             
VSDGEMPRESA   = ""          
VSDGNOMEMP    = ""  
VSDGPEDIDO    = ""
VSDGNOMPEDIDO = ""
VSDGDTINI     = BlankDate()
VSDGHRINI     = ""
VSDGDTFIM     = BlankDate()
VSDGHRFIM     = ""                                               

OP_SHOW="S"
  ShowDialog "Sele‡„o" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
	 @ 05,12	 Height 11 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A23" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Pedido"  For "TG_PEDIDO"
    Accept @ 03,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_PEDIDO" To VSDGPEDIDO
    Accept @ 03,09 Width 25 "A21"  Picture "!*!" Tag "TG_NOMPEDIDO" To VSDGNOMPEDIDO
    
    Label  @ 04,00 "Perˇodo Referente de" For "TG_DTINI"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,16 "at‚" For "TG_DTFIM"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

		Pushbutton @ 07,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
		Pushbutton @ 07,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

EndDialog

If RetVal
   Then LimpaRodape(0)
        Aguarde("Aguarde, Selecionando registros")
        ClearAll
        Seleciona2()

        If IsEmpty("Answer")
           Then Mensagem("N„o existem registros conforme sele‡„o !")
           Else If DynArraySize(NUM_OE) > 0 
                   Then Switch
                          Case DynArraySize(NUM_OE) = 1 : 
                               Mensagem("A Expedi‡Ćo "+NUM_OE[1]+" j  consta na sua rela‡Ćo !")
                          Case DynArraySize(NUM_OE) > 1 :
                               MSG_AUX = ""
                               MSG     = ""
                               For wi From 1 To DynArraySize(NUM_OE) 
                                 If wi = 1
                                    Then MSG_AUX=        "As Expedi‡”es: "+NUM_OE[wi]
                                    Else If MSG_AUX=""
                                            Then MSG_AUX=MSG_AUX+"               "+NUM_OE[wi]+"" 
                                            Else MSG_AUX=MSG_AUX+", "+NUM_OE[wi]+""
                                         EndIf   
                                 EndIf
                                 If Len(MSG_AUX)>60
                                    Then MSG = MSG+Completa(MSG_AUX,70," ")+"//"
                                               MSG_AUX=""
                                 EndIF
                               EndFor
                               MSG=MSG+Completa(MSG_AUX,70," ")+"//"
                               MSG=MSG+Completa("J  constam na sua rela‡Ćo !",70," ")
                               If CONT_EXP > 0
                                  Then MSG=MSG+"////"
                                       MSG=MSG+Completa("Foram adicionados "+StrVal(CONT_EXP)+" Ordem de Expedi‡„o !",70," ") 
                               EndIf
                               Mensagem(MSG)
                        EndSwitch       
                EndIf  
        EndIf
EndIf
ClearAll
If IsTable("Answer")
   Then Delete "Answer"
EndIf
CoEdit "RExpedic"
PickForm "F"

EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona2()
ClearAll

{Ask} {\\Sistemas\\Vendas\\ExpedC} 
Moveto [Numero da OE          ] Check
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa ] Check
Moveto [Numero do Pedido      ] Check TypeIn "~VSDGPEDIDO.."
Moveto [Codigo                ] Check
Moveto [Nome Fantasia EmitDest] Check 
Moveto [Data_Liberacao        ] Check
Moveto [Situacao da OE        ] TypeIn "EM ABERTO"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then For i From 1 To 2
          {Ask} {Answer} TypeIn "Delete"
          If i=1
             Then Moveto [Data_Liberacao] TypeIn "<~VSDGDTINI"
             Else Moveto [Data_Liberacao] TypeIn ">~VSDGDTFIM"
          EndIf
          Do_It!
          ClearAll
        EndFor 

        Release Vars NUM_OE, CONT_ARRAY, CONT_EXP  
        DynArray NUM_OE[] 

        CONT_ARRAY = 0
        CONT_EXP   = 0
        Contador   = 0
        
        View "RExpediC"
        CoEdit "Answer"
        Scan
          Moveto "RExpediC"
          Moveto [Numero da OE]
          Locate [Answer->Numero da OE]
          If RetVal
             Then CONT_ARRAY = CONT_ARRAY + 1
                  NUM_OE[CONT_ARRAY] = [Answer->Numero da OE] 
                  Moveto "Answer" 
                  Loop
          EndIf        
          If Contador = 0
             Then If [Sequencia]<>""
                     Then End 
                          Contador = [Sequencia]
                          Down  
                  EndIf
             Else End Down     
          EndIf
          CONT_EXP = CONT_EXP + 1
          Contador = Contador + 1
                  
          [Sequencia             ]=Contador        
          [Numero da OE          ]=[Answer->Numero da OE          ]
          [Codigo da Empresa     ]=[Answer->Codigo da Empresa     ]
          [Nome Fantasia Empresa ]=[Answer->Nome Fantasia Empresa ]
          [Numero do Pedido      ]=[Answer->Numero do Pedido      ]
          [Codigo                ]=[Answer->Codigo                ]
          [Nome Fantasia EmitDest]=[Answer->Nome Fantasia EmitDest]
          
          Moveto "Answer"
        EndScan
        Do_It!
        ClearAll
EndIf

EndProc    ; Seleciona2()

;*******************************************************************************
;* Rotina para Ordena‡Ćo                                                       *
;*******************************************************************************
Proc Ordenar()
Private SEQ

ShowPopup " Ordenar por " CENTERED                       
 "~N~Łmero da Expedi‡„o " : " Ordena por NŁmero da Ordem de Expedi‡„o " : "O_NO",
 "~N~Łmero do Pedido    " : " Ordena por NŁmero do Pedido             " : "O_NP",
 Separator,
 "~C~ancelar           " : " Cancelar a Opera‡„o          " : "CANCELAR"
EndMenu
 To MenuVar

echo off
If MenuVar="CANCELAR" or MenuVar="Esc"
    Then Return
EndIf

Do_It!
ClearAll

AGUARDE("Aguarde, Ordenando Registros ")

{Ask} {RExpedic} Check
Do_It!
ClearAll

Switch
  Case MenuVar="O_NO" : Sort "Answer" On "Numero da OE","Numero do Pedido"
  Case MenuVar="O_NP" : Sort "Answer" On "Numero do Pedido","Numero da OE"  
EndSwitch       
ClearAll

Coedit "Answer"
Scan
 [Sequencia]=Recno()
EndScan
Do_It!
ClearAll

Empty "RExpedic"
Add "Answer" "RExpedic"
ClearAll
                              
CoEdit "RExpedic"
PickForm "F"
Return

EndProc ;Ordenar()

;*******************************************************************************
;* Rotina De Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Do_It!
ClearAll
       
DISPOSITIVO()
If OK=""
   Then CoEdit "RExpedic"
        PickForm "F"
        Return
EndIf
AGUARDE("Aguarde, Gerando o Relat˘rio")

Tabela=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Vendas\\RexpediI" Tabela
Empty Tabela

TabelaP=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\PosEstq" TabelaP
Empty TabelaP

Seleciona()
Agrupa_Dados()

Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
While Novo_Dir_Trab()
  Seleciona_Estoque()
EndWhile
Ajusta_Dados()
  
If IsEmpty(Tabela)
   Then MENSAGEM("N„o existem registros a processar")
   Else CopyReport "\\Base\\Sistemas\\Vendas\\Rexpedii" "R"Tabela "R"
        IMPRIREL(Tabela,"R")
EndIf

If IsTable(Tabela)
   Then Delete Tabela
EndIf

If IsTable("Answer")
   Then Delete "Answer"
EndIf   

CoEdit "RExpedic"
PickForm "F"
EndProc

;*******************************************************************************
;* Seleciona Epedicao para impressao                                            *
;*******************************************************************************
Proc Seleciona()

{Ask} {RExpedic}
Moveto [Numero da OE        ] Example "NUM"
Moveto [Numero do Pedido    ] Check
Moveto [Codigo da Empresa   ] Check
{Ask} {\\Sistemas\\Vendas\\ExpedI} Check
Moveto [Numero da OE        ] Example "NUM"
Moveto [Codigo do Item      ] Example "CODI"
Moveto [Quantidade_Diferenca] TypeIn "<0"
{Ask} {\\Sistemas\\Estoque\\Itens} 
Moveto [Codigo do Item      ] Example "CODI"
Moveto [Descricao do Item   ] Check
Moveto [Codigo da Familia   ] Check
Moveto [Descricao da Familia] Check
Do_It!
ClearAll

{Ask} {Answer} TypeIn "Fast Delete"
Moveto [Quantidade_Diferenca] TypeIn "Blank"
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

{Ask} {Answer}
Moveto [Numero da OE          ] TypeIn "_NOE"
Moveto [Numero do Pedido      ] TypeIn "_NPE"
Moveto [Codigo do Item        ] TypeIn "_COD"
Moveto [Descricao do Item     ] TypeIn "_DES"
Moveto [Referencia            ] TypeIn "_REF"
Moveto [Codigo da Familia     ] TypeIn "_CodF"
Moveto [Descricao da Familia  ] TypeIn "_DesF"
Moveto [Quantidade_Pedido     ] TypeIn "_QtdP"
Moveto [Quantidade_Expedida   ] TypeIn "_QtdE"
Moveto [Quantidade_Substituida] TypeIn "_QtdS"
Moveto [Quantidade_Diferenca  ] TypeIn "_QtdD"
Moveto [Codigo da Empresa     ] TypeIn "_Emp"
{Ask} TypeIn Tabela Enter "Fast Insert" Enter
Moveto [Numero da OE          ] TypeIn "_NOE"
Moveto [Numero do Pedido      ] TypeIn "_NPE"
Moveto [Codigo do Item        ] TypeIn "_COD"
Moveto [Descricao do Item     ] TypeIn "_DES"
Moveto [Referencia            ] TypeIn "_REF"
Moveto [Codigo da Familia     ] TypeIn "_CodF"
Moveto [Descricao da Familia  ] TypeIn "_DesF"
Moveto [Quantidade_Pedido     ] TypeIn "_QtdP"
Moveto [Quantidade_Expedida   ] TypeIn "_QtdE"
Moveto [Quantidade_Substituida] TypeIn "_QtdS"
Moveto [Quantidade_Diferenca  ] TypeIn "_QtdD"
Moveto [Codigo da Empresa     ] TypeIn "_Emp"
Do_It!
ClearAll          

{Ask} TypeIn Tabela Enter
Moveto [Saldo Atual] TypeIn "Changeto Blank"
Do_It!
ClearAll

EndProc ;Seleciona()

;*******************************************************************************
;* Agrupa Dados                                                                *
;*******************************************************************************
Proc Agrupa_Dados()

;*** Rotina para Agrupar os Itens de mesmo codigo independente do pedido ******* 
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa     ] Check
Moveto [Codigo do Item        ] Check
Moveto [Descricao do Item     ] Check
Moveto [Referencia            ] Check
Moveto [Codigo da Familia     ] Check
Moveto [Descricao da Familia  ] Check
Moveto [Quantidade_Pedido     ] TypeIn "Calc Sum as QuantidadePedido"
Moveto [Quantidade_Expedida   ] TypeIn "Calc Sum as QuantidadeExpedida"
Moveto [Quantidade_Diferenca  ] TypeIn "Calc Sum as QuantidadeDiferenca"
Do_It!
ClearAll

Empty Tabela

{Ask} {Answer}
Moveto [Codigo da Empresa     ] TypeIn "_EMP"
Moveto [Codigo do Item        ] TypeIn "_COD"
Moveto [Descricao do Item     ] TypeIn "_DES"
Moveto [Referencia            ] TypeIn "_REF"
Moveto [Codigo da Familia     ] TypeIn "_CodF"
Moveto [Descricao da Familia  ] TypeIn "_DesF"
Moveto [QuantidadePedido      ] TypeIn "_QtdP"
Moveto [QuantidadeExpedida    ] TypeIn "_QtdE"
Moveto [QuantidadeDiferenca   ] TypeIn "_QtdD"
{Ask} TypeIn Tabela Enter "Fast Insert" Enter
Moveto [Codigo da Empresa     ] TypeIn "_EMP"
Moveto [Codigo do Item        ] TypeIn "_COD"
Moveto [Descricao do Item     ] TypeIn "_DES"
Moveto [Referencia            ] TypeIn "_REF"
Moveto [Codigo da Familia     ] TypeIn "_CodF"
Moveto [Descricao da Familia  ] TypeIn "_DesF"
Moveto [Quantidade_Pedido     ] TypeIn "_QtdP"
Moveto [Quantidade_Expedida   ] TypeIn "_QtdE"
Moveto [Quantidade_Diferenca  ] TypeIn "_QtdD"
Do_It!
ClearAll
                         
EndProc ;Agrupa_Dados()

;*******************************************************************************
;* Adiciona Dados                                                              *
;*******************************************************************************
Proc Adiciona_Dados(Tipo)
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

CoEdit TabelaP,"Answer"
Scan
  Moveto TabelaP
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item]
  If Not RetVal
     Then End Down
          [Codigo da Empresa]=[Answer->Codigo da Empresa]
          [Codigo do Item   ]=[Answer->Codigo do Item]
  EndIf
  Switch
    Case Tipo="SAIDAS"       : [Saidas              ]=[Saidas              ]+[Answer->Quantidade]
    Case Tipo="ENTRADAS"     : [Entradas            ]=[Entradas            ]+[Answer->Quantidade]
    Case Tipo="SALDOINICIAL" : [Saldo Inicial       ]=[Saldo Inicial       ]+[Answer->Quantidade]
  EndSwitch
  UnLockRecord
  
  Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc ;Adiciona_Dados()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_Estoque()
ClearAll
AGUARDE("Aguarde, selecionando entradas/saidas")
                                                                
;*** Faturamento ***
For I From 1 To 2
  If Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") Or
     Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
     Then Loop
  EndIf

  {Ask} TypeIn Tabela Enter
  Moveto [Codigo da Empresa        ] Example "Emp"
  Moveto [Codigo do Item           ] Example "cite"
  
  {Ask} {\\Sistemas\\Vendas\\Destin}
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Atualiza Estoque         ] TypeIn "S"
  
  {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
  Moveto [Codigo da Empresa        ] Check Example "Emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Data de Saida            ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  Switch
    Case i=1: Moveto [Tipo Movimento Estoque   ] TypeIn "S"
    Case i=2: Moveto [Tipo Movimento Estoque   ] TypeIn "E"
  EndSwitch
  Moveto [Situacao                 ] TypeIn "Not C"
  {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Codigo do Item           ] Check Example "cite"
  Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
  Moveto [Situacao_Item            ] TypeIn "Not C"
  Do_It!
  ClearAll

  Switch                       
    Case i=1: Adiciona_Dados("SAIDAS")
    Case i=2: Adiciona_Dados("ENTRADAS")
  EndSwitch
EndFor

If CheckTG_OPOF[1]=False And Dir_Trab="" And IsTable("\\Sistemas\\Vendas\\FaturaC")
   Then
        For I From 1 To 2
          {Ask} TypeIn Tabela Enter
          Moveto [Codigo da Empresa        ] Example "Emp"
          Moveto [Codigo do Item           ] Example "cite"

          ;*** Ordem de Faturamento ***
          {Ask} {\\Sistemas\\Vendas\\Destin}
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Atualiza Estoque         ] TypeIn "S"
          
          {Ask} {\\Sistemas\\Vendas\\FaturaC}
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Codigo da Empresa        ] Check Example "Emp"
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          If i=1
             Then Moveto [Tipo Movimento Estoque   ] TypeIn "S"
             Else Moveto [Tipo Movimento Estoque   ] TypeIn "E"
          EndIf
          Moveto [Numero Nota Gerada       ] TypeIn "Blank"
          
          {Ask} {\\Sistemas\\Vendas\\FaturaI}
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Codigo do Item           ] Check Example "cite" 
          Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
          Do_It!
          ClearAll

          If i=1
             Then Adiciona_Dados("SAIDAS")
             Else Adiciona_Dados("ENTRADAS")
          EndIf
        EndFor
        
        
        ;*** Ordem de Faturamento de Entrada/Troca ***
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo da Empresa        ] Example "Emp"
        Moveto [Codigo do Item           ] Example "cite"

        {Ask} {\\Sistemas\\Vendas\\Destin}
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Atualiza Estoque         ] TypeIn "S"
        
        {Ask} {\\Sistemas\\Vendas\\FaturaC}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Codigo da Empresa        ] Check Example "Emp"
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Descricao da Destinacao  ] TypeIn "..TROCA.."
        Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo Movimento Estoque   ] TypeIn "S"
        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
        
        {Ask} {\\Sistemas\\Vendas\\FaturaID}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite"
        Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("ENTRADAS")
EndIf

;*** Notas de Entrada/Estoque ***
  If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
     IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
     Then
          {Ask} TypeIn Tabela Enter
          Moveto [Codigo da Empresa        ] Example "Emp"
          Moveto [Codigo do Item           ] Example "cite"

          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
          Moveto [Numero do Lancamento     ] Example "doc"
          Moveto [Codigo da Empresa        ] Check Example "Emp"
          Moveto [Data de Entrada          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          Moveto [Tipo de Operacao         ] TypeIn "Not A, Not I"
          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
          Moveto [Numero do Lancamento     ] Check Example "doc"
          Moveto [Sequencia do Lancamento  ] Check
          Moveto [Codigo do Item           ] Check Example "cite"
          Moveto [Quantidade Convertida    ] Check TypeIn "As Quantidade"
          Do_It!
          ClearAll

          {Ask} {Answer}
          Moveto [Codigo da Empresa        ] Check
          Moveto [Codigo do Item           ] Check
          Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
          Do_It!
          ClearAll

          Adiciona_Dados("ENTRADAS")
EndIf

;*** Requisicoes/Estoque ***
For I From 1 To 2
  If Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") Or
     Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem")
     Then Loop
  EndIf

  {Ask} TypeIn Tabela Enter
  Moveto [Codigo da Empresa        ] Example "Emp"
  Moveto [Codigo do Item           ] Example "cite"

  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo da Empresa        ] Check Example "Emp"
  Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  If i=1
     Then Moveto [Tipo de Movimento] TypeIn "S"
     Else Moveto [Tipo de Movimento] TypeIn "E"
  EndIf
  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo do Item           ] Check Example "cite"
  Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
  Do_It!
  ClearAll

  If i=1
     Then Adiciona_Dados("SAIDAS")
     Else Adiciona_Dados("ENTRADAS")
  EndIf
EndFor

If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri")
   Then
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo da Empresa        ] Example "Emp"
        Moveto [Codigo do Item           ] Example "cite"

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Check Example "Emp"
        Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Movimento        ] TypeIn "E"
        Moveto [Tipo de Operacao         ] TypeIn "P Or I"
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite"
        Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("SAIDAS")
EndIf

EndProc ;Seleciona_Estoque()

;*******************************************************************************
;* Ajusta Dados                                                                *
;*******************************************************************************
Proc Ajusta_Dados()
ClearAll
AGUARDE("Aguarde, processando dados")

;******** Saldo Inicial *******
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa     ] Example "Emp"
Moveto [Codigo do Item        ] Example "cite"
{Ask} {\\Sistemas\\Estoque\\SdEstq}
Moveto [Codigo da Empresa     ] Check Example "Emp"
Moveto [Codigo do Item        ] Check Example "cite"
Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
Moveto [Ano Referencia        ] TypeIn "~VSDGANO"
Moveto [Saldo Inicial         ] Check TypeIn "as Quantidade"
Do_It!
ClearAll

Adiciona_Dados("SALDOINICIAL")

;***** Calculos **********
{Ask} TypeIn TabelaP Enter
Moveto [Saldo Inicial  ] TypeIn "_SldIni"
Moveto [Entradas       ] TypeIn "_Ent"
Moveto [Saidas         ] TypeIn "_Sai"
Moveto [Saldo Atual    ] TypeIn "Changeto (_SldIni + _Ent) - _Sai" 
Do_It!
ClearAll

{Ask} TypeIn TabelaP Enter
Moveto [Codigo da Empresa] Example "Emp"
Moveto [Codigo do Item   ] Example "Cod"
Moveto [Saldo Atual      ] Example "Sald"
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa] Example "Emp"   
Moveto [Codigo do Item   ] Example "Cod"
Moveto [Saldo Atual      ] TypeIn "Changeto _Sald"
Do_It!
ClearAll

EndProc    ;Ajusta_Dados()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
AGUARDE("Aguarde, processando dados")

Array CheckTG_OPOF[1]        CheckTG_OPOF[1]       =False ; False=+OF, True=-OF
VSDGMESANO = AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)
VSDGMES    = SubStr(VSDGMESANO,1,2)
VSDGANO    = SubStr(VSDGMESANO,4,4)
VSDGDTINI  = DateVal("01."+VSDGMES+"."+VSDGANO)
VSDGDTFIM  = Ultimo_Dia(VSDGMES+VSDGANO)

CoEdit "RExpedic"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
