;** RO_0377O *******************************************************************
;** Imprime a Digitacao do Romaneio               Expedi‡Ćo/OF                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 31/01/2017 por Anivel Augutso Rodrigues
;Ultima Alteracao: 14/02/2017 por Anivel Augutso Rodrigues 
;Motivo Alteracao: Ajustes obs
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 21/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ ignorar itens com [quantidade]=0
;Ultima Alteracao: 19/05/2020 por Bruno Carvalho
;Motivo Alteracao: Imprimir apenas 1 via independente do numero de c˘pias -> NUMCOPIA=1  

;*******************************************************************************
;* Rotina para Impressao do Relatorio                                          *
;*******************************************************************************
Proc Cabecalho()

QUEBRA   = False
CONTADOR = 0
PAG      =PAG+1

;************************** IMPRESSAO DO CABECALHO *****************************
If Not IsAssigned(NOMEMPRESA)
   Then NOMEMPRESA=""
EndIf
Moveto "Faturac"

Print File ARQIMP chr(27)+chr(67)+chr(44) ;Imprime 44 Linhas por pagina
Print File ARQIMP CI_15CPP+CI_8LPP+"\n"

Print File ARQIMP Format("W30,AL","Impressao: "+Format("D10",Today())+"-"+Time())
Print File ARQIMP CI_IEXP+CI_INEG+Format("W43,AR",[Faturac->Codigo da Empresa]+" - EXPEDICAO/OF "+[FaturaC->Numero da OF])+CI_FNEG+CI_FEXP
Print File ARQIMP Format("W15,AR","       Pag: "+Format("W3,AR",PAG))+"\n\n"

Print File ARQIMP "Cliente   : "+CI_INEG+Format("W05,AL",[Codigo])+Format("W51,AL",[Razao Social])+CI_FNEG
Print File ARQIMP "Emissao: " +CI_INEG+Format("D13",[Data de Emissao])+CI_FNEG+"\n"

Print File ARQIMP "Destinacao:  "+CI_INEG+Format("W49",[Codigo da Destinacao]+" "+[Descricao da Destinacao])+CI_FNEG+"\n"

Print File ARQIMP "Vendedor  : " +CI_INEG+Format("W05,AL",[Codigo do Representante])+Format("W45,AL",[Nome Fantasia Represent])+CI_FNEG
Print File ARQIMP "Transportador: "+CI_INEG+Format("W28,AL",[Nome Fantasia Transport])+CI_FNEG+"\n"

;********************* IMPRESSAO DOS ITENS ********************************
Print File ARQIMP Fill("-",132)+"\n"
Print File ARQIMP "     Item                                        Local                  Quantidade Un  Pecas    Informacoes Adicionais"+"\n"
;                  999  1234567890  123456789012345678901234567890  12345678901234567890 9.999.999,99 XX9.999,999 123456789012345678901234567890123456
Print File ARQIMP Fill("-",132)+"\n"

CONTADOR=9
EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina para Impressao do Relatorio                                          *
;*******************************************************************************
Proc IMPFAT()
private UN_TIPO, UN_ITENS, UN_QTD, CONT_UN_TIPO, CONT_UN_ITENS, PECAS,
        ACHOU_UNIDADE, indice, CODLOCAL 

Cabecalho()

DynArray UN_TIPO[]
DynArray UN_QTD[]
DynArray UN_ITENS[] 

CONT_UN_TIPO  = 0
CONT_UN_ITENS = 0
                       
Moveto "FaturaI"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]
  
  If [Quantidade]>0
     Then CODLOCAL=""
          PECAS   = BlankNum()
        
          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
          If RetVal
             Then CODLOCAL=REG_ITEM["Codigo_Localizacao"]
             
                  If REG_ITEM["Unidade Fiscal"]="KG" 
                     Then If REG_ITEM["Peso Liquido"] > 0 And REG_ITEM["Peso Liquido"] <> BlankNum()
                             Then PECAS = NDecimal(NDecimal([Quantidade],3)/REG_ITEM["Peso Liquido"],3)
                          EndIf
                  EndIf   
          EndIf        
          
          ;---- Verifica Tipos de Unidade ---------------------------------------------- 
          ACHOU_UNIDADE = False
          For i From 1 To DynArraySize(UN_TIPO)
            If UN_TIPO[i]=[Unidade Fiscal]
               Then ACHOU_UNIDADE = True
                    indice=i
                    QuitLoop
            EndIf   
          EndFor
          
          If Not ACHOU_UNIDADE
             Then CONT_UN_TIPO    = CONT_UN_TIPO + 1
                  indice          = CONT_UN_TIPO
                  UN_TIPO[indice] = [Unidade Fiscal]
                  UN_QTD[indice]  = blanknum()
          EndIf         
          
          ;---- Item -------------------------------------------------------------------
          CONT_UN_ITENS = CONT_UN_ITENS + 1
          
          UN_ITENS[CONT_UN_ITENS] =                           Format("W03,AL",[Unidade Fiscal   ])                          
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W03,AR",[Item da OF       ])+"  "
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W12,AL",[Codigo do Item   ])
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W32,AL",[Descricao do Item])
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W20,AL",CODLOCAL)
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W13.2,EIC",[Quantidade    ])+" "
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W03,Al",[Unidade Fiscal   ])
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + Format("W09.3,EIC",PECAS)+" "
          UN_ITENS[CONT_UN_ITENS] = UN_ITENS[CONT_UN_ITENS] + rtrim(Format("W300,AL",[Informacoes_Adicionais]))
        
          UN_QTD[indice]=UN_QTD[indice]+[Quantidade]
  EndIf
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

For un From 1 To DynArraySize(UN_TIPO)
  
  For iten From 1 To DynArraySize(UN_ITENS)
     If Rtrim(UN_TIPO[un]) = Rtrim(SubStr(UN_ITENS[iten],1,3))
        Then
             if len(UN_ITENS[iten])<=135
                then  
                     Print File ARQIMP SubStr(UN_ITENS[iten],04,132)+"\n"
                else 
                     Print File ARQIMP SubStr(UN_ITENS[iten],04,096)+"\n"
                     Print File ARQIMP spaces(05)+SubStr(UN_ITENS[iten],100,127)+"\n"
                     CONTADOR = CONTADOR +1
             endif    

             Print File ARQIMP Fill("-",132)+"\n"
             CONTADOR = CONTADOR +2
     EndIf
     If CONTADOR>=39
        Then QUEBRA = True
             Rodape()
             Cabecalho()
     EndIf
  EndFor
  Print File ARQIMP "\n"  
  Print File ARQIMP CI_INEG+spaces(58)+Format("W13,AL","TOTAL POR "+Rtrim(UN_TIPO[un])+":") + Format("W11.2,EIC",UN_QTD[un])+CI_FNEG+"\n"
  Print File ARQIMP Fill("-",132)+"\n"
  CONTADOR = CONTADOR + 3
EndFor  
Print File ARQIMP Format("W132,AR","** FIM DOS ITENS **")+"\n"
CONTADOR = CONTADOR + 1

For ITEM From CONTADOR To 39
  Print File ARQIMP "\n"
EndFor     

QUEBRA = false
Rodape()        

EndProc ;IMPFAT()   

;*******************************************************************************
;* Rotina para Imprimir o Rodape                                               *
;*******************************************************************************
Proc Rodape()
private OBS, Pos


Moveto "FaturaC"

;************************* IMPRESSAO DO RODAPE *********************************
If Not QUEBRA
   Then 
        OBS = Ltrim(Rtrim(SubStr([Observacao na Nota Fiscal],01,120)))
        If Search("\n",OBS) > 0 
           Then Pos = Search("\n",OBS)
                OBS = SubStr(OBS,1,Pos-1) + SubStr(OBS,1,Pos-1)
        EnDIf
        
        If OBS <> "" And Len(OBS)>1   
          Then Print File ARQIMP "OBS.: "+CI_INEG
               Print File ARQIMP Format("W126,AL",Rtrim(SubStr([Observacao na Nota Fiscal],01,126)))+CI_FNEG
        EndIf
        Print File ARQIMP "\n\n"
        
        Print File ARQIMP Format("W129,AC","   /   /     -                                   ")+"\n"
        Print File ARQIMP Format("W129,AC","-------------------------------------------------")+"\n"
        Print File ARQIMP Format("W129,AC","Data e Assinatura")+"\n"
   Else
        Print File ARQIMP Format("W132,AR","** CONTINUA PROXIMA PAGINA **")+"\n"
EndIf

Print File ARQIMP CI_6LPP
Print File ARQIMP CI_10CPP
Print File ARQIMP "\f"
        
EndProc

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

ArqImp=PrivDir()+"Ro_0377O.Txt"
If IsFile(ArqImp)
   Then Deleta_Arquivo(ARQIMP)
EndIf

AUX_NUMCOPIA = NUMCOPIA
NUMCOPIA     = 1

AGUARDE("Imprimindo Expedi‡Ćo/OF -> "+[FaturaC->Numero da OF])

PAG=0
IMPFAT()

;---- Imprime Arquivo Impressao ------------------------------------------------
ImpriArq(ARQIMP)
NUMCOPIA = AUX_NUMCOPIA

Release Vars QUEBRA, CONTADOR, PAG, AUX_NUMCOPIA 
Release Procs IMPFAT, Cabecalho, Rodape
LIMPAGUARDE()
