;** RM_0104 ********************************************************************
;*  Acerto Program‡Æo/Produ‡Æo da Confecc‡Æo                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 23/06/2014 por Bruno Carvalho
;Ultima Alteracao: 25/06/2014 por Bruno Carvalho
;Motivo Alteracao: Add mais um modelo sintetico, agora os separando por quebra de destino 
;Ultima Alteracao: 26/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog TG_DESTINAT 
;Ultima Alteracao: 29/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes TG_REFERENCIA
;Ultima Alteracao: 18/04/2017 por Bruno Carvalho 
;Motivo Alteracao: Credito_Debito() -> While sendo verificado com apenas um tipo espec¡fico, ajustado p/ verificar de acordo com a vari vel TIPO
;Ultima Alteracao: 30/05/2017 por Bruno Carvalho 
;Motivo Alteracao: Adicionado modelo de relat¢rio ajustado para #0391# -> Removendo colunas que constavam inconsistˆncias "Play RM_0104a"
;Ultima Alteracao: 16/04/2018 por Bruno Carvalho 
;Motivo Alteracao: Alterado [Preco Unitario] -> [Custo Unitario] 
;Ultima Alteracao: 20/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   

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

;---- Produ‡Æo ---------------------------------------------------------
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item        ] Example "ITEM"
Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
Moveto [Codigo da Marca       ] Check TypeIn "~VSDGMARCA.."
Moveto [Descricao da Marca    ] Check
{Ask} {Rfacc}
Moveto [Numero_Producao       ] Example "num"
Moveto [Numero_Programacao    ] Check
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa ] Check
Moveto [Data_Producao         ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Codigo                ] Check TypeIn "~VSDGDESTINAT.."
Moveto [Razao Social          ] Check
Moveto [Numero_Corte          ] Check
Moveto [Destino_Producao      ] Check
Switch
  Case VSDGOPDEST="INTERNO + FACCAO" : TypeIn "INTERNO Or FACCAO"
  Case VSDGOPDEST="TODOS"            : TypeIn ".."
  OtherWise                          : TypeIn "~VSDGOPDEST.." 
EndSwitch

{Ask} {RfacRI} 
Moveto [Codigo do Item        ] Check Example "ITEM"
Moveto [Numero_Producao       ] Check Example "num"
Moveto [Referencia            ] Check
Moveto [Descricao do Item     ] Check
Moveto [Unidade Fiscal        ] Check
Moveto [Quantidade Programada ] Check
Moveto [Quantidade Produzida  ] Check
Moveto [Custo Unitario        ] Check
Moveto [Preco Total           ] Check
Do_It!
ClearAll

{Ask} {Answer} TypeIn "Fast"
Moveto [Quantidade Programada ] TypeIn "Changeto Blank"
Do_It!
ClearAll

Tabela=Cria_Temp(PrivDir())
Rename "Answer" Tabela

;---- Programa‡Æo ------------------------------------------------------
{Ask} TypeIn Tabela Enter
Moveto [Numero_Programacao    ] Example "num"
Moveto [Codigo do Item        ] Example "codi"
{Ask} {PfacRI} 
Moveto [Numero_Programacao    ] Check Example "num"
Moveto [Codigo do Item        ] Check Example "codi"
Moveto [Quantidade Programada ] Check
Do_It!
ClearAll

{Ask} {Answer} 
Moveto [Numero_Programacao    ] Example "num"
Moveto [Quantidade Programada ] Example "Qtd"
Moveto [Codigo do Item        ] Example "CodI"
{Ask} TypeIn Tabela Enter
Moveto [Numero_Programacao    ] Example "num"
Moveto [Codigo do Item        ] Example "CodI"
Moveto [Quantidade Programada ] TypeIn "Changeto _Qtd"
Do_It!
ClearAll

If Not IsEmpty(Tabela)
   Then {Ask} {\\Sistemas\\Estoque\\Itens} 
        Moveto [Referencia       ] Example "Ref"
        Moveto [Descricao do Item] Example "Des"
        Moveto [Tipo do Item     ] TypeIn "D"
        {Ask} TypeIn Tabela Enter 
        Moveto [Referencia       ] Example "Ref"
        Moveto [Descricao do Item] TypeIn "Changeto _Des"       
        Do_It!
        ClearAll
EndIf

{Ask} TypeIn Tabela Enter Check
Moveto [Codigo             ] Example "Cod"
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo             ] Example "Cod"
Moveto [CGC                ] Check
Do_It!
ClearAll

Rename "Answer" Tabela

{Ask} TypeIn Tabela Enter CheckPlus
Moveto [Codigo             ] Example "Cod" TypeIn "!"
{Ask} {\\Sistemas\\Cadastro\\DestObs}
Moveto [Codigo             ] Example "Cod"
Moveto [Observacoes        ] Check
Do_It!
ClearAll

Rename "Answer" Tabela

EndProc   ; (Seleciona)

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

;*** Contas a Pagar ************************************************************ 
If IsTable("\\Sistemas\\Ctapag\\"+Dir_Trab+"Titulos") 
   Then {Ask} TypeIn Tabela Enter  
        Moveto [Codigo da Empresa       ] Example "Empr"
        Moveto [Codigo                  ] Example "CodT"           
        {Ask} {\\Sistemas\\Ctapag\\Titulos}
        Moveto [Codigo da Empresa       ] Check Example "Empr"
        Moveto [Nome Fantasia Empresa   ] Check
        Moveto [Numero do Documento     ] Check
        Moveto [Serie do Documento      ] Check
        Moveto [Codigo do Documento     ] Check
        Moveto [Tipo do Documento       ] Check        
        Moveto [Data de Emissao         ] Check 
        Moveto [Codigo do Emitente      ] Check Example "CodT ,as CodigoC"
        Moveto [Nome Fantasia EmitDest  ] Check TypeIn "as NomeC"
        Moveto [Razao Social            ] Check   
        Moveto [Saldo do Documento      ] Check TypeIn "> 0.01 ,as Valor" 
        Do_It!         
        ClearAll
        
        If Not IsEmpty("Answer") 
          Then Adiciona_Dados("CTAPAG")
        EndIf  
EndIf               

;*** Contas a Receber ********************************************************** 
If IsTable("\\Sistemas\\Ctarec\\"+Dir_Trab+"Duplic") 
   Then {Ask} TypeIn Tabela Enter  
        Moveto [Codigo da Empresa       ] Example "Empr"
        Moveto [Codigo                  ] Example "CodT"           
        {Ask} {\\Sistemas\\Ctarec\\Duplic}
        Moveto [Codigo da Empresa       ] Check Example "Empr"
        Moveto [Nome Fantasia Empresa   ] Check
        Moveto [Numero do Documento     ] Check
        Moveto [Serie do Documento      ] Check
        Moveto [Codigo do Documento     ] Check
        Moveto [Tipo do Documento       ] Check        
        Moveto [Data de Emissao         ] Check         
        Moveto [Codigo do Destinatario  ] Check Example "CodT ,as CodigoC"
        Moveto [Nome Fantasia EmitDest  ] Check TypeIn "as NomeC"
        Moveto [Razao Social            ] Check   
        Moveto [Saldo do Documento      ] Check TypeIn "> 0.01 ,as Valor" 
        Do_It!         
        ClearAll        
                              
        If Not IsEmpty("Answer")
          Then Adiciona_Dados("CTAREC")
        EndIf      
EnDIf

EndProc ;Ajusta_Dados()

;*******************************************************************************
;* Rotina Ajusta Dados                                                         *
;*******************************************************************************
Proc Adiciona_Dados(PARAM)
Private PARAM
ClearAll

Switch
  Case PARAM="CTAPAG" : PARAM="Credito"  
  Case PARAM="CTAREC" : PARAM="Debito"          
EndSwitch   

{Ask} {Answer}
Moveto [Codigo da Empresa       ] Example "Empre"
Moveto [Nome Fantasia Empresa   ] Example "NFEmp"
Moveto [Numero do Documento     ] Example "Docto"
Moveto [Serie do Documento      ] Example "Serie"
Moveto [Codigo do Documento     ] Example "CodD" 
Moveto [Tipo do Documento       ] Example "TipD" 
Moveto [Data de Emissao         ] Example "DataE"
Moveto [CodigoC                 ] Example "CC"
Moveto [NomeC                   ] Example "NC"
Moveto [Razao Social            ] Example "RazS"
Moveto [Valor                   ] Example "Valor"

{Ask} TypeIn Tabela2 Enter TypeIn "Fast Insert"
Moveto [Codigo da Empresa       ] Example "Empre"
Moveto [Nome Fantasia Empresa   ] Example "NFEmp"
Moveto [Numero do Documento     ] Example "Docto"
Moveto [Serie do Documento      ] Example "Serie"
Moveto [Codigo do Documento     ] Example "CodD" 
Moveto [Tipo do Documento       ] Example "TipD" 
Moveto [Data de Emissao         ] Example "DataE"
Moveto [CodigoC                 ] Example "CC"
Moveto [NomeC                   ] Example "NC"
Moveto [Razao Social            ] Example "RazS"
Moveto [Valor                   ] Example "Valor"
Moveto [Tipo                    ] TyPeIn "~PARAM"
Do_It!
ClearAll

EndProc ;Adiciona_Dados()

;*******************************************************************************
;* Rotina p/ Cabecalho                                                         *
;*******************************************************************************
Proc Observacao()
Private i,PosI,CONT_OBS,AUX_OBS,OBSERVACAO 

If VSDGCODMODELO="01"
   Then Release Vars OBSERVACAO 
        DynArray OBSERVACAO[]
  
        CONT_OBS = 0
        AUX_OBS  = OBS_CLI    
        If AUX_OBS <> ""
           Then PosI = Search("\n",AUX_OBS)
                If PosI >0
                   Then While PosI > 0
                          CONT_OBS             = CONT_OBS + 1
                          OBSERVACAO[CONT_OBS] = Ltrim(Rtrim(SubStr(AUX_OBS,1,PosI-1)))
                          AUX_OBS              = SubStr(AUX_OBS,PosI+1,Len(AUX_OBS))
                          PosI                 = Search("\n",AUX_OBS)
                          If PosI = 0
                             Then If Ltrim(Rtrim(SubStr(AUX_OBS,1,Len(AUX_OBS))))<>""
                                     Then CONT_OBS             = CONT_OBS + 1
                                          OBSERVACAO[CONT_OBS] = Ltrim(Rtrim(SubStr(AUX_OBS,1,Len(AUX_OBS))))
                                  EndIf        
                                  QuitLoop
                          EndIf   
                        EndWhile                           
                EndIf   
           Else OBS[1] = ""
                Return     
        EndIf         
        
        i = 0
        For ri From 1 To DynArraySize(OBSERVACAO)
          If Len(Ltrim(Rtrim(OBSERVACAO[ri]))) = 0 Then Loop EndIf
          i = i + 1
          If i = 1
             Then OBS[i] = "\027E"+"   Observacoes: "+"\027F"
             Else OBS[i] = Spaces(16)  
          EndIf
          OBS[i] = OBS[i] + OBSERVACAO[ri] 
        Endfor
EndIf   
   
EndProc ;Observacao() 

;*******************************************************************************
;* Rotina p/ Cabecalho                                                         *
;*******************************************************************************
Proc Cabecalho(PARAM)
Private PARAM
If Not IsAssigned(PAGINA)     Then PAGINA = 0      EndIf
If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA = "" EndIf

PAGINA = PAGINA + 1

ANT_DESTINO = " - "+DESTINO
If Not QUEBRA_DESTINO_SINTETICO
   Then ANT_DESTINO = "" 
EndIf   

CABECALHO[1]  = CI_15CPP+CI_8LPP
CABECALHO[2]  = ""
CABECALHO[3]  = Spaces(3)+Fill("-",131)
CABECALHO[4]  = Spaces(3)+Completa(NOMEMPRESA,38," ")+Format("W93,AR","Emissao.: "+AlinhM(LTrim(Format("D13",Today())),10)+"-"+
                         AlinhM(LTrim(Time()),8)+"  Pag.: "+Format("W4,EIC",PAGINA))
CABECALHO[5]  = Spaces(3)+Fill("-",131)
CABECALHO[6]  = ""
CABECALHO[7]  = Format("W130,AC","Acerto Producao/Programacao de "+StrVal(VSDGDTINI)+" ate "+StrVal(VSDGDTFIM)+ANT_DESTINO)
CABECALHO[8]  = ""



If PARAM="Analitico"
   Then CABECALHO[9]  = "                                                                       (B)Prod.                                                 "
        CABECALHO[10] = "  Data        Ref.  Prod.  Item                          TM Un (A)Prog. Acumulad (C)Prod. (A-B-C)Saldo   (D)Vr.Un.    (C*D)Total"
        CABECALHO[11] = "  ----------- ----- ------ ----------------------------- -- -- -------- -------- -------- ------------  ----------  ------------"
        CABECALHO[12]= ""
        CABECALHO[13]= "\027E"+"       Empresa: "+"\027F"+COD_EMP+" "+NOM_EMP
        CABECALHO[14]= ""
        CABECALHO[15]= "\027E"+"  Destinatario: "+"\027F"+COD_CLI+" "+RAZ_CLI   
        CABECALHO[16]= ""
   Else If QUEBRA_DESTINO_SINTETICO
           Then CABECALHO[9]  = "                                  (B)Prod.                                    "     
                CABECALHO[10] = "  Pessoa                          Acumulad (C)Prod. (A-B-C)Saldo    (C*D)Total"
                CABECALHO[11] = "  ------------------------------- -------- -------- ------------  ------------"
                CABECALHO[12]= ""
                CABECALHO[13]= "\027E"+"       Empresa: "+"\027F"+COD_EMP+" "+NOM_EMP
                CABECALHO[14]= ""
           Else CABECALHO[9]  = "                                                  (B)Prod.                                    "     
                CABECALHO[10] = "  Pessoa                          Destino         Acumulad (C)Prod. (A-B-C)Saldo    (C*D)Total"
                CABECALHO[11] = "  ------------------------------- --------------- -------- -------- ------------  ------------"
                CABECALHO[12]= ""
                CABECALHO[13]= "\027E"+"       Empresa: "+"\027F"+COD_EMP+" "+NOM_EMP
                CABECALHO[14]= ""     
        EndIf        
EndIf   

EndProc   ;Cabecalho()

;*******************************************************************************
;* Rotina Imprimir Rodap‚ personalizado caso nÆo tenha credito/debito          *
;*******************************************************************************       
Proc Rodape()        
              
RODAPE[1] = ""
RODAPE[2] = ""
RODAPE[3] = Spaces(3)+Fill("=",131)                   
RODAPE[4] = Spaces(3)+"Total Producao = "+Format("W12.2,EIC",VALOR_PRECO_TOTAL)
RODAPE[5] = Spaces(66)+Format("W48,AC",Fill(Chr(196),Len(RAZ_CLI)+10))
RODAPE[6] = Spaces(66)+Format("W48,AC",RAZ_CLI)
RODAPE[7] = "" 
RODAPE[8] = Spaces(3)+Fill("=",131)
         
EndProc ;Rodape()  

;*******************************************************************************
;* Rotina Imprimir Credito/Debito/Adiantamento                                 *
;*******************************************************************************
Proc Credito_Debito()
Private NEG,NEG,NOR,FAZ_ROTINA,i,TIPO,CREDITO,DEBITO

NEG = "\027E"                                  
NOR = "\027F"          

TOTAL_CREDITO = 0
TOTAL_DEBITO  = 0

TITULO_CREDITO = ""
TITULO_DEBITO  = ""
CONT_CREDITO   = 0
CONT_DEBITO    = 0

CREDITO = False
DEBITO  = False

Sort Tabela2 On "CodigoC","Tipo"

For i From 1 To 2
  Switch
    Case i = 1 : TIPO = "Credito"
    Case i = 2 : TIPO = "Debito"
  EndSwitch
  
  Moveto [CodigoC]
  Locate COD_CLI
  If Not RetVal 
     Then Return False 
  EndIf

  FAZ_ROTINA = False
  While [CodigoC] = COD_CLI
    If [Tipo] = TIPO And [Codigo da Empresa] = COD_EMP
       Then FAZ_ROTINA=True
            QuitLoop
    EndIf        
    Skip 
    If Eot() Then QuitLoop EndIf
    Locate Next COD_CLI
    If Not RetVal
       Then QuitLoop
    EndIf    
  EndWhile

  If FAZ_ROTINA
     Then While [Tipo             ] = TIPO      And 
                [CodigoC          ] = COD_CLI   And
                [Codigo da Empresa] = COD_EMP       
            If VSDGCODMODELO="01"
               Then Switch
                      Case i = 1 : Credito()
                      Case i = 2 : Debito()
                    EndSwitch  
               Else Switch
                      Case i = 1 : TOTAL_CREDITO = TOTAL_CREDITO + [Valor]
                      Case i = 2 : TOTAL_DEBITO  = TOTAL_DEBITO  + [Valor] 
                    EndSwitch 
            EndIf 
            Skip
            If Eot() Then QuitLoop EndIf
        EndWhile
     Else Switch
            Case i = 1 : CREDITO = False
            Case i = 2 : DEBITO  = False 
          EndSwitch   
  EndIf                                  
EndFor

If Not CREDITO And Not DEBITO
   Then Return False
EndIf     
        
;---- Totalizador Debito/Credito -----------------------------------------------                                            
If VSDGCODMODELO="01"
   Then DEBITO_CREDITO[1] = ""
        DEBITO_CREDITO[2] = ""
        DEBITO_CREDITO[3] = Spaces(3)+Fill("=",131)
        DEBITO_CREDITO[4] = Spaces(3)+NEG+"(P)"+NOR+" Total Producao = "+Format("W12.2,EIC",VALOR_PRECO_TOTAL)
        DEBITO_CREDITO[5] = Spaces(3)+NEG+"(C)"+NOR+" Total Credito  = "+Format("W12.2,EIC",TOTAL_CREDITO)
        DEBITO_CREDITO[6] = Spaces(3)+NEG+"(D)"+NOR+" Total Debito   = "+Format("W12.2,EIC",TOTAL_DEBITO)+Spaces(30)+Format("W48,AC",Fill(Chr(196),Len(RAZ_CLI)+10))
        DEBITO_CREDITO[7] = Spaces(3)+"TOTAL "+NEG+"(P)"+NOR+"+"+NEG+"(C)"+NOR+"-"+NEG+"(D)"+NOR+" = "+
                            Format("W13.2,EIC",(VALOR_PRECO_TOTAL + TOTAL_CREDITO - TOTAL_DEBITO))+Spaces(30)+Format("W48,AC",RAZ_CLI) 
        DEBITO_CREDITO[8] = Spaces(3)+Fill("=",131)
   Else Moveto Tabela       
EndIf
 
Return True

EndProc ;Credito_Debito()
        
;*******************************************************************************
;* Rotina Imprimir Credito/Debito/Adiantamento                                 *
;*******************************************************************************
Proc Debito()           

If TITULO_DEBITO = "" 
   Then DEBITO = True
        TITULO_DEBITO = "Debito"
        CONT_DEBITO  = CONT_DEBITO + 1
        CRED[CONT_DEBITO] = ""
        CONT_DEBITO  = CONT_DEBITO + 1
        CRED[CONT_DEBITO] = "\027E"+"  ->       Debito:"+"\027F"
EndIf

CONT_DEBITO  = CONT_DEBITO + 1
TOTAL_DEBITO = TOTAL_DEBITO + [Valor]

CRED[CONT_DEBITO] = Spaces(3)+Format("W4",[Tipo do Documento])+" "+Format("W6",[Numero do Documento])+
                    Spaces(2)+Format("D13",[Data de Emissao])+Spaces(2)+Format("W12.2,EIC",[Valor])

EndProc ;Debito()

;*******************************************************************************
;* Rotina Imprimir Credito/Debito/Adiantamento                                 *
;*******************************************************************************
Proc Credito()                

If TITULO_CREDITO = "" 
   Then CREDITO = True
        TITULO_CREDITO = "Credito"
        CONT_CREDITO  = CONT_CREDITO + 1
        CRED[CONT_CREDITO] =  ""
        CONT_CREDITO  = CONT_CREDITO + 1
        CRED[CONT_CREDITO] = "\027E"+"  ->      Credito:"+"\027F"
EndIf                              

CONT_CREDITO  = CONT_CREDITO + 1
TOTAL_CREDITO = TOTAL_CREDITO + [Valor]

CRED[CONT_CREDITO] = Spaces(3)+Format("W4",[Tipo do Documento])+" "+Format("W6",[Numero do Documento])+
                     Spaces(2)+Format("D13",[Data de Emissao])+Spaces(2)+Format("W12.2,EIC",[Valor])

EndProc ;Credito()          
        
;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Array_Cabecalho()
If Not IsAssigned(VERIFICA_PAG) Then VERIFICA_PAG = False EndIf

For i From 1 To DynArraySize(CABECALHO)
  Switch
    Case i = 4 : If VERIFICA_PAG Then PAGINA = PAGINA + 1 EndIf 
                 CABECALHO[4] = SubstR(CABECALHO[4],1,Len(CABECALHO[4])-4)+Format("W4,EIC",PAGINA)
                 VERIFICA_PAG = True            
  EndSwitch  
  Print File ARQIMP CABECALHO[i]+"\n" 
Endfor   

EndProc ;Array_Cabecalho()        
        
;*******************************************************************************
;* Imprimir                                                                    *
;*******************************************************************************
Proc Imprime(PARAM)
Private i,CONTADOR,PARAM,CONTADOR_SINTETICO, ROTINA 

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

Tabela_Totalizador = Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Faccao\\RM_0104" Tabela_Totalizador

ROTINA             = False
VERIFICA_EMPRESA   = "***"
VERIFICA_DESTINO   = "***"
POSICAO            = 0
CONTADOR_SINTETICO = 0

{Ask} {\\Sistemas\\Cadastro\\Empresas}
Moveto [Codigo da Empresa    ] Check Example "CodE"
Moveto [Nome Fantasia Empresa] Check
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo               ] Check Example "CodC" 
Moveto [Razao Social         ] Check  
Moveto [CGC                  ] Check  
{Ask} TypeIn Tabela Enter 
Moveto [Codigo da Empresa    ] Example "CodE"
Moveto [Codigo               ] Example "CodC" 
Moveto [Destino_Producao     ] Check
Moveto [Observacoes          ] Check
Do_It!
ClearAll  

Tabela_Temp = Cria_Temp(PrivDir())
Copy "Answer" Tabela_Temp

Sort Tabela_Temp On "Codigo da Empresa","Codigo","Destino_Producao"
ClearAll

If PARAM = "Sintetico"
  Then Release Vars CONTADOR, CABECALHO, CORPO

       DynArray CABECALHO[]
       DynArray CORPO[]   
EndIf

HR=NRecords(Tabela_Temp)

View Tabela_Temp
While True                           
   COD_EMP = [Codigo da Empresa    ]
   NOM_EMP = [Nome Fantasia Empresa]
   COD_CLI = [Codigo               ]
   RAZ_CLI = [Razao Social         ]
   CGC_LCI = [CGC                  ]
   DESTINO = [Destino_Producao     ]
   OBS_CLI = [Observacoes          ]
   POSICAO = RowNo()
   
   ;Se ocorrer algum erro, verificar a vari vel POSICAO, no final do while 
   
   If ROTINA And POSICAO=1
      Then QuitLoop
   EnDIf 
   
   Barra(HR, RecNo())
   Aguarde("Aguarde, Processando "+DESTINO+" "+BARRA_STRING)     
                                
   If PARAM = "Analitico"
      Then If VERIFICA_EMPRESA <> COD_EMP
              Then VERIFICA_EMPRESA = COD_EMP
                   ;---- Total Empresa ---------------------
                   EMP_VALOR_ACUMULADOO  = 0
                   EMP_VALOR_PRODUCAO    = 0
                   EMP_VALOR_SALDO       = 0
                   EMP_VALOR_PRECO_TOTAL = 0
           EndIf  
              
           If VERIFICA_DESTINO <> DESTINO
              Then VERIFICA_DESTINO = DESTINO
                   ;---- Total Destino ---------------------
                   DESTINO_VALOR_ACUMULADOO  = 0
                   DESTINO_VALOR_PRODUCAO    = 0
                   DESTINO_VALOR_SALDO       = 0
                   DESTINO_VALOR_PRECO_TOTAL = 0
           EndIf     
      
           Release Vars CONTADOR, CABECALHO, RODAPE, CORPO, DEBITO_CREDITO, DEB, CRED, OBS
   
           DynArray CABECALHO[]
           DynArray RODAPE[]
           DynArray CORPO[]
           DynArray DEBITO_CREDITO[]
           DynArray DEB[]
           DynArray CRED[]
           DynArray OBS[]      
   EndIf
   
   {Ask} TypeIn Tabela Enter Check
   Moveto [Codigo da Empresa   ] TypeIn "~COD_EMP"
   Moveto [Codigo              ] TypeIn "~COD_CLI"
   Moveto [Destino_Producao    ] TypeIn "~DESTINO"
   Do_It!
   ;---- Totalizando a Produ‡Æo -------------------------------------------------
   Moveto [Quantidade Produzida] PRODUCAO = ImageCSum()
   ClearAll
   
   VALOR_PRECO_TOTAL = 0
   View "Answer"
   Scan
     VALOR_PRECO_TOTAL = VALOR_PRECO_TOTAL + ([Quantidade Produzida] * [Custo Unitario])
   EndScan
   ClearAll
   
   Release Vars VERIFICA_PAG
   Cabecalho(PARAM)       
   
   If PARAM = "Analitico"
      Then If Not Credito_Debito()
              Then Rodape()
           EndIf   
           Moveto Tabela2 
           ClearImage
           Sort "Answer" On "Codigo da Empresa","Codigo","Destino_Producao","Data_Producao","Referencia","Numero_Programacao"
      Else Sort "Answer" On "Codigo da Empresa","Destino_Producao"
   EndIf 
   CLearImage
   
   CONTADOR               = 0
   DEST_VALOR_ACUMULADOO  = 0
   DEST_VALOR_PRODUCAO    = 0
   DEST_VALOR_SALDO       = 0
   DEST_VALOR_PRECO_TOTAL = 0
   PROGRAMACAO            = "***"  
                   
   NR=NRecords("Answer")
   
   Sort "Answer" On "Numero_Programacao"
   ClearAll
        
   View "\\Sistemas\\Estoque\\Itens"
   View "Pfacri"
   View "Rfacri"
   View "Rfacc"
   View "Answer"
   Scan
     DT_PROD_ACUM = [Data_Producao]
     ITEM         = [Codigo do Item]
     QTD_PROD     = [Quantidade Produzida]
     
     Barra(NR, RecNo())
     Aguarde("Aguarde, Processando "+[Destino_Producao]+" "+[Numero_Programacao]+" "+BARRA_STRING)  
  
     ;---- Dados do Item - DESCRICAO/TAMANHO/COR ----------------------------------
     ITEM_DESCRICAO = ""
     ITEM_TAMANHO   = ""
     ITEM_COR       = ""
     GetRecord "\\Sistemas\\Estoque\\Itens" ITEM To REG_ITEM
     If RetVal
     Then If REG_ITEM["Tipo do Item"]="P"
             Then ITEM_DESCRICAO = REG_ITEM["Descricao do Item"]
                  ITEM_TAMANHO   = REG_ITEM["DTamanho"]
                  ITEM_COR       = REG_ITEM["Descricao da Cor_Tecido"]
          EndIf
     EndIf 
      
     ;---- Quantidade Programa‡Æo -------------------------------------------------
     GetRecord "Pfacri" [Numero_Programacao],ITEM To REG_PFACRI
     If RetVal
        Then QTD_PROGRAMACAO = REG_PFACRI["Quantidade Programada"]
        Else QTD_PROGRAMACAO = BlankNum()
     EndIf    
        
     ;---- Verificando as produ‡äes anteriores e acumulando -----------------------  
     If PROGRAMACAO<>[Numero_Programacao]
        Then PROGRAMACAO = [Numero_Programacao]
             PROD_ACUM = 0       
             Moveto "Rfacc"                             
             Moveto [Numero_Programacao]                    
             Home
             Locate PROGRAMACAO
             If RetVal  
                Then While [Numero_Programacao] = PROGRAMACAO
                        If [Data_Producao] < DT_PROD_ACUM  
                           Then GetRecord "Rfacri" [Rfacc->Numero_Producao],ITEM To REG_RFACRI
                                If RetVal
                                   Then PROD_ACUM = PROD_ACUM + REG_RFACRI["Quantidade Produzida"] 
                                EndIf                
                        EndIf     
                        Moveto "Rfacc"
                        Skip
                        If Eot() Then QuitLoop EndIf
                        Locate Next PROGRAMACAO
                        If Not RetVal
                           Then QuitLoop
                        EndIf
                     EndWhile
             EndIf 
             Moveto "Answer"
     EndIf
      
     ;---- Montando os Itens --------------------------------------------------
     CONTADOR  = CONTADOR + 1     
     QTD_SALDO = QTD_PROGRAMACAO - PROD_ACUM - QTD_PROD
                      
     If PARAM = "Analitico"
        Then CORPO[CONTADOR] = Spaces(3)  
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("D13",[Data_Producao])+Spaces(1) 
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W5,AL",[Referencia])+Spaces(1)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W6,AL",[Numero_Producao])+Spaces(1)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W29,AL",[Descricao do Item])+Spaces(1)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W2,AL",ITEM_TAMANHO)+Spaces(1)           
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W2,AL",[Unidade Fiscal])+Spaces(1)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W8,AR",QTD_PROGRAMACAO)+Spaces(1)          
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W8,AR",PROD_ACUM)+Spaces(1)              
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W8,AR",QTD_PROD)+Spaces(1)                   
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W12,AR",QTD_SALDO)+Spaces(2)            
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W10.2,EIC",[Custo Unitario])+Spaces(2)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W12.2,EIC",[Custo Unitario]*QTD_PROD)       
     EndIf
               
     DEST_VALOR_ACUMULADOO  = DEST_VALOR_ACUMULADOO  + PROD_ACUM   
     DEST_VALOR_PRODUCAO    = DEST_VALOR_PRODUCAO  + QTD_PROD   
     DEST_VALOR_SALDO       = DEST_VALOR_SALDO + QTD_SALDO    
     DEST_VALOR_PRECO_TOTAL = DEST_VALOR_PRECO_TOTAL + ([Custo Unitario]*QTD_PROD)
     
     EMP_VALOR_ACUMULADOO  = EMP_VALOR_ACUMULADOO  + PROD_ACUM   
     EMP_VALOR_PRODUCAO    = EMP_VALOR_PRODUCAO  + QTD_PROD   
     EMP_VALOR_SALDO       = EMP_VALOR_SALDO + QTD_SALDO    
     EMP_VALOR_PRECO_TOTAL = EMP_VALOR_PRECO_TOTAL + ([Custo Unitario]*QTD_PROD) 
     
     DESTINO_VALOR_ACUMULADOO  = DESTINO_VALOR_ACUMULADOO  + PROD_ACUM   
     DESTINO_VALOR_PRODUCAO    = DESTINO_VALOR_PRODUCAO  + QTD_PROD   
     DESTINO_VALOR_SALDO       = DESTINO_VALOR_SALDO + QTD_SALDO    
     DESTINO_VALOR_PRECO_TOTAL = DESTINO_VALOR_PRECO_TOTAL + ([Custo Unitario]*QTD_PROD)
       
     ;---- Adicionando na Tabela para os totalizadores ------------------------
     ;Edit Tabela_Totalizador
     ;End Down
     ;[Codigo da Empresa    ] = [Answer->Codigo da Empresa    ]
     ;[Nome Fantasia Empresa] = [Answer->Nome Fantasia Empresa]
     ;[Codigo da Marca      ] = [Answer->Codigo da Marca      ]
     ;[Descricao da Marca   ] = [Answer->Descricao da Marca   ]
     ;[Numero_Programacao   ] = [Answer->Numero_Programacao   ]
     ;[Data_Producao        ] = [Answer->Data_Producao        ]
     ;[Destino_Producao     ] = [Answer->Destino_Producao     ]
     ;[Codigo               ] = [Answer->Codigo               ]
     ;[Razao Social         ] = [Answer->Razao Social         ]
     ;[Numero_Corte         ] = [Answer->Numero_Corte         ]
     ;[Numero_Producao      ] = [Answer->Numero_Producao      ]
     ;[Codigo do Item       ] = [Answer->Codigo do Item       ]
     ;[Tamanho              ] = ITEM_TAMANHO
     ;[Referencia           ] = [Answer->Referencia           ]
     ;[Descricao do Item    ] = [Answer->Descricao do Item    ]
     ;[Quantidade Programada] = QTD_PROGRAMACAO
     ;[Quantidade Produzida ] = QTD_PROD
     ;[Quantidade Acumulada ] = PROD_ACUM
     ;[Saldo                ] = QTD_SALDO
     ;[Unidade Fiscal       ] = [Answer->Unidade Fiscal       ]
     ;[Custo Unitario       ] = [Answer->Preco Unitario       ]
     ;[Preco Total          ] = [Custo Unitario]*QTD_PROD
     ;[CGC                  ] = [Answer->CGC                  ]
     ;[Observacoes          ] = [Answer->Observacoes          ]
     ;Do_IT!
      
     Moveto "Answer"
  EndScan
  ClearAll
        
  If PARAM = "Analitico"
     Then Array_Cabecalho()
          CONT_AUX    = 0
          CONT_CORPO  = NUM_LINHA_PAG - DynArraySize(CABECALHO)
          IMPRIME_OBS = False
          
          Observacao()
          If DynArraySize(OBS) > 1
             Then IMPRIME_OBS = True
                  For ui From 1 To DynArraySize(OBS) 
                    Print File ARQIMP OBS[ui]+"\n"
                  EndFor
                  Print File ARQIMP "\n"              
          EndIf                               
                                   
          For wi From 1 To DynArraySize(CORPO)
            CONT_AUX = CONT_AUX + 1
            Print File ARQIMP CORPO[wi]+"\n"
            
            If IMPRIME_OBS
               Then CONT_AUX = CONT_AUX + DynArraySize(OBS) + 1 
                    IMPRIME_OBS = False    
            EndIf
            
            If CONT_AUX > CONT_CORPO
               Then Print File ARQIMP "\f"
                    Array_Cabecalho()
                    CONT_AUX   = 0
            EndIf  
          Endfor 
          
          If DynArraySize(CORPO) > 1
             Then If CONT_AUX > CONT_CORPO
                     Then Print File ARQIMP "\f"
                          Array_Cabecalho()   
                  EndIf
                  CONT_AUX = CONT_AUX + 1             
                  Print File ARQIMP Spaces(39)+"Total Destinatario...   "+Spaces(9)+Format("W8,EIC",DEST_VALOR_ACUMULADOO) +Spaces(1) +
                                                                                    Format("W8,EIC",DEST_VALOR_PRODUCAO) +Spaces(1) +
                                                                                    Format("W12,EIC",DEST_VALOR_SALDO)+Spaces(14)+
                                                                                    Format("W12.2,EIC",DEST_VALOR_PRECO_TOTAL) +Spaces(1)
          EndIf                                                                       
             
          For wi From 1 To DynArraySize(CRED)
            CONT_AUX = CONT_AUX + 1
            Print File ARQIMP CRED[wi]+"\n"
            If CONT_AUX > CONT_CORPO
               Then Print File ARQIMP "\f"
                    Array_Cabecalho()
                    If wi<>DynArraySize(CRED) And wi <> 1 
                       Then Print File ARQIMP CRED[2]+"\n"
                            CONT_AUX = 1
                       Else CONT_AUX = 0
                    EndIf        
            EndIf  
          Endfor  
                   
          For wi From 1 To DynArraySize(DEB)
            CONT_AUX = CONT_AUX + 1
            Print File ARQIMP DEB[wi]+"\n"
            If CONT_AUX > CONT_CORPO
               Then Print File ARQIMP "\f"
                    Array_Cabecalho()
                    If wi<>DynArraySize(DEB) And wi <> 1 
                       Then Print File ARQIMP DEB[2]+"\n"
                            CONT_AUX = 1
                       Else CONT_AUX = 0
                    EndIf        
            EndIf  
          Endfor  
        
          If DynArraySize(DEBITO_CREDITO) = 0
             Then CONT_CORPO = NUM_LINHA_PAG -(DynArraySize(CABECALHO) + DynArraySize(RODAPE))
                  CONT_AUX   = CONT_CORPO - CONT_AUX 
                  If CONT_AUX < 0
                     Then Print File ARQIMP "\f"
                          Array_Cabecalho()                      
                          CONT_AUX = CONT_CORPO        
                  EndIf 
                  For wi From 1 To CONT_AUX
                    Print File ARQIMP "\n"
                  Endfor 
                  For wi From 1 To DynArraySize(RODAPE)
                    Print File ARQIMP RODAPE[wi]+"\n"
                  Endfor 
             Else CONT_CORPO = NUM_LINHA_PAG -(DynArraySize(CABECALHO) + DynArraySize(DEBITO_CREDITO))
                  CONT_AUX   = CONT_CORPO - CONT_AUX 
                  If CONT_AUX < 0
                     Then Print File ARQIMP "\f"
                          Array_Cabecalho()                      
                          CONT_AUX = CONT_CORPO        
                  EndIf 
                  For wi From 1 To CONT_AUX
                    Print File ARQIMP "\n"
                  Endfor 
                  For wi From 1 To DynArraySize(DEBITO_CREDITO)
                    Print File ARQIMP DEBITO_CREDITO[wi]+"\n"
                  Endfor  
          EndIf
          Print File ARQIMP "\f"     
  EndIf 
  i = 1 
  View Tabela_Temp
  While i < POSICAO
    If Not ROTINA Then ROTINA=True EndIf
    i = i + 1              
    Skip
  EndWhile
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Ajustar Valor                                                   *
;*******************************************************************************
Proc Ajusta_Valor(PARAM)
Private PARAM

PosI = Search(".",PARAM)
While PosI > 0
  PARAM = SubStr(PARAM,1,PosI-1)+SubStr(PARAM,PosI+1,Len(PARAM))
  PosI = Search(".",PARAM)   
EndWhile   

PosI = Search(",",PARAM)
While PosI > 0
  PARAM = SubStr(PARAM,1,PosI-1)+"."+SubStr(PARAM,PosI+1,Len(PARAM))
  PosI = Search(",",PARAM)   
EndWhile   
Return NumVal(PARAM)
              
EndProc ;Ajusta_Valor()

;*******************************************************************************
;* Rotina para Imprimir Sint‚tico                                              *
;*******************************************************************************
Proc Imprime_Sintetico()
Private ROTINA 
If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA="" EndIf

ROTINA             = False
VERIFICA_EMPRESA   = "***"
VERIFICA_DESTINO   = "***"

;---- ASK para filtrar apenas clientes/destinos -------------
{Ask} {\\Sistemas\\Cadastro\\Empresas}
Moveto [Codigo da Empresa    ] Check Example "CodE"
Moveto [Nome Fantasia Empresa] Check
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo               ] Check Example "CodC" 
Moveto [Razao Social         ] Check  
Moveto [CGC                  ] Check  
{Ask} TypeIn Tabela Enter 
Moveto [Codigo da Empresa    ] Example "CodE"
Moveto [Codigo               ] Example "CodC" 
Moveto [Destino_Producao     ] Check
Moveto [Observacoes          ] Check
Do_It!
ClearAll  

Tabela_Temp = Cria_Temp(PrivDir())
Copy "Answer" Tabela_Temp

Sort Tabela_Temp On "Codigo da Empresa","Codigo","Destino_Producao"
ClearAll

;---- Quantas Empresas -------------------------------------- 
{Ask} TypeIn Tabela_Temp Enter
Moveto [Codigo da Empresa    ] Check
Moveto [Nome Fantasia Empresa] Check
Do_It!
ClearAll

CONTADOR = 0
Array EMPRESA[NRecords("Answer")]
View "Answer"
Scan
  CONTADOR = CONTADOR + 1
  EMPRESA[CONTADOR] = Format("W4",[Codigo da Empresa])+Format("W20",[Nome Fantasia Empresa])
EndScan
ClearAll

;---- Quantos Destinos --------------------------------------
{Ask} TypeIn Tabela_Temp Enter
Moveto [Destino_Producao] Check
Do_It!
ClearAll

CONTADOR = 0
Array DESTINO_PRODUCAO[NRecords("Answer")]
View "Answer"
Scan
  CONTADOR = CONTADOR + 1
  DESTINO_PRODUCAO[CONTADOR] = [Destino_Producao]
EndScan
ClearAll

Release Vars CONTADOR, CABECALHO, CORPO
DynArray CABECALHO[]
DynArray CORPO[] 

CONTROLE = True
CONTADOR = 0
HR       = NRecords(Tabela_Temp)

View Tabela_Temp

While CONTROLE                
   COD_EMP = [Codigo da Empresa    ]
   NOM_EMP = [Nome Fantasia Empresa]
   COD_CLI = [Codigo               ]
   RAZ_CLI = [Razao Social         ]
   CGC_LCI = [CGC                  ]
   DESTINO = [Destino_Producao     ]
   OBS_CLI = [Observacoes          ]
   POSICAO = RowNo()
   
   If ROTINA And POSICAO=1
      Then QuitLoop
   EnDIf         
   
   Barra(HR, RecNo())
   Aguarde("Aguarde, Processando "+DESTINO+" "+BARRA_STRING)     

   {Ask} TypeIn Tabela Enter Check
   Moveto [Codigo da Empresa   ] TypeIn "~COD_EMP"
   Moveto [Codigo              ] TypeIn "~COD_CLI"
   Moveto [Destino_Producao    ] TypeIn "~DESTINO"
   Do_It!
   ;---- Totalizando a Produ‡Æo -------------------------------------------------
   Moveto [Quantidade Produzida] PRODUCAO = ImageCSum()
   ClearAll
   
   VALOR_PRECO_TOTAL = 0
   View "Answer"
   Scan
     VALOR_PRECO_TOTAL = VALOR_PRECO_TOTAL + ([Quantidade Produzida] * [Custo Unitario])
   EndScan
   ClearAll
   
   DEST_VALOR_ACUMULADOO  = 0
   DEST_VALOR_PRODUCAO    = 0
   DEST_VALOR_SALDO       = 0
   DEST_VALOR_PRECO_TOTAL = 0
   PROGRAMACAO            = 0
                  
   NR=NRecords("Answer")
    
   Sort "Answer" On "Codigo da Empresa","Codigo","Numero_Programacao" 
        
   View "\\Sistemas\\Estoque\\Itens"
   View "Pfacri"
   View "Rfacri"
   View "Rfacc"
   View "Answer"
   Scan
     DT_PROD_ACUM = [Data_Producao]
     ITEM         = [Codigo do Item]
     QTD_PROD     = [Quantidade Produzida]
  
     Barra(NR, RecNo())
     Aguarde("Aguarde, Processando "+[Destino_Producao]+" "+[Numero_Programacao]+" "+BARRA_STRING)  
  
     ;---- Dados do Item - DESCRICAO/TAMANHO/COR ----------------------------------
     ITEM_DESCRICAO = ""
     ITEM_TAMANHO   = ""
     ITEM_COR       = ""
     GetRecord "\\Sistemas\\Estoque\\Itens" ITEM To REG_ITEM
     If RetVal
     Then If REG_ITEM["Tipo do Item"]="P"
             Then ITEM_DESCRICAO = REG_ITEM["Descricao do Item"]
                  ITEM_TAMANHO   = REG_ITEM["DTamanho"]
                  ITEM_COR       = REG_ITEM["Descricao da Cor_Tecido"]
          EndIf
     EndIf 
      
     ;---- Quantidade Programa‡Æo -------------------------------------------------
     GetRecord "Pfacri" [Numero_Programacao],ITEM To REG_PFACRI
     If RetVal
        Then QTD_PROGRAMACAO = REG_PFACRI["Quantidade Programada"]
        Else QTD_PROGRAMACAO = BlankNum()
     EndIf    
        
     ;---- Verificando as produ‡äes anteriores e acumulando -----------------------  
     If PROGRAMACAO<>[Numero_Programacao]
        Then PROGRAMACAO = [Numero_Programacao]
             
             PROD_ACUM = 0       
             Moveto "Rfacc"                             
             Moveto [Numero_Programacao]                    
             Home
             Locate PROGRAMACAO
             If RetVal  
                Then While [Numero_Programacao] = PROGRAMACAO
                        If [Data_Producao] < DT_PROD_ACUM  
                           Then GetRecord "Rfacri" [Rfacc->Numero_Producao],ITEM To REG_RFACRI
                                If RetVal
                                   Then PROD_ACUM = PROD_ACUM + REG_RFACRI["Quantidade Produzida"] 
                                EndIf                
                        EndIf     
                        Moveto "Rfacc"
                        Skip
                        If Eot() Then QuitLoop EndIf
                        Locate Next PROGRAMACAO
                        If Not RetVal
                           Then QuitLoop
                        EndIf
                     EndWhile
             EndIf 
             Moveto "Answer"
     EndIf
             
     QTD_SALDO = QTD_PROGRAMACAO - PROD_ACUM - QTD_PROD        
             
     DEST_VALOR_ACUMULADOO  = DEST_VALOR_ACUMULADOO  + PROD_ACUM   
     DEST_VALOR_PRODUCAO    = DEST_VALOR_PRODUCAO  + QTD_PROD   
     DEST_VALOR_SALDO       = DEST_VALOR_SALDO + QTD_SALDO    
     DEST_VALOR_PRECO_TOTAL = DEST_VALOR_PRECO_TOTAL + ([Custo Unitario]*QTD_PROD)
     
     Moveto "Answer"
  EndScan
  ClearAll
  
  CONTADOR  = CONTADOR + 1 
  CORPO[CONTADOR] = Format("W4",COD_EMP)+Format("W20",DESTINO)+Spaces(3)  
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W4",COD_CLI)+Spaces(1)+Format("W25",RAZ_CLI)+Spaces(1)
  
  If Not QUEBRA_DESTINO_SINTETICO 
     Then CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W15,EIC",DESTINO)+Spaces(1)
  EndIf    
  
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W8,EIC",DEST_VALOR_ACUMULADOO)+Spaces(1)        
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W8,EIC",DEST_VALOR_PRODUCAO)+Spaces(1)
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W12,EIC",DEST_VALOR_SALDO)+Spaces(1) 
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W13.2,EIC",DEST_VALOR_PRECO_TOTAL)
   
  i = 1 
  View Tabela_Temp                  
  While i < POSICAO
     If Not ROTINA Then ROTINA=True EndIf
    i = i + 1              
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile        
  
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile

If Not QUEBRA_DESTINO_SINTETICO
   Then Cabecalho("Sintetico")
EndIf    

Release Vars VERIFICA_PAG                                                     
For EMP From 1 To ArraySize(EMPRESA)
  CONT_AUX = 0
    
  If Not QUEBRA_DESTINO_SINTETICO
     Then Array_Cabecalho()
       
          CONT_AUX   = 0
          NUM_REGISTRO = 0
          CONT_CORPO   = NUM_LINHA_PAG - DynArraySize(CABECALHO)
            
          TOTAL_VALOR_ACUMULADOO  = 0
          TOTAL_VALOR_PRODUCAO    = 0
          TOTAL_VALOR_SALDO       = 0
          TOTAL_VALOR_PRECO_TOTAL = 0
  EndIf   
  
  For DEST From 1 To ArraySize(DESTINO_PRODUCAO)
    COD_EMP  = SubStr(EMPRESA[EMP],1,4)
    NOM_EMP  = SubStr(EMPRESA[EMP],5,20)      
    DESTINO  = DESTINO_PRODUCAO[DEST]
    
    If QUEBRA_DESTINO_SINTETICO
       Then Cabecalho("Sintetico")
            Array_Cabecalho()
       
            CONT_AUX   = 0
            NUM_REGISTRO = 0
            CONT_CORPO   = NUM_LINHA_PAG - DynArraySize(CABECALHO)
            
            TOTAL_VALOR_ACUMULADOO  = 0
            TOTAL_VALOR_PRODUCAO    = 0
            TOTAL_VALOR_SALDO       = 0
            TOTAL_VALOR_PRECO_TOTAL = 0
    EndIf 
    
    For CP From 1 To DynArraySize(CORPO)
      If SubStr(CORPO[CP],1,4) = SubStr(EMPRESA[EMP],1,4) And
         LTrim(Rtrim(SubStr(CORPO[CP],5,20))) = DESTINO_PRODUCAO[DEST]
         Then NUM_REGISTRO = NUM_REGISTRO + 1 
              CONT_AUX = CONT_AUX + 1
              Print File ARQIMP SubStr(CORPO[CP],25,Len(CORPO[CP]))+"\n"
               
              If CONT_AUX > CONT_CORPO
                 Then Print File ARQIMP "\f"
                      Array_Cabecalho()
                      CONT_AUX   = 0
              EndIf                                                  
              
              If QUEBRA_DESTINO_SINTETICO
                 Then TOTAL_VALOR_ACUMULADOO  = TOTAL_VALOR_ACUMULADOO  + Ajusta_Valor(SubStr(CORPO[CP],59,8))  
                      TOTAL_VALOR_PRODUCAO    = TOTAL_VALOR_PRODUCAO  + Ajusta_Valor(SubStr(CORPO[CP],68,8))    
                      TOTAL_VALOR_SALDO       = TOTAL_VALOR_SALDO + Ajusta_Valor(SubStr(CORPO[CP],77,12))     
                      TOTAL_VALOR_PRECO_TOTAL = TOTAL_VALOR_PRECO_TOTAL + Ajusta_Valor(SubStr(CORPO[CP],90,13))
                 Else TOTAL_VALOR_ACUMULADOO  = TOTAL_VALOR_ACUMULADOO  + Ajusta_Valor(SubStr(CORPO[CP],75,8))  
                      TOTAL_VALOR_PRODUCAO    = TOTAL_VALOR_PRODUCAO  + Ajusta_Valor(SubStr(CORPO[CP],84,8))    
                      TOTAL_VALOR_SALDO       = TOTAL_VALOR_SALDO + Ajusta_Valor(SubStr(CORPO[CP],93,12))     
                      TOTAL_VALOR_PRECO_TOTAL = TOTAL_VALOR_PRECO_TOTAL + Ajusta_Valor(SubStr(CORPO[CP],106,13))     
              EndIf         
      EndIf          
    Endfor
    If NUM_REGISTRO > 1 And QUEBRA_DESTINO_SINTETICO                          
       Then Print File ARQIMP Spaces(13)+"Total por Destino... "+Format("W8,EIC",TOTAL_VALOR_ACUMULADOO) + Spaces(1) +
                                                                 Format("W8,EIC",TOTAL_VALOR_PRODUCAO) + Spaces(1) +
                                                                 Format("W12,EIC",TOTAL_VALOR_SALDO) + Spaces(1) +
                                                                 Format("W13.2,EIC",TOTAL_VALOR_PRECO_TOTAL)                                                                                                                        
    EndIf
    If DEST <> ArraySize(DESTINO_PRODUCAO) And QUEBRA_DESTINO_SINTETICO
       Then Print File ARQIMP "\f"
    EndIf   
  EndFor
  If NUM_REGISTRO > 1 And Not QUEBRA_DESTINO_SINTETICO                          
     Then Print File ARQIMP Spaces(29)+"Total por Empresa... "+Format("W8,EIC",TOTAL_VALOR_ACUMULADOO) + Spaces(1) +
                                                               Format("W8,EIC",TOTAL_VALOR_PRODUCAO) + Spaces(1) +
                                                               Format("W12,EIC",TOTAL_VALOR_SALDO) + Spaces(1) +
                                                               Format("W13.2,EIC",TOTAL_VALOR_PRECO_TOTAL)                                                                                                                        
  EndIf
  If EMP <> ArraySize(EMPRESA) 
     Then Print File ARQIMP "\f"
  EndIf   
EndFor    

EndProc ;Imprime_Sintetico()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp = True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
          If Campo="TG_OPDEST"
             Then Seleciona_Opcoes("Op‡”es de Desinat rio","7,15")
          EndIf

     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_OPDEST"        : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"      : Campo="TG_OPDEST"
            Case Campo="TG_MARCA"         : Campo="TG_DESTINAT"
            Case Campo="TG_REFERENCIA"    : Campo="TG_MARCA"
            Case Campo="TG_DTINI"         : Campo="TG_REFERENCIA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPRELTIPO"     : Campo="TG_DTFIM" 
            Case Campo="TG_CODMODELO"     : Campo="TG_OPRELTIPO"
            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_OPDEST"
                    Case Campo="TG_OPDEST"     :
                         VSDGOPDEST=ControlValue("TG_OPDEST")
                         If IsBlank(VSDGOPDEST) 
                            Then VSDGOPDEST = "TODOS" 
                                 Campo="TG_DESTINAT"   ;TG_OPDEST
                            Else If Not Checa_Opcoes("Op‡”es de Desinat rio",VSDGOPDEST) And VSDGOPDEST <> "TODOS"
                                   Then Mensagem("Destino inv lido !")
                                        Campo="TG_OPDEST"
                                   Else If Not IsBlank(VSDGOPDEST)
                                           Then Campo="TG_DESTINAT"           
                                        EndIf
                                EndIf
                         EndIf  
                    Case Campo="TG_DESTINAT"      : Campo="TG_MARCA" 
                    Case Campo="TG_MARCA"         : Campo="TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"    : Campo="TG_DTINI"        
                    Case Campo="TG_DTINI"         : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"         : Campo="TG_OPRELTIPO" 
                    Case Campo="TG_OPRELTIPO"     : Campo="TG_CODMODELO"
                         VSDGOPRELTIPO = ControlValue("TG_OPRELTIPO")
                         Switch  
                           Case VSDGOPRELTIPO = "2" : VSDGNOMOPRELTIPO = "FORMULARIO A4"
                           OtherWise                : VSDGOPRELTIPO    = "1"
                                                      VSDGNOMOPRELTIPO = "FORMULARIO RAZAO"
                         EndSwitch   
                    Case Campo="TG_CODMODELO"     : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch              
  Case Campo="TG_OPDEST":
       MSG_CAMPO="Em Branco=Todas, [F1]Consultar tabela"
  Case Campo="TG_OPRELTIPO":
       MSG_CAMPO="1=Formul rio Razao   2=Formul rio A4"          
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  Anal¡tico")
ModeloRelatoriosAdd("02  Sint‚tico")
ModeloRelatoriosAdd("03  Sint‚tico com quebra por Destino")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()
SYS_VALOR()

ARQIMP = PrivDir()+"RM_0104.TXT"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

CLIENTE          = ""
VSDGEMPRESA      = ""
VSDGOPDT         = "T"
VSDGDESTINAT     = ""
VSDGMARCA        = ""
VSDGREFERENCIA   = ""
VSDGOPDEST       = ""
VSDGOPRELTIPO    = ""
VSDGNOMOPRELTIPO = ""
VSDGDTINI        = BlankDate()
VSDGDTFIM        = BlankDate()

Coedit "P_DESTI"
Monta_Opcoes("Op‡”es de Desinat rio","INTERNO + FACCAO") 
Do_It!
ClearAll   

ModeloRelatoriosCarregaLista()

While True
  ShowDialog "Acerto Programa‡„o/Produ‡„o" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -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_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Op‡”es Destinat rio" For "TG_OPDEST"
    Accept @ 03,01 Width 33 "A31"  Picture "!*!" Tag "TG_OPDEST" To VSDGOPDEST

    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,09 Width 25 "A22" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST
 
    Label  @ 06,00 "Marca"  For "TG_MARCA"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 07,09 Width 25 "A22" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA
   
    Label  @ 08,00 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 09,01 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA"     To VSDGREFERENCIA  

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

    Label  @ 12,00 "Tipo Formul rio" For "TG_OPRELTIPO"
    Accept @ 13,04 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELTIPO" To VSDGOPRELTIPO
    Accept @ 13,09 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPRELTIPO" To VSDGNOMOPRELTIPO    

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

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

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

  If VSDGOPDT="D" And VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  DISPOSITIVO()
  If OK="" Then Loop EndIf

  If VSDGCODMODELO = "03"
     Then QUEBRA_DESTINO_SINTETICO = True
     Else QUEBRA_DESTINO_SINTETICO = False
  EndIf   

  If VSDGOPRELTIPO = "1"
    Then NUM_LINHA_PAG = 33  ;Formulario RAZAO
    Else NUM_LINHA_PAG = 84  ;Formulario A4
  EndIf   

  AGUARDE("Aguarde, Processando Dados")

  PAGINA = 0
  Tabela = Cria_Temp(PrivDir())
  Seleciona()

  Tabela2=Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Vendas\\RM_0033" Tabela2 

  If VSDGCODMODELO="01"
     Then Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
          While Novo_Dir_Trab()
            Ajusta_Dados()
          EndWhile 
  EndIf
                        
  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar !")
          If IsTable(Tabela)
             Then Delete Tabela
          EndIf
          
          If IsTable(Tabela2)
             Then Delete Tabela2
          EndIf
          Loop
  EndIf

  AGUARDE("Aguarde, gerando o relat¢rio")
  
  If SYS_CODIGO_CLIENTE<>"0391"
     Then If VSDGCODMODELO="01"
             Then Imprime("Analitico")
             Else Imprime_Sintetico()
          EndIf
     Else Play "RM_0104a" 
  EndIf
  ImpriArq(ARQIMP)

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

EndWhile
ClearAll
Release Vars All
Release Procs All
