;** RM_0104a *******************************************************************
;*  Acerto Program‡Æo/Produ‡Æo da Confecc‡Æo                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/05/2017 por Bruno Carvalho
;Ultima Alteracao:   /  /     por Bruno Carvalho
;Motivo Alteracao:

;Cliente #0391# -> Sol. 30193
;Foi retirado a coluna da programa‡Æo, produ‡Æo acumulada e saldo, pois usu rio
;faz mais de uma produ‡Æo da mesma programa‡Æo, por‚m, produzindo pe‡as parcialmente, isto ‚,
;produzindo na produ‡Æo X 10 pe‡as de uma programa‡Æo de 17 pe‡as, e na outra produ‡Æo Y produzia
;essas outras 7 pe‡as, logo, no relat¢rio a coluna programa‡Æo repetia a programa‡Æo, e na coluna
;saldo, ao fazer a conta subtraindo programa‡Æo - produ‡Æo, constava inconsistˆncia devido a produ‡äes
;anteriores do item em questÆo.

;*******************************************************************************
;* Rotina p/ Cabecalho                                                         *
;*******************************************************************************
Proc Cabecalho2(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]  = "                                                                                                "
        CABECALHO[10] = "  Data        Ref.  Prod.  Item                          TM Un (C)Prod.  (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]  = "                                                       "     
                CABECALHO[10] = "  Pessoa                          (C)Prod.   (C*D)Total"
                CABECALHO[11] = "  ------------------------------- -------- ------------"
                CABECALHO[12]= ""
                CABECALHO[13]= "\027E"+"       Empresa: "+"\027F"+COD_EMP+" "+NOM_EMP
                CABECALHO[14]= ""
           Else CABECALHO[9]  = "                                                                       "     
                CABECALHO[10] = "  Pessoa                          Destino         (C)Prod.   (C*D)Total"
                CABECALHO[11] = "  ------------------------------- --------------- -------- ------------"
                CABECALHO[12]= ""
                CABECALHO[13]= "\027E"+"       Empresa: "+"\027F"+COD_EMP+" "+NOM_EMP
                CABECALHO[14]= ""     
        EndIf        
EndIf   

EndProc   ;Cabecalho2()

;*******************************************************************************
;* Imprimir                                                                    *
;*******************************************************************************
Proc Imprime2(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] * [Preco Unitario])
   EndScan
   ClearAll
   
   Release Vars VERIFICA_PAG
   Cabecalho2(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            = "***"
   ITEM_ANT               = "***"  
   
   ;----- Verifica Programa‡äes envolvidas -------------------------------------            
   Tab_Aux = Cria_Temp(PrivDir())                
   Copy "Answer" Tab_Aux
   
   {Ask} {Answer}
   Moveto [Numero_Programacao] Check
   Do_it!
   CleaRall
   
   PROGAUX = ""
   View "Answer"
   Scan
     If PROGAUX<>""
        Then PROGAUX = PROGAUX + ", " + [Numero_Programacao]
        Else PROGAUX = [Numero_Programacao] 
     EndIf   
   EndScan
   ClearAll
   
   Copy Tab_Aux "Answer"
   Delete Tab_Aux
   ;----------------------------------------------------------------------------               
                   
   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] or  ITEM_ANT<>ITEM
        Then PROGRAMACAO = [Numero_Programacao]
             ITEM_ANT=ITEM 
             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 PROD_ACUM>0
        Then QTD_SALDO = QTD_PROD*-1
     EndIf   
         
                      
     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",[Preco Unitario])+Spaces(2)
             CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W12.2,EIC",[Preco 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 + ([Preco 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 + ([Preco 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 + ([Preco 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       ]
     ;[Preco Unitario       ] = [Answer->Preco Unitario       ]
     ;[Preco Total          ] = [Preco Unitario]*QTD_PROD
     ;[CGC                  ] = [Answer->CGC                  ]
     ;[Observacoes          ] = [Answer->Observacoes          ]
     ;Do_IT!
      
     Moveto "Answer"
  EndScan
  ClearAll
  Print File ARQIMP "\f"
        
  If PARAM = "Analitico"
     Then Array_Cabecalho2()
          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_Cabecalho2()
                    CONT_AUX   = 0
            EndIf  
          Endfor 
          
          If DynArraySize(CORPO) > 1
             Then If CONT_AUX > CONT_CORPO
                     Then Print File ARQIMP "\f"
                          Array_Cabecalho2()   
                  EndIf
                  CONT_AUX = CONT_AUX + 1             
                  Print File ARQIMP Spaces(21)+"Total Destinatario...   "+Spaces(18)+Format("W8,EIC",DEST_VALOR_PRODUCAO)+Spaces(1)+
                                                                                     Spaces(12)+Format("W12.2,EIC",DEST_VALOR_PRECO_TOTAL) +Spaces(1)
          EndIf                                                                       
             
          If PROGAUX<>""                        
             Then If Search(",",PROGAUX)=0
                     Then Print File ARQIMP  "\n\n"+Spaces(3)+"Programa‡„o envolvida: "+PROGAUX+"\n"
                     Else Print File ARQIMP  "\n\n"+Spaces(3)+"Programa‡”es envolvidas: "+PROGAUX+"\n"
                  EndIf
          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_Cabecalho2()
                    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_Cabecalho2()
                    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_Cabecalho2()                      
                          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_Cabecalho2()                      
                          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

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Array_Cabecalho2()
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_Cabecalho2()

;*******************************************************************************
;* Rotina para Imprimir Sint‚tico                                              *
;*******************************************************************************
Proc Imprime_Sintetico2()
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] * [Preco Unitario])
   EndScan
   ClearAll
   
   DEST_VALOR_ACUMULADOO  = 0
   DEST_VALOR_PRODUCAO    = 0
   DEST_VALOR_SALDO       = 0
   DEST_VALOR_PRECO_TOTAL = 0
   PROGRAMACAO            = 0
   ITEM_ANT = ""               

   ;----- Verifica Programa‡äes envolvidas -------------------------------------            
   Tab_Aux = Cria_Temp(PrivDir())                
   Copy "Answer" Tab_Aux
   
   {Ask} {Answer}
   Moveto [Numero_Programacao] Check
   Do_it!
   CleaRall
   
   PROGAUX = ""
   View "Answer"
   Scan
     If PROGAUX<>""
        Then PROGAUX = PROGAUX + ", " + [Numero_Programacao]
        Else PROGAUX = [Numero_Programacao] 
     EndIf   
   EndScan
   ClearAll
   
   Copy Tab_Aux "Answer"
   Delete Tab_Aux
   ;----------------------------------------------------------------------------

   NR=NRecords("Answer")
    
   Sort "Answer" On "Codigo da Empresa","Codigo","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] or  ITEM_ANT<>ITEM
        Then PROGRAMACAO = [Numero_Programacao]
             ITEM_ANT=ITEM 
     
             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 + ([Preco 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_PRODUCAO)+Spaces(1)
  CORPO[CONTADOR] = CORPO[CONTADOR] + Format("W12.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 Cabecalho2("Sintetico")
EndIf    

Release Vars VERIFICA_PAG                                                     
For EMP From 1 To ArraySize(EMPRESA)
  CONT_AUX = 0
    
  If Not QUEBRA_DESTINO_SINTETICO
     Then Array_Cabecalho2()
       
          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 Cabecalho2("Sintetico")
            Array_Cabecalho2()
       
            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_Cabecalho2()
                      CONT_AUX   = 0
              EndIf                                                  
              
              If QUEBRA_DESTINO_SINTETICO
                 Then TOTAL_VALOR_PRODUCAO    = TOTAL_VALOR_PRODUCAO  + Ajusta_Valor(SubStr(CORPO[CP],59,8))    
                      TOTAL_VALOR_PRECO_TOTAL = TOTAL_VALOR_PRECO_TOTAL + Ajusta_Valor(SubStr(CORPO[CP],68,12))
                 Else TOTAL_VALOR_PRODUCAO    = TOTAL_VALOR_PRODUCAO  + Ajusta_Valor(SubStr(CORPO[CP],75,8))    
                      TOTAL_VALOR_PRECO_TOTAL = TOTAL_VALOR_PRECO_TOTAL + Ajusta_Valor(SubStr(CORPO[CP],84,12))     
              EndIf         
      EndIf          
    Endfor
    If NUM_REGISTRO > 1 And QUEBRA_DESTINO_SINTETICO                          
       Then Print File ARQIMP Spaces(22)+"Total por Destino... "+Format("W8,EIC",TOTAL_VALOR_PRODUCAO) + Spaces(1) +
                                                                 Format("W12,EIC",TOTAL_VALOR_SALDO) + Spaces(1) +
                                                                 Format("W12.2,EIC",TOTAL_VALOR_PRECO_TOTAL)                                                                                                                        
    EndIf
    
    If DEST <> ArraySize(DESTINO_PRODUCAO) And QUEBRA_DESTINO_SINTETICO
       Then Print File ARQIMP "\f"
    EndIf   
  EndFor
  
  If PROGAUX<>""                        
     Then If Search(",",PROGAUX)=0
             Then Print File ARQIMP "\n"+Spaces(3)+"Programa‡„o envolvida: "+PROGAUX+"\n"
             Else Print File ARQIMP "\n"+Spaces(3)+"Programa‡”es envolvidas: "+PROGAUX+"\n"
          EndIf
  EndIf
  
  
  If NUM_REGISTRO > 1 And Not QUEBRA_DESTINO_SINTETICO                          
     Then Print File ARQIMP Spaces(38)+"Total por Empresa... "+Format("W8,EIC",TOTAL_VALOR_PRODUCAO) + Spaces(1) +
                                                               Format("W12,EIC",TOTAL_VALOR_SALDO) + Spaces(1) +
                                                               Format("W12.2,EIC",TOTAL_VALOR_PRECO_TOTAL)                                                                                                                        
  EndIf
  
  If EMP <> ArraySize(EMPRESA) 
     Then Print File ARQIMP "\f"
  EndIf   
EndFor    

EndProc ;Imprime_Sintetico()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If VSDGOPRELANALSINT="1"
   Then Imprime2("Analitico")
   Else Imprime_Sintetico2()
EndIf
