cancel
Showing results for 
Search instead for 
Did you mean: 

Formato antiguo o tipo de biblioteca no válida HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT)

Former Member
0 Kudos

Hola,

Tenemos este escenario.

SAP B1 9.0 PL08

Estamos actualizando artículos en la gestión de stock por almacén. En este caso los campos stock minimos, stock máximo.

El sistema va procesando y llega a un punto en el que salta esta excepción.

Formato antiguo o tipo de biblioteca no válida. (Excepción de HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT))

Cuando da un error al actualizar el artículo, continuamos con el siguiente pero sigue saliendo el mismo error hasta que el proceso finaliza.

Alguna idea?

Un saludo

Accepted Solutions (0)

Answers (1)

Answers (1)

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola Inaki

comprueba este hilo.

Otra posibilidad que se me ocurre es que tengas campos de usuario creados y al migrarlos SAP no lo haya pasado al tipo correcto; el tipo anterior ya no está soportado por MS SQL.

Un saludo

Agustín Marcos Cividanes

Former Member
0 Kudos

Hola,

El proceso es usando el DI. Falla cuando lleva alrededor de 1 hora. SI filtro por el artículo donde falla y solo proceso ese tampoco falla.

Este es el código.

oItem = AccCommon.Main.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oItems)

If oItem.GetByKey(row.Item("itemcode")) Then

oItemWarehouseInfo = oItem.WhsInfo

     For i As Integer = 0 To oItemWarehouseInfo.Count - 1

     oItemWarehouseInfo.SetCurrentLine(i)

     oItemWarehouseInfo.MinimalOrder = dStockNecesario

     oItemWarehouseInfo.MinimalStock = dStockMinimo

     oItemWarehouseInfo.MaximalStock = dStockMaximo

     oItemWarehouseInfo.UserFields.Fields.Item("U_CodeBase").Value = String.Empty

     next

If oItem.Update() <> 0 Then

     sError = AccCommon.Main.Company.GetLastErrorDescription()

End If

Gracias!

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola

¿Puede ser que el equipo donde ejecutas el proceso se quede sin memoria?

Un saludo.

Agustín Marcos Cividanes

Former Member
0 Kudos

Hola,

El proceso lo he pasado a una tarea programada.

En si procesa alrededor de 1100 -1200 artículos y se para el proceso(deberia hacer 40000 artículos). Tengo un log donde voy registrando los errores y los tiempos, pero el proceso no finaliza correctamente porque no me guarda un mensaje de finalización, ni mensaje de error. Simplemente se para.

Puede ser que se quede sin memoria, pero como puedo comprobar eso? (teniendo en cuenta que es un servidor)

Gracias!

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola Iñaki

tuve varios casos parecidos y el problema radica en que no se libera la memoria utilizada por los objetos.

Te recomiendo que liberes la memoria de los objetos a medida que no los utilices y hagas una llamada al recolector de basura.

Échale un vistazo a este enlace: Memory Management and Garbage Collection in the .NET Framework

Un saludo

Agustín Marcos Cividanes

Former Member
0 Kudos

Hola Agustin,

Me podrías ayudar e indicar en el trozo de código como puedo liberar esa memoria que dices?

Que funciones debería usar?

Gracias!

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola Iñaki

más o menos es así:

Dim oRec As SAPbobsCOM.Recordset

oRec = moSBOCompany.GetBusinessObject  SAPbobsCOM.BoObjectTypes.BoRecordset)

Tus operaciones

     

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

       

oRec = Nothing

GC.Collect()

Cuando dejes de utilizar un objeto, hay que liberar la memoria. En teoría el .NET la libera, pero a veces ocurre lo que te está pasando a tí

Un saludo.

Agustín Marcos Cividanes

Former Member
0 Kudos

Hola,

Hemos detectado en el servidor una excepción de la libreria MSVCR100.dll.

He añadido GC.Collect como indicas, y si se nota el tema de la memoria. El problema es que he probado en varios sistemas con la misma BD y solo falla en el cliente.

Seguramente reinstalaremos el framework 4.0 que es con el que corre la aplicación.

Gracias!

Saludos

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola Iñaki

el ordenador donde sale la excepción ¿es de 64 bits?

¿Has probado en uno de 32?

Tienes que compilar el proyecto para todas las plataformas.

Un saludo

Agustín Marcos Cividanes

Former Member
0 Kudos

Hola Agustín,

El sistema es de 64 bits. La aplicación está desarrollada en 32 y hemos probado en ambos sistemas.

Al final ya está solucionado.

Se puso la liberación de memoria tal como indicaste y después al dar error de la libreria MSVCR100.dll reinstalamos el distribuible de visual. Con esto el proceso a acabado sin problemas, procesando mas de 39000 registros.

El problema ahora es el tema de rendimiento, que ha tardado el proceso 10 horas. Hay alguna manera de mejorar los tiempos usando la DI API?

Gracias!

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola Iñaki

mejorarlo seguro que se puede, pero primero hay que saber qué tiene que hacer.

Envíame un privado, si te parece, con la descripción y vemos que podemos hacer.

Por otro lado, quedaría revisar la configuración del MS SQL y el servidor.

Sin estos datos no puedo ayudarte.

Un saludo

Agustín Marcos Cividanes