Error al crear UDO desde SDK

Muy buen día a tod@s

Tengo el siguiente inconveniente con la creacion de una UDO tipo Documento.

Primero quiero darles el contexto para que me puedan ayudar, estoy creando una UDO tipo documento con su tabla de cabecera (@EXX_A_ING_C) y detalle (@EXX_A_ING_D).

Acá llamo la función con los parámetros para la creación.

        If Not CreaUdo("EXX_A_ING", "Aviso de Ingreso", "EXX_A_ING_C", "EXX_A_ING_D", TipoTabla.Documento) Then Return False

Después le asigno los campos de detalle y cabecera que se desean tener en la UDO, cabe resaltar que estos campos ya estan creados en las tablas, de cabecera y detalle.

            Case "EXX_DOC_TRANS"

                camposC.Add({"U_C_CLIENTE", "Código Cliente", SAPbobsCOM.BoYesNoEnum.tYES})

                camposC.Add({"U_N_CLIENT", "Nombre Cliente", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_CONSIGNA", "Consigando a", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_TRANSPORT", "Transportador", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_T_DOC", "Tipo documento", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_T_DOC1", "Tipo documento 1", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_T_MERCA", "Tipo de mercancía", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_U_MEDI", "Unidad de medida", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_P_PROCED", "País procedencía", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_CANTID", "Cantidad", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_PESO", "Peso", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_PROVEED", "Nombre Proveedor", SAPbobsCOM.BoYesNoEnum.tYES})

                camposD.Add({"U_DESCRIP", "Descripción", SAPbobsCOM.BoYesNoEnum.tYES})

                FuncionCrearUDO(NomUDO, DesUDO, TabCab, TabDet, camposC, camposD, TableType)

Notece que tengo 2 listas una para los campos de cabecera (camposC) y otra para los del detalle (camposD). Al final llamo la funcionCrearUDO que es la que se encarga de llevar los datos de nombre, descripcion y demas para la creacion.

Private Function FuncionCrearUDO(ByVal NomUDO As String, ByVal DesUdo As String, ByVal TabCabecera As String, ByVal TabDetalle As String, ByVal CamposC As List(Of String()), ByVal CamposD As List(Of String()), ByVal TableType As Integer) As Boolean

    _BubbleEvent = True

    'Asignamos el objeto UDO

    Dim _UDO As SAPbobsCOM.IUserObjectsMD

    _UDO = _SBO.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)

    Try

        ' validamos que el UDO no exita si esta condicion es falsa es por que no existe el UDO

        If _UDO.GetByKey(NomUDO) = False Then

            'Parametros iniciales del UDO tipo Maestro

            ' este UDO no lleva tabla detalle si la llevara se colcolaria el valor de: _UDO.ChildTables.TableName = TabDetalle

            _UDO.Code = NomUDO

            _UDO.Name = DesUdo

            _UDO.TableName = TabCabecera

            _UDO.CanClose = SAPbobsCOM.BoYesNoEnum.tYES

            _UDO.CanFind = SAPbobsCOM.BoYesNoEnum.tYES

            _UDO.CanDelete = SAPbobsCOM.BoYesNoEnum.tNO

            'Utilizamos un formulario predeterminado

            _UDO.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tNO

            _UDO.ChildTables.TableName = TabDetalle

            'Columnas para buscar

            If TableType = 1 Then

                _UDO.ObjectType = SAPbobsCOM.BoUDOObjType.boud_MasterData

                _UDO.FindColumns.ColumnAlias = "Code"

                _UDO.FindColumns.ColumnDescription = "Code"

                _UDO.FindColumns.Add()

                _UDO.FormColumns.FormColumnAlias = "Code"

                _UDO.FormColumns.FormColumnDescription = "Code"

                _UDO.FormColumns.Add()

            Else

                _UDO.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document

                _UDO.FindColumns.ColumnAlias = "DocEntry"

                _UDO.FindColumns.ColumnDescription = "DocEntry"

                _UDO.FindColumns.Add()

                _UDO.FormColumns.FormColumnAlias = "DocEntry"

                _UDO.FormColumns.FormColumnDescription = "DocEntry"

                _UDO.FormColumns.Add()

                _UDO.FindColumns.ColumnAlias = "DocNum"

                _UDO.FindColumns.ColumnDescription = "DocNum"

                _UDO.FindColumns.Add()

                _UDO.FormColumns.FormColumnAlias = "DocNum"

                _UDO.FormColumns.FormColumnDescription = "DocNum"

                _UDO.FormColumns.Add()

            End If

            _UDO.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tNO

            _UDO.RebuildEnhancedForm = SAPbobsCOM.BoYesNoEnum.tYES

            For i As Integer = 0 To CamposC.Count() - 1

                If i > 0 Then

                    _UDO.FormColumns.Add()

                End If

                _UDO.FormColumns.FormColumnAlias = CamposC.Item(i)(0)

                _UDO.FormColumns.FormColumnDescription = CamposC.Item(i)(1)

                _UDO.FormColumns.Editable = CInt(CamposC.Item(i)(2))

                If TabDetalle <> "" Then

                    _UDO.FormColumns.SonNumber = 1

                End If

            Next

            If TabDetalle <> "" Then

                For i As Integer = 0 To CamposD.Count() - 1

                    If i > 0 Then

                        _UDO.EnhancedFormColumns.Add()

                    End If

                    _UDO.EnhancedFormColumns.ColumnAlias = CamposD.Item(i)(0)

                    _UDO.EnhancedFormColumns.ColumnDescription = CamposD.Item(i)(1)

                    _UDO.EnhancedFormColumns.ColumnIsUsed = CInt(CamposD.Item(i)(2))

                    _UDO.EnhancedFormColumns.Editable = CInt(CamposD.Item(i)(2))

                    _UDO.EnhancedFormColumns.ColumnNumber = i + 1

                    _UDO.EnhancedFormColumns.ChildNumber = 1

                Next

            End If

            ' ADICIONAR AL MENU

            '_UDO.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES

            '_UDO.MenuUID = "mnDtrns"

            '_UDO.MenuCaption = "Maestro Conductores"

            '_UDO.Position = 3

            '_UDO.FatherMenuID = 1536

            errores.ErrN = _UDO.Add

            If Not errores.ErrN.Equals(0) Then

                _SBO.GetLastError(errores.ErrN, errores.ErrD)

                _APP.MessageBox(errores.ErrD, 1, Btn1Caption:="OK")

                _APP.StatusBar.SetText("Error en la creacion de campos de UDO", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error)

                _BubbleEvent = False

                Return _BubbleEvent

            End If

        Else

            _APP.StatusBar.SetText("Udo existente " & NomUDO, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error)

        End If

    Catch ex As Exception

        errores.ErrD = ex.Message & " " & ex.StackTrace

        _APP.MessageBox(errores.ErrD, 1, Btn1Caption:="OK")

        _BubbleEvent = False

    Finally

        System.Runtime.InteropServices.Marshal.ReleaseComObject(_UDO)

        _UDO = Nothing

    End Try

    Return _BubbleEvent

End Function

hace el recorrido por todos los pasos de la funcion sin arrojar error, pero al llegar a la creacion del UDO me sale este error:

[UDO3.ColAlias][line: 3] , ‘Columna no válida en tabla @EXX_A_ING_D

Ya hice la prueba y es solo con los campos de la cabecera, lo que no entiendo es por que me valida la tabla de detalle con estos campos, si los he separado con las listas del inicio.

Me gustaría tener su consejo con este tema ya que no encuentro en donde estoy cometiendo el error.

Muchas gracias.

Hola @eduardo_buitr
Utiliza la técnica divide y vencerás. empieza a descartar campos, es decir prueba solo con un campo y vas agregando los demás hasta identificar cual genera el problema.

Andres Ramirez Jaramillo :colombia:

1 me gusta

Muchas gracias Andres,
Eso precisamente hice y encontré el campo con el error. de nuevo Gracias.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.