Rotina p/validação da estrutura de plano de contas
Moderador: Moderadores
Rotina p/validação da estrutura de plano de contas
Estou desenvolvendo uma rotina para estruturar os grupos do plano de contas do estoque e a coisa complicou na hora de validar a alteração da máscara, as validações na inclusão e exclusão estão ok. Gostaria de saber se alguém possui uma rotina dessas para eu dar uma olhada e trocar idéias.
Grato!
Grato!
GVC é o seguinte:
A máscara da estrutura é fixa: 9.99.99.99.99.99
1.00.00.00.00.00 - Estoques
1.01.00.00.00.00 - Mercadoria A
1.01.01.00.00.00 - Mercadoria A1
1.02.00.00.00.00 - Meracdoria B
1.02.01.00.00.00 - Mercadoria B1
Quando incluo uma subconta verifico se a conta pai existe, não deixo excluir a conta pai se existe subconta cadastrada e assim por diante.
Imagine que eu tenha uma conta assim:
1.01.01.02.00.00
e queira alterar para:
2.02.01.03.00.00
Ou coisa parecida. Comecei escrever a função de validação da máscara quando alterada e não imagino quantas linhas terá que ter para prever todas as possibilidades de validação. Então o que preciso saber é se alguém já passou por isso e tenha uma solução mais simples.
Grato!
A máscara da estrutura é fixa: 9.99.99.99.99.99
1.00.00.00.00.00 - Estoques
1.01.00.00.00.00 - Mercadoria A
1.01.01.00.00.00 - Mercadoria A1
1.02.00.00.00.00 - Meracdoria B
1.02.01.00.00.00 - Mercadoria B1
Quando incluo uma subconta verifico se a conta pai existe, não deixo excluir a conta pai se existe subconta cadastrada e assim por diante.
Imagine que eu tenha uma conta assim:
1.01.01.02.00.00
e queira alterar para:
2.02.01.03.00.00
Ou coisa parecida. Comecei escrever a função de validação da máscara quando alterada e não imagino quantas linhas terá que ter para prever todas as possibilidades de validação. Então o que preciso saber é se alguém já passou por isso e tenha uma solução mais simples.
Grato!
Prezado Grings
Como uma conta inferior só existe se uma superior existir creio que seja fácil fazer.
Tomado por base seu exemplo :
1.01.01.02.00.00
para
2.02.01.03.00.00
A 1ª coisa é verificar se já existe uma conta cadastrada, se já existir não poderá ser feita a alteração, isso eu sei que você já imaginou.
2º Verificar a conta imediatamente superior na hierarquia.
No caso do seu exemplo :
2.02.01.00.00.00
+ ou -
DBSEEK("2.02.01.00.00.00")
IF FOUND()
@ 02,00 SAY "Conta pai existente"
ELSE
@ 02,00 SAY "Conta pai inexistente, impossivel alterar para esse código"
ENDIF
Sendo assim você não precisa verificar se 2.02.00.00.00.00 existe, pois a 2.02.01.00.00.00 só exestirá se a superior existir, levando em consideração que só se pode cadastrar de forma hierárquica.
Espero que tenha dado para entender.
Até logo.
Marcelo
Como uma conta inferior só existe se uma superior existir creio que seja fácil fazer.
Tomado por base seu exemplo :
1.01.01.02.00.00
para
2.02.01.03.00.00
A 1ª coisa é verificar se já existe uma conta cadastrada, se já existir não poderá ser feita a alteração, isso eu sei que você já imaginou.
2º Verificar a conta imediatamente superior na hierarquia.
No caso do seu exemplo :
2.02.01.00.00.00
+ ou -
DBSEEK("2.02.01.00.00.00")
IF FOUND()
@ 02,00 SAY "Conta pai existente"
ELSE
@ 02,00 SAY "Conta pai inexistente, impossivel alterar para esse código"
ENDIF
Sendo assim você não precisa verificar se 2.02.00.00.00.00 existe, pois a 2.02.01.00.00.00 só exestirá se a superior existir, levando em consideração que só se pode cadastrar de forma hierárquica.
Espero que tenha dado para entender.
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Grings...
Confesso que para "estoque" eu nunca fiz uma estrutura de planos de contas e prá falar a verdade nunca vi da maneira como vc está fazendo pois a minha é totalmente diferente e foi desenvolvida com base em vários sistemas de controle de estoque que eu conheci.
O que eu tenho de mais semelhante a sua rotina (ou lógica) é para plano de contas de "contabilidade" o que me leva a crer que não é muito diferente e então me veio em mente a seguinte dúvida ??
Até que nível da estrutura, a conta é sintética e, até que nível ela é analítica ?? Ou seja, quais níveis são totalizadores e quais recebem lançamento ??
Essa pergunta é importante... não acha ??
Acompanhe meu raciocínio...
Pelo que vc mostra sua conta tem 6 níveis com estrutura "x.xx.xx.xx.xx.xx" e suponho que o N5 totaliza o N6(nível mais a direita), o N4 totaliza o N5, o N3 totaliza o N4 e assim vai até que o N1 totalizando o N2 sendo assim "teóricamente" somente o N6 receberia lançamentos (conta analítica) estoue errado ??
Caso eu esteja certo... me diga que aí eu tenho, não só a rotina que vc deseja como também a de totalização de todo o plano (de cima para baixo) além de te passar algumas dicas que tenho certeza te ajudarão mais na frente...
Confesso que para "estoque" eu nunca fiz uma estrutura de planos de contas e prá falar a verdade nunca vi da maneira como vc está fazendo pois a minha é totalmente diferente e foi desenvolvida com base em vários sistemas de controle de estoque que eu conheci.
O que eu tenho de mais semelhante a sua rotina (ou lógica) é para plano de contas de "contabilidade" o que me leva a crer que não é muito diferente e então me veio em mente a seguinte dúvida ??
Até que nível da estrutura, a conta é sintética e, até que nível ela é analítica ?? Ou seja, quais níveis são totalizadores e quais recebem lançamento ??
Essa pergunta é importante... não acha ??
Acompanhe meu raciocínio...
Pelo que vc mostra sua conta tem 6 níveis com estrutura "x.xx.xx.xx.xx.xx" e suponho que o N5 totaliza o N6(nível mais a direita), o N4 totaliza o N5, o N3 totaliza o N4 e assim vai até que o N1 totalizando o N2 sendo assim "teóricamente" somente o N6 receberia lançamentos (conta analítica) estoue errado ??
Caso eu esteja certo... me diga que aí eu tenho, não só a rotina que vc deseja como também a de totalização de todo o plano (de cima para baixo) além de te passar algumas dicas que tenho certeza te ajudarão mais na frente...
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Eu creio que no caso dele os niveis não sirvam para totalização e sim para subdivisão de grupos de produtos, algumas industrias utilizam desta forma e alguns comércios também, principalmente nos segmesntos onde não há uso dos códigos EAN, um desses casos é o ramo de autopeças.
Até logo.
Marcelo
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Bem... desde o advento do código de barras que eu uso o mesmo para estruturar o estoque afinal o próprio código de barras já é estruturado e quando o produto não tem código é criado um pelo estoquista seguindo uma regra pré-definida... Nada muito complicado...Grings escreveu:Augusto, a propósito, de que forma vc estrutura os estoques ?
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Se for para usar como é na contabilidade, vc deve primeiro verificar se a conta tem pai.
a) 1.01.01.02.00.00
b) 2.02.01.03.00.00
Faça uma rotina que apague os zeros da esquerda para direita, até o ponto (a - 1.01.01.02.00).
Verifique se o grupo seguinte é todo de zeros. Se for, apague tb (a - 1.01.01.02).
Repita até encontrar um grupo com números válidos (a - 1.01.01.02).
Apague esse último grupo (a - 1.01.01).
Procure a conta com essa código ou complete com zeros (a - 1.01.01.00.00.00). Essa é a conta pai.
Ou
Como o formato é fixo, faça uma rotina que pegue o último grupo e verifique se ele é diferente de zero.
Se não for,pegue o grupo anterior e repita a operação até encontrar um diferente de zero. (Vc esta verificando os grupo. Cada grupo corresponde aos digitos entre os posto.)
Após encontrar o grupo com valor diferente de zeros, substitua-os por zeros.
No seu exemplo: 1.01.01.02.00.00 - o grupo deiferente de zeros é o 02. Substituindo por zeros ficaria: 1.01.01.00.00.00.
Agora vc já tem a chave para procurar a conta pai.
Os mesmos métodos pode ser utilizados para verificar se existe a conta pai para o código destino, antes de transferir o produto para o novo código.
Boa sorte.
a) 1.01.01.02.00.00
b) 2.02.01.03.00.00
Faça uma rotina que apague os zeros da esquerda para direita, até o ponto (a - 1.01.01.02.00).
Verifique se o grupo seguinte é todo de zeros. Se for, apague tb (a - 1.01.01.02).
Repita até encontrar um grupo com números válidos (a - 1.01.01.02).
Apague esse último grupo (a - 1.01.01).
Procure a conta com essa código ou complete com zeros (a - 1.01.01.00.00.00). Essa é a conta pai.
Ou
Como o formato é fixo, faça uma rotina que pegue o último grupo e verifique se ele é diferente de zero.
Se não for,pegue o grupo anterior e repita a operação até encontrar um diferente de zero. (Vc esta verificando os grupo. Cada grupo corresponde aos digitos entre os posto.)
Após encontrar o grupo com valor diferente de zeros, substitua-os por zeros.
No seu exemplo: 1.01.01.02.00.00 - o grupo deiferente de zeros é o 02. Substituindo por zeros ficaria: 1.01.01.00.00.00.
Agora vc já tem a chave para procurar a conta pai.
Os mesmos métodos pode ser utilizados para verificar se existe a conta pai para o código destino, antes de transferir o produto para o novo código.
Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
