CONCATERNAR EM MASCARA
3 DESPESAS
3.1 DESPESAS GERAIS
3.1.1 DESPESAS ADMINISTRATIVAS
3.1.1.01 LOJA 1
3.1.1.01.001 * Agua
3.1.1.01.002 * Luz
3.1.1.01.003 * Telefone
3.1.1.02 LOJA 2
3.1.1.02.001 * Agua
3.1.1.02.002 * Luz
3.1.1.02.003 * Telefone
entao.. no relatorio eu quero pegar somente a razao do grupo e a respectiva conta.. exemplo..
LOJA 1
3.1.1.01.001 100,00
3.1.1.01.002 200,00
3.1.1.01.003 600,00
LOJA 2
3.1.1.02.001 900,00
3.1.1.02.002 1200,00
3.1.1.02.003 50000
Ou seja.. nao vou precisar daquele tanto de conta la em cima..
3 DESPESAS
3.1 DESPESAS GERAIS
3.1.1 DESPESAS ADMINISTRATIVAS
sei que posso fazer atraves de split.. tentei fazer o seguinte..
csql = [Ô]select b.ctb_codcontacompleta from [Ô] & cTab1 & [Ô] a [Ô]
csql = csql & [Ô] inner join ctb_contascontabeis b on b.id = a.idconta [Ô]
Set rs = ExecutaSQL(csql)
Do While Not rs.EOF
vTemp = Split(rs!ctb_codcontacompleta, [Ô].[Ô])
cAux = [Ô][Ô]
For nI = 0 To UBound(vTemp) - 1
If cAux = [Ô][Ô] Then
cAux = vTemp(nI)
Else
cAux = cAux & [Ô].[Ô] & vTemp(nI)
End If
cn.Execute [Ô]insert into [Ô] & cTab1 & [Ô] select id,0 from ctb_contascontabeis where ctb_codcontacompleta = [ô][Ô] & cAux & [Ô][ô] group by id order by ctb_codcontacompleta limit 1[Ô]
Next
rs.MoveNext: DoEvents
[ô]153 Prg.Value = Prg.Value + 1
Loop
porem ele pega todas as contas que se iniciam com o gripo.. nao dando certo.. ou seja imprimindo tudo ..
ex :
1 , RECEITA , 0
1.1 , RECEITA ADM, 0
2 - Para fazer esse tipo de [Ô]escada[Ô], você precisa ter uma tabela com o cadastro de cada conta, e informar de quem ela é filha. Mais ou menos assim:
IDConta -> int(PK)
CodigoConta -> varchar(x)
IDContaPai -> int
Descricao -> varchar(x)
Então, quando cadastrar fazer assim:
IDConta |CodigoConta |IDContaPai |Descricao
1 |3 |null |Despesas
2 |1 |1 |Despesas Gerais
3 |1 |2 |Despesas Administrativas
4 |01 |3 |Loja 1
5 |001 |4 |* Agua
6 |002 |4 |* Luz
7 |003 |4 |* Telefone
8 |02 |3 |Loja 2
9 |001 |8 |* Agua
10 |002 |8 |* Luz
11 |003 |8 |* Telefone
Então, quando gravar cada lançamento, grave o IDConta junto, assim, você pode montar a estrutura da maneira que quiser, incluindo em [Ô]árvore[Ô] que é o que você quer
vTemp = Split(rs!ctb_codcontacompleta, [Ô].[Ô])
como eu faço para ler essa linha acima da direita para esquerda?
pelo que percebà a conta de nÃvel 4 é a razão do grupo e a conta de nÃvel 5 é a conta analitica.
csql = [Ô]select b.ctb_codcontacompleta from [Ô] & cTab1 & [Ô] a [Ô]
csql = csql & [Ô] inner join ctb_contascontabeis b on b.id = a.idconta [Ô]
Set rs = ExecutaSQL(csql)
Do While Not rs.EOF
nivel = 1
for i = 1 to len(rs!ctb_codcontacompleta)
if mid(rs!ctb_codcontacompleta,i,1)=[Ô].[Ô] then nivel = nivel + 1
next i
if nivel = 4 or nivel = 5 then
[ô]... msgbox [Ô]conta = [Ô] & rs!ctb_codcontacompleta & vbcrlf & [Ô]descrição = xxxxxx[Ô] & vbcrlf & [Ô]valor = 0000[Ô]
endif
rs.MoveNext
Loop
Citação::
Faz um select com de todas as contas e trata somente aquelas que pertencem aos dois últimos nÃveis atraves de IF, pois
pelo que percebà a conta de nÃvel 4 é a razão do grupo e a conta de nÃvel 5 é a conta analitica.
csql = [Ô]select b.ctb_codcontacompleta from [Ô] & cTab1 & [Ô] a [Ô]
csql = csql & [Ô] inner join ctb_contascontabeis b on b.id = a.idconta [Ô]
Set rs = ExecutaSQL(csql)
Do While Not rs.EOF
nivel = 1
for i = 1 to len(rs!ctb_codcontacompleta)
if mid(rs!ctb_codcontacompleta,i,1)=[Ô].[Ô] then nivel = nivel + 1
next i
if nivel = 4 or nivel = 5 then
[ô]... msgbox [Ô]conta = [Ô] & rs!ctb_codcontacompleta & vbcrlf & [Ô]descrição = xxxxxx[Ô] & vbcrlf & [Ô]valor = 0000[Ô]
endif
rs.MoveNext
Loop
o seu raciocinio esta certo so que.. nao deu certo nao... ele nao achou nenhum a conta..
3.1.1.01
3.1.1.01.001
entao se eu remover o ultimo nivel vai dar.. 3.1.1.01
3.1
3.1.1
pode virar algo tipo
3.13.1
3.1.17
se não o mid funciona bem, porém eu aconselharia coloca-lo no select, desde que o campo seja do tipo texto.