on 12-30-2010 3:10 PM
Estimados, tengo una duda desde hace mucho tiempo, existe la manera de verificar el RUT (Chile) cuando ingreso o creo un nuevo Socio de Negocios en SAP ??
gracias y espero su pronta respuesta.
nuestra versión es : SAP Business One 2007 A (8.00.234) SP: 01 PL: 10
saludos y felices fiestas.
Rodrigo H.
Hola...
Lo ideal sería una validación por Transaction Notification. Con eso, te aseguras de que siempre el RUT sea validado.
Saludos Cordiales,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola
Por si todavia necesitas el TN, aqui te lo dejo
-- VALIDA RUT EN SN
IF @object_type = '2' AND @transaction_type IN ('A','U')
BEGIN
DECLARE @Rut_SN VARCHAR(12)
SET @Rut_SN = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
DECLARE @Rut_Par Char(12)
DECLARE @msgType SmallInt
,@retorno SmallInt
,@msg Char(12)
,@msgTitle Char(12)
,@RutDV Char(12)
,@Rut VarChar(12)
,@DV Char(1)
,@vRut Char(12)
,@ValidaRut SmallInt
,@i SmallInt
,@suma SmallInt
,@j SmallInt
,@Modulo SmallInt
,@Resta SmallInt
,@Valid Char(1)
Set @Rut_Par = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
Set @RutDV = LTrim(RTrim(@Rut_Par))
Set @DV = Right(@RutDV,1)
Set @Rut = Left(@RutDV,len(@RutDV)-2)
Set @Rut = Replace(@Rut,'.', '')
If @Rut <> ' '
Begin
Set @vRut = @Rut
End
Else
Begin
Set @vRut = '0'
Set @DV = ' '
End
Set @i = Len(@vRut)
Set @suma = 0
Set @j = 2
While @i <> 0
Begin
If @j > 7
Begin
Set @j = 2
End
Set @suma = @suma + ((SubString(@vRut, @i, 1)) * @j)
Set @j = @j + 1
Set @i = @i - 1
End
Set @Modulo = @suma - Round(@suma / 11, 0) * 11
Set @Resta = 11 - @Modulo
If @Resta = 10
Set @Valid = 'K'
Else
If @Resta = 11
Set @Valid = '0'
Else
Set @Valid = LTrim(RTrim(Str(@Resta)))
Set @Rut = RTrim(Left(@RutDV,len(@RutDV)-2)) + '-' + Rtrim(LTrim(@Valid))
IF @RUT != @Rut_SN
BEGIN
SELECT @error = -1000,@error_message = 'Rut incorrecto, favor introducir un rut valido para continuar'
END
END
Con ese codigo, para crear un SN o modificar uno existente deberan introducir un RUT valido
Atte.
Felipe Loyola
Hola Jesus, ese TN solo valida que el RUT que se este insertando en el SN sea uno valido, para validar que el RUT no este repetido, hay que agregar otra validacion a ese codigo.
Primero hay que recordar que una misma empresa o persona natural, puede ser proveedor y cliente al mismo tiempo, por lo tanto ambos tendran el mismo RUT.
IF @object_type = '2' AND @transaction_type IN ('A','U')
BEGIN
DECLARE @Rut_SN VARCHAR(12)
SET @Rut_SN = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
DECLARE @Rut_Par Char(12)
DECLARE @msgType SmallInt
,@retorno SmallInt
,@msg Char(12)
,@msgTitle Char(12)
,@RutDV Char(12)
,@Rut VarChar(12)
,@DV Char(1)
,@vRut Char(12)
,@ValidaRut SmallInt
,@i SmallInt
,@suma SmallInt
,@j SmallInt
,@Modulo SmallInt
,@Resta SmallInt
,@Valid Char(1)
Set @Rut_Par = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
Set @RutDV = LTrim(RTrim(@Rut_Par))
Set @DV = Right(@RutDV,1)
Set @Rut = Left(@RutDV,len(@RutDV)-2)
Set @Rut = Replace(@Rut,'.', '')
If @Rut != ' '
Begin
Set @vRut = @Rut
End
Else
Begin
Set @vRut = '0'
Set @DV = ' '
End
Set @i = Len(@vRut)
Set @suma = 0
Set @j = 2
While @i != 0
Begin
If @j > 7
Begin
Set @j = 2
End
Set @suma = @suma + ((SubString(@vRut, @i, 1)) * @j)
Set @j = @j + 1
Set @i = @i - 1
End
Set @Modulo = @suma - Round(@suma / 11, 0) * 11
Set @Resta = 11 - @Modulo
If @Resta = 10
Set @Valid = 'K'
Else
If @Resta = 11
Set @Valid = '0'
Else
Set @Valid = LTrim(RTrim(Str(@Resta)))
Set @Rut = RTrim(Left(@RutDV,len(@RutDV)-2)) + '-' + Rtrim(LTrim(@Valid))
IF @RUT != @Rut_SN
BEGIN
SELECT @error = -1000,@error_message = 'Rut incorrecto, favor introducir un rut valido para continuar'
END
ELSE
DECLARE @RUT_CLIENTE NVARCHAR(12)
SET @RUT_CLIENTE = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_CLIENTE) FROM OCRD WHERE LicTradNum = @RUT_CLIENTE AND CardType = 'C' HAVING COUNT(@RUT_CLIENTE) > 1)
BEGIN
SELECT @error = -2000,@error_message = 'Rut de cliente duplicado'
END
ELSE
DECLARE @RUT_PROV NVARCHAR(12)
SET @RUT_PROV = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_PROV) FROM OCRD WHERE LicTradNum = @RUT_PROV AND CardType = 'S' HAVING COUNT(@RUT_PROV) > 1)
BEGIN
SELECT @error = -3000,@error_message = 'Rut de Proveedor duplicado'
END
END
Ahora podras controlar que los RUT no sean duplicados.
Atte.
Felipe Loyola
Tienes Razon Viviana
IF @object_type = '2' AND @transaction_type IN ('A','U')
BEGIN
DECLARE @Rut_SN VARCHAR(12)
SET @Rut_SN = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
DECLARE @Rut_Par Char(12)
DECLARE @msgType SmallInt
,@retorno SmallInt
,@msg Char(12)
,@msgTitle Char(12)
,@RutDV Char(12)
,@Rut VarChar(12)
,@DV Char(1)
,@vRut Char(12)
,@ValidaRut SmallInt
,@i SmallInt
,@suma SmallInt
,@j SmallInt
,@Modulo SmallInt
,@Resta SmallInt
,@Valid Char(1)
Set @Rut_Par = (SELECT LicTradNum FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
Set @RutDV = LTrim(RTrim(@Rut_Par))
Set @DV = Right(@RutDV,1)
Set @Rut = Left(@RutDV,len(@RutDV)-2)
Set @Rut = Replace(@Rut,'.', '')
If @Rut != ' '
Begin
Set @vRut = @Rut
End
Else
Begin
Set @vRut = '0'
Set @DV = ' '
End
Set @i = Len(@vRut)
Set @suma = 0
Set @j = 2
While @i != 0
Begin
If @j > 7
Begin
Set @j = 2
End
Set @suma = @suma + ((SubString(@vRut, @i, 1)) * @j)
Set @j = @j + 1
Set @i = @i - 1
End
Set @Modulo = @suma - Round(@suma / 11, 0) * 11
Set @Resta = 11 - @Modulo
If @Resta = 10
Set @Valid = 'K'
Else
If @Resta = 11
Set @Valid = '0'
Else
Set @Valid = LTrim(RTrim(Str(@Resta)))
Set @Rut = RTrim(Left(@RutDV,len(@RutDV)-2)) + '-' + Rtrim(LTrim(@Valid))
IF @RUT != @Rut_SN
BEGIN
SELECT @error = -1000,@error_message = 'Rut incorrecto, favor introducir un rut valido para continuar'
END
ELSE
DECLARE @RUT_CLIENTE NVARCHAR(12)
SET @RUT_CLIENTE = (SELECT REPLACE(LicTradNum,'.','') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_CLIENTE) FROM OCRD WHERE REPLACE(LicTradNum,'.','') = @RUT_CLIENTE AND CardType = 'C' HAVING COUNT(@RUT_CLIENTE) > 1)
BEGIN
SELECT @error = -2000,@error_message = 'Rut de cliente duplicado'
END
ELSE
DECLARE @RUT_PROV NVARCHAR(12)
SET @RUT_PROV = (SELECT REPLACE(LicTradNum,'.','') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_PROV) FROM OCRD WHERE REPLACE(LicTradNum,'.','') = @RUT_PROV AND CardType = 'S' HAVING COUNT(@RUT_PROV) > 1)
BEGIN
SELECT @error = -3000,@error_message = 'Rut de Proveedor duplicado'
END
END
Aqui esta el nuevo codigo, deberia funcionar
Slds
En ese caso requieres de un codigo mas personalizado, aunque mi ubicacion tambien es Chile, y creo que a todos los chilenos tendrian el mismo problema con los honorarios.
Para ese caso, hay que usar los grupos de proveedores.
En el Codigo de Proveedores excluyes de la validacion a los honorarios
DECLARE @RUT_PROV NVARCHAR(12)
SET @RUT_PROV = (SELECT REPLACE(LicTradNum,'.','') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_PROV) FROM OCRD WHERE REPLACE(LicTradNum,'.','') = @RUT_PROV AND CardType = 'S' AND GroupCode != /*Aqui va el Nº del grupo de los honorarios*/ HAVING COUNT(@RUT_PROV) > 1)
BEGIN
SELECT @error = -3000,@error_message = 'Rut de Proveedor duplicado'
END
END
Y ahora debajo debes agregar otra validacion exclusiva para los honorarios
DECLARE @RUT_HON NVARCHAR(12)
SET @RUT_HON = (SELECT REPLACE(LicTradNum,'.','') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del)
IF EXISTS (SELECT COUNT(@RUT_HON) FROM OCRD WHERE REPLACE(LicTradNum,'.','') = @RUT_HON AND CardType = 'S' AND GroupCode = /*Aqui va el Nº del grupo de los honorarios*/ HAVING COUNT(@RUT_HON) > 1)
BEGIN
SELECT @error = -5000,@error_message = 'Rut de honorarios duplicado'
END
END
Atte.
Felipe Loyola
Edited by: Floyola on Jun 17, 2011 12:39 PM
Buenas tardes
con la siguiente query puedes validar el rut en el socio de negocios
Declare @Rut_Par Char(12)
DECLARE @msgType SmallInt
,@retorno SmallInt
,@msg Char(12)
,@msgTitle Char(12)
,@RutDV Char(12)
,@Rut VarChar(12)
,@DV Char(1)
,@vRut Char(12)
,@ValidaRut SmallInt
,@i SmallInt, @suma SmallInt, @j SmallInt, @Modulo SmallInt
,@Resta SmallInt, @Valid Char(1)
Set @Rut_Par = $[$41.1.0]
Set @RutDV = LTrim(RTrim(@Rut_Par))
Set @DV = Right(@RutDV,1)
Set @Rut = Left(@RutDV,len(@RutDV)-2)
Set @Rut = Replace(@Rut,'.', '')
If @Rut <> ' '
Begin
Set @vRut = @Rut
End
Else
Begin
Set @vRut = '0'
Set @DV = ' '
End
Set @i = Len(@vRut)
Set @suma = 0
Set @j = 2
While @i <> 0
Begin
If @j > 7 Begin Set @j = 2 End
Set @suma = @suma + ((SubString(@vRut, @i, 1)) * @j)
Set @j = @j + 1
Set @i = @i - 1
End
Set @Modulo = @suma - Round(@suma / 11, 0) * 11
Set @Resta = 11 - @Modulo
If @Resta = 10 Set @Valid = 'K'
Else
If @Resta = 11 Set @Valid = '0'
Else Set @Valid = LTrim(RTrim(Str(@Resta)))
Set @Rut = RTrim(Left(@RutDV,len(@RutDV)-2)) + '-' + Rtrim(LTrim(@Valid))
Select @Rut
Lo dejas como buisqueda formateada
Saludos
FLR
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
La consulta formateada lo que hace es corregir el RUT que tu usaste, lo que corrige es el DV, aunque tu pongas un rut erroneo, la consulta corregira el DV del rut que usaste, ya que no hay manera de decirle a la consulta cual es el RUT correcto que tiene que estar.
Le puedes dar la condicion que se actualize cuando se llene algun campo, para que no la tengan que activar a mano,
Saludos.
FLR
User | Count |
---|---|
91 | |
7 | |
7 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.