Contagem

8 respostas
J

Boa Tarde galera!
Estou fazendo um DAV (Documento Auxiliar de Venda) e meu problema está na contagem do mesmo.
Toda vez que eu abrir um novo DAV tem um campo JText que precisa realizar sempre uma contagem.
É necessario de 10 a 13 numeros. Exemplo: contagem inicia em [telefone removido] até [telefone removido], após isso a contagem reinicia.
Fiz algo parecido com isso, mas não deu certo.

private void contabilizaDav() {
        double numDav = ArrangeFields2.getDoubleDecimal(view.getTxtNumDav().getText());
        
        for (double i = 1;i <=999999999; i ++){
        view.getTxtNumDav().getText(ArrangeFields2.decimals(op.soma(numDav,i ),2));
        }
    }

Alguem tem alguma ideia de como posso fazer isso?

8 Respostas

J

Alguem?

JoaoBluSCBR

Essa tá dificil de entender.

Entendi errado ou vc quis dizer que esse tal DAV tem um campo texto que precisa ter
um número entre 10 e 13 digitos originado num contador long, é isso?

Tá, se for isso você coloca um

atributo private static long numero = 0;

E na classe, no construtor você faz um

numero++

para que ele seja acrescido em 1 toda vez que a um novo DAV for instanciado e

E se você precisa ele com formato com zeros a esquerda, crie uma função

que transforme o long em String, veja o tamanho da String e concatene Zeros a esquerda
até o tamanho necessário, algo assim:

public String colocarZerosEsquerda(String texto, int qtd){
        String ret = "";
        if(texto.length()==qtd)
            return texto;
        for(int i=texto.length(); i<qtd; i++)
            ret += "0";
        
        ret += texto;
        return ret;
    }
J

É exatamente isso que voce entendeu!
Muito Obrigado.
Vou tentar fazer usar o long e, caso de certo postarei o resultado aqui.

JoaoBluSCBR

Olha esse dois códigos em anexo,

eles devem resolver teu problema

Coloca eles num projeto separado e observa o que acontece.

JoaoBluSCBR

Observe que não é só usar o long,

essa variavel tem que ser static

isso faz com que ela seja única para todas
as instancias criadas.

É como criar uma variável de classe, não
de instancia.

assim o contador não se perde, cada ++
que ele recebe vai partir dele na próxima
instanciacao.

Jhonny_Oliveira

Se for uma informação que precisa ser persistida na base de dados. Considere o uso de SEQUENCE no seu SGBD, pode ser viável.

JoaoBluSCBR

Sim, o Jhonny Oliveira tem razão.

Se esse número de ADV tiver de ser único, é bom persistir no banco e recuperar a
cada iniciação do sistema.

Por que o contador estático começa do zero a cada iniciação do sistema.

Então o melhor, toda vez que um novo DAV for criado, é fazer um select no banco
pedindo o MAX(numeroDAV), somar mais 1, formatar com os zeros e continuar
dalí.

Note que estamos falando do valor long, nao da String formatada. Ela pode
aparecer numa coluna do banco, mas não serve para controlar qual é o maior
valor até aquele momento.

JM4X
Johanny:
Boa Tarde galera! Estou fazendo um DAV (Documento Auxiliar de Venda) e meu problema está na contagem do mesmo. Toda vez que eu abrir um novo DAV tem um campo JText que precisa realizar sempre uma contagem. É necessario de 10 a 13 numeros. Exemplo: contagem inicia em [telefone removido] até [telefone removido], após isso a contagem reinicia. Fiz algo parecido com isso, mas não deu certo.
private void contabilizaDav() {
        double numDav = ArrangeFields2.getDoubleDecimal(view.getTxtNumDav().getText());
        
        for (double i = 1;i <=999999999; i ++){
        view.getTxtNumDav().getText(ArrangeFields2.decimals(op.soma(numDav,i ),2));
        }
    }

Alguem tem alguma ideia de como posso fazer isso?

Mesmo que o que eu mostrar aki nao te sirva totalmente, creio que da pra aproveitar algumas ideias:

public class MyNumber {

    static long max;
    static long number;

    static void begin() {
        number = 0;
        if (max == 0) {
            setMaxDigits(9); // default
        }
    }
    
    static void setMaxDigits(int digits) {
        String string = "9";
        while (string.length() < digits) {
            string += string;
        }
        max = Long.parseLong(string);
    }

    static String getNumber(long number) {
        number = number++ % max;
        String string = String.valueOf(number);
        while (string.length() < 13) {
            string = "0" + string;
        }
        return string;
    }
}

[]'s

Criado 11 de julho de 2011
Ultima resposta 11 de jul. de 2011
Respostas 8
Participantes 4