;** Rm_3042 ********************************************************************
;* Acerto de Vendas por Cliente/Item                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/07/2013 por Anivel Augusto Rodrigues
;Ultima Alteracao: 31/10/2013 por Andrey Fillipe 
;Motivo Alteracao: Implementa‡Æo op‡Æo Gera_OF()
;Ultima Alteracao: 12/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes na gera‡Æo da OF e Data de Acerto 
;Ultima Alteracao: 24/08/2015 por Andrey Fillipe 
;Motivo Alteracao: Altera‡Æo no processo dos Numero do Lan‡amento - Numero_Lancamento()
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Alterado NUM_LANCTO = PROXLANCTO_NLANC -> Padroniza‡Æo da rotina de Numero_Lancamento()
;Ultima Alteracao: 17/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_EMPRESATE     
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes ShowDialog TG_DESTINAT    
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()        
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Seleciona()
ClearAll
 
;****** Vendas *****************************************************************
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then {Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
        Moveto [Codigo                 ] TypeIn "_CodC"
        Moveto [Tipo Assistencia       ] TypeIn "ACUMULAACERTO"
        
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Check TypeIn "_CEmp, ~VSDGEMPRESA2.."
        Moveto [Numero do Documento    ] Check TypeIn "_NDoc"
        Moveto [Serie do Documento     ] Check TypeIn "_SDoc"
        Moveto [Codigo                 ] Check TypeIn "_CodC, ~VSDGDESTINAT.."
        Moveto [Razao Social           ] Check
        Moveto [Data de Emissao        ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Descricao da Destinacao] Check TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
        Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
        Moveto [Descricao CondPagto    ] Check
        Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."
        Moveto [Tipo Movimento Estoque ] TypeIn "S"
        Moveto [Situacao               ] TypeIn "Not C"
        Moveto [Data de Acerto         ] Check TypeIn "Blank"
        
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] TypeIn "_CEmp"
        Moveto [Numero do Documento    ] TypeIn "_NDoc"
        Moveto [Serie do Documento     ] TypeIn "_SDoc"
        Moveto [Codigo do Item         ] Check
        Moveto [Descricao do Item      ] Check
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        Moveto [Preco Total            ] TypeIn "Calc Sum as Preco Total"
        Moveto [Valor Desconto Total   ] TypeIn "Calc Sum as Valor Desconto Total"
        Moveto [Situacao_Item          ] TypeIn "Not C"
        Do_It!
        ClearAll

        Adiciona_Dados("VENDAS")
EndIf

;****** Devolucoes - Estoque ***************************************************
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
   Then {Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
        Moveto [Codigo                  ] TypeIn "_CodC"
        Moveto [Tipo Assistencia        ] TypeIn "ACUMULAACERTO"
   
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
        Moveto [Numero do Lancamento    ] TypeIn "_NLan"
        Moveto [Numero do Documento     ] Check TypeIn "_NDoc"
        Moveto [Serie do Documento      ] Check TypeIn "_SDoc"
        Moveto [Codigo da Empresa       ] Check TypeIn "_CEmp, ~VSDGEMPRESA2.."
        Moveto [Codigo                  ] Check TypeIn "_COdc, ~VSDGDESTINAT.."
        Moveto [Razao Social            ] Check
        Moveto [Data de Entrada         ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM, as Data de Emissao"
        Moveto [Tipo de Operacao        ] TypeIn "D"
        Moveto [Descricao da Operacao   ] Check TypeIn "as Descricao da Destinacao"
        Moveto [Descricao Tipo Pagamento] Check TypeIn "as Descricao CondPagto"
        
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
        Moveto [Numero do Lancamento   ] TypeIn "_NLan"
        Moveto [Codigo do Item         ] Check
        Moveto [Descricao do Item      ] Check
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        Moveto [Preco Total            ] TypeIn "Calc Sum as Preco Total"
        Moveto [Valor Desconto Total   ] TypeIn "Calc Sum as Valor Desconto Total"
        Do_It!
        ClearAll

        Adiciona_Dados("DEVOLUCOES")
EndIf

;****** Devolucoes - Vendas ****************************************************
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then {Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
        Moveto [Codigo                 ] TypeIn "_CodC"
        Moveto [Tipo Assistencia       ] TypeIn "ACUMULAACERTO"
        
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Check TypeIn "_CEmp, ~VSDGEMPRESA2.."
        Moveto [Numero do Documento    ] Check TypeIn "_NDoc"
        Moveto [Serie do Documento     ] Check TypeIn "_SDoc"
        Moveto [Codigo                 ] Check TypeIn "_COdc, ~VSDGDESTINAT.."
        Moveto [Razao Social           ] Check                                   
        Moveto [Data de Emissao        ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Descricao da Destinacao] Check TypeIn "..DEVOL.."
        Moveto [Tipo Movimento Estoque ] TypeIn "E"
        Moveto [Situacao               ] TypeIn "Not C"
        Moveto [Descricao CondPagto    ] Check
        Moveto [Data de Acerto         ] Check TypeIn "Blank"
        
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] TypeIn "_CEmp"
        Moveto [Numero do Documento    ] TypeIn "_NDoc"
        Moveto [Serie do Documento     ] TypeIn "_SDoc"
        Moveto [Codigo do Item         ] Check
        Moveto [Descricao do Item      ] Check
        Moveto [Preco Unitario         ] Check
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        Moveto [Preco Total            ] TypeIn "Calc Sum as Preco Total"
        Moveto [Valor Desconto Total   ] TypeIn "Calc Sum as Valor Desconto Total"
        Moveto [Situacao_Item          ] TypeIn "Not C"
        Do_It!
        ClearAll

        Adiciona_Dados("DEVOLUCOES")
EndIf

EndProc ;Seleciona()

;*******************************************************************************
;* Rotina adicionar dados na Db temporaria                                     *
;*******************************************************************************
Proc Adiciona_Dados(Tipo)

If IsEmpty("Answer")
   Then Return
EndIf

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [Codigo                 ] Example "ccli"
Moveto [Razao Social           ] Example "ncli"
Moveto [Codigo do Item         ] Example "cite"
Moveto [Descricao do Item      ] Example "dite"    
Moveto [Quantidade             ] Example "qtde"
Moveto [Preco Total            ] Example "ptot"
Moveto [Valor Desconto Total   ] Example "vdes"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Descricao da Destinacao] Example "dcdt"
Moveto [Data de Emissao        ] Example "dtem"
Moveto [Descricao CondPagto    ] Example "dcpg"
   
{Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [Codigo                 ] Example "ccli"
Moveto [Razao Social           ] Example "ncli"
Moveto [Codigo do Item         ] Example "cite"
Moveto [Descricao do Item      ] Example "dite"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Descricao da Destinacao] Example "dcdt"
Moveto [Data de Emissao        ] Example "dtem"
Moveto [Descricao CondPagto    ] Example "dcpg"
Switch
  Case Tipo="VENDAS":
       Moveto [Vendas_Quantidade      ] Example "qtde"
       Moveto [Vendas_Preco Total     ] Example "ptot" TypeIn"-" Example "vdes"
  Case Tipo="DEVOLUCOES":
       Moveto [Devolucoes_Quantidade  ] Example "qtde"
       Moveto [Devolucoes_Preco Total ] Example "ptot" TypeIn"-" Example "vdes"     
EndSwitch

Do_It!
ClearAll

EndProc ;Adiciona_Dados()

;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc Ajusta_Dados()

;***** Ajusta Dados ************************************************************
If VSDGEMPRESA="0000"
   Then {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
        
   Else {Ask} {\\Sistemas\\Cadastro\\Empresas}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] Example "nemp"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto _nemp"
        Do_It!
        ClearAll
EndIf

{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Descricao do Item      ] Example "dite"
Moveto [Tipo do Item           ] Example "tite"
Moveto [Unidade Fiscal         ] Example "unf"

{Ask} TypeIn Tabela Enter TypeIn "Fast"
Moveto [Codigo do Item         ] Example "cite"
Moveto [Descricao do Item      ] TypeIn "changeto _dite"
Moveto [Tipo do Item           ] TypeIn "changeto _tite"
Moveto [Unidade Fiscal         ] TypeIn "changeto _unf"
Do_It!
ClearAll

;***** Totaliza Dados ************************************
{Ask} TypeIn Tabela Enter Check
Moveto [Vendas_Quantidade      ] Check TypeIn "Calc Sum as \"Vendas_Quantidade\""
Moveto [Vendas_Embalagem       ] Check TypeIn "Calc Sum as \"Vendas_Embalagem\""
Moveto [Vendas_Preco Total     ] Check TypeIn "Calc Sum as \"Vendas_Preco Total\""
Moveto [Devolucoes_Quantidade  ] Check TypeIn "Calc Sum as \"Devolucoes_Quantidade\""
Moveto [Devolucoes_Preco Total ] Check TypeIn "Calc Sum as \"Devolucoes_Preco Total\""
Do_It!
ClearAll

Empty Tabela
Add "Answer" Tabela
ClearAll

EndProc ;Ajusta_Dados()

;*******************************************************************************
;* Seleciona Registros para Emissao de Cheque                                  *
;*******************************************************************************
Proc SELECIONAI()
             
Ajusta_Dados()

Sort Tabela On "Razao Social" , "Data de Emissao" , "Numero do Documento" 

Tabela2=Cria_Temp(PrivDir())
Copy Tabela Tabela2
Empty Tabela2
ClearAll

{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa      ] TypeIn "_CodE"
Moveto [Data de Emissao        ] TypeIn "_DatE"
Moveto [Numero do Documento    ] TypeIn "_NDoc"
Moveto [Serie do Documento     ] TypeIn "_SDoc"
Moveto [Razao Social           ] TypeIn "_RazS"
Moveto [Descricao CondPagto    ] TypeIn "_DesC"
Moveto [Descricao da Destinacao] TypeIn "_DesD"
{Ask} TypeIn Tabela2 Enter TypeIn "Fast Insert" Enter
Moveto [Codigo da Empresa      ] TypeIn "_CodE"
Moveto [Data de Emissao        ] TypeIn "_DatE"
Moveto [Numero do Documento    ] TypeIn "_NDoc"
Moveto [Serie do Documento     ] TypeIn "_SDoc"
Moveto [Razao Social           ] TypeIn "_RazS"
Moveto [Descricao CondPagto    ] TypeIn "_DesC"
Moveto [Descricao da Destinacao] TypeIn "_DesD"
Do_It!
ClearAll

{Ask} TypeIn Tabela2 Enter Check
Do_It!
ClearAll

Rename "Answer" Tabela2 
CopyForm Tabela "F" Tabela2 "F" 

CoEdit Tabela2
PickForm "F"
SetHighLight Current Record 23 Field 31
While True
  CHAVE()
  If CHAVE=9 
     Then Do_It!
          QuitLoop
  EndIf
EndWhile
ClearAll

Delete Tabela2

EndProc

;*******************************************************************************
;* Processa
;*******************************************************************************
Proc Processa()

{Ask} TypeIn Tabela Enter Check 
Moveto [Total_Vendas_Empresa   ] Check TypeIn "Calc Sum as \"Total_Vendas_Empresa\""
Moveto [Total_Vendas_Item      ] Check TypeIn "Calc Sum as \"Total_Vendas_Item\""   
Moveto [Total_Vendas_Cliente   ] Check TypeIn "Calc Sum as \"Total_Vendas_Cliente\""       
Moveto [Total_Vendas_Area      ] Check TypeIn "Calc Sum as \"Total_Vendas_Area\""       
Moveto [Total_Vendas_Represent ] Check TypeIn "Calc Sum as \"Total_Vendas_Represent\""       
Moveto [Total_Vendas_CondPagto ] Check TypeIn "Calc Sum as \"Total_Vendas_CondPagto\""       
Moveto [Total_Vendas_TipoPagto ] Check TypeIn "Calc Sum as \"Total_Vendas_TipoPagto\""       
Moveto [Total_Vendas_FormaPagto] Check TypeIn "Calc Sum as \"Total_Vendas_FormaPagto\""       
Moveto [Total_Vendas_Destinacao] Check TypeIn "Calc Sum as \"Total_Vendas_Destinacao\""       
Moveto [Total_Vendas_TipoItem  ] Check TypeIn "Calc Sum as \"Total_Vendas_TipoItem\""       
Moveto [Total_Vendas_Familia   ] Check TypeIn "Calc Sum as \"Total_Vendas_Familia\""       
Moveto [Data de Emissao        ] Check
Moveto [Descricao CondPagto    ] Check
Moveto [Descricao da Destinacao] Check
Moveto [Numero do Documento    ] Check   
Moveto [Serie do Documento     ] Check   
Moveto [Data de Emissao        ] Check   
Moveto [Vendas_Quantidade      ] Check TypeIn "Calc Sum as \"Vendas_Quantidade\""       
Moveto [Vendas_Embalagem       ] Check TypeIn "Calc Sum as \"Vendas_Embalagem\""       
Moveto [Vendas_Preco Total     ] Check TypeIn "Calc Sum as \"Vendas_Preco Total\""       
Moveto [Devolucoes_Quantidade  ] Check TypeIn "Calc Sum as \"Devolucoes_Quantidade\""       
Moveto [Devolucoes_Preco Total ] Check TypeIn "Calc Sum as \"Devolucoes_Preco Total\""       

Do_It!
ClearAll

;**** Preco Unitario ****
{Ask} {Answer}
Moveto [Vendas_Quantidade      ] TypeIn "_Qtd"
Moveto [Vendas_Preco Total     ] TypeIn "_VrPr"        
Moveto [Devolucoes_Quantidade  ] TypeIn "_QtdD"        
Moveto [Devolucoes_Preco Total ] TypeIn "_VrDv" 
Moveto [Total_Vendas_Grupo     ] TypeIn "Changeto (_VrPr-_VrDv) / (_Qtd-_QtdD)"         ;Pre‡o Unitsrio Vendas 
Moveto [Total_Vendas_Marca     ] TypeIn "Changeto _VrDv / _QtdD"                        ;Pre‡o Unitsrio Devolu‡Æo
Do_It!
ClearAll

CopyReport Tabela "3" "Answer" "3"
CopyReport Tabela "2" "Answer" "2"
Rename "Answer" Tabela

EndProc    

;*******************************************************************************
;* Seleciona lancamentos para exibicao de relatorio e altera‡Æo na data de acerto
;*******************************************************************************
Proc Carrega_Tabela()

{Ask} TypeIn Tabela2 Enter
Moveto [Numero do Documento  ] TypeIn "_NDoc"  
Moveto [Serie do Documento   ] TypeIn "_SDoc" 
Moveto [Data de Emissao      ] TypeIn "_DatE"                               
{Ask} TypeIn Tabela Enter Check
Moveto [Numero do Documento  ] TypeIn "_NDoc"     
Moveto [Serie do Documento   ] TypeIn "_SDoc"     
Moveto [Data de Emissao      ] TypeIn "_DatE"     
Do_It!
ClearImage

EndProc ;Carrega_Tabela() 

;*******************************************************************************
;* Seleciona lancamentos para exibicao de relatorio e altera‡Æo na data de acerto
;*******************************************************************************
Proc CHAVE()

While True
  CHAVE=1
  End
  Down    
  Moveto [Codigo da Empresa]
  While True

    AguardaTeclasPadrao()
  
    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F4 ~I~mprimir          " : " Imprimir                  " : "F4",
             "F5 Gera ~O~F           " : " Gera OF                   " : "F5",
             "F8 ~A~tualizar Acerto  " : " Atualizar Data do Acerto  " : "F8",
             "~C~ancelar             " : " Cancelar a Opera‡„o       " : "CANCELAR"
            EndMenu
            To MenuVar
  
            Echo Off
            If MenuVar="CANCELAR" or MenuVar="Esc"
                Then Loop
            EndIf
  
            RetVal=MenuVar
    EndIf
      
    Switch
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F4" And Field()="Codigo da Empresa":             
           If Not CheckTG_OFAUT[1]
              Then DISPOSITIVO()
                   If OK=""  Then Loop EndIf
                   Do_It!
                   ClearAll
  
                   Carrega_Tabela()
                   Processa() 
                   
                   AGUARDE("Aguarde, gerando o relat¢rio")
                   If IsEmpty(Tabela)
                      Then MENSAGEM("N„o existem registros a processar")
                           Delete Tabela
                           Loop
                   EndIf
                   
                   If VSDGOPRELCODALF="1"
                     Then CopyReport "\\Base\\Sistemas\\Vendas\\RM_3100a" "5" Tabela "5"
                          IMPRIREL(Tabela,"5") ;2
                     Else CopyReport "\\Base\\Sistemas\\Vendas\\RM_3100a" "6" Tabela "6"
                          IMPRIREL(Tabela,"6") ;3
                   EndIf
                   
                   Delete Tabela
                   CHAVE=9
                   QuitLoop                           
              Else Mensagem("Opera‡„o apenas para gera‡„o de OF! // F5=Gera OF")
           EndIf
      Case RetVal="F5" And Field()="Codigo da Empresa":  
           If CheckTG_OFAUT[1]
              Then Gera_OF()     
                   If IsAssigned(DESTIN)
                      Then If DESTIN=False
                              Then MSG="Destina‡„o de ACERTO n„o encontrada!"
                              Else MSG=MSG+"//Confirmar OF antes de Faturar !"
                           EndIf
                      Else MSG=MSG+"Confirmar OF antes de Faturar !"
                   EndIf
                   
                   If NAO_FAZ  
                      Then MSG = "Saldo negativo !"
                   EndIf   
                   
                   Mensagem(MSG)                  
                   CHAVE=9
                   QuitLoop 
              Else Mensagem("Opera‡„o apenas para impress„o! // F4=Imprimir")          
           EndIf
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Codigo da Empresa":
           While True
             CHAVE=1
             PAGINA(Tabela2,"MR")
             If EDITAR<>"S"
                Then If EXCLUIR="S"
                        Then CONFIRMA()
                             If OK="S"
                                Then DEL
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
                Else MENSAGEM("Impossivel edi‡„o!")     
             EndIf
             ;SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F8" And Field()="Codigo da Empresa":     
           If CheckTG_OPGERENCIA[1]
              Then MSG="Deseja colocar data de acerto ["+Format("D13",VSDGDTREFERENTE)+"]//nos lan‡amentos selecionados?"
                   If ConfGeral(MSG)
                      Then Data_Acerto()
                           Mensagem("Opera‡Æo Realizada!") 
                           CHAVE=9
                           Quitloop
                   EndIf        
              Else Mensagem("Data para acerto n„o informado!") 
           EndIf
      Case Retval="ESC":  
           CHAVE=9
           Del
           Return
    EndSwitch
  EndWhile                      
  If CHAVE=0 OR CHAVE=9 
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Rotina p/ Geracao de OF de Retorno/Complemento                              *
;*******************************************************************************
Proc Gera_OF()

NAO_FAZ=False

AGUARDE("Aguarde, gerando OF")
MSG = ""

Do_It!
ClearAll

Carrega_Tabela()
    
{Ask} TypeIn Tabela Enter Check        
Moveto [Total_Vendas_Empresa   ] Check TypeIn "Calc Sum as \"Total_Vendas_Empresa\""
Moveto [Total_Vendas_Item      ] Check TypeIn "Calc Sum as \"Total_Vendas_Item\""   
Moveto [Total_Vendas_Cliente   ] Check TypeIn "Calc Sum as \"Total_Vendas_Cliente\""       
Moveto [Total_Vendas_Area      ] Check TypeIn "Calc Sum as \"Total_Vendas_Area\""       
Moveto [Total_Vendas_Represent ] Check TypeIn "Calc Sum as \"Total_Vendas_Represent\""       
Moveto [Total_Vendas_CondPagto ] Check TypeIn "Calc Sum as \"Total_Vendas_CondPagto\""       
Moveto [Total_Vendas_TipoPagto ] Check TypeIn "Calc Sum as \"Total_Vendas_TipoPagto\""       
Moveto [Total_Vendas_FormaPagto] Check TypeIn "Calc Sum as \"Total_Vendas_FormaPagto\""       
Moveto [Total_Vendas_Destinacao] Check TypeIn "Calc Sum as \"Total_Vendas_Destinacao\""       
Moveto [Total_Vendas_TipoItem  ] Check TypeIn "Calc Sum as \"Total_Vendas_TipoItem\""       
Moveto [Total_Vendas_Familia   ] Check TypeIn "Calc Sum as \"Total_Vendas_Familia\""
Moveto [Data de Emissao        ] Check       
Moveto [Descricao CondPagto    ] Check
Moveto [Descricao da Destinacao] Check
Moveto [Numero do Documento    ] Check   
Moveto [Serie do Documento     ] Check   
Moveto [Data de Emissao        ] Check   
Moveto [Vendas_Quantidade      ] Check TypeIn "Calc Sum as \"Vendas_Quantidade\""       
Moveto [Vendas_Embalagem       ] Check TypeIn "Calc Sum as \"Vendas_Embalagem\""       
Moveto [Vendas_Preco Total     ] Check TypeIn "Calc Sum as \"Vendas_Preco Total\""       
Moveto [Devolucoes_Quantidade  ] Check TypeIn "Calc Sum as \"Devolucoes_Quantidade\""       
Moveto [Devolucoes_Preco Total ] Check TypeIn "Calc Sum as \"Devolucoes_Preco Total\""       
Do_It!
ClearAll

;**** Preco Unitario ****
{Ask} {Answer}
Moveto [Vendas_Quantidade      ] TypeIn "_Qtd"
Moveto [Vendas_Preco Total     ] TypeIn "_VrPr"        
Moveto [Devolucoes_Quantidade  ] TypeIn "_QtdD"        
Moveto [Devolucoes_Preco Total ] TypeIn "_VrDv" 
Moveto [Total_Vendas_Grupo     ] TypeIn "Changeto (_VrPr-_VrDv) / (_Qtd-_QtdD)"         ;Pre‡o Unitsrio Vendas 
Moveto [Total_Vendas_Marca     ] TypeIn "Changeto _VrDv / _QtdD"                        ;Pre‡o Unitsrio Devolu‡Æo
Do_It!
ClearAll
Rename "Answer" Tabela 
    
Sort Tabela On "Codigo da Empresa", "Codigo", "Descricao do Item" To "Answer"
ClearAll            

CLIENTE = "***"
Cont_Of = 0

View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Cadastro\\Destinat"


View Tabela
View "NotaC"
View "FaturaC"
View "FaturaI"
CoEdit "Answer"

Scan
  CODEMP   = [Codigo da Empresa     ]
  NOMFAN   = [Nome Fantasia Empresa ]
  CODCLI   = [Codigo                ]
  RAZCLI   = Rtrim(SubStr([Razao Social],1,20))
  
  VRDIFER  = [Vendas_Preco Total]-[Devolucoes_Preco Total]   
  QTDDIFER = [Vendas_Quantidade]-[Devolucoes_Quantidade]

  If QTDDIFER<=0
     Then If Cont_Of=0
             Then NAO_FAZ=True
             Else NAO_FAZ=False 
          EndIf  
          Loop
  EndIf
  
  If CLIENTE<>[Codigo] 
     Then CLIENTE=[Codigo]
          If Not Grava_FaturaC()
             Then NAO_FAZ=False
                  QuitLoop
          EndIf
  EndIf       
  Grava_FaturaI([Codigo do Item],QTDDIFER,[Total_Vendas_Grupo])

EndScan

Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ Gravar FaturaC                                                    *
;*******************************************************************************
Proc Grava_FaturaC()
Private INFO_CLIENTE

CFOP=""

Moveto "\\Sistemas\\Vendas\\Destin"
Moveto [Descricao da Destinacao]
Zoom Select "FATUR.. ACERT.."
If Search("FATUR",[Descricao da Destinacao])>0 And
   Search("ACERT",[Descricao da Destinacao])>0
   Then DESTIN=[Codigo da Destinacao]
        CFOP  =[CFO                 ]  
   Else Moveto "Answer"
        Mensagem("Destina‡„o FATURA ACERTO n„o localizada !")
        Return False  
EndIf

;**** Forma de Pagamento CLIENTE *********************************
GetRecord "\\Sistemas\\Cadastro\\Destinat" CLIENTE To INFO_CLIENTE
If RetVal
   Then CLIE_TA = INFO_CLIENTE["Tipo Assistencia"]
        CLIE_CP = INFO_CLIENTE["CondPagto Cliente"]
        CLIE_FP = INFO_CLIENTE["Forma Pagamento Cliente"]
        CLIE_DI = INFO_CLIENTE["Dia_Vencimento_Notinha"]
        CLIE_RP = INFO_CLIENTE["Codigo do Representante"] 
        
        MSG1=""                    
        Switch
          Case CLIE_TA <> "ACUMULAACERTO" : MSG1="Tipo Assistˆncia do cliente "+CLIENTE+" "+RAZCLI+"//diferente de ACUMULAACERTO !"
          Case CLIE_CP = ""               : MSG1="Condi‡Æo de pagamento do cliente "+CLIENTE+" "+RAZCLI+"//n„o cadastrado !" 
          Case CLIE_FP = ""               : MSG1="Forma de pagamento do cliente "+CLIENTE+" "+RAZCLI+"//n„o cadastrado !" 
        EndSwitch  
        
        If MSG1<>""
           Then Moveto "Answer"
                Mensagem(MSG1)
                MSG1=""
                Return False
        EndIf
        
   Else Moveto "Answer"
        Mensagem("Cliente n„o localizado !")
        Return False  
EndIf   

Moveto "FaturaC"
While True
  End
  Moveto [Numero da OF]
  If Numero_Lancamento("Interno","Locked_Down")
     Then OF = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile

;Moveto [Numero da OF]
;While True
;  End
;  If Numero_Lancamento("Interno","")
;     Then OF = PROXLANCTO_NLANC
;  EndIf
;  Down
;  [Numero da OF]=OF
;  If Not IsLockRecord()
;     Then QuitLoop
;     Else Del
;  EndIf
;EndWhile

[Codigo da Empresa       ]=[Answer->Codigo da Empresa]
[Situacao do Orcamento   ]="ABERTO"
[Data de Emissao         ]=Today()
[Data de Saida           ]=Today()
[Codigo da Destinacao    ]=DESTIN
[Codigo                  ]=CLIENTE
[Codigo do Representante ]=CLIE_RP
[Condicao de Pagamento   ]=CLIE_CP       
[Forma de Pagamento      ]=CLIE_FP

Cont_Of = Cont_Of + 1
Switch
  Case Cont_Of = 1                  : MSG="Verificar gera‡„o da OF !// //"
                                      MSG=MSG+Completa("OF: - "+OF,30," ")+"//"
  Case Cont_Of > 1 And Cont_Of <=10 : MSG=MSG+Completa("    - "+OF,30," ")+"//"
EndSwitch
UnLockRecord

Moveto "Answer"

SEQI=0

Return True
EndProc

;*******************************************************************************
;* Rotina p/ Gravar FaturaI                                                    *
;*******************************************************************************
Proc Grava_FaturaI(ITEM,QTD,VR)
Private ITEM,QTD,VR 
SEQI=SEQI+1

Moveto "FaturaI"
End
Down
[Numero da OF         ]=OF
[Item da OF           ]=SEQI
[Codigo do Item       ]=ITEM
[CFO                  ]=CFOP
[Quantidade           ]=QTD
[Preco Unitario       ]=VR
[Preco Unitario Tabela]=[Preco Unitario              ]
[Preco Total          ]=[Quantidade]*[Preco Unitario ]

If [Aliquota de ICMS]>0
   Then [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf
UnLockRecord

Moveto "Answer"

EndProc
   
;*******************************************************************************
;* Data de Acerto                                                              *
;*******************************************************************************
Proc Data_Acerto()
Private NUMDOCACERTO, SERIEDOCACERTO, CODEMPACERTO

Do_It!
Clearall

View "NotaC"
Coedit Tabela2
Scan
  CODEMPACERTO   = [Codigo da Empresa  ]
  NUMDOCACERTO   = [Numero do Documento]
  SERIEDOCACERTO = [Serie do Documento ]

  Moveto "NotaC" 
  Moveto [Codigo da Empresa]
  Locate CODEMPACERTO, NUMDOCACERTO, SERIEDOCACERTO 
  If RetVal
     Then [Data de Acerto]=VSDGDTREFERENTE
  EndIf
  UnLockRecord
  
  Moveto Tabela2  
EndScan
Do_It!
ClearAll

EndProc ;Data_Acerto()
      
;*******************************************************************************
;* Rotina p/ Impressao                                                         *
;*******************************************************************************
Proc Imprimir()

Carrega_Tabela()
 
AGUARDE("Aguarde, processando dados")

Print File ARQIMP ASP1+CI_15CPP+ASP2+"\n"
Print File ARQIMP ASP1+CI_6LPP+ASP2+"\n"
If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA="TESTE" EndIf

Sort Tabela1 On "Codigo da Empresa", "Codigo", "Descricao do Item" To "Answer"
ClearAll
    
View "\\Sistemas\\Cadastro\\Represen"
View Tabela1
View "Answer"

EMPANT  = "****"
CODCLI  = "****"

pag=0                 
lin=0
Scan
  
  If [Codigo da Empresa]<>EMPANT  Or
     [Codigo           ]<>CODCLI
     Then
          TotalItem()
          TotalFinanc()

          EMPANT =[Codigo da Empresa]
          CODCLI =[Codigo           ]
          
          Moveto Tabela1
          Moveto [Codigo da Empresa]
          Locate EMPANT, CODCLI
          CopyToArray REG_REPRESEN

          Moveto "\\Sistemas\\Cadastro\\Represen"
          Moveto [Codigo do Representante]
          Locate REG_REPRESEN["Codigo do Representante"]
          If RetVal
             Then TX_COMIS=[Comissao do Representante]
             Else TX_COMIS=0
          EndIf
          Moveto Tabela1
          
          Cabecalho()
  EndIf
 
  QTDDIFER=([Saida_Qtd]+[Troca_Qtd])-([Retorno_Qtd]+[RetornoOutros_Qtd]+[Devol_Qtd]+[Venda_Qtd])
  Switch
    Case QTDDIFER=0 : QTDDIFER=BlankNum() 
    OtherWise       : QTDDIFER=QTDDIFER*-1 
  EndSwitch
  
  If (VSDGOPITE="T") Or
     (VSDGOPITE="D" And QTDDIFER<>0)
     Then Detalhe()
          TIT_SAIDA=TIT_SAIDA+[Saida_VrTotal        ]
          TIT_VENDA=TIT_VENDA+[Venda_VrTotal        ]
          TIT_QTD  =TIT_QTD  +QTDDIFER
          TIT_RETOR=TIT_RETOR+[Retorno_VrTotal      ]
          TIT_RETOU=TIT_RETOU+[RetornoOutros_VrTotal]
  EndIf

  TOT_SAIDA       = TOT_SAIDA+[Saida_VrTotal        ]    TOT_QSAIDA      = TOT_QSAIDA+[Saida_Qtd        ]
  TOT_RETOR       = TOT_RETOR+[Retorno_VrTotal      ]    TOT_QRETOR      = TOT_QRETOR+[Retorno_Qtd      ]
  TOT_RETOU       = TOT_RETOU+[RetornoOutros_VrTotal]    TOT_QRETOU      = TOT_QRETOU+[RetornoOutros_Qtd] 
  TOT_VENDA       = TOT_VENDA+[Venda_VrTotal        ]    TOT_QVENDA      = TOT_QVENDA+[Venda_Qtd        ] ; Vendas Realizadas
  TOT_VENDA_PROJ  = TOT_SAIDA-TOT_RETOR                  TOT_QVENDA_PROJ = TOT_QSAIDA-TOT_QRETOR          ; Vendas Projetadas

  Moveto "Answer"
  
EndScan
TotalItem()
TotalFinanc()

Do_It!
ClearAll

If CheckTG_OPGERENCIA[1]
  Then Data_Acerto()
EndIf
                
Delete Tabela
Delete Tabela1
Delete Tabela3
Delete Tabela5

Release Vars Tabela,Tabela1,Tabela,Tabela5 

EndProc   ;  (Imprimir)

;*******************************************************************************
;* 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_EMPRESATE"       : Campo="NO"
            Case Campo="TG_DESTINAT"      : Campo="TG_EMPRESATE"
            Case Campo="TG_OFAUT"         : Campo="TG_DESTINAT"
            Case Campo="TG_CONDPGTO"      : Campo="TG_OFAUT"
            Case Campo="TG_TPPAGTO"       : Campo="TG_CONDPGTO" 
            Case Campo="TG_OPRELCODALF"   : Campo="TG_TPPAGTO"
            Case Campo="TG_DTINI"         : Campo="TG_OPRELCODALF"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPGERENCIA"    : Campo="TG_DTFIM" 
            Case Campo="TG_DTREFERENTE"   : Campo="TG_OPGERENCIA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESATE"
          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_EMPRESATE"     : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"    : Campo="TG_OFAUT"
                    Case Campo="TG_OFAUT"       : Campo="TG_CONDPGTO"
                    Case Campo="TG_CONDPGTO"    : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"     : Campo="TG_OPRELCODALF"
                    Case Campo="TG_OPRELCODALF" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"       : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"       : Campo="TG_OPGERENCIA"
                    Case Campo="TG_OPGERENCIA"  :
                         If CheckTG_OPGERENCIA[1]
                            Then Campo="TG_DTREFERENTE"
                            Else Campo="YES"
                         EndIf
                    Case Campo="TG_DTREFERENTE"  :
                          VSDGDTREFERENTE = ControlValue("TG_DTREFERENTE")
                         If VSDGDTREFERENTE = BlankDate() 
                            Then Mensagem("Informe a data de Referˆncia!") 
                            Else Campo="YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_DTFIM":
     MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_OFAUT" or Case Campo="TG_OPGERENCIA":
  MensagemCheckBoxes()   
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA     = ""
VSDGDESTINAT    = ""
VSDGCONDPGTO    = ""
VSDGTPPAGTO     = ""
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()
VSDGDTREFERENTE = BlankDate()
VSDGOPRELCODALF = ""

Array TG_OPGERENCIA[1]
TG_OPGERENCIA[1]="Deseja atualizar lan‡amentos como acertados"
OPGERENCIA="referente: "

Array CheckTG_OPGERENCIA[ArraySize(TG_OPGERENCIA)]
CheckTG_OPGERENCIA[1]=False

Array TG_OFAUT[1]
TG_OFAUT[1]="Gerar OF"

Array CheckTG_OFAUT[ArraySize(TG_OFAUT)]
CheckTG_OFAUT[1]=False

While True

  ShowDialog "Acerto Vendas/Devolu‡äes por Cliente/Produto" 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 21 Width 70

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

    Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

    CheckBoxes @ 05,00 Height 1 Width 50 Tag "TG_OFAUT"
    TG_OFAUT[1] to CheckTG_OFAUT[1]
    
    Label  @ 07,02 "Condi‡„o de Pagamento"  For "TG_CONDPGTO"
    Accept @ 08,03 Width 05 "A2"  Picture "!*!" Tag "TG_CONDPGTO"    To VSDGCONDPGTO
    Accept @ 08,09 Width 27 "A25" Picture "!*!" Tag "TG_NOMCONDPGTO" To VSDGNOMCONDPGTO

    Label  @ 07,37 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 08,38 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 08,44 Width 23 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 09,00 "Op‡„o de Ordem" For "TG_OPRELCODALF"
    Accept @ 10,04 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSDGOPRELCODALF
    Accept @ 10,09 Width 31 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSDGNOMOPRELCODALF

    Label  @ 11,00 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 12,00 "de" For "TG_DTINI"
    Accept @ 12,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 12,17 "at‚" For "TG_DTFIM"
    Accept @ 12,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    CheckBoxes @ 14,00 Height 1 Width 55 Tag "TG_OPGERENCIA"
    TG_OPGERENCIA[1] to CheckTG_OPGERENCIA[1]
    
    Label  @ 15,04 OPGERENCIA For "TG_DTREFERENTE"
    Accept @ 15,16 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREFERENTE" To VSDGDTREFERENTE
        
    Pushbutton @ 17,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 17,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data final inv lida !")
          Loop
  EndIf

  If IsBlank(VSDGDTREFERENTE) And CheckTG_OPGERENCIA[1]
     Then Mensagem("Data de acerto inv lida !")
          Loop
  EndIf                                                
  
  If VSDGEMPRESA="0000"
     Then VSDGEMPRESA2=""
     Else VSDGEMPRESA2=VSDGEMPRESA
  EndIf
  
  AGUARDE("Aguarde, Ajustando registros")
  Tabela=Cria_Temp(PrivDir())
  Empty "\\Base\\Sistemas\\Vendas\\RM_3100a"
  Copy "\\Base\\Sistemas\\Vendas\\RM_3100a" Tabela
  
  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Seleciona()
  EndWhile

  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Delete Tabela
          Loop
  EndIf  
  SELECIONAI()
  
  Echo Normal
  Echo Off
  ClearAll
  
EndWhile
ClearAll
Release Vars All
Release Procs All
