'Nome       : StcRenCom.sql
'Tipo       : SQL
'Data       : 2013/05/07
'Versao     : 1.0a
'Descricao  : Rendimento comercial

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0a  ____/__/__ --------------------------------------------------
'Correccao do SQL para nome do artigo (usar tabela corrente)

'- Versao : 1.0   2011/04/22 --------------------------------------------------
'Versao base


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


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


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


'------------------------------------------------------------------------------
'- generico -------------------------------------------------------------------
'------------------------------------------------------------------------------
Nome do artigo [Cmd]=ArtNom=+
   +SELECT Nome1$ as [NOME$] +
   +FROM {TB_StcMst} +
   +WHERE Art$ = '{ART.COD}'


'------------------------------------------------------------------------------
'- Rendimento por artigo/periodo ----------------------------------------------
'------------------------------------------------------------------------------
Gerar registos      [Cmd]=RenArpPer=+
   +SELECT Count(*) AS NUM, +
   +MOV.Art$ AS ART, MST.Nome1$ as NOM, +
   + +
   +SUM(MOV.Qu * TMV.CmpSinQ) AS CmpQU, SUM(MOV.Vt * TMV.CmpSinV) AS CmpVt, +
   +SUM(MOV.Qu * TMV.VndSinQ) AS VndQU, SUM(MOV.Vt * TMV.VndSinV) AS VndVt, +
   +SUM(MOV.Qu * TMV.ExiSinQ) AS ExiQU, SUM(MOV.Vt * TMV.ExiSinV) AS ExiVt  +
   + +
   +FROM (StcMst AS MST RIGHT JOIN StcMov{Ano} AS MOV ON MST.[Art$] = MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as TMV ON MOV.Cmv = TMV.Cmv +
   +WHERE MOV.RecVal <> 255 +
   +AND   (TMV.VndUsa$ = 'S' OR TMV.CmpUsa$ = 'S') +
   +AND   MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   MOV.Art$    BETWEEN '{Opc_Art.Ini}'   AND '{Opc_Art.Fim}' +
   +AND   MOV.Dtl     BETWEEN  {Opc_Dtl.Ini}    AND  {Opc_Dtl.Fim} +
   +AND   MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +GROUP BY MOV.Art$,Nome1$ +
   +ORDER BY MOV.Art$


'------------------------------------------------------------------------------
'- Rendimento por artigo acumulado/periodo ------------------------------------
'------------------------------------------------------------------------------
Gerar registos      [Cmd]=RenArtAP=+
   +SELECT Count(*) AS NUM, +
   +MOV.Art$ AS ART, MST.Nome1$ as NOM, +
   + +
   +(SELECT SUM(AcmCQ_MOV.Qu * AcmCQ_TMV.CmpSinQ) +
   +FROM ({TB_StcMst} AS AcmCQ_MST RIGHT JOIN {TB_StcMov} AS AcmCQ_MOV ON AcmCQ_MST.[Art$] = AcmCQ_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmCQ_TMV ON AcmCQ_MOV.Cmv = AcmCQ_TMV.Cmv +
   +WHERE AcmCQ_MOV.RecVal <> 255 +
   +AND   AcmCQ_TMV.CmpUsa$ = 'S' +
   +AND   AcmCQ_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmCQ_MOV.Art$    = MOV.Art$ +
   +AND   AcmCQ_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmCQ_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmCQ_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmCmpQu, +
   + +
   +(SELECT SUM(AcmCV_MOV.Vt * AcmCV_TMV.CmpSinV) +
   +FROM ({TB_StcMst} AS AcmCV_MST RIGHT JOIN {TB_StcMov} AS AcmCV_MOV ON AcmCV_MST.[Art$] = AcmCV_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmCV_TMV ON AcmCV_MOV.Cmv = AcmCV_TMV.Cmv +
   +WHERE AcmCV_MOV.RecVal <> 255 +
   +AND   AcmCV_TMV.CmpUsa$ = 'S' +
   +AND   AcmCV_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmCV_MOV.Art$    =        MOV.Art$ +
   +AND   AcmCV_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmCV_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmCV_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmCmpVt, +
   + +
   +(SELECT SUM(AcmVQ_MOV.Qu * AcmVQ_TMV.VndSinQ) +
   +FROM ({TB_StcMst} AS AcmVQ_MST RIGHT JOIN {TB_StcMov} AS AcmVQ_MOV ON AcmVQ_MST.[Art$] = AcmVQ_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmVQ_TMV ON AcmVQ_MOV.Cmv = AcmVQ_TMV.Cmv +
   +WHERE AcmVQ_MOV.RecVal <> 255 +
   +AND   AcmVQ_TMV.VndUsa$ = 'S' +
   +AND   AcmVQ_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmVQ_MOV.Art$    =        MOV.Art$ +
   +AND   AcmVQ_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmVQ_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmVQ_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmVndQu, +
   + +
   +(SELECT SUM(AcmVV_MOV.Vt * AcmVV_TMV.VndSinV) +
   +FROM ({TB_StcMst} AS AcmVV_MST RIGHT JOIN {TB_StcMov} AS AcmVV_MOV ON AcmVV_MST.[Art$] = AcmVV_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmVV_TMV ON AcmVV_MOV.Cmv = AcmVV_TMV.Cmv +
   +WHERE AcmVV_MOV.RecVal <> 255 +
   +AND   AcmVV_TMV.VndUsa$ = 'S' +
   +AND   AcmVV_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmVV_MOV.Art$    =        MOV.Art$ +
   +AND   AcmVV_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmVV_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmVV_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmVndVt, +
   + +
   +(SELECT SUM(AcmEQ_MOV.Qu * AcmEQ_TMV.ExiSinQ) +
   +FROM ({TB_StcMst} AS AcmEQ_MST RIGHT JOIN {TB_StcMov} AS AcmEQ_MOV ON AcmEQ_MST.[Art$] = AcmEQ_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmEQ_TMV ON AcmEQ_MOV.Cmv = AcmEQ_TMV.Cmv +
   +WHERE AcmEQ_MOV.RecVal <> 255 +
   +AND   AcmEQ_TMV.ExiUsa$ = 'S' +
   +AND   AcmEQ_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmEQ_MOV.Art$    =        MOV.Art$ +
   +AND   AcmEQ_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmEQ_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmEQ_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmExiQu, +
   + +
   +(SELECT SUM(AcmEV_MOV.Vt * AcmEV_TMV.ExiSinV) +
   +FROM ({TB_StcMst} AS AcmEV_MST RIGHT JOIN {TB_StcMov} AS AcmEV_MOV ON AcmEV_MST.[Art$] = AcmEV_MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as AcmEV_TMV ON AcmEV_MOV.Cmv = AcmEV_TMV.Cmv +
   +WHERE AcmEV_MOV.RecVal <> 255 +
   +AND   AcmEV_TMV.ExiUsa$ = 'S' +
   +AND   AcmEV_MOV.Dtl     <=       {Opc_Dtl.Fim} +
   +AND   AcmEV_MOV.Art$    =        MOV.Art$ +
   +AND   AcmEV_MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   AcmEV_MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   AcmEV_MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +) AS AcmExiVt, +
   + +
   +SUM(MOV.Qu * TMV.CmpSinQ) AS PerCmpQU, SUM(MOV.Vt * TMV.CmpSinV) AS PerCmpVt, +
   +SUM(MOV.Qu * TMV.VndSinQ) AS PerVndQU, SUM(MOV.Vt * TMV.VndSinV) AS PerVndVt, +
   +SUM(MOV.Qu * TMV.ExiSinQ) AS PerExiQU, SUM(MOV.Vt * TMV.ExiSinV) AS PerExiVt  +
   + +
   +FROM ({TB_StcMst} AS MST RIGHT JOIN {TB_StcMov} AS MOV ON MST.[Art$] = MOV.[Art$]) +
   +LEFT JOIN StcCmvMap as TMV ON MOV.Cmv = TMV.Cmv +
   +WHERE MOV.RecVal <> 255 +
   +AND   (TMV.VndUsa$ = 'S' OR TMV.CmpUsa$ = 'S') +
   +AND   MOV.Ct$     BETWEEN '{Opc_Ct.Ini}'    AND '{Opc_Ct.Fim}' +
   +AND   MOV.Art$    BETWEEN '{Opc_Art.Ini}'   AND '{Opc_Art.Fim}' +
   +AND   MOV.Dtl     BETWEEN  {Opc_Dtl.Ini}    AND  {Opc_Dtl.Fim} +
   +AND   MOV.ArzSai  BETWEEN  {Opc_ArzSai.Ini} AND  {Opc_ArzSai.Fim} +
   +AND   MOV.Vend    BETWEEN  {Opc_Vnd.Ini}    AND  {Opc_Vnd.Fim} +
   +GROUP BY MOV.Art$,Nome1$ +
   +ORDER BY MOV.Art$

##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=RenVuPer,Redimento por artigo (VU Per)

'formato
Saida/Impressora           [DocPrt]=
Linhas por pagina          [DocLpg]=50
Colunas por linha          [DocCol]=132
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0
Especifico do documento    [DocEsp]=

'funcoes de listagem
Listar cabecalho            [FxCAB]=RenCom_Cab
Listar linhas               [FxLIN]=RenCom_LinPer
Listar fim                  [FxFIM]=RenCom_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=RenVuAcm,Redimento por artigo (VU Acm)

'formato
Saida/Impressora           [DocPrt]=
Linhas por pagina          [DocLpg]=50
Colunas por linha          [DocCol]=132
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0
Especifico do documento    [DocEsp]=

'funcoes de listagem
Listar cabecalho            [FxCAB]=RenCom_Cab
Listar linhas               [FxLIN]=RenCom_LinAcm
Listar fim                  [FxFIM]=RenCom_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=XlsRenPer,XLS - Redimento por artigo

'formato
Saida/Impressora           [DocPrt]=NULA
Linhas por pagina          [DocLpg]=50
Colunas por linha          [DocCol]=78
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0
Especifico do documento    [DocEsp]=

'funcoes de listagem
Base para documento         [FxDOC]=XlsRenCom
Listar cabecalho            [FxCAB]=XlsRenCom_Cab
Listar linhas               [FxLIN]=XlsRenCom_Lin
Listar fim                  [FxFIM]=XlsRenCom_Fim

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

Matriz auxiliar            [DocMat]=StcRenCom.xls
Subtotalizadores           [SQLSbt]=
##


'==============================================================================
#VAR - Variaveis
'==============================================================================
Tipo     = MemTxt$(1)
Pag      = Doc_CntPag
Tit080   = TxTit$("TT=10CPI, LD, PT=40C",Memtxt$(1))
Tit132   = TxTit$("TT=16CPI, LD, PT=66C",Memtxt$(1))
DataExt  = FrmVal$(Sig_DtHoje,45,0)

'- dados a listar -------------------------------------------------------------
vEntCod  = entCod$                              'entidade - codigo
vEntCov  = entCov$                              'entidade - codigo formatado
vEntIde  = entIde$                              'entidade - identificacao

vObs     = usaObs$                              'observacaoes

'artigo
vArtCod  = artCod$                              'codigo
vArtCov  = artCov$                              'codigo formatado
vArtNom  = artNom$                              'nome

'conta
vCtCod   = CTA_MST_Ct$                          'codigo da conta
vCtNom   = CTA_MST_Nome$                        'nome

'armazem
vArzCod  = arzCod$                              'codigo
vArzCov  = arzCov$                              'codigo formatado
vArzNom  = arzNom$                              'nome

'vendedor
vVndCod  = vndCod$                              'codigo
vVndCov  = vndCov$                              'codigo formatado
vVndNom  = vndNom$                              'nome


'valor de rendimento
vuRe1Ide   = ideGrp1$                           'valor para rendimento 1 - identificacao
vuRe1Qu    = FrmNum$(06.3,vaRe1Qu)              'valor para rendimento 1 - quantidade
vuRe1Vu    = FrmNum$(06.3,vaRe1Vu)              'valor para rendimento 1 - valor unitario
vuRe1Vt    = FrmNum$(12.2,vaRe1Vt)              'valor para rendimento 1 - valor total

vuRe2Ide   = ideGrp2$                           'valor para rendimento 2 - identificacao
vuRe2Qu    = FrmNum$(06.3,vaRe2Qu)              'valor para rendimento 2 - quantidade
vuRe2Vu    = FrmNum$(06.3,vaRe2Vu)              'valor para rendimento 2 - valor unitario
vuRe2Vt    = FrmNum$(12.2,vaRe2Vt)              'valor para rendimento 2 - valor total

vuRenQu    = FrmNum$(06.3,vaRenQu)              'valor de rendimento - quantidade
vuRenVu    = FrmNum$(06.3,vaRenVu)              'valor de rendimento - valor unitario
vuRenVt    = FrmNum$(12.2,vaRenVt)              'valor de rendimento - valor total


'valor a usar
vuUsaVu    = FrmNum$(12.2,vaUsaVu)              'rendimento a usar valor unitario
vuUsaQu    = FrmNum$(06.3,vaUsaQu)              'rendimento a usar quantidade
vuUsaVt    = FrmNum$(12.2,vaUsaVt)              'rendimento a usar valor total

'valor a usar - acumulado
vuAcuVcoVt = FrmNum$(12.2,vaAcuVcoVt)           'acumulado - compras/vendas valor total
vuAcuVcoVu = FrmNum$(12.2,vaAcuVcoVu)           'acumulado - compras/vendas valor unitario (medio)

vuAcuExiVu = FrmNum$(12.2,vaAcuExiVu)           'acumulado - existencia valor unitario (medio)
vuAcuExiVt = FrmNum$(12.2,vaAcuExiVt)           'acumulado - existencia valor total

vuAcuCmpVu = FrmNum$(12.2,vaAcuCmpVu)           'acumulado - compras valor unitario (medio)
vuAcuCmpVt = FrmNum$(12.2,vaAcuCmpVt)           'acumulado - compras valor total

'valor a usar - periodo
vuPeuVcoVt = FrmNum$(12.2,vaPeuVcoVt)           'periodo - compras/vendas valor total
vuPeuVcoVu = FrmNum$(12.2,vaPeuVcoVu)           'periodo - compras/vendas valor unitario (medio)

vuPeuExiVu = FrmNum$(12.2,vaPeuExiVu)           'periodo - existencia valor unitario (medio)
vuPeuExiVt = FrmNum$(12.2,vaPeuExiVt)           'periodo - existencia valor total

vuPeuCmpVu = FrmNum$(12.2,vaPeuCmpVu)           'periodo - compras valor unitario (medio)
vuPeuCmpVt = FrmNum$(12.2,vaPeuCmpVt)           'periodo - compras valor total

'- acumulado -
vuAcmCmpQu = FrmNum$(06.3,vaAcmCmpQu)           'acumulado/compras    - quantidade
vuAcmCmpVt = FrmNum$(12.2,vaAcmCmpVt)           'acumulado/compras    - valor total
vuAcmCmpVm = FrmNum$(12.2,vaAcmCmpQu)           'acumulado/compras    - valor medio
vuAcmVndQu = FrmNum$(06.3,vaAcmVndQu)           'acumulado/vendas     - quantidade
vuAcmVndVt = FrmNum$(12.2,vaAcmVndVt)           'acumulado/vendas     - valor total
vuAcmVndVm = FrmNum$(12.2,vaAcmVndVm)           'acumulado/vendas     - valor medio
vuAcmExiQu = FrmNum$(06.3,vaAcmExiQu)           'acumulado/existencia - quantidade
vuAcmExiVt = FrmNum$(12.2,vaAcmExiVt)           'acumulado/existencia - valor total
vuAcmExiVm = FrmNum$(12.2,vaAcmExiVm)           'acumulado/existencia - valor medio

'- periodo -
vuPerCmpQu = FrmNum$(06.3,vaPerCmpQu)           'periodo/compras      - quantidade
vuPerCmpVt = FrmNum$(12.2,vaPerCmpVt)           'periodo/compras      - valor total
vuPerCmpVm = FrmNum$(12.2,vaPerCmpVm)           'periodo/compras      - valor medio
vuPerVndQu = FrmNum$(06.3,vaPerVndQu            'periodo/vendas       - quantidade
vuPerVndVt = FrmNum$(12.2,vaPerVndVt)           'periodo/vendas       - valor total
vuPerVndVm = FrmNum$(12.2,vaPerVndVm)           'periodo/vendas       - valor medio
vuPerExiQu = FrmNum$(06.3,vaPerExiQu)           'periodo/existencia   - quantidade
vuPerExiVt = FrmNum$(12.2,vaPerExiVt)           'periodo/existencia   - valor total
vuPerExiVm = FrmNum$(12.2,vaPerExiVm)           'periodo/existencia   - valor medio


'- diversos -------------------------------------------------------------------
'contagem
toNrg    = FrmNum$(9.0,TotCnt("vuEntCov",0))    'numero de registos - total
s1Nrg    = FrmNum$(9.0,TotCnt("vuEntCov",1))    'numero de registos - subtotal 1
s2Nrg    = FrmNum$(9.0,TotCnt("vuEntCov",2))    'numero de registos - subtotal 2


'valor de rendimento
toRe1Vt = FrmNum$(12.2,Total("vuRe1Vt",0))      'valor 1 - total
s1Re1Vt = FrmNum$(12.2,Total("vuRe1Vt",1))      'valor 1 - subtotal 1
s2Re1Vt = FrmNum$(12.2,Total("vuRe1Vt",2))      'valor 1 - subtotal 2

toRe2Vt = FrmNum$(12.2,Total("vuRe2Vt",0))      'valor 2 - total
s1Re2Vt = FrmNum$(12.2,Total("vuRe2Vt",1))      'valor 2 - subtotal 1
s2Re2Vt = FrmNum$(12.2,Total("vuRe2Vt",2))      'valor 2 - subtotal 2

toRenVt = FrmNum$(12.2,Total("vuRenVt",0))      'rendimento - total
s1RenVt = FrmNum$(12.2,Total("vuRenVt",1))      'rendimento - subtotal 1
s2RenVt = FrmNum$(12.2,Total("vuRenVt",2))      'rendimento - subtotal 2


'rendimento a usar valor total
toUsaVt = FrmNum$(12.2,Total("vuUsaVt",0))      'valor - total
s1UsaVt = FrmNum$(12.2,Total("vuUsaVt",1))      'valor - subtotal 1
s2UsaVt = FrmNum$(12.2,Total("vuUsaVt",2))      'valor - subtotal 2


'- compras/vendas -
'rendimento compras/vendas - valor total
toPerVcoVt = FrmNum$(12.2,Total("vuPerVcoVt",0))      'valor - total
s1PerVcoVt = FrmNum$(12.2,Total("vuPerVcoVt",1))      'valor - subtotal 1
s2PerVcoVt = FrmNum$(12.2,Total("vuPerVcoVt",2))      'valor - subtotal 2

'rendimento vendas a PM existencia - valor total
toPerExiVt = FrmNum$(12.2,Total("vuPerExiVt",0))      'valor - total
s1PerExiVt = FrmNum$(12.2,Total("vuPerExiVt",1))      'valor - subtotal 1
s2PerExiVt = FrmNum$(12.2,Total("vuPerExiVt",2))      'valor - subtotal 2

'rendimento vendas a PM de compras - valor total
toPerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",0))      'valor - total
s1PerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",1))      'valor - subtotal 1
s2PerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",2))      'valor - subtotal 2


'- acumulado -
'compras    - valor total
toAcmCmpVt = FrmNum$(12.2,Total("vuAcmCmpVt",0))      'valor - total
s1AcmCmpVt = FrmNum$(12.2,Total("vuAcmCmpVt",1))      'valor - subtotal 1
s2AcmCmpVt = FrmNum$(12.2,Total("vuAcmCmpVt",2))      'valor - subtotal 2

'vendas     - valor total
toAcmVndVt = FrmNum$(12.2,Total("vuAcmVndVt",0))      'valor - total
s1AcmVndVt = FrmNum$(12.2,Total("vuAcmVndVt",1))      'valor - subtotal 1
s2AcmVndVt = FrmNum$(12.2,Total("vuAcmVndVt",2))      'valor - subtotal 2

'existencia - valor total
toAcmExiVt = FrmNum$(12.2,Total("vuAcmExiVt",0))      'valor - total
s1AcmExiVt = FrmNum$(12.2,Total("vuAcmExiVt",1))      'valor - subtotal 1
s2AcmExiVt = FrmNum$(12.2,Total("vuAcmExiVt",2))      'valor - subtotal 2


'- periodo -
'compras    - valor total
toPerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",0))      'valor - total
s1PerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",1))      'valor - subtotal 1
s2PerCmpVt = FrmNum$(12.2,Total("vuPerCmpVt",2))      'valor - subtotal 2

'vendas     - valor total
toPerVndVt = FrmNum$(12.2,Total("vuPerVndVt",0))      'valor - total
s1PerVndVt = FrmNum$(12.2,Total("vuPerVndVt",1))      'valor - subtotal 1
s2PerVndVt = FrmNum$(12.2,Total("vaPerVndVt",2))      'valor - subtotal 2

'existencia - valor total
toPerExiVt = FrmNum$(12.2,Total("vuPerExiVt",0))      'valor - total
s1PerExiVt = FrmNum$(12.2,Total("vuPerExiVt",1))      'valor - subtotal 1
s2PerExiVt = FrmNum$(12.2,Total("vuPerExiVt",2))      'valor - subtotal 2

##


'==============================================================================
#PGM - Programa/Funcoes
'==============================================================================
'- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
'- (13) --->'Comentario
'- (25) --------------->'Comentario
'- (28) ------------------>'Comentario
'- (40) ------------------------------>'Comentario
'- (43) --------------------------------->'Comentario
'- (46) ------------------------------------>'Comentario
'- (49) --------------------------------------->'Comentario
'- (52) ------------------------------------------>'Comentario
'- (55) --------------------------------------------->'Comentario
'- (58) ------------------------------------------------>'Comentario
'- (61) --------------------------------------------------->'Comentario
'- (64) ------------------------------------------------------>'Comentario
'- (67) --------------------------------------------------------->'Comentario
'- (70) ------------------------------------------------------------>'Comentario


Sub FxIni 'funcao de inicializacao
'nada a excutar
end sub


Sub FxFim 'funcao de finalizacao
'nada a excutar
end sub


Sub Lst_AJT 'ajuste
'nada a excutar
end sub


'=============================================================================
'- Comum ---------------------------------------------------------------------
'=============================================================================
'-----------------------------------------------------------------------------
'- [VAR] - Variaveis ---------------------------------------------------------
'-----------------------------------------------------------------------------
Sub Com_Var_Con 'consultar variaveis
artCod$ = SqlCmp$("ART")                           'artigo - codigo
artNom$ = SqlCmp$("NOM")                           'artigo - nome

'ctuCod$ = SqlCmp$("CTU")                           'conta

vaAcmCmpQu = SqlCmp("AcmCmpQu")                    'acumulado/compras    - quantidade
vaAcmCmpVt = SqlCmp("AcmCmpVt")                    'acumulado/compras    - valor total
vaAcmCmpVm = VBS_CalcVme(vaAcmCmpVt, vaAcmCmpQu)   'acumulado/compras    - valor medio
vaAcmVndQu = SqlCmp("AcmVndQu")                    'acumulado/vendas     - quantidade
vaAcmVndVt = SqlCmp("AcmVndVt")                    'acumulado/vendas     - valor total
vaAcmVndVm = VBS_CalcVme(vaAcmVndVt, vaAcmVndQu)   'acumulado/vendas     - valor medio
vaAcmExiQu = SqlCmp("AcmExiQu")                    'acumulado/existencia - quantidade
vaAcmExiVt = SqlCmp("AcmExiVt")                    'acumulado/existencia - valor total
vaAcmExiVm = VBS_CalcVme(vaAcmExiVt, vaAcmExiQu)   'acumulado/existencia - valor medio

vaPerCmpQu = SqlCmp("PerCmpQu")                    'periodo/compras      - quantidade
vaPerCmpVt = SqlCmp("PerCmpVt")                    'periodo/compras      - valor total
vaPerCmpVm = VBS_CalcVme(vaPerCmpVt, vaPerCmpQu)   'periodo/compras      - valor medio
vaPerVndQu = SqlCmp("PerVndQu")                    'periodo/vendas       - quantidade
vaPerVndVt = SqlCmp("PerVndVt")                    'periodo/vendas       - valor total
vaPerVndVm = VBS_CalcVme(vaPerVndVt, vaPerVndQu)   'periodo/vendas       - valor medio
vaPerExiQu = SqlCmp("PerExiQu")                    'periodo/existencia   - quantidade
vaPerExiVt = SqlCmp("PerExiVt")                    'periodo/existencia   - valor total
vaPerExiVm = VBS_CalcVme(vaPerExiVt, vaPerExiQu)   'periodo/existencia   - valor medio

'usar - acumulado
vaAcuVcoVt = vaAcmVndVt - vaAcmCmpVt               'acumulado - compras/vendas valor total
vaAcuVcoVu = VBS_CalcVme(vaAcuVcoVt, vaAcmVndQu)   'acumulado - compras/vendas valor unitario (medio)

vaAcuExiVu = vaAcmExiVm                            'acumulado - existencia valor unitario (medio)
vaAcuExiVt = vaAcuExiVu * vaAcmVndQu               'acumulado - existencia valor total

vaAcuCmpVu = vaAcmCmpVm                            'acumulado - compras valor unitario (medio)
vaAcuCmpVt = vaAcuCmpVu * vaAcmVndQu               'acumulado - compras valor total

'usar - periodo
vaPeuVcoVt = vaPerVndVt - vaPerCmpVt               'periodo - compras/vendas valor total
vaPeuVcoVu = VBS_CalcVme(vaPeuVcoVt, vaPerVndQu)   'periodo - compras/vendas valor unitario (medio)

vaPeuExiVu = vaPerExiVm                            'periodo - existencia valor unitario (medio)
vaPeuExiVt = vaPeuExiVu * vaPerVndQu               'periodo - existencia valor total

vaPeuCmpVu = vaPerCmpVm                            'periodo - compras valor unitario (medio)
vaPeuCmpVt = vaPeuCmpVu * vaPerVndQu               'periodo - compras valor total

'valor a usar
vaUsaVu    = vaPeuCmpVu                            'rendimento a usar valor unitario
vaUsaQu    = vaPerVndQu                            'rendimento a usar quantidade
vaUsaVt    = vaUsaVu * vaUsaQu                     'rendimento a usar valor total
end sub


Sub Com_Var_Acm 'acumula linha - rendimento
'cn1 = TotCnt("vuUsaVt", 0)                         'numero de registos

'rendimento a usar
res = AcmExe("vuUsaVt", vaUsaVt)                   'rendimento a usar - valor total

res = AcmExe("vuPeuVcoVt", vaPeuVcoVt)             'rendimento compras/vendas         - valor total
res = AcmExe("vuPeuExiVt", vaPeuExiVt)             'rendimento vendas a PM existencia - valor total
res = AcmExe("vuPeuCmpVt", vaPeuCmpVt)             'rendimento vendas a PM de compras - valor total

'acumulado
res = AcmExe("vuAcmCmpVt", vaAcmCmpVt)             'acumulado/compras    - valor total
res = AcmExe("vuAcmVndVt", vaAcmVndVt)             'acumulado/vendas     - valor total
res = AcmExe("vuAcmExiVt", vaAcmExiVt)             'acumulado/existencia - valor total

'periodo
res = AcmExe("vuPerCmpVt", vaPerCmpVt)             'periodo/compras    - valor total
res = AcmExe("vuPerVndVt", vaPerVndVt)             'periodo/vendas     - valor total
res = AcmExe("vuPerExiVt", vaPerExiVt)             'periodo/existencia - valor total

'cn2 = TotCnt("vuUsaVt", 0)                         'numero de registos
'tmp$="CN1=" + str$(cn1) + " CN2=" + str$(cn2)
'msgbox "","ACM",tmp$
end sub


Sub Com_Var_Prp 'preparar variaveis
usaObs$ = ""                                       'anular observacoes
call Com_Var_Con                                   'consultar variaveis

'preparar valores
call Com_Var_PrpArt                                'preparar variaveis - artigo
call Com_Var_PrpArz                                'preparar variaveis - armazem
call Com_Var_PrpVnd                                'preparar variaveis - vendedor
call Com_Var_PrpCtu                                'preparar variaveis - conta
end sub


Sub Com_Var_PrpArt 'preparar variaveis - artigo
res     = SqlOpcAct("Art.Cod",artCod$)             'registar artigo
res     = SqlCalc("ARTNOM")                        'preparar nome do artigo

artCov$ = StcCodFrm$(artCod$)                      'codigo formatado
artNom$ = SqlOpcCon$("NOME$")                      'nome
artIde$ = artCov$ + " - " + artNom$                'identificacao
end sub


Sub Com_Var_PrpArz 'preparar variaveis - armazem
'arzCov$ = TxtCv$(arzCod)                          'codigo formatado
arzCov$ = NumTxt$(arzCod, 2)                       'codigo formatado
arzNom$ = "Armazem " + arzCov$                     'nome
arzIde$ = "Armazem " + arzCov$                     'identificacao
end sub


Sub Com_Var_PrpVnd 'preparar variaveis - vendedor
vndCov$ = NumTxt$(vndCod, 2)                       'codigo formatado
vndNom$ = EmpTabCon$("VEND", vndCod, "NOME")       'nome
vndIde$ = vndCov$ + " - " + vndNom$                'identificacao
end sub


Sub Com_Var_PrpCtu 'preparar variaveis - conta
res  = CtaContaLer(ctuCod$)                        'preparar dados da conta

ctuCov$ = CTA_MST_Ct$                              'codigo formatado
ctuNom$ = CTA_MST_Nome$                            'nome
ctuIde$ = ctuCov$ + " - " + ctuNom$                'identificacao
end sub


'-----------------------------------------------------------------------------
'- [TXT] - Listar em modo texto ----------------------------------------------
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
'- [TXT-080] - Listar em modo texto - 80 colunas -----------------------------
'-----------------------------------------------------------------------------
Sub Com_Txt_Cab080 'cabecalho
'cabTit$ = "Titulo"
FxDiv LstIde,10CPI,0
print TxTit$("TT=10CPI, LD, PT=40C, TL=10CPI",comCabTit$)
?Data: @DataExt                                                   Folha No: @Pag#
?================================================================================
?  Codigo         Nome                              Quantidade           Valor  #
'123456789.12345  123456789.123456789.123456789.12  12,345.123   -123,456,789.12#
?================================================================================
end sub


Sub Com_Txt_Lin080 'executar linha
?@vEntCov        @vEntIde                           @vaResQu     @vaResVt       #
end sub


Sub Com_Txt_Fim080 'terminar
?================================================================================
?   Totais: @toNrg                                  @toResQu     @toResVt       #
?================================================================================
FxDiv LstPer,SP
'Print PrtCmd$("[SP]");
end sub


'-----------------------------------------------------------------------------
'- [TXT-132] - Listar em modo texto - 132 colunas ----------------------------
'-----------------------------------------------------------------------------
Sub Com_Txt_Cab132 'cabecalho
FxDiv LstIde,16CPI,0
print TxTit$("TT=10CPI, LD, PT=66C, TL=10CPI",comCabTit$)

?Data: @DataExt                                                                                                       Folha No: @Pag#
?====================================================================================================================================
?                                                  @vuRe1Ide                   @vuRe2Ide                   - Rendimento -------------
?  Codigo        Descricao                         Quantidade        Valor     Quantidade        Valor     Valor Unit.  Valor Total #
'123456789.12345 123456789.123456789.123456789.12  12,345.123 -123,456,789.12  12,345.123 -123,456,789.12  12,345.123 -123,456,789.12
?====================================================================================================================================
'print string$(132,"=")
end sub


Sub Com_Txt_Lin132 'executar linha 
'123456789.12345 123456789.123456789.123456789.12  12,345.123 -123,456,789.12  12,345.123 -123,456,789.12  12,345.123 -123,456,789.12
?@vEntCov        @vEntIde                          @vuRe1Qu   @vuRe1Vt         @vuRe2Qu   @vuRe2Vt         @vuRenVu   @vuRenVt      #
end sub


Sub Com_Txt_Fim132 'terminar - 132 colunas
?====================================================================================================================================
?   Totais: @toNrg                                            @toRe1Vt                    @toRe2Vt                    @toRenVt      #
?====================================================================================================================================
FxDiv LstPer,SP
'Print PrtCmd$("[SP]");
end sub


'-----------------------------------------------------------------------------
'- [TXT-COM] - Listar em modo texto - comum ----------------------------------
'-----------------------------------------------------------------------------
Sub Com_Txt_LinTit1 'titulo 1
if titIde$ <> "" then                              'ha titulo ?
   tmp = CntLin("INC", 1)                          'contar linhas
   print tab(5) titIde$                            'listar 
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Txt_LinTit2 'titulo 2
if titIde$ <> "" then                              'ha titulo ?
   tmp = CntLin("INC", 1)                          'contar linhas
   print tab(5) titIde$                            'listar 
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Txt_LinSbt1 'subtotal 1
nrg = TotCnt("vEntCov",1)                          'numero de registos

if nrg > 1 then                                    'listar numero ?
?           @s1Nrg                                  @s1ResQu     @s1ResVt       #
   tmp=CntLin("INC", 1)                            'contar linhas
end if

tmp=CntLin("INC", 1)                               'contar linhas
print                                              'separar

x = TotLpz(1)                                      'limpar totais
end sub


Sub Com_Txt_LinSbt2 'subtotal 2
nrg = TotCnt("vEntCov",2)                          'numero de registos

if nrg > 1 then                                    'listar numero ?
?           @s2Nrg                                  @s2ResQu     @s2ResVt       #
   tmp=CntLin("INC", 1)                            'contar linhas
end if

if sepSbt2 = 1 then                                'separar subtotal 2 ?
   tmp=CntLin("INC", 1)                            'contar linhas
   print                                           'separar
end if

sepSbt2 = 1                                        'separar subtotal 2
x = TotLpz(2)                                      'limpar totais
end sub


'------------------------------------------------------------------------------
'- [XLS] - Listar para EXCEL --------------------------------------------------
'------------------------------------------------------------------------------
Sub Com_Xls_DocIni 'inicializar documento
xlsOpcNfi$ = "RND:" + comXlsFic$                   'nome do ficheiro a gerar
xlsOpcWks$ = ""                                    'nome da woorksheet

call XlsComDoc_IniMat                              'inicializar documento por matriz

'preparacao especifica
res = XlsWks("Valores")                            'activar worksheet

'preparar cabecalho
empNum$ = Emp_Inf_Cod$                             'numero da empresa
empNom$ = Emp_Inf_Nome$                            'nome da empresa
lstTit$ = comCabTit$                               'titulo da listagem
lstTip$ = MemTxt$(2)                               'tipo da listagem
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_Tit" , lstTit$)               'titulo da listagem
res = XlsIdeLst("Lst_Tipo", lstTip$)               'tipo da listagem
res = XlsIdeLst("Lst_Data", lstDt$)                'data

call XlsComLin_Ini                                 'iniciar linhas

'definicao das colunas
coNrg    = 2                                       'numero de registos - total
coNrs    = 3                                       'numero de registos - subtotal

coCod    = 2                                       'codigo
coNom    = 3                                       'nome

coUsaVu  = 4                                       'rendimento a usar valor unitario
coUsaQu  = 5                                       'rendimento a usar quantidade
coUsaVt  = 6                                       'rendimento a usar valor total

coVcoVu  = 7                                       'rendimento compras/vendas         - valor unitario
coVcoVt  = 8                                       'rendimento compras/vendas         - valor total
coVpeVu  = 9                                       'rendimento vendas a PM existencia - valor unitario
coVpeVt  = 10                                      'rendimento vendas a PM existencia - valor total
coCmpVu  = 11                                      'rendimento vendas a PM de compras - valor unitario
coCmpVt  = 12                                      'rendimento vendas a PM de compras - valor total

coAcmCqu = 13                                      'acumulado/compras    - quantidade
coAcmCvt = 14                                      'acumulado/compras    - valor total
coAcmCvm = 15                                      'acumulado/compras    - valor medio
coAcmVqu = 16                                      'acumulado/vendas     - quantidade
coAcmVvt = 17                                      'acumulado/vendas     - valor total
coAcmVvm = 18                                      'acumulado/vendas     - valor medio
coAcmEqu = 19                                      'acumulado/existencia - quantidade
coAcmEvt = 20                                      'acumulado/existencia - valor total
coAcmEvm = 21                                      'acumulado/existencia - valor medio

coPerCqu = 22                                      'periodo/compras    - quantidade
coPerCvt = 23                                      'periodo/compras    - valor total
coPerCvm = 24                                      'periodo/compras    - valor medio
coPerVqu = 25                                      'periodo/vendas     - quantidade
coPerVvt = 26                                      'periodo/vendas     - valor total
coPerVvm = 27                                      'periodo/vendas     - valor medio
coPerEqu = 28                                      'periodo/existencia - quantidade
coPerEvt = 29                                      'periodo/existencia - valor total
coPerEvm = 30                                      'periodo/existencia - valor medio

coObs    = 31                                      'observacoes
end sub


Sub Com_Xls_DocFim 'terminar documento
'res = XlsWksAct("A", 1)                            'activar worksheet
call XlsComDoc_Fim                                 'terminar/mostrar documento
end sub


Sub Com_Xls_IncLin 'incrementar linha
'call XlsComLin_Inc                                 'incrementar linha
call XlsComLin_IncRep                              'incrementar linha + repor formato normal

zon$ = XlsZon$(liUsa, coCod,liUsa, coNom)          'zona
'zon$= XlsZonNum$("L", liUsa)                      'zona da linha
res = XlsAli(zon$, "<")                            'alinhamento
end sub


Sub Com_Xls_LinSep 'linha de separacao
call XlsVnd_IncLin                                 'incrementar linha
end sub


Sub Com_Xls_LstLinIde 'listar linha - identificacao (codigo e nome)
res = XlsLst(liUsa, coCod, vaCod$)                 'codigo
res = XlsLst(liUsa, coNom, vaNom$)                 'nome
end sub


Sub Com_Xls_LstLinArt 'listar linha - artigo
res = XlsLst(liUsa, coArtCod, artCod$)             'codigo
res = XlsLst(liUsa, coArtNom, artNom$)             'nome
end sub


Sub Com_Xls_LstLinArz 'listar linha - armazem
res = XlsLst(liUsa, coArzCod, arzCod)              'codigo
end sub


Sub Com_Xls_LstLinVnd 'listar linha - vendedor
res = XlsLst(liUsa, coVndCod, vndCod)              'codigo
end sub


Sub Com_Xls_LstLinCtu 'listar linha - conta
res = XlsLst(liUsa, coCtuCod, ctuCod$)             'codigo
res = XlsLst(liUsa, coCtuNom, ctuNom$)             'nome
end sub


Sub Com_Xls_LstLinRen 'listar linha - rendimento
'rendimento a usar
res = XlsLst(liUsa, coUsaVu, vaUsaVu)              'rendimento a usar valor unitario
res = XlsLst(liUsa, coUsaQu, vaUsaQu)              'rendimento a usar quantidade
'res = XlsLst(liUsa, coUsaVt, vaUsaVt)              'rendimento a usar valor total

'compras/vendas
res = XlsLst(liUsa, coVcoVu, vaPeuVcoVu)           'rendimento compras/vendas         - valor unitario
res = XlsLst(liUsa, coVcoVt, vaPeuVcoVt)           'rendimento compras/vendas         - valor total
res = XlsLst(liUsa, coVpeVu, vaPeuExiVu)           'rendimento vendas a PM existencia - valor unitario
res = XlsLst(liUsa, coVpeVt, vaPeuExiVt)           'rendimento vendas a PM existencia - valor total
res = XlsLst(liUsa, coCmpVu, vaPeuCmpVu)           'rendimento vendas a PM de compras - valor unitario
res = XlsLst(liUsa, coCmpVt, vaPeuCmpVt)           'rendimento vendas a PM de compras - valor total

'acumulado
res = XlsLst(liUsa, coAcmCqu, vaAcmCmpQu)          'acumulado/compras    - quantidade
res = XlsLst(liUsa, coAcmCvt, vaAcmCmpVt)          'acumulado/compras    - valor total
res = XlsLst(liUsa, coAcmCvm, vaAcmCmpVm)          'acumulado/compras    - valor medio
res = XlsLst(liUsa, coAcmVqu, vaAcmVndQu)          'acumulado/vendas     - quantidade
res = XlsLst(liUsa, coAcmVvt, vaAcmVndVt)          'acumulado/vendas     - valor total
res = XlsLst(liUsa, coAcmVvm, vaAcmVndVm)          'acumulado/vendas     - valor medio
res = XlsLst(liUsa, coAcmEqu, vaAcmExiQu)          'acumulado/existencia - quantidade
res = XlsLst(liUsa, coAcmEvt, vaAcmExiVt)          'acumulado/existencia - valor total
res = XlsLst(liUsa, coAcmEvm, vaAcmExiVm)          'acumulado/existencia - valor medio

'periodo
res = XlsLst(liUsa, coPerCqu, vaPerCmpQu)          'periodo/compras    - quantidade
res = XlsLst(liUsa, coPerCvt, vaPerCmpVt)          'periodo/compras    - valor total
res = XlsLst(liUsa, coPerCvm, vaPerCmpVm)          'periodo/compras    - valor medio
res = XlsLst(liUsa, coPerVqu, vaPerVndQu)          'periodo/vendas     - quantidade
res = XlsLst(liUsa, coPerVvt, vaPerVndVt)          'periodo/vendas     - valor total
res = XlsLst(liUsa, coPerVvm, vaPerVndVm)          'periodo/vendas     - valor medio
res = XlsLst(liUsa, coPerEqu, vaPerExiQu)          'periodo/existencia - quantidade
res = XlsLst(liUsa, coPerEvt, vaPerExiVt)          'periodo/existencia - valor total
res = XlsLst(liUsa, coPerEvm, vaPerExiVm)          'periodo/existencia - valor medio

'diversos
call Com_Var_Acm                                  'acumular - rendimento

res = XlsFormCop(xlsLba, coUsaVt, liUsa, coUsaVt)  'registar formula de valor a usar
end sub


Sub Com_Xls_LstTot 'listar totais
call XlsComLin_Fim                                 'fim de linhas

toNrg   = TotCnt("vuUsaVt", 0)                     'numero de registos
toUsaVt = Total("vuUsaVt", 0)                      'valor a usar


'compras/vendas
toPerVcoVt = Total("vuPeuVcoVt", 0)                'rendimento compras/vendas         - valor total
toPerExiVt = Total("vuPeuExiVt", 0)                'rendimento vendas a PM existencia - valor total
toPerCmpVt = Total("vuPeuCmpVt", 0)                'rendimento vendas a PM de compras - valor total

'acumulado
toAcmCmpVt = Total("vuAcmCmpVt", 0)                'acumulado/compras    - valor total
toAcmVndVt = Total("vuAcmVndVt", 0)                'acumulado/vendas     - valor total
toAcmExiVt = Total("vuAcmExiVt", 0)                'acumulado/existencia - valor total

'periodo
toPerCmpVt = Total("vuPerCmpVt", 0)                'periodo/compras    - valor total
toPerVndVt = Total("vuPerVndVt", 0)                'periodo/vendas     - valor total
toPerExiVt = Total("vuPerExiVt", 0)                'periodo/existencia - valor total


'listar
liUsa = linFim                                     'linha a usar

call XlsComLin_ActBI                               'activar linha em BOLD+ITALICO
res = XlsLst(liUsa, coNrg, toNrg)                  'numero de registos
'res = XlsLst(liUsa, coUsaVt, toUsaVt)              'valor a usar

'compras/vendas
res = XlsLst(liUsa, coVcoVt, toPerVcoVt)           'rendimento compras/vendas         - valor total
res = XlsLst(liUsa, coVpeVt, toPerExiVt)           'rendimento vendas a PM existencia - valor total
res = XlsLst(liUsa, coCmpVt, toPerCmpVt)           'rendimento vendas a PM de compras - valor total

'acumulado
res = XlsLst(liUsa, coAcmCvt, toAcmCmpVt)          'acumulado/compras    - valor total
res = XlsLst(liUsa, coAcmVvt, toAcmVndVt)          'acumulado/vendas     - valor total
res = XlsLst(liUsa, coAcmEvt, toAcmExiVt)          'acumulado/existencia - valor total

'periodo
res = XlsLst(liUsa, coPerCvt, toPerCmpVt)          'periodo/compras    - valor total
res = XlsLst(liUsa, coPerVvt, toPerVndVt)          'periodo/vendas     - valor total
res = XlsLst(liUsa, coPerEvt, toPerExiVt)          'periodo/existencia - valor total

end sub


Sub Com_Xls_LinTit1 'titulo 1
if titIde$ <> "" then                              'ha titulo ?
   call Com_Xls_IncLin                             'incrementar linha	

   res = XlsLst(liUsa, coNom, titIde$)             'listar identificacao
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Xls_LinTit2 'titulo 2
if titIde$ <> "" then                              'ha titulo ?
   call Com_Xls_IncLin                             'incrementar linha	

   res = XlsLst(liUsa, coNom, titIde$)             'listar identificacao
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Xls_SbtNrg 'numero de registos do subtotal
res = XlsLst(liUsa, coNrs, vNrg)                   'numero de registos

zon$ = XlsZon$(liUsa, coNrs)                       'zona
res = XlsAli(zon$, "|")                            'alinhamento
end sub


Sub Com_Xls_LinSbt1 'subtotal 1
vNrg   = TotCnt("vaResQu", 1)                      'numero de registos
vResQu = Total("vaResQu", 1)                       'quantidade
vResVt = Total("vaResVt", 1)                       'valor

if vNrg > 1 then                                   'listar numero ?
   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO

   call Com_Xls_SbtNrg                             'numero de registos do subtotal
   res = XlsLst(liUsa, coResQu, vResQu)            'total quantidade
   res = XlsLst(liUsa, coResVt, vResVt)            'total valor
end if

call Com_Xls_IncLin                                'incrementar linha	

x = TotLpz(1)                                      'limpar totais
end sub


Sub Com_Xls_LinSbt2 'subtotal 2
vNrg   = TotCnt("vaResQu", 2)                      'numero de registos
vResQu = Total("vaResQu", 2)                       'quantidade
vResVt = Total("vaResVt", 2)                       'valor

if vNrg > 1 then                                   'listar numero ?
   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO

   call Com_Xls_SbtNrg                             'numero de registos do subtotal
   res = XlsLst(liUsa, coResQu, vResQu)            'total quantidade
   res = XlsLst(liUsa, coResVt, vResVt)            'total valor
end if

if sepSbt2 = 1 then                                'separar subtotal 2 ?
   call Com_Xls_IncLin                             'incrementar linha	
end if

sepSbt2 = 1                                        'separar subtotal 2
x = TotLpz(2)                                      'limpar totais
end sub


'==============================================================================
'- [TXT] - Listar em modo texto -----------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [TXT] - Rendimento comercial -----------------------------------------------
'------------------------------------------------------------------------------
Sub RenCom_Cab 'cabecalho
'comCabTit$ = "Rendimento Comercial"                'titulo
comCabTit$ = DocOpc$("DocIde")                     'titulo

ideGrp1$ = "- Compras ----------------"            'grupo 1
ideGrp2$ = "- Vendas -----------------"            'grupo 2

call Com_Txt_Cab132                                'listar
end sub


Sub RenCom_LinPer 'linha - valorizacao por periodo
call Com_Var_Prp                                   'preparar variaveis

entCod$ = artCod$                                  'entidade - codigo
entCov$ = artCov$                                  'entidade - codigo formatado
entIde$ = artNom$                                  'entidade - identificacao

vaRe1Qu = vaPerCmpQu                               'valor para rendimento 1 - quantidade
vaRe1Vu = vaPerCmpVm                               'valor para rendimento 1 - valor unitario
vaRe1Vt = vaPerCmpVt                               'valor para rendimento 1 - valor total

vaRe2Qu = vaPerVndQu                               'valor para rendimento 2 - quantidade
vaRe2Vu = vaPerVndVt                               'valor para rendimento 2 - valor unitario
vaRe2Vt = vaPerVndVt                               'valor para rendimento 2 - valor total

vaRenQu = vaPerVndQu                               'valor de rendimento - quantidade
vaRenVu = vaPeuCmpVu                               'valor de rendimento - valor unitario
vaRenVt = vaRenQu * vaRenVu                        'valor de rendimento - valor total

call Com_Txt_Lin132                                'executar linha
end sub


Sub RenCom_LinAcm 'linha - valorizacao por acumulados
call Com_Var_Prp                                   'preparar variaveis

entCod$ = artCod$                                  'entidade - codigo
entCov$ = artCov$                                  'entidade - codigo formatado
entIde$ = artNom$                                  'entidade - identificacao

vaRe1Qu = vaPerCmpQu                               'valor para rendimento 1 - quantidade
vaRe1Vu = vaPerCmpVm                               'valor para rendimento 1 - valor unitario
vaRe1Vt = vaPerCmpVt                               'valor para rendimento 1 - valor total

vaRe2Qu = vaPerVndQu                               'valor para rendimento 2 - quantidade
vaRe2Vu = vaPerVndVt                               'valor para rendimento 2 - valor unitario
vaRe2Vt = vaPerVndVt                               'valor para rendimento 2 - valor total

vaRenQu = vaPerVndQu                               'valor de rendimento - quantidade
vaRenVu = vaAcuCmpVu                               'valor de rendimento - valor unitario
vaRenVt = vaRenQu * vaRenVu                        'valor de rendimento - valor total

call Com_Txt_Lin132                                'executar linha
end sub


Sub RenCom_Fim 'terminar
call Com_Txt_Fim132                                'listar
end sub


Sub RenCom_LinTit1 'titulo 1
call Com_Var_Con                                   'consultar variaveis
call Com_Var_PrpArt                                'preparar variaveis - artigo

titIde$ = artIde$                                  'titulo
call Com_Txt_LinTit1                               'listar
end sub


Sub RenCom_LinSbt1 'subtotal 1
call Com_Txt_LinSbt1                               'listar
end sub


'------------------------------------------------------------------------------
'- [TXT] - Por artigo ---------------------------------------------------------
'------------------------------------------------------------------------------
Sub RenCom_Cab 'cabecalho
comCabTit$ = "Vendas por Conta/Artigo"             'titulo

call Com_Txt_Cab                                   'listar
end sub


Sub RenCom_Lin 'linha
call Com_Var_Prp                                   'preparar variaveis

entCod$ = artCod$                                  'entidade - codigo
entCov$ = artCov$                                  'entidade - codigo formatado
entIde$ = artNom$                                  'entidade - identificacao

call Com_Txt_LinExe                                'executar linha
end sub


Sub RenCom_Fim 'terminar
call Com_Txt_Fim                                   'listar
end sub


Sub RenCom_LinTit1 'titulo 1
call Com_Var_Con                                   'consultar variaveis
call Com_Var_PrpCtu                                'preparar variaveis - conta

titIde$ = ctuIde$                                  'titulo
call Com_Txt_LinTit1                               'listar
end sub


Sub RenCom_LinSbt1 'subtotal 1
call Com_Txt_LinSbt1                               'listar
end sub


'==============================================================================
'- [XLS] - Listar para XLS ----------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [XLS] - Por artigo ---------------------------------------------------------
'------------------------------------------------------------------------------
Sub XlsRenCom_DocIni 'inicializar documento
comXlsFic$ = "StcRenCom.xls"                       'nome do ficheiro
comCabTit$ = "Vendas por Conta/Artigo"             'titulo

call Com_Xls_DocIni                                'inicializar documento
end sub


Sub XlsRenCom_DocFim 'terminar documento
call Com_Xls_DocFim                                'terminar documento
end sub


Sub XlsRenCom_Lin 'linha
call Com_Var_Prp                                   'preparar variaveis
call Com_Xls_IncLin                                'incrementar linha	

vaCod$  = artCov$                                  'codigo
vaNom$  = artNom$                                  'nome

'listar
call Com_Xls_LstLinIde                             'listar identificacao (codigo e nome)
call Com_Xls_LstLinRen                             'listar rendimento
end sub


Sub XlsRenCom_Fim 'terminar
call Com_Xls_LstTot                                'listar totais
end sub


Sub XlsRenCom_LinTit1 'titulo 1
call Com_Var_Con                                   'consultar variaveis
call Com_Var_PrpCtu                                'preparar variaveis - conta

titIde$ = ctuIde$                                  'titulo
call Com_Xls_LinTit1                               'listar
end sub


Sub XlsRenCom_LinSbt1 'subtotal 1
call Com_Xls_LinSbt1                               'listar
end sub

##


'==============================================================================
#INC - Funcoes comuns
'==============================================================================
Funcoes comuns                         =[SIG_Dir.Div],LsComPgm.std
Funcoes comuns XLS                     =[SIG_LST_DIR.XLS],XlsCom_Pgm.inc
##



'==============================================================================
#VBS - VB Script
'==============================================================================
'- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
'- (13) --->'Comentario
'- (25) --------------->'Comentario
'- (28) ------------------>'Comentario
'- (40) ------------------------------>'Comentario
'- (43) --------------------------------->'Comentario
'- (46) ------------------------------------>'Comentario
'- (49) --------------------------------------->'Comentario
'- (52) ------------------------------------------>'Comentario
'- (55) --------------------------------------------->'Comentario
'- (58) ------------------------------------------------>'Comentario
'- (61) --------------------------------------------------->'Comentario


'- variaveis globais ----------------------------------------------------------
'dim var                                'variavel


'------------------------------------------------------------------------------
'= SUP - Funcoes de suporte ===================================================
'------------------------------------------------------------------------------
Function CalcVme(vt, qu) 'calcular valor medio
'vt         - valor total
'qu         - quantidade

if qu <> 0 then                                    'ha divisor ?
   vme = vt / qu                                   'calcular valor medio
else
   vme = 0                                         'sem valor medio
end if

res = vme                                          'resultado
'res = 1
'res = 0

'terminar
CalcVme = res                                      'devolver resultado
end function


'------------------------------------------------------------------------------
'- NUM - Numero ---------------------------------------------------------------
'------------------------------------------------------------------------------
Sub NumCnv(vtx, num) 'conversao em numero
'vtx        - valor/texto
'num        - valor numero

on error resume next                   'controlar erros

'msgbox "NumCnv >"+vtx+"<"

num=0                                  'assume valor zero
if vtx = "" then
   num = 0                             'valor zero
else
   num = cDbl(vtx)                     'conversao em numero
end if

on error goto 0                        'terminar controlo de erros
end sub


Sub NumTxt(num, dig, ce, tx) 'converter numero em texto
'num        - numero a converter (pode estar em texto)
'dig        - numero de digitos
'ce         - caractere de enchimento (para numero >=0)
'tx         - texto

'NOTA: Se o numero for negativo forca o enchimento a espacos

on error resume next                   'controlar erros

tmp=0                                           'assume valor zero

tmp=cDbl(num)                                   'copiar
tx = LTrim(cStr(tmp))                           'converter para texto
If tmp < 0 Then                                 'negativo ?
   tx = Right(String(dig, " ") + tx, dig)       'ajustar tamanho
Else                                            'zero ou positivo
   tx = Right(String(dig, ce) + tx, dig)        'ajustar tamanho
End If

on error goto 0                        'terminar controlo de erros
end sub


Sub NumCnvTxt(num, dig, ce, tx) 'converter numero em texto
'num        - numero a converter (pode estar em texto)
'dig        - numero de digitos  (>0 enche a esq. , <0 enche a dir.)
'ce         - caractere de enchimento (para numero >=0)
'tx         - texto

on error resume next                   'controlar erros

call TxtCnv(num, ntx)                  'conversao em texto
ndi = abs(dig)                         'numero de digitos

If dig > 0 Then                        'enchimento a esquerda ?
   tmp = String(ndi, ce) + ntx         'enchimento a esquerda
   tx = Right(tmp, ndi)                'ajustar tamanho
Else
   tmp = ntx + String(ndi, ce)         'enchimento a direita
   tx = left(tmp, ndi)                 'ajustar tamanho
End If

on error goto 0                        'terminar controlo de erros
end sub


'------------------------------------------------------------------------------
'- TXT - Texto ----------------------------------------------------------------
'------------------------------------------------------------------------------
Sub TxtCnv(vl, vtx) 'conversao em texto
'vl         - valor a converter
'vtx        - valor em texto

on error resume next                   'controlar erros

'msgbox "NumCnv >"+vtx+"<"

vtx = ""                               'assume nulo
vtx = Trim(cStr(vl))                   'converter para texto

on error goto 0                        'terminar controlo de erros
end sub


Sub TxtSep(tx, sp, txs) 'separar texto
'tx         - texto original/residual
'sp         - separador
'txs        - texto separado

'msgbox "TxtSep >" + tx + "<"

p = InStr(tx, sp)                      'pesquisa do separador
If p <> 0 Then                         'encontrou separador
   txs = Left(tx, p - 1)               'texto separado
   tx  = Mid(tx, p + 1)                'texto residual
Else                                   'nao encontrou separador
   txs = tx                            'texto separado (tudo)
   tx  = ""                            'texto residual (nada)
End If
end sub


Sub TxtSepAsp(mo, vtx, sep, txs) 'separar texto com controlo de aspas
'mo         - modo
'vtx        - texto original/residual
'sep        - separadores
'txs        - texto separado

carAspa = Chr(34)                      'caractere aspa
ndi = Len(vtx)                         'tamanho do texto
aspaSim = 0                            'dentro de aspas (invalido)
AspaNao = 1                            'fora de aspas   (valido)

pSep = 0                               'invalidar separador
For i = 1 To ndi
car = Mid(vtx, i, 1)                   'caractere a analisar

If car = carAspa Then                  'aspa ?
   Swap aspaSim, AspaNao               'mudar situacao
   carOk = 0                           'invalidar caractere
Else
   carOk = 1                           'validar caractere
End If

If aspaSim = 1 Or carOk = 0 Then       'entre aspas/invalido ?
   'nada a executar
Else
   psqSep = InStr(sep, car)            'verificar se e um separador
   If psqSep <> 0 Then                 'e separador ?
      pSep = i                         'actualizar posicao
      Exit For                         'terminar
   End If
End If
Next

'terminar
If pSep = 0 Then                       'sem separdores ?
   txs = vtx                           'texto separado - tudo
   vtx = ""                            'texto residual - nada
Else
   txs = Left(vtx, pSep - 1)           'texto separado
   vtx = Mid(vtx, pSep + 1)            'texto residual
End If

If mo = "T" Then                       'executar trim ?
   vtx = Trim(vtx)                     'ajustar
   txs = Trim(txs)                     'ajustar
End If
end sub


Sub TxtSepEa(tx, sp, txs) 'separar texto e ajustar (eliminar aspas)
'tx         - texto original/residual
'sp         - separador
'txs        - texto separado

call TxtSepAsp("T", tx, sp, tmp)       'separar texto
txs = TxtEliAspa(tmp)                  'eliminar aspas nos extremos
end sub


Function TxtEliAspa(tx) 'eliminar aspas nos extremos
'tx         - texto base

'msgbox "EliAspa >" & tx & "<"

'aspa no inicio
If Left(tx, 1) = Chr(34) Then          'tem aspa ?
   tmp = Mid(tx, 2)                    'eliminar aspa
Else
   tmp = tx                            'nao tem, usa tudo
End If

'aspa no fim
If Right(tmp, 1) = Chr(34) Then        'tem aspa ?
   dig = Len(tmp) - 1                  'tamanho a usar
   tmp = Left(tmp, dig)                'eliminar aspa
End If

'terminar
TxtEliAspa = tmp                       'retornar valor
end function


Sub TxtSbt(tx, ps, txs) 'substituir texto
'tx         - texto original/apos substituicao
'ps         - posicao de seubstituicao
'txs        - texto a substituir

'msgbox "TxtSbt >" + tx + "<"

ndb = Len(tx)                          'tamanho do texto
ndi = Len(txs)                         'tamanho de substituicao
If ps < 1 Then Exit Sub                'posicao invalida, sai
If ps > ndb Then Exit Sub              'posicao invalida, sai
If ndi < 1 Then Exit Sub               'nada a substituir, sai

txa = Left(tx, ps - 1)                 'texto anterior
txr = Mid(tx, ps + ndi)                'texto residual
tmp = txa + txs + txr                  'executar substituicao
tx = Left(tmp, ndb)                    'limitar tamanho
end sub


'------------------------------------------------------------------------------
'- MSG - Mensagens ------------------------------------------------------------
'------------------------------------------------------------------------------
'nao ha


'------------------------------------------------------------------------------
'- INP - Input ----------------------------------------------------------------
'------------------------------------------------------------------------------
Function InpMsg(tit, msg, vde) 'input com mensagem
'tit        - titulo
'msg        - mensagem
'vde        - valor por defeito
   
Call TxtCnv(tit, xTit)                 'conversao em texto
Call TxtCnv(msg, xMsg)                 'conversao em texto
Call TxtCnv(vde, xVde)                 'conversao em texto

res = ""                               'forcar tipo texto
res = InputBox(xMsg, xTit, xVde)       'pedir valor

'terminar
InpMsg = res                           'devolver valor
end function


'------------------------------------------------------------------------------
'- DIV - Diversos -------------------------------------------------------------
'------------------------------------------------------------------------------
Sub Swap(varA, varB) 'troca de valores de 2 variaveis
'varA       - variavel A
'varB       - variavel B

varC = varA                            'guardar valor A
varA = varB                            'actualizar valor A
varB = varC                            'actualizar valor B
end sub


##
