'Nome       : FREMUNDXLS.SQL
'Tipo       : LST
'Data       : 2017/04/23
'Versao     : 1.5b
'Descricao  : Folha de remuneracoes para Excel discriminada

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.5b 2017/??/?? ---------------------------------------------------
'Correcao no calculo do total liquido

'- Versao : 1.5a 2017/04/11 ---------------------------------------------------
'Apresentar codigos 051,010

'- Versao : 1.5  2016/02/29 ---------------------------------------------------
'Por vezes nao assumia o processamento definido nas opcoes do video
'Listar trabalhador se tiver movimentos (ignora situacao)

'- Versao : 1.4b 2015/01/16 ---------------------------------------------------
'Anular controlo do contador de linhas
'Usar processamento a listar definido nas opcoes 

'- Versao : 1.4a 2015/01/09 ---------------------------------------------------
'Validar limites definidos no video da listagem

'- Versao : 1.4  2014/11/12 ---------------------------------------------------
'Apenas listar trabalhadores ativos (situcao= 11,12)
'Corrigir formula dos totais quando existe mais de 22 colunas
'Colocar secção e respetivo descritivo

'- Versao : 1.3b 2014/09/05 ---------------------------------------------------
'Nao utilizar base dados ligacoes

'- Versao : 1.3a 2014/07/10 ---------------------------------------------------
'na funcao LstCmvProc, assumir descontos caso codigo >= 400

'- Versao : 1.3  2014/06/09 ---------------------------------------------------
'Prever mesmo codigo movimento em varios processamentos
'apresentar nome do codigo movimento

'- Versao : 1.2  2009/05/20 ---------------------------------------------------
'na funcao LstCmvProc, assumir descontos caso codigo > 400

'- Versao : 1.1  2009/05/20 ---------------------------------------------------
'Permitir definir o processamento a listar

'- Versao : 1.0  2007/03/29 ---------------------------------------------------
'Versao base

'- Versao : 1.2d 2011/09/16 ---------------------------------------------------
'Compatibilizar com alteracoes nos acumuladores

'-----------------------------------------------------------------------------
' Definicao global do documento
'-----------------------------------------------------------------------------
#DEF
Caracteres invalidos             [CarInv]=#
##


'-----------------------------------------------------------------------------
' Campos especificos
'-----------------------------------------------------------------------------
#ESP
##


'==============================================================================
#SQL - Comandos SQL
'==============================================================================
Base de dados           [BD]=EmpFic$("EMP","gpe,gpe.mdb")

'- generico -------------------------------------------------------------------
Listar empregados [Cmd]=GerLst=SELECT * FROM GpeMst order by trb$


##



'-----------------------------------------------------------------------------
' Configuracao do documento
'-----------------------------------------------------------------------------
#DOC
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=Fremun-uni,Processamento indicado

'formato
'Saida/Impressora           [DocSai]=1
Impressora                 [DocPrt]=NULA
Linhas por pagina          [DocLpg]=1
Colunas por linha          [DocCol]=80
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0

'funcoes de listagem
Base para documento         [FxDOC]=XlsFrm
Listar cabecalho            [FxCAB]=XlsFrm_Cab
Listar linhas               [FxLIN]=XlsFrm_Lin,0
Listar fim                  [FxFIM]=XlsFrm_Fim

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=GerLst
Subtotalizadores           [SQLSbt]=

Matriz auxiliar            [DocMat]=FremunD.xls
##

'-----------------------------------------------------------------------------
' Variaveis
'-----------------------------------------------------------------------------
#VAR
Pag         = Doc_CntPag
Data        = FrmVal$(Sig_DtHoje,45,0)

Est         = GpeCodFrm$("EST",Gpe_Mst_Est$)
EstNome     = GpeTabCon$("EST",Gpe_Mst_Est$,"NOME")

Sec$        = GpeCodFrm$("SEC",Gpe_Mst_sec$)
SecNome$    = GpeTabCon$("SEC",Gpe_Mst_sec$,"DESCR")

Trb         = Gpe_Mst_Trb$
Nome        = Gpe_Mst_Nome$

Vbase       = GpeFrmMoe$("",10,GpeAcmLst("V","REM","VB"))
Vpago       = GpeFrmMoe$("",10,GpeAcmLst("V","REM","VP"))
OutAbo      = GpeFrmMoe$("",10,GpeAcmLst("V","REM","OABN"))
Tsu         = GpeFrmMoe$("",8,GpeAcmLst("V","REM","TSU"))
Irs         = GpeFrmMoe$("",8,GpeAcmLst("V","REM","IRS"))
OutDes      = GpeFrmMoe$("",8,GpeAcmLst("V","REM","ODSC"))
Liq         = GpeFrmMoe$("",10,GpeAcmSalCON("LIQ"))

TVbase      = GpeFrmMoe$("",11,Total(Vbase))
TVpago      = GpeFrmMoe$("",11,Total(Vpago))
TOutAbo     = GpeFrmMoe$("",11,Total(OutAbo))
TTsu        = GpeFrmMoe$("",9,Total(Tsu))
TIrs        = GpeFrmMoe$("",9,Total(Irs))
TOutDes     = GpeFrmMoe$("",9,Total(OutDes))
TLiq        = GpeFrmMoe$("",11,Total(Liq))

'- Resumo ------------
CmvC        = Gpe_Cmv_Cod$
CmvN        = Gpe_Cmv_Descr$
CmvQ        = FrmVal$(GpeLstCmvTot("Q",Gpe_Cmv_Cod$),20,8.2)
CmvV        = GpeFrmMoe$("",11,GpeLstCmvTot("V",Gpe_Cmv_Cod$))

CmvVTA      = GpeFrmMoe$("",11,GpeLstCmvTot("TA"))
CmvVTD      = GpeFrmMoe$("",11,GpeLstCmvTot("TD"))
CmvVTF      = GpeFrmMoe$("",11,GpeLstCmvTot("TF"))
CmvVL       = GpeFrmMoe$("",11,GpeLstCmvTot("TL"))
CmvVT       = GpeFrmMoe$("",11,GpeLstCmvTot("TG"))
CmvTsu      = GpeFrmMoe$("",11,GpeLstCmvTot("V",51))
CmvTsuTrb   = GpeFrmMoe$("",11,GpeLstCmvTot("V",710))

TotVbB      = GpeFrmMoe$("",11,GpeLstCmvTot("V",110)+GpeLstCmvTot("V",230))
TotVbP      = GpeFrmMoe$("",11,GpeLstCmvTot("V",110)+GpeLstCmvTot("V",230)-GpeLstCmvTot("TF"))
TotOA       = GpeFrmMoe$("",11,GpeLstCmvTot("TA")-GpeLstCmvTot("V",110)-GpeLstCmvTot("V",230))
##

'-----------------------------------------------------------------------------
' Programa/Funcoes
'-----------------------------------------------------------------------------
#PGM
SUB FxIni 'funcao de inicializacao
'msgbox "","FxIni",""
NrG$ = ""
Tot  = 0
Fl = 0
end sub


SUB FxFim 'funcao de finalizacao
res = XlsFim(0)                                 'terminar EXCEL
'msgbox "","FxFim",""
end sub

SUB Lst_AJT
end sub


'-----------------------------------------------------------------------------
' XLS - Funcoes comuns
'-----------------------------------------------------------------------------
'-------------------------------------------------------
Sub Xls_DocIni 'inicializar documento
'-------------------------------------------------------
dfi$ = FicEmp$("EMP","Ext","dExcel",cmo$)          'directorio de documentos EXCEL
nfi$ = "RND:FremunD.xls"                            'nome do ficheiro
cmo$ = SigCmoCur$("MIX")                           'modulo corrente
ficDoc$ = FicTmp$(dfi$, nfi$)                      'ficheiro para documento
res = DirCri("D", dfi$)                            'criar directorio para documento

xlsMatNom$ = DocOpc$("DocMat")                     'nome do ficheiro matriz
xlsMat$    = DocOpc$("DocMat+SBT")                 'endereco do ficheiro matriz

res = FicCop(xlsMat$, ficDoc$)                     'criar ficheiro (copia de matriz)

res = XlsPrp(0)                                    'preparar EXCEL
res = XlsDocLer(ficDoc$)                           'ler ficheiro
end sub


'-------------------------------------------------------
Sub Xls_DocFim 'terminar documento
'-------------------------------------------------------
'res = XlsLinEli(xlsLin, 1)                         'eliminar linha - ultima
'res = XlsLinEli(xlsLba, 1)                         'eliminar linha - primeira

'res = XlsWks(1)                                    'activar worksheet

res = XlsDocDir$("A", dfi$)                        'activar directorio
res = XlsDocGrv(ficDoc$)                           'gravar ficheiro

'res = XlsPrt(1)                                    'listar worksheet
res = XlsVer(0)                                    'mostrar EXCEL - normal
'res = XlsVer(1)                                    'mostrar EXCEL - maximizado
res = XlsLib(0)                                    'libertar EXCEL
end sub


'-----------------------------------------------------------------------------
' XLS 
'-----------------------------------------------------------------------------
'-------------------------------------------------------
Sub XlsFrm_DocIni 'inicializar documento
'-------------------------------------------------------
'msgbox "","","XlsFrm_DocIni"
call Xls_DocIni                                    'inicializar documento
call XlsFrm_Prep                                   'preparar
end sub

'-------------------------------------------------------
Sub XlsFrm_DocFim 'terminar documento
'-------------------------------------------------------
'res = MsgUtz("","Doc Fim","")

'mostrar
call Xls_DocFim                                    'terminar/mostrar documento
end sub


'-------------------------------------------------------
Sub XlsFrm_Cab 'linha de valores
'-------------------------------------------------------
End sub



'-------------------------------------------------------
Sub XlsFrm_Fim 'terminar
'-------------------------------------------------------
call AcertoGraficoFinal
'res = XlsWksAct("A", "Grafico")                    'activar worksheet
res = XlsWksAct("A", 1)                            'activar worksheet
call Xls_DocFim                                    'terminar/mostrar documento
'fx=msgbox("FIM","")
end sub


'-------------------------------------------------------
Sub XlsFrm_Prep 'inicializar EXCEL
'-------------------------------------------------------
tx$=gpeoplcon("PROC")                              'processamento definido
procLim$= " and [PROC]="+tx$+" "                   'gerar limite sql
proctit$=" processamento a listar : "+tx$          'gerar titulo
if tx$="0" then                                    'todos os processamentos?
  proclim$=""                                      'limpar limite sql
  proctit$=" processamento a listar : Todos"       'gerar titulo
end if 

res = XlsWks("Valores")                            'activar worksheet
empNum$ = Emp_Inf_Cod$                             'numero da empresa
empNom$ = Emp_Inf_Nome$                            'nome da empresa
lstDt$  = FrmDt$("EXT", Sig_DtHoje)                'data para listagem
res = XlsIdeLst("Emp_Num", empNum$)                'numero da empresa
res = XlsIdeLst("Emp_Nome", empNom$)               'nome da empresa
res = XlsIdeLst("Lst_Data", lstDt$)                'data
res = XlsIdeLst("Lst_Proc", proctit$)             'limites processamento

fx=SqlDbPrp("")                                  'prepara acesso base dados

call CodigosNoProcessamento
xlsLin = 9                                        'contador de linhas usadas 
end sub


'-------------------------------------------------------
Sub XlsFrm_Lin 'linha de trabalhador
'-------------------------------------------------------
trb$   = SqlCmp$("Trb$")
sql$    = "SELECT * from GpeMov"+MesAno$+" WHERE cmv$ >= '100' "+proclim$+"and trb$='"+trb$+"' ORDER BY Cmv$"
res = SqlQryGer("",sql$)   'gerar recordset
if res>0  then                     'tem movimentos
  fx = XlsLinIns(xlsLin, 1)                      'juntar linha
  call Lista_Nome_Emp                            'Pesquisa o nome do Empregado
  tot=0
  if res = 1
     call LstCmvProc                             'listar codigos de processamento
  end if
  xlsLin = xlsLin + 1                            'contar linha
end if
End sub




'-------------------------------------------------------
Sub LstCmvProc   'listar codigos do processamento 
'-------------------------------------------------------
'fx=msgbox(proclim$,codigosusados$)

Cnt = TxtSepMul(CodigosUsados$, ";")                        'Separar pelo caracter ';'
For idx=1 to cnt
  TTT$ = ConTx$(idx)      'codigo+coluna
  Cmv$ = left$(TTT$,3)      'codigo
  Col$ = right$(TTT$,2)     'coluna

  sql$ = "SELECT * from GpeMov"+MesAno$+" WHERE cmv$ = '"+cmv$+"' and trb$='"+trb$+"'"+proclim$
  res = SqlQryGer("",sql$)   'gerar recordset

  vl=0
  while  res=1
     Vc    = SqlQryCmp(idq$,"VCalc")
     vl=vl+vc
     res = SqlQryRgs(idq$)              'registo seguinte
  wend

   txVl$  = FrmVal$(vl,21,8.2)


    If Cmv$ >= "400"   then
      Tot = Tot - vl
    else
      if cmv$>="100" then
        Tot = Tot + vl
      end if
    end if

    TxTot$   = FrmVal$(Tot,21,8.2)

    fx = XlsLst(xlsLin, col$, vl)                      'valor do codigo
    fx = XlsLst(xlsLin, lastcol, tot)                   'total
next  
end sub



'-------------------------------------------------------
Sub CodigosNoProcessamento  ' codigos existente no processamento (titulos - codigo)
'-------------------------------------------------------
lin1    = 6
Lin2    = 7
Col     = 5+2


MesAno$ = left$(FrmVal$(Sig_DtHoje,43,0),6)
'sql$    = "SELECT Cmv$ from GpeMov"+MesAno$+" WHERE cmv$ >= '100' "+proclim$+" GrOUP BY Cmv$ ORDER BY cmv$"
sql$    = "SELECT Cmv$ from GpeMov"+MesAno$+" WHERE ((cmv$ >= '100')or (cmv$ IN('051','010'))) "+proclim$+" GrOUP BY Cmv$ ORDER BY cmv$"



res = SqlQryGer("",sql$)   'gerar recordset
while res = 1
   fx=XlsColIns(col,1)

   Cmv$ = right$("000"+SqlQryCmp(idq$,"Cmv$"),3)
   fx = XlsLst(Lin1, Col, Cmv$)              'Código Movimento
   cl$  = NumTxT$(Col,5) 
   CodigosUsados$=CodigosUsados$+cmv$+right$(Cl$,2)+";"

   Col = col + 1
   res = SqlQryRgs(idq$)         'registo seguinte
Wend

LastCol = Col
'zon$ = XlsZon$(lin2, Col)
fx=XlsColIns(LastCol,1)
fx = XlsLst(Lin1,LastCol, "Total")           'Liquido
fx = XlsLst(Lin2,LastCol, "Liquido")           'Liquido
call Lista_Nome_Cmv
end sub


'-------------------------------------------------------
Sub Lista_Nome_Cmv  'escrever nome do cod.movimento no titulo
'-------------------------------------------------------
cnt = TxtSepMul(CodigosUsados$, ";")                        'Separar pelo caracter ';'
For idx=1 to cnt
   TTT$ = ConTx$(idx)      'codigo
   Cmv$ = left$(TTT$,3)
   Col$ = right$(TTT$,2)
   fx=GpeCmvLer(cmv$)
   nom$=gpe_cmv_descr$
   fx = XlsLst(7,Col$, nom$)                   
next
end sub


'-------------------------------------------------------
Sub Lista_Nome_Emp 'Pesquisa o nome do Empregado
'-------------------------------------------------------
sql$="Select Nome$, Sec$ from GPEMST where Trb$='"+trb$+"'"
Res = SqlQryGer("",sql$)                                     'gerar recordset
Nom$ = SqlQryCmp$(idq$,"Nome$")           

Sec$      = SqlQryCmp$(idq$,"sec$")
SecNome$  = GpeTabCon$("SEC",sec$,"DESC")

fx = XlsLst(xlsLin, 2, trb$)                      'Numero
fx = XlsLst(xlsLin, 3, Nom$)                      'Nome
fx = XlsLst(xlsLin, 4, sec$)                      'secao Nome
fx = XlsLst(xlsLin, 5, secNome$)                  'Nome secao


end sub

'-------------------------------------------------------
sub AcertoGraficoFinal  'ajustes graficos finais da listagem
'-------------------------------------------------------
fx = XlsLinEli(8, 1)                         'eliminar linha
fx = XlsColEli(4+2, 1)                         'eliminar coluna
CodigosUsados$=""

XlsLin=xlsLin-1


for cl=4+2 to lastCol-1
  t$=xlslin-1                          'ultima linha com valor
  zon$=XlsZon$("8",cl,t$,cl)
  txf$="=sum("+zon$+")"                'gerar formula
  fx=XLSFORM(XlsLin,cl,txf$)           'registar formula
next
end sub
##

