;** Rm_3056 ********************************************************************
;* Relacao de Vendas        - Diversos Modelos                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 29/01/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao:   /  /     por  
;Motivo Alteracao: 

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

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter Check
         Moveto [Codigo da Empresa      ] Example "Empresa" TypeIn ", ~VSDGEMPRESA.."
         Moveto [Numero do Documento    ] Example "Docto"
         Moveto [Serie do Documento     ] Example "Serie"
 
         Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."
         Moveto [Codigo                 ] TypeIn "~VSDGDESTINAT.."
         Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
         Moveto [Cidade                 ] TypeIn CIDADE

         Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"

         Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
         Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."

         Moveto [Descricao da Destinacao] TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
         Moveto [Tipo Movimento Estoque ] TypeIn "S"
         Moveto [Situacao               ] TypeIn "Not C"

         if VSDGCODMODELO<>"02" 
            then
                 {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"Notai" Enter Check
                 Moveto [Codigo da Empresa      ] Example "Empresa"
                 Moveto [Numero do Documento    ] Example "Docto"
                 Moveto [Serie do Documento     ] Example "Serie"
                 Moveto [Codigo do Item         ] Example "cite" TypeIn ", ~VSDGITEM.."
                 Moveto [Situacao_Item          ] TypeIn "Not C"
         endif
         Do_It!
         ClearAll
         
EndIf

EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina p/ Selecionar os Vencimentos                                         *
;*******************************************************************************
Proc Selecionav()

Copy Tabela Tabela1

{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa  ] Example "codemp"
Moveto [Numero do Documento] Example "numdoc"
Moveto [Serie do Documento ] Example "serdoc"

{Ask} {NotaV} Check
Moveto [Codigo da Empresa  ] Example "codemp"
Moveto [Numero do Documento] Example "numdoc"
Moveto [Serie do Documento ] Example "serdoc"
Do_It!
ClearAll

View "Answer"
Coedit Tabela1
Scan

  [Observacao na Nota Fiscal]=""

  CODEMP = [Codigo da Empresa]
  NUMDOC = [Numero do Documento]
  SERDOC = [Serie do Documento]
  
  Moveto "Answer"
  Moveto [Codigo da Empresa]
  Locate CODEMP,NUMDOC,SERDOC
  If RetVal
     Then  AUXILIAR = ""
           NCHAR = 0
           While CODEMP=[Codigo da Empresa  ] And
                 NUMDOC=[Numero do Documento] And
                 SERDOC=[Serie do Documento ] 
                 If AUXILIAR<>""
                    Then AUXILIAR = AUXILIAR + " | "
                         NCHAR=NCHAR+2
                 EndIf   
                 AUXILIAR = AUXILIAR + Format("D13",[Data])+" "+[Forma de Pagamento]+" "+LTrim(Format("W10.2,EIC",[Valor])) ;22 Caracteres
                 NCHAR=NCHAR+22
                 Skip
                 If Eot() Then QuitLoop EndIf
           EndWhile

           Moveto Tabela1
           Moveto [Observacao na Nota Fiscal]
           []=""
           []=AUXILIAR
           UnLockRecord

  EndIf

  Moveto Tabela1
EndScan
Do_It!
ClearAll

EndProc   ; (Selecionav)


;*******************************************************************************
;* Rotina Ajusta Dados                                                         *
;*******************************************************************************
Proc Ajusta_Dados()
ClearAll

if VSDGCODMODELO<>"02" 
  then Sort Tabela On "Codigo da Empresa", "Numero do Documento", "Serie do Documento","Item do Documento"
  else Sort Tabela On "Codigo da Empresa", "Numero do Documento", "Serie do Documento"
endif

CDEMPR="****"
NDOCTO="****"
SDOCTO="****"

CoEdit Tabela
Scan

 If [Codigo da Empresa  ]<>CDEMPR Or
    [Numero do Documento]<>NDOCTO Or
    [Serie do Documento ]<>SDOCTO
    Then CDEMPR=[Codigo da Empresa  ]
         NDOCTO=[Numero do Documento]
         SDOCTO=[Serie do Documento ]
         [Numero Lancamento Cheque]=1
    Else 
         [Valor Nota Fiscal       ]=BlankNum()
         [Valor Mercadoria        ]=BlankNum()
         [Valor Mercadoria Liquido]=BlankNum()
         [Peso Liquido            ]=BlankNum()
 EndIf

EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Organiza Registro p/ Exibir em Arquivo                                      *
;*******************************************************************************
Proc Gera_Arquivo_Rm3056()

Switch
  Case VSDGCODMODELO="01I":    
        
       {Ask} TypeIn Tabela Enter 
       Moveto [Codigo da Empresa      ] Checkplus
       Moveto [Nome Fantasia Empresa  ] Checkplus
       Moveto [Numero do Documento    ] Checkplus 
       Moveto [Serie do Documento     ] Checkplus 
       Moveto [Tipo do Documento      ] Checkplus 
       Moveto [Data de Emissao        ] Checkplus
       Moveto [Codigo                 ] Checkplus 
       Moveto [Razao Social           ] Checkplus
       Moveto [Cidade                 ] Checkplus 
       Moveto [UF                     ] Checkplus
       Moveto [Codigo do Representante] Checkplus
       Moveto [Nome Fantasia Represent] Checkplus
       Moveto [Condicao de Pagamento  ] Checkplus
       Moveto [Descricao CondPagto    ] Checkplus
       Moveto [Codigo do Item         ] Checkplus  
       Moveto [Descricao do Item      ] Checkplus  
       Moveto [Tipo do Item           ] Checkplus  
       Moveto [Quantidade             ] Checkplus  
       Moveto [Unidade Fiscal         ] Checkplus  
       Moveto [Preco Unitario         ] Checkplus  
       Moveto [Preco Total            ] Checkplus     
       Moveto [Valor Desconto Total   ] Checkplus     
       Moveto [Custo Medio Unitario   ] Checkplus     
       Do_iT!
       ClearAll
       
       Adiciona_Campo_EmOrdem("Answer","Codigo da Empresa(A4),"+      
                                       "Nome Fantasia Empresa(A20),"+
                                       "Numero do Documento(A6),"+       
                                       "Serie do Documento(A4),"+       
                                       "Tipo do Documento(A4),"+       
                                       "Data de Emissao(D),"+
                                       "Codigo(A4),"+                  
                                       "Razao Social(A40),"+
                                       "UF(A2),"+                     
                                       "Cidade(A20),"+                 
                                       "Codigo do Representante(A4),"+
                                       "Nome Fantasia Represent(A20),"+
                                       "Condicao de Pagamento(A2),"+  
                                       "Descricao CondPagto(A20),"+
                                       "Codigo do Item(A10),"+            
                                       "Descricao do Item(A100),"+        
                                       "Tipo do Item(A1),"+            
                                       "Quantidade(N),"+              
                                       "Unidade Fiscal(A4),"+          
                                       "Preco Unitario($),"+           
                                       "Preco Total($),"+               
                                       "Valor Desconto Total($),"+       
                                       "Custo Medio Unitario($)")       
                                       
       Delete Tabela
       Rename "Answer" Tabela                                                      
       
EndSwitch       
       
EndProc ;Gera_Arquivo_Rm0501()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
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_TPDOCTO"      : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"     : Campo="TG_TPDOCTO"
            Case Campo="TG_REPRESEN"     : Campo="TG_DESTINAT"
            Case Campo="TG_CIDADE"       : Campo="TG_REPRESEN"
            Case Campo="TG_DTINI"        : Campo="TG_CIDADE"
            Case Campo="TG_DTFIM"        : Campo="TG_DTINI"
            Case Campo="TG_CONDPGTO"     : Campo="TG_DTFIM"
            Case Campo="TG_TPPAGTO"      : Campo="TG_CONDPGTO"
            Case Campo="TG_ITEM"         : Campo="TG_TPPAGTO"
            Case Campo="TG_CODMODELO"    : Campo="TG_ITEM"
            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_TPDOCTO"
                    Case Campo="TG_TPDOCTO"      : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"     : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"     : Campo="TG_CIDADE"
                    Case Campo="TG_CIDADE"       : Campo="TG_DTINI"
                         If Upper(VSDGCIDADE)="TODAS"
                            Then CIDADE=""
                            Else CIDADE=VSDGCIDADE
                         EndIf
                    Case Campo="TG_DTINI"        : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"        : Campo="TG_CONDPGTO"
                    Case Campo="TG_CONDPGTO"     : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"      : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"         : Campo="TG_CODMODELO" 
                    Case Campo="TG_CODMODELO"    : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Por Tipo Documento")
ModeloRelatoriosAdd("01I Por Tipo Documento, com Itens")
ModeloRelatoriosAdd("Separator")
ModeloRelatoriosAdd("02  Por Cliente")
ModeloRelatoriosAdd("02I Por Cliente, com Itens")
ModeloRelatoriosAdd("02V Por Cliente, com Vencimentos")
ModeloRelatoriosAdd("Separator")
ModeloRelatoriosAdd("04  Por Item")
ModeloRelatoriosAdd("Separator")
ModeloRelatoriosAdd("05  Por Destina‡Æo")
ModeloRelatoriosAdd("05O Por Destina‡Æo +Observa‡äes")
ModeloRelatoriosAdd("05I Por Destina‡Æo, com Itens")
ModeloRelatoriosAdd("Separator")
ModeloRelatoriosAdd("06  Por Representante/Cliente")
ModeloRelatoriosAdd("06I Por Representante/Cliente, com Itens")

ModeloRelatoriosAdd("Fim")
                      
                           
EndProc ;ModeloRelatoriosCarregaLista

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

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

VSDGEMPRESA =""
VSDGTPDOCTO =""
VSDGREPRESEN=""
VSDGCIDADE  =""
VSDGDTINI   =BlankDate()
VSDGDTFIM   =BlankDate()

VSDGCONDPGTO=""
VSDGTPPAGTO =""
VSDGITEM    =""

ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Rela‡„o de Vendas - Diversos" 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 22 Width 80

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

    Label  @ 02,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 06,00 "Representante"  For "TG_REPRESEN"
    Accept @ 07,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 07,09 Width 25 "A15" Picture "!*!" Tag "TG_NOMREPR" To VSDGNOMREPR

    Label  @ 08,00 "Cidade"  For "TG_CIDADE"
    Accept @ 09,01 Width 33 "A20"  Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE

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

    Label  @ 00,35 "Condi‡„o de Pagamento"  For "TG_CONDPGTO"
    Accept @ 01,38 Width 05 "A2"  Picture "!*!" Tag "TG_CONDPGTO"    To VSDGCONDPGTO
    Accept @ 01,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMCONDPGTO" To VSDGNOMCONDPGTO

    Label  @ 02,35 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 03,38 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 03,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 06,35 "Item"  For "TG_ITEM"
    Accept @ 07,36 Width 33 "A10"  Picture "#*#" Tag "TG_ITEM"    To VSDGITEM
    Accept @ 08,36 Width 33 "A30" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM

    Label  @ 15,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 16,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 16,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  if not ValidarModelosRelatorios() then loop endif         

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  DISPOSITIVO()
  If OK=""  Then Loop EndIf

  If Ok="A" Then IMPRIME_ARQUIVO = True Else IMPRIME_ARQUIVO=False EndIf

  AGUARDE("Aguarde, gerando o relat¢rio")
  Tabela=Cria_Temp(PrivDir())

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    If IsTable("Answer")     Then Delete "Answer" EndIf
    Seleciona()
    If Not IsTable("Answer") Then Loop EndIf
    If IsTable(Tabela)
       Then Add "Answer" Tabela
       Else Rename "Answer" Tabela
    EndIf
  EndWhile

  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Delete Tabela
          Loop
  EndIf
  Ajusta_Dados()
  
  If VSDGCODMODELO="02V"
     Then Tabela1=Cria_Temp(PrivDir())
          Selecionav()
          Rename Tabela1 Tabela
  EndIF        
         
  Switch
    case VSDGCODMODELO="01"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "10" Tabela "R"
    case VSDGCODMODELO="01I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "9"  Tabela "R"

    case VSDGCODMODELO="02"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "1"  Tabela "R"
    case VSDGCODMODELO="02I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "R"  Tabela "R"
    case VSDGCODMODELO="02V" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2006"  "R"  Tabela "R"

    case VSDGCODMODELO="04"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_1999"  "1"  Tabela "R"
    
    case VSDGCODMODELO="05"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "3"  Tabela "R"
    case VSDGCODMODELO="05O" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "1"  Tabela "R"
    case VSDGCODMODELO="05I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "2"  Tabela "R"

    case VSDGCODMODELO="06"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001" "11"  Tabela "R"
    case VSDGCODMODELO="06I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001" "12"  Tabela "R"

  endSwitch

  If IMPRIME_ARQUIVO
     Then If VSDGCODMODELO="01I"
             Then Gera_Arquivo_Rm3056()
          endif    
  EndIf   

  IMPRIREL(Tabela,"R")  

  Delete Tabela

EndWhile
ClearAll
Release Vars All
Release Procs All
