Ronaldo Faria Storck Eler 2 Denunciar post Postado Maio 26, 2014 Olá pessoa, Estou com um problema, aparentemente, muito simples, mas depois de olhar trocentas vezes para o código e printar todas as linhas (rs) já não se enxerga mais nada... Bem, fiz a função para calcular o digito verificador da chave ASBACE (aquela dos boletos) de acordo com o código do banco BANESTES, ocorre que está tudo correto, mas na última linha ao invés de retornar 6, retorna 0. O pior, até coloquei um response que me mostra que o D2 final é 6, mas essa linha é printada novamente e troca para zero... não estou conseguindo entender... Function CalculaD2(chave, D1) D2 = 0 peso = 7 P = 0 S = 0 chaveD1 = chave & D1 w "<hr><br>Entrando no calculo D2...<br><br>chaved1...: "& chr(11) & chaved1 w "<br>D1......:" & D1 w "<br>D2......:" & d2 For i = 1 to Len(chaveD1) Step 1 N = cint(mid(chaveD1,i, 1)) P = N * (peso) ' atençaõ redobrada aqui: ' como a expressao original era: P = N * peso-- ' se eu fazia ' N* (peso-1) ou ' se fazia a conta primeiro: peso = peso -1 e depois jogar N * peso, também dava erro, e o motivo, fui entender com o javascript ' onde a precedência do operador (http://www.vbsedit.com/html/49eaf4cf-8818-478d-a429-cdd2ece20811.asp). ' Nesse caso o -- estava depois de peso, portanto, deveria ser feito a conta e depois decrementado ' então passe a N* peso e depois peso=peso-1, e funcionou ' peso = peso -1 S = S + P if peso = 1 then peso = 7 end if Next w "<br>Soma..............: " & chr(11) & S resto = S mod 11 'response.write "<br>D1-----: " & D1 w "<br>" & S & "/11....: " & chr(11) & resto w "<br>testa o valor do RESTO...................................." if (resto = 0) then w "<br>Resto = 0" D2 = 0 elseif (resto = 1) then w "<br>Resto = 1..................................................." response.write "<br><br>resto = 1 --> recalcula..." response.write "<br>D1 Atual....: " & d1 D1 = D1 + 1 response.write "<br>D1 + 1....: " & d1 if (D1 = 10) then D1 = 0 end if response.write "<br>D1 + enviado para recalculo....: " & d1 CalculaD2 chave, D1 elseif (resto > 1) then w "<br>Resto > 1" D2 = 11 - resto d3 = D2 end if w "<br>d2 final...." & D2 CalculaD2 = D2 End function Para testar, passem o valor da chave (14000006000065971322021) e o valor de D1(9)... se der tudo certo, na primeira passagem, vai dar 1, então irá recalcular, e o valor final tem que ser 6. Se alguém puder ajudar, agradeço antecipadamente... No meu debug, aparece assim: Entrando no calculo D2... chaved1...: 140000060000659713220219 D1......:9 D2......:0 Soma..............: 276 276/11....: 1 testa o valor do RESTO.................................... Resto = 1................................................... resto = 1 --> recalcula... D1 Atual....: 9 D1 + 1....: 10 D1 + enviado para recalculo....: 0 Entrando no calculo D2... chaved1...: 140000060000659713220210 D1......:0 D2......:0 Soma..............: 258 258/11....: 5 testa o valor do RESTO.................................... Resto > 1 d2 final....6 d2 final....0 O que não estou entendendo são as duas últimas linhas, era para aparecer apenas a que contém o número 6 sds Compartilhar este post Link para o post Compartilhar em outros sites
Ronaldo Faria Storck Eler 2 Denunciar post Postado Junho 2, 2014 Olá pessoal, alguém fez teste na função... a função (calculo) está correta, no entanto, após aparecer d2 final....: 6 imediatamente repete a mesma linha e o valor passa a ser zero... como pode isso? se tivesse repassado na função teria que aparecer as linhas de debug, mas nada! apenas duplica a linha e assumindo outro valor, como pode isso? Agradeço se alguém puder dar pelo menos alguma dica, se já passou por algo parecido, etc... sds Compartilhar este post Link para o post Compartilhar em outros sites
Ronaldo Faria Storck Eler 2 Denunciar post Postado Junho 6, 2014 Bem pessoal, acho que consegui resolver (em partes), colocando, ao invés de chamar a recorrência quando o resto = 1 assim: CalculaD2 chave, D1 crei uma nova variável e passei a utilizá-la assim: D3 = CalculaD2(chave, D1) Talvez não seja o ideal, pois ainda continua repetindo a última linha, mas agora, pelo menos, repete com o valor correto. sds Compartilhar este post Link para o post Compartilhar em outros sites
xanburzum 169 Denunciar post Postado Junho 6, 2014 desculpe no tive tempo de ver aquela parada pra você, estou nuns projetos com urgência. Podemos descartar a conversa off-line Compartilhar este post Link para o post Compartilhar em outros sites