Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Nosso Numero do Bradesco


Alberto Mota

Pergunta

Prezados colegas, o cálculo do nosso numero do Bradesco é diferente dos demais,

requer que seja colocada a letra P quando o resto da divisão for 1.

Tentei um case, mas não funcionou, dá erro de conversão:

CASE WHEN resto = 1 THEN 'P' ELSE resto END AS dvresto

se eu colocar

CASE WHEN resto = 1 THEN 0 ELSE resto END AS dvresto, então a consulta é executada.

Há algum tempo Fulvio me passou um script do modulo 11 que esta ok para outros bancos,

mas para o Bradesco tambem não consegui adapta-lo, pois é justamente em cima do resto:

No manual

----------------------------------------------------------------------------------

Obs.: Se o resto da divisão for “1”, desprezar a diferença entre o divisor

menos o resto que será “10” e considerar o dígito como “P”.

----------------------------------------------------------------------------------

2- Se o resto da divisão for “0”, desprezar o cálculo de subtração entre

divisor e resto, e considerar o “0” como dígito.

----------------------------------------------------------------------------------

Abaixo segue o script

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Modulo11Base7](@VALOR varchar(60))
RETURNS CHAR(1)
AS
BEGIN
DECLARE
@SOMA INT,
@CONTADOR INT,
@PESO INT,
@DIGITO INT,
@RETORNO CHAR(1),
@BASE INT,
@RESTO BIT

SET @SOMA = 0
SET @PESO = 2
SET @BASE = 7
SET @RESTO = 0
SET @CONTADOR = Len(@VALOR)

LOOP:
BEGIN
SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) *
@PESO)
IF (@PESO < @BASE)
SET @PESO = @PESO + 1
ELSE
SET @PESO = 2
SET @CONTADOR = @CONTADOR-1
END
IF @CONTADOR >= 1 GOTO LOOP

IF (@RESTO = 1)
BEGIN
SET @RETORNO = (@SOMA % 11)
END
ELSE
BEGIN
SET @DIGITO = 11 - (@SOMA % 11)
IF (@DIGITO > 9) SET @DIGITO = 0
SET @RETORNO = @DIGITO
END
IF @RETORNO=0 or @RETORNO=10
SET @RETORNO = 1
RETURN @RETORNO
END

-----------------

Desde já, obrigado.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Alberto,

O CASE está dando erro porque se o RESTO for igual a 1, você tenta colocar um caracter. Mas caso ela seja diferente de 1, você colocará o valor contido na coluna RESTO, q é um inteiro.

Segue a alteração do script para retorno do DV=P. Olhe se assim funciona:

ALTER FUNCTION [dbo].[Modulo11Base7](@VALOR varchar(60))
RETURNS CHAR(1)
AS
BEGIN
DECLARE
@SOMA INT,
@CONTADOR INT,
@PESO INT,
@DIGITO INT,
@RETORNO CHAR(1),
@BASE INT,
@RESTO BIT

SET @SOMA = 0
SET @PESO = 2
SET @BASE = 7
SET @RESTO = 0
SET @CONTADOR = Len(@VALOR)

LOOP:
BEGIN
SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) *
@PESO)
IF (@PESO < @BASE)
    SET @PESO = @PESO + 1
ELSE
    SET @PESO = 2
    SET @CONTADOR = @CONTADOR-1
END
IF @CONTADOR >= 1 GOTO LOOP

IF (@RESTO = 1)
BEGIN
    SET @RETORNO = (@SOMA % 11)
END
ELSE
BEGIN
    SET @DIGITO = 11 - (@SOMA % 11)
    IF (@DIGITO NOT IN  (9, 10)) 
        SET  @RETORNO = @DIGITO
    IF (@DIGITO = 9) 
        SET @RETORNO = 0
    IF (@DIGITO = 10) 
        RETURN 'P'
END
RETURN @RETORNO
END

OBS.: alterei o script. Agora está ok.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...