;** Imp_Inv ********************************************************************
;*  Emiss„o do Inventario para AF                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/03/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 09/03/2016 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Nova logica e recursos 
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variavel casas decimais

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc Imprime()
private s

If VSDGOPRELCODALF="2"
   Then Sort TabelaI On "Codigo da Empresa","Posse_Estoque","Razao Social","Codigo_Terceiro","Tipo do Item","Descricao do Item"
   Else Sort TabelaI On "Codigo da Empresa","Posse_Estoque","Codigo_Terceiro","Razao Social","Tipo do Item","Codigo do Item"
EndIf

tpag=66
pag =0
lin =0

If Not IsAssigned(VSDGNFOLHA) Or VSDGNFOLHA=""
   Then pag = 2
   Else pag = Int(NumVal(VSDGNFOLHA))
EndIf
   
EMPR_ANT  ="****"
POSSE_ANT ="****"
TERC_ANT  ="****"
TPITEM_ANT="****"

NR = NRecords(Tabelai)

View "\\Sistemas\\Cadastro\\Empresas"
View TabelaI
Scan              
  Barra(NR, RecNo())
  Aguarde("Aguarde, gerando relat¢rio "+BARRA_STRING)
   
  If [Codigo da Empresa ]<>EMPR_ANT
     Then 
          TotalGrupo(3)
          TotalGrupo(2)
          TotalGrupo(1)
          TotalGrupo(0)

          Cabecalho()
          grupotitulos(1)
          grupotitulos(3)
          
  EndIf

  if [Posse_Estoque     ]<>POSSE_ANT
     then 
          TotalGrupo(3)
          TotalGrupo(2)
          TotalGrupo(1)

          grupotitulos(1)
          grupotitulos(3)
  endif        

  if [Codigo_Terceiro   ]<>TERC_ANT
     then 
          TotalGrupo(3)
          TotalGrupo(2)

          grupotitulos(1)
          grupotitulos(3)
  endif        

  if [Tipo do Item      ]<>TPITEM_ANT
     then 
          TotalGrupo(3)

          grupotitulos(3)
  endif        

   
  ;ImpressÆo dos itens
  s=""
  If VSDGCOMPLEMENTO = "C"
     Then s=s+"| "+Format("W12,AL",[Codigo do Item])+" |"+Format("W54,AL",[Descricao Complementar])+Spaces(01)+
              "|  "+Format("W07,AL",[Unidade Interna])+"|"
                                 
     Else s=s+"| "+Format("W12,AL",[Codigo do Item])+" |"+Format("W40,AL",[Descricao do Item])+Spaces(15)+
              "|  "+Format("W07,AL",[Unidade Interna])+"|"
  EndIf
  Switch                 
    Case VSDGNCASASDEC=0 : s=s+Format("W16,EIC",[Saldo Atual])
    Case VSDGNCASASDEC=1 : s=s+Format("W16.1,EIC",[Saldo Atual])
    Case VSDGNCASASDEC=2 : s=s+Format("W16.2,EIC",[Saldo Atual])
    otherwise            : s=s+Format("W16.3,EIC",[Saldo Atual])
  EndSwitch
  s=s+"|"+Format("W16.3,EIC",([Custo Total Atual]/[Saldo Atual]))+"|"+Format("W15.2,EIC",[Custo Total Atual])+"|"
  imprimelinha(s)
  
  QTD_POSS =QTD_POSS+[Saldo Atual]
  VRT_POSS =VRT_POSS+[Custo Total Atual]
  
  QTD_CODT =QTD_CODT+[Saldo Atual]
  VRT_CODT =VRT_CODT+[Custo Total Atual]

  QTD_TIPO =QTD_TIPO+[Saldo Atual]
  VRT_TIPO =VRT_TIPO+[Custo Total Atual]

  SOMAF=SOMAF+[Custo Total Atual]
  SOMAP=SOMAP+[Custo Total Atual]
  SOMAT=SOMAT+[Custo Total Atual]

endscan
TotalGrupo(3)
TotalGrupo(2)
TotalGrupo(1)

If (lin+7)>(tpag)
   then 
        lin=0
        somapagina()
        rodape()
        
        cabecalho()
        somapagina()

   else 
        lin=0
        somapagina()
endif         
   
TotalGrupo(0)
  
ClearAll
EndProc

;*******************************************************************************
;* TotalGrupo                                                                  *
;*******************************************************************************
Proc TotalGrupo(tipo)
private tipo, quant, valor, s, imprimetot, tittot

if EMPR_ANT  <>"****" and
   POSSE_ANT <>"****" and
   TERC_ANT  <>"****" and
   TPITEM_ANT<>"****"
   then

        imprimetot=true
        switch 
          case tipo = 0: ;empresa

            imprimelinha("|"+Fill(" ",130)+"|")
            imprimelinha("|"+Fill("=",130)+"|")
            imprimelinha("|"+Spaces(101)+"SOMA TOTAL:  "+Format("W16.2,EIC",SOMAT)+"|")
            rodape()
            
            imprimetot=false
            
          case tipo = 1: ;posse
            quant=QTD_POSS
            valor=VRT_POSS
            tittot="SubTotal Posse..."
          
          case tipo = 2: ;posse pessoa
            quant=QTD_CODT
            valor=VRT_CODT
            tittot="SubTotal Pessoa..."

            if TERC_ANT=""
               then imprimetot=false
            endif    
          
          case tipo = 3: ; tipo
            quant=QTD_TIPO
            valor=VRT_TIPO
            tittot="SubTotal Tipo..."
          
        endswitch
        
        if imprimetot
           then        
                s="| "+Spaces(12)+" |"+Format("W55,AL",tittot)+"|"+Spaces(09)+"|"
                Switch
                  Case VSDGNCASASDEC=0 : s=s+Format("W16,EIC"  ,QUANT)
                  Case VSDGNCASASDEC=1 : s=s+Format("W16.1,EIC",QUANT)
                  Case VSDGNCASASDEC=2 : s=s+Format("W16.2,EIC",QUANT)
                  otherwise            : s=s+Format("W16.3,EIC",QUANT)    
                EndSwitch
                s=s+"|"+Spaces(16)+"|"+Format("W15.2,EIC",VALOR)+"|"
                imprimelinha(s)
                 
                imprimelinha("| "+Spaces(13)+"|"+Spaces(55)+"|"+Spaces(9)+"|"+Spaces(16)+"|"+Spaces(16)+"|"+Spaces(15)+"|")
        endif
endif

switch 
  case tipo = 0: ;empresa
    EMPR_ANT=[Codigo da Empresa]

    Moveto "\\Sistemas\\Cadastro\\Empresas"
    Moveto [Codigo da Empresa]
    Locate EMPR_ANT
    If RetVal
       Then IE   =[\Sistemas\Cadastro\Empresas->IE Empresa          ]
            CGC  =[\Sistemas\Cadastro\Empresas->CGC Empresa         ]
            RAZAO=[\Sistemas\Cadastro\Empresas->Razao Social Empresa]
       else 
            IE   ="???"
            CGC  ="???"
            RAZAO="???"
    EndIf
    Moveto TabelaI

    IMPRIME_TRANSF=false
    IMPRIME_SOMAPG=true
    
    SOMAP=0
    SOMAF=0
    SOMAT=0

  case tipo = 1: ;posse
    POSSE_ANT=[Posse_Estoque     ]
    TERC_ANT = [Codigo_Terceiro]                                
    Switch
      Case [Posse_Estoque]="DT" : POSSE=POSSE_DT
      Case [Posse_Estoque]="CT" : POSSE=POSSE_CT
    EndSwitch

    TITULO_POSSE="   Posse: "+Format("W36,AL",POSSE)+Format("W32,AL",[Codigo_Terceiro]+" "+[Razao Social])+Spaces(1)
    
    QTD_POSS =0
    VRT_POSS =0
  
  case tipo = 2: ;posse pessoa
    POSSE_ANT=[Posse_Estoque     ]
    TERC_ANT = [Codigo_Terceiro]                                
    Switch
      Case [Posse_Estoque]="DT" : POSSE=POSSE_DT
      Case [Posse_Estoque]="CT" : POSSE=POSSE_CT
    EndSwitch

    TITULO_POSSE="   Posse: "+Format("W36,AL",POSSE)+Format("W32,AL",[Codigo_Terceiro]+" "+[Razao Social])+Spaces(1)
    
    QTD_CODT =0
    VRT_CODT =0
  
  case tipo = 3: ; tipo
    TPITEM_ANT=[Tipo do Item      ]

    TITULO_TPITEM="    Tipo: "+Format("W59,AL",[Descricao Tipo do Item])

    QTD_TIPO =0
    VRT_TIPO =0
  
endswitch

EndProc ;TotalGrupo()

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Cabecalho()
private s

lin=0

imprimelinha(CI_6LPP+CI_15CPP+"+==================================================================================================================================+")
imprimelinha("|                                             R E G I S T R O  D E  I N V E N T A R I O                                            |")
imprimelinha("|                                                                                                                                  |")
imprimelinha("|  FIRMA: "+Format("W40,AL",Razao)+Spaces(81)+"| ")
imprimelinha("|  INSCRICAO ESTADUAL: "+Format("W17,AL",IE)+" CNPJ(MF): "+Format("W20,AL",CGC)+Spaces(60)+"| ")
imprimelinha("|  FOLHA:"+Format("W10,AL",pag)+"              ESTOQUE EXISTENTES EM: "+Format("D13",VSDGDTREF)+Spaces(65)+"| ")
imprimelinha("|                                                                                                                                  |")
imprimelinha("|==================================================================================================================================|")
imprimelinha("|CLASSIFICACAO |                DISCRIMINACAO                          | UNIDADE |   QUANTIDADE   |             VALORES            |")
imprimelinha("|              |                                                       |         |                |--------------------------------|")
imprimelinha("|   FISCAL     |                                                       |         |                |                |               |")
imprimelinha("|              |                                                       |         |                |   UNITARIO     |    TOTAL      |")
imprimelinha("|==================================================================================================================================|")
if IMPRIME_TRANSF
   then imprimelinha("|"+Spaces(099)+"   TRANSFERIDO:"+Format("W16.2,EIC",SOMAF)+"|")
endif

pag=pag+1

EndProc

;*******************************************************************************
;* Rotina de Soma Parcial                                                      *
;*******************************************************************************
Proc SomaPagina()
private s

if IMPRIME_SOMAPG=true
   then
        imprimelinha("|"+Fill("=",130)+"|")
        imprimelinha("|"+Spaces(099)+"  TOTAL PAGINA:"+Format("W16.2,EIC",SOMAP)+"|")
        imprimelinha("|"+Spaces(099)+"SOMA ACUMULADA:"+Format("W16.2,EIC",SOMAT)+"|")
endif

IMPRIME_TRANSF=true

SOMAP=0
EndProc

;*******************************************************************************
;* Rodape                                                                      *
;*******************************************************************************
Proc Rodape()
private s

imprimelinha("+"+Fill("=",130)+"+" + CI_6LPP+CI_10CPP+"\f")

EndProc

;*******************************************************************************
;* Titulos Grupo                                                               *
;*******************************************************************************
Proc grupotitulos(tipo)
private s, tipo

Switch
  Case tipo=1 or
       Tipo=2:  imprimelinha("| "+TITULO_POSSE +              "|"+Spaces(16)+"|"+Spaces(16)+"|"+Spaces(15)+"|")
       
  Case tipo=3 : imprimelinha("| "+TITULO_TPITEM+" "+Spaces(9)+"|"+Spaces(16)+"|"+Spaces(16)+"|"+Spaces(15)+"|")
Endswitch

EndProc ;grupotitulos()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc imprimelinha(s)

If (lin+1)>(tpag-4)
   Then
        lin=0
        SomaPagina()
        rodape()

        cabecalho()
        grupotitulos(1)
        grupotitulos(3)
EndIf

Print File ARQIMP s+"\n"
lin=lin+1

endproc


;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

ARQIMP = PrivDir()+"RELPROD.TXT"
Switch
  Case OK="A": ARQIMP = DIREPORT+ARQUIVO+".TXT"
EndSwitch
Deleta_Arquivo(ARQIMP)

If not IsAssigned(VSDGCOMPLEMENTO)
   Then VSDGCOMPLEMENTO = ""
EndIf

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

AGUARDE("Imprimindo")
Imprime()

Mensagem("Impress„o Concluida !")
ImpriArq(ARQIMP)

Release Vars lin, pag, tpag,
             EMPR_ANT, POSSE_ANT, TERC_ANT, TPITEM_ANT,
             QTD_POSS, VRT_POSS, 
             QTD_CODT, VRT_CODT, 
             QTD_TIPO, VRT_TIPO, 
             IE, CGC, RAZAO, 
             SOMAP, SOMAT, SOMAF,
             IMPRIME_TRANSF

Release Procs Imprime, TotalGrupo, Cabecalho, somapagina, Rodape, grupotitulos, imprimelinha
