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.