none
Convertir registros de un campo con 4 digitos a 3 dígitos RRS feed

  • Debate general

  • Hola a todos:

    Precisaría saber como tengo que proceder para convertir registros que tengo en una columna Cód_GC que a priori no existen y entonces lo tendría que asimilar o añadir al nivel de 3 dígitos que puede o no existir.

    El procedimiento que tengo para comprobar los inexistentes comparados con otra tabla es el que pongo a continuación y realmente una vez que la sql detecta los inexistentes poder pasar dicho código y su saldo al grupo de rango inferior añadiendo o sumando sus valores, porque pueden haber 2 registros como por ejemplo 5702 y 5703 que no existen en el plan contable normal, bueno, entonces el saldo que presenta casa uno lo tendría que añadir al grupo 570 cuyo valor sería la suma de los dos. Entonces al existir el grupo 579 y haberlo rellenado con el valor de la suma de los 5702 y 5703, esos dos grupos los tengo que borrar ya que sus valores están en el grupo 570.

    Esos códigos faltantes, ya me los indica la sql adjunta, pero ahora no se como trasladar sus valores al grupo inferior, ya que no quiero que los detecte como faltantes si su grupo inferior (3 dígitos) existe. La instrucción para detectar los no existentes es la siguiente:

      Private Shared Sub ProcesoRegistrosInexistentes()
    
            Try
                ' Declaramos una variable Connection
                Using cnn As DbConnection = da.CreateConnection()
    
                    ' Creamos el Commando
                    Dim cmd As DbCommand = cnn.CreateCommand
    
                    cmd.CommandText = "SELECT i.Cód_GC FROM Balances b Right Join ImportacionDatos i ON b.Cód_GC = i.Cód_GC WHERE  b.[Cód_GC] Is NULL "
    
                    'Añadimos el parámetro
                    cmd.Parameters.Add(Configuracion.CreateParameter(cmd, "@empresa", VarGlobal.StrCodEmpresa))
    
                    ' Asignamos la conexión al comando
                    cmd.Connection = cnn
                    cnn.Open()
    
                    Dim IDFaltantes As String = String.Empty
                    Using dr As DbDataReader = cmd.ExecuteReader()
                        While dr.Read()
                           IDFaltantes += String.Concat(dr.GetString(0).ToString(), " ,")
                        End While
                    End Using
    
                    '/////cmd.CommandText = "Update ImportacionDatos Set Cód_GC = CASE WHEN SaldoUnificado <0 THEN -SaldoUnificado ELSE SaldoUnificado END WHERE SUBSTRING(Cód_GC, 3, 1) = 1"
    
    
                    MessageBox.Show(String.Format("Faltantes: {0}", IDFaltantes.TrimEnd(","c)))
    
    
                End Using
    
                MsgBox("Registros inexistentes en la tabla Balances")
    
            Catch ex As Exception
                MessageBox.Show("Error proceso de comprobacion registros inexistentes en tabla 'Importacion Datos'" & vbCrLf & ex.Message & vbCrLf &
                       "Acepte para continuar.", "FINANCIAL SYSTEM", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Sub
     

    Muchas gracias a todos.

    Gemma


    martes, 23 de mayo de 2017 5:57

Todas las respuestas

  • Hola:

    Si puede servir como aporte, tengo esta instrucción pero no me acaba de funcionar. No da errores, y lo que hace es poner 0, en los grupos de 3 dígitos a los que se refieren los de 4 dígitos que no existen, pero si tiene su grupo a 3 que es lo que necesito.

    Bueno la instrucción es la siguiente,

      cmd.CommandText = "UPDATE ImportacionDatos SET SaldoUnificado = 0" &
                                                      " WHERE " &
                                                      " Cód_GC IN " &
                                                      "(SELECT Substring(Cód_GC,1,3) FROM ImportacionDatos " &
                                                      " WHERE " &
                                                      " Len(Cód_GC)=4 GROUP BY Substring(Cód_GC,1,3) " &
                                                      " HAVING SUM(SaldoUnificado) <> 0)"
                    cmd.ExecuteNonQuery()

    Un saludo.

    Gemma

    martes, 23 de mayo de 2017 10:16