Matrix enlazado a UDO (SAP BUSINESS ONE STUDIO)


#1

Hola a todos, estoy desarrollando un formulario para controlar la Recepción de Mercaderías a partir de un Pedido de Compras. (Formulario diseñado en SAP Studio). Es la primera vez que necesito registrar datos manualmente tanto en la cabecera como lineas de detalle por lo que quiero utilizar una Matrix. (Hasta el momento solo había utilizado Grid ya que solo necesitaba visualizar datos en proyectos anteriores)

Primeramente registre un UDO de tipo documento (con una tabla de cabecera @CMRECEPC y su respectivo detalle @CMRECEPD).

Luego pase a diseñar mi formulario y realizando el vinculo de cada campo a cada elemento de mi UDO

Por ejemplo un campo de la cabecera vinculé a su correspondiente campo de mi DB DataSource (para el caso de la cabecera a mi DataSource @CMRECEPC).

Y las columnas de mi Matrix a su correspondiente campo de mi DB DataSource (para el caso del detalle a mi DataSource @CMRECEPD).

En el formulario le agregue 2 botones con los uniqueID 1 y 2 respectivamente (para que tome automáticamente la funcionalidad de Crear/Busca y Cancelar).

Mi Primer Inconveniente es que al ejecutar mi formulario ya desde El Menú de SAP no me deja cargar datos manualmente a la matirx (por mas que en las propiedades de la misma esté en Editable= True).

Que me faltaría agregar para que me habilite la carga datos a la matriz?

Para realizar una prueba hice la inserción de un registro a las tablas del UDO (en la cabecera y detalle) a través de código desde la DI API y son los siguientes:

Pero al consultar desde mi formulario solo la cabecera me estira los datos, la matrix vuelve a quedar estática (vacía) como se ve más abajo.

Desde ya les agradezco y aguardo comentarios que me puedan a ayudar a solucionar mi problema.

Saludos cordiales.-

Arturo Marecos.


#2

Buenos días @GabrielGS estuve leyendo muchos comentarios y respuestas tuyas en varios foros, será que podrías darme una mano con esto.
Desde ya te agradezco.
Atte.-

Artu.


#3

Hola @Artu_Marecos .

Si quieres hacer un UDO tienes 2 opciones:

  1. Si lo quieres crear con cabecera y detalles y con las funcionales de SAP por defecto (Sin agregarle nuevos elementos y funcionalidades adicionales). Lo que debes hacer es registrarlo con las relaciones cabecera-detalle correspondientes y en la opcion del registro “Parametrizaciones de UI”, seleccionar “Formulario por Defecto” y “Estilo de linea de Cabecera”, luego puedes crear alli mismo una opcion de Menu o dejarlo por defecto en el menu Herramientas -> Formularios por Defecto. De esta forma se crea un Form tipo UDO con todas las funcionalidades habilitadas (CRUD y Automanaged). Con esto no necesitas crear un AddOn ya que el formulario UDO pasa ser parte del sistema.

imagen

  1. Si quieres hacer desde cero un Form basado en un UDO (Con Cabecera y Detalles), es necesario programar varias cosas con el SDK, es decir, hay que crear un AddOn (SAP B1 Studio Suite para VS) y aplicar codigo UIAPI en dicho form para que la matrix y otros elementos pueda funcionar correctamente. Usualmente solo aplicaria esto cuando es necesario agregar requerimientos mas alla de la funcionalidad por defecto.

Cualquier consulta, me lo haces saber.

Saludos.


#4

Muchas gracias por tu respuesta @GabrielGS, y eso es justamente mi inconveniente.
Ya que si utilizo el formulario por defecto al registrar mi UDO tengo las funcionalidades básicas como mencionas, pero a parte de lo que comente en mi post a este formulario posteriormente debo agregar funcionalidades extras, como por ejemplo al Seleccionar en la cabecera el Pedido de Compra mediante un Choosefromlist que llene automáticamente mi Matrix con los datos del Pedido de Compra (Articulo, descripcion, cantidad, todos estos campo con la propiedad editable false) y solo dejar para editar el campo cantidad confirmada. No se si se entiende mi idea?
Hice mi consulta porque quería empezar primeramente cargando todos estos datos de forma manual en mi matrix (ya que hacer funcionar esto me ayudara si o si en otros proyectos que debo desarrollar a futuro) y poder guardar, editar, y buscarlo como si fuese un formulario por defecto de SAP.

Atte.-
Artu


#5

Entiendo tu punto, entonces te toca usar el SAP B1 Studio Suite para VS y aplicar codigo, mira las siguientes publicaciones de los foros oficiales para que tengas una idea de como se hace:

h_tps://archive.sap.com/discussions/thread/1006667

h_tps://archive.sap.com/discussions/thread/3749101

h_tps://archive.sap.com/discussions/thread/1092686

Si tienes alguna duda, me preguntas.

Saludos.


#6

Buenas tardes @GabrielGS ya pude conseguir que mi matrix también ya me traiga los datos desde la base de datos con el botón de buscar, ya me trae correctamente los datos que necesito en la cabecera y en el detalle desde mi UDO.
Ahora el inconveniente que tengo es una vez que obtengo los datos en la matrix y realizo un update (cuando modifico un dato dentro de la misma el botón cambia automáticamente su caption a Actualizar) y presiono dicho botón, inclusive en el StatusBar me dice “Operación Finalizada con éxito”, pero no me actualiza el dato. Al volver a buscar, me vuelve a traer el dato como había sido cargado originalmente.
Para crear/actualizar es que estoy teniendo este inconveniente, cuando quiero buscar el botón me funciona correctamente.
Cual podría ser la razón o que podría verificar?

Atte.-
Arturo M.


#7

Si tienes bien asociadas las columnas de la matrix a los DBDataSource y el Form bien configurado en su modo AutoManaged con todos sus campos bien relacionados no deberias tener problemas.

¿Como estas cargando los datos a la matrix?
¿Te los carga de forma automatica tambien cuando usas los botones de navegacion (Proximo,Anterior,Primero,Ultimo)?


#8

Buenos días @GabrielGS, este inconveniente ya lo pude solucionar. Me falto agregar una propiedad del formulario, específicamente la propiedad ObjectType donde debe ir el Id único con el que registre mi UDO (yo estaba haciendo referencia primeramente a mi tabla de cabecera, ese era mi error) Ya me funciona el formulario con todas las funcionalidades básicas de Crear/Actualizar/Cancelar/buscar/Próximo/Anterior/Primero/Ultimo Como un formulario nativo de SAP.
Este era mi primer objetivo y ya lo pude realizar.
Ahora quiero agregar una funcionalidad más que es asignar un valor por debajo a las columnas de mi Matrix pero me da un error que es el siguiente : “General Failure”.
Mi segmento de código es el siguiente:

_oMatrix = _Form.Items.Item("matDet").Specific
If _oMatrix.RowCount = 0 Then
            _oMatrix.AddRow()
            _oMatrix.AutoResizeColumns()
            _oMatrix.Columns.Item("Col0").Cells.Item(1).Specific.Value = "T12"
            _oMatrix.Columns.Item("Col1").Cells.Item(1).Specific.Value = "Vidrio Templado de 12mm"
            _oMatrix.Columns.Item("Col2").Cells.Item(1).Specific.Value = "5"
            _oMatrix.Columns.Item("Col3").Cells.Item(1).Specific.Value = "5"

 End If

En la primera asignación que quiero realizar a mi columna que tiene como UniqueID=Col0 ya me salta este error.
Cual podría ser la razón?

Saludos.


#9

Perfecto, entonces, por favor abre otro Post con la pregunta “Como agregar una nueva linea (Row) a una Matrix asociada a un UDO”. Para poder mantener el orden dentro del Foro.

Alli con gusto te dire como hacerlo.

Tambien, si alguna respuesta te fue util, marcala como tal.

Saludos.


#10

Perfecto, muchas gracias…!


#11

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