jueves, 30 de noviembre de 2023

Offset de registro no válido - Invalid registration offset

 ¿Como están?, está ocasión les quiero compartir un error al usar el DI API, ya sabemos que muchas veces no nos dicen nada, se vuelve un problema más cuando todo en apariencia coincide: totales, claves, estructura de la información, inventario, todo, todo parece estar bien.

Para asegurar que todo estaba bien cree la entrega directamente en SAP y efectivamente fue creada con éxito sin mayor problema, ¿entonces por que me marca el error de Offset de registro no válido al querer crear el documento por DI API? y vualá!, resulta ser que las líneas de los artículos no coincidían entre lo que nos enviaba el sistema externo y el que estaba en SAP B1.

Verifiquen entonces este tipo de dato que no vemos a simple vista en SAP pero que con ayuda de una consulta podemos salir de dudas.

Espero les ayude en este caso en particular o en algún otro donde un dato no está bien aunque lo parezca.

martes, 28 de noviembre de 2023

ANCM In-Process Handler Load Failure - HTTP Error 500

¿Que tal?, después de un rato sin publicar les traigo este error que generalmente nos encontramos cuando queremos publicar una API en el IIS, aunque parece estar todo en orden surge el error al navegar en el browser de la publicación: ANCM In-Process Handler Load Failure

Para saber si lo que te hace falta es descargar e instalar dotnet ubicate en la ruta de tu dll por ejemplo: "C:\inetpub\wwwroot\MiAPI" y ejecuta el siguiente comando desde consola: dotnet tuaplicación.dll, si no se ejecuta entonces debes instalar la versión de dot net que corresponde a tu aplicación en tu equipo/servidor.

Con eso podrás correr la aplicación en el IIS, espero les sirva, saludos!.

miércoles, 5 de julio de 2023

log4net no genera o escribe el log

Últimamente he utilizado esta herramienta para pintar los logs en mis desarrollos, en su uso me he topado que después de tener toda la programación y archivos necesarios configurados sigo sin poder ver mis logs, esto se debe a que debemos hacer algo más con la ayuda de la ventana de propiedades de Visual Studio, esto es aplicar el Copy to Output Direct en True o en 1 que es lo mismo, tal como se ve en la imagen abajo, espero esto les ayude a saber porque a pesar de tener todo montado correctamente aún no lograban escribir sus logs.



¡¡Saludos!!

domingo, 26 de marzo de 2023

Inventarios - Lotes en Transferencias de Stock, Facturas. Etc. (Histórico)

Hola Amigos, les traigo una consulta que les puede ser muy util cuando requieren obtener los lotes afectados en uno o varios documentos, estos pueden ser una salida, una entrega, una factura, una devolución, una nota de crédito, etc.

Para eso les haré un ejemplo con las transferencias de stock:

SELECT T5.DocEntry, T5.DocNum, t5.DocDate, T5.UserSign, T5.Filler, T5.ToWhsCode,  T5.Comments  
                , T6.FromWhsCod, T6.LineNum, t6.LineStatus, t6.unitMsr, t6.Quantity, T1.ItemCode 
                , T6.WhsCode, T2.DistNumber, T0.Quantity as QDistNumber 
                FROM OWTR T5  
                inner join WTR1 T6 on T5.DocEntry = T6.DocEntry  
INNER JOIN OITL T1 ON T5.DocEntry = T1.ApplyEntry  
INNER JOIN ITL1 T0 ON T0.LogEntry = T1.LogEntry                
                INNER JOIN OBTN T2 ON T0.ItemCode = T2.ItemCode AND T0.SysNumber = T2.SysNumber                 
                where T5.DocDate > '20230126' and T5.CANCELED = 'N' And T1.ApplyType = 67 and T0.Quantity > 0 

Espero les ayude para sus informes, ¡saludos!.

This SqlTransaction has completed; it is no longer usable

¿Qué tal?, les cuento que al realizar transacciones con SqlCommand, me surgía el siguiente error: This SqlTransaction has completed; it is no longer usable, mi tarea hacia inserción en tres tablas, una cabecera y dos de detalle, pero en la segunda inserción aparecía el error.

Si bien, la transacción se realizaba, pues note que los inserts si se realizaban en las tres tablas, la rutina marcaba una excepción y eso no me gustaba, por lo que decidí investigar y hacer pruebas para encontrar que lo provocaba, la respuesta fue que después de hacer un commit o un rollback en la transacción, debe inicializarse una nueva transacción de lo contrario estaremos "reutilizando" una que ya había llegado a su fin, para hacerlo solo debí como les dije inicializar de esta manera mi nueva transacción:

 SqlTransaction transaction = sqlConn.BeginTransaction();}

¡Saludos! 

lunes, 13 de marzo de 2023

Incorrect sintaxis near the keyword for

Hola!; ¿Qué tal?, 

Les traigo ahora un error "incorrect sintaxis near the keyword for" el cual se me presento al utilizar el SAPbobsCOM.Recordset, lo problemático de esto sucede por que en apariencia la consulta estaba bien y me corría perfectamente en SQL Server,  investigando supe que este objeto no reconoce la sintaxis tal cual la hacemos para el motor de la BD, en mi caso fue el punto y coma que estaba de màs, ejemplo: oRecordSet.DoQuery("SELECT * from OCRD;");

En conclusión veremos este error cuando algo en nuestra consulta no lo este interpretando de manera correcta el DoQuery, así que cuidado con eso.

¡Saludos!

domingo, 12 de marzo de 2023

Method not found: 'Void SAPConector.DTO.DTOIncomingPayments.set_ObjectType(SAPbobsCOM.BoObjectTypes)'

¿Cómo están?, les traigo el error siguiente que me dio por un rato dolor de cabeza: Method not found: 'Void SAPConector.DTO.DTOIncomingPayments.set_ObjectType(SAPbobsCOM.BoObjectTypes)'.

Este apareció una vez que mi aplicación la pase desde mi ambiente de desarrollo a mi ambiente de pruebas, este error se mostraba en tiempo de ejecución, a la mitad del proceso lo enviaba y no terminaba la tarea.

La solución después de investigar y ver varios portales que no me dieron la respuesta especifica pero si el camino a seguir para resolverlo fue esta:

ANTES Entremos en contexto:

Mi proyecto hace referencia a una dll que ocupa la misma dll que también ocupo en mi proyecto principal en mi caso la de SAP B1 SAPbobsCOM.

1er Error: Los tipos de datos de mi librería cambiaban a Object al hacer referencia a ella desde mi proyecto principal, tipos de datos que comentamos al inicio pertenecen a la dll SAPbobsCOM, de hecho el error muestra un ejemplo: SAPbobsCOM.BoObjectTypes.

  esto hacía que cuando llamaba la librería (dll) a mi proyecto principal los tipos de algunos atributos no se mantuvieran en su forma original si no que se convirtieran en tipos object por lo que mi proyecto principal no los reconocía y me marcaba error de compilación.

Solución al 1er error: Coloque en False Embed Interop Types en las propiedades de la referencia de mi proyecto de librería.


2do. Error: Los tipos ya son reconocidos en mi proyecto principal después de colocar en false la opción  ya no marca error en compilación pero al momento de ejecutar la solución principal en el servidor de pruebas marca un error en tiempo de ejecución: Method not found: 'Void SAPConector.DTO.DTOIncomingPayments.set_ObjectType(SAPbobsCOM.BoObjectTypes)'.

Solución al 2do error: De igual manera en que coloque Embed en Interop Types de mi librería, también debí colocarlo en false en mi proyecto principal:

3er. Error: al hacer esto me marcaba el siguiente error al ejecutar mi programa: Retrieving the COM class factory for component with CLSID {632F4591-AA62-4219-8FB6-22BCF5F60100} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) .

Solución al 3er. Error: Debi quitar el check en Prefer 32-bit y tomar la opción de x64 en Platform target, esto por que inicialmente estaba chequeado y el target estaba en Any, cabe mencionar que el servidor donde ejecutaba mi solución era de 64 bits.


Por aquí les dejo el link para documentarse más sobre el tema de Type equivalence and embedded interop types en la página oficial de Microsoft.

Con esto mi solución trabajo sin contratiempos 😀. Saludos!.




jueves, 9 de marzo de 2023

Retrieving the COM class factory for component with CLSID {XXXX} Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

El siguiente error se me presento al pasar del ambiente de desarrollo (donde todo funcionaba correctamente) al ambiente de pruebas: Retrieving the COM class factory for component with CLSID {632F4591-AA62-4219-8FB6-22BCF5F60100} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Después de tanto buscar el error lo solucione quitando el siguiente check del proyecto en Visual Studio, ya que esto hacia que le diera preferencia a 32bits al compilar y donde llevaba mi desarrollo era a un ambiente de 64bits.


Consideren que si su proyecto hace referencia a otros proyectos, posiblemente también tengan que quitar este check en los demás proyectos. Espero les ayude.

Saludos.

martes, 14 de febrero de 2023

La suma de los valores registrados en el campo ImpPagado de los apartados DoctoRelacionado no es menor o igual que el valor del campo Monto

 Hola, ¿Cómo han estado?, hoy les traigo la solución al error "La suma de los valores registrados en el campo ImpPagado de los apartados DoctoRelacionado no es menor o igual que el valor del campo Monto"la cual se produce generalmente por el calculo distinto que hace nuestro sistema respecto al calculo que hace el SAT en el monto del pago.

En el caso especifico de SAP B1, hace el calculo del monto total del pago usando 10 decimales, lo que el SAT hace con menos, provocando que los cálculos en ocasiones no cuadre y envíe el error, siendo un dolor constante de cabeza para los desarrolladores como para el cliente.

La buena noticia es que este enero del 2023 se libero la nueva disposición para el llenado del atributo EquivalenciaDR del complemento de pago para que permita hasta 10 decimales, este atributo es con el que se hace el calculo del monto total que tendría que cuadrar con el monto total de SAP B1, aquí les dejo el enlace directamente a la documentación del SAT: Documentación complemento de pago


Entonces teniendo 10 decimales permitidos las cantidades ahora cuadran, así que ya puedes hacer el cambio en tu desarrollo, hazlo y quita por fin este error en el timbrado.

😊Saludos.