martes, 25 de octubre de 2022

DI API - Definciones de Objetos, Funciones y Atributos.

¿Cómo están?, está entrada la estaré alimentando con definiciones de los objetos (O), método (M) o atributos (A) que podemos encontrarnos con el uso del DI API y que al ser principiantes con la dll pueden desconocer para que sirve o bien necesitan implementar y desean conocer como poder hacerlo con DI API, les voy dejando la lista:

  1. (M) - GetNewObjectKey(): Devuelve la última entrada de documento agregado por DI API de tu desarrollo, por ejemplo, al agregar cualquier objeto comercial dentro de tu desarrollo, recibirás la última llave agregada desde tu conexión.
  2. (M) - GetByKey(docEntry): Si se encuentra el objeto con la clave que especificaste, el método devuelve True y las propiedades del objeto se completarán con los datos del objeto. Si no se encuentra el objeto con la clave que especificaste, el método devuelve False y las propiedades del objeto permanecen sin cambios.
  3. (M) - GetLastError(out int, out string): Función del objeto Company, devuelve el error inmediato de tu sesión en dos variables, una de tipo int y otra de tipo string, la primera para describir el código y la segunda para describir el mensaje.

jueves, 13 de octubre de 2022

Mantemiento/Reducción de logs SQL Server

El siguiente script es básico para el mantenimiento de nuestras bases de datos, la reducción de los logs nos ahorrara mucho espacio en nuestro disco:

 use NUESTRA_BD 
ALTER DATABASE NUESTRA_BD
SET RECOVERY SIMPLE;
GO
--Reducimos el log de transacciones a  1 MB.*/
DBCC SHRINKFILE(NUESTRA_BD_log, 1);
GO
-- Cambiamos nuevamente el modelo de recuperación a Completo.*/
ALTER DATABASE NUESTRA_BD
SET RECOVERY FULL;
GO

Ver tamaño de las bases de datos en SQL Server

¿Queremos evitar estar viendo los files de cada base de datos para conocer su tamaño?, les dejo una consulta en SQL Server que les dará el tamaño del archivo mdf y ldf, de cada base de datos de su instancia, ejecútenla sobre la BD Master:
 
with fs
as
(
select database_id, type, size * 8.0 / 1024 size from sys.master_files
)
select name,
(select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataSizeMB,
(select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogSizeMB,
((select sum(size) from fs where type = 0 and fs.database_id = db.database_id)+ (select sum(size) from fs where type = 1 and fs.database_id = db.database_id))
TotalDatabaseSizeMB
from sys.databases db
order by TotalDatabaseSizeMB DESC

¡Saludos!.

Schema-binding Objects Check / Schema bounding objects found in database

 Tenia programado un upgrade con un cliente a un servidor en la nube para su ambiente de pruebas, todo marchaba bien, pero algo paso en el transcurso, el asistente marco un error, error que como saben mientras persista nos impedirá realizar el upgrade.

Lo bueno de todo esto es que el error nos indicaba leyéramos la siguiente nota que a continuación les dejo tal cual, al final les diré que hice con las vistas (en mi caso) para que me dejará continuar con el upgrade.

 Please find the original document at https://launchpad.support.sap.com/#/notes/ 1343075

Symptom

During a run of the SAP Business One Upgrade / Setup Wizard, in the pretest step, you may receive the following error message:

Schema bounding objects found in database

Cause

There are schema bouding objects with a dependency on SAP Business One tables. When there is a dependency between the tables and objects defined as schema-bound (For example, CREATE VIEW/FUNCTION ... WITH SCHEMABINDING), the upgrade fails due to a failure to drop/alter SAP Business One tables. The following script can find all schema-binding objects in the database: SELECT 'schema_bound object ' + OBJECT_NAME ( object_id ) + ' found in DataBase!' FROM sys.sql_modules where is_schema_bound = 1

 Solution

To enable the upgrade, consult your database administrator and drop all schema-binding objects. For more information, see the Microsoft SQL Server document and consult your database administrator. We recommend generating a database backup before dropping any objects from the company database.

Pues bien, tal como lo dice la nota, al ejecutar la consulta SELECT 'schema_bound object ' + OBJECT_NAME ( object_id ) + ' found in DataBase!' FROM sys.sql_modules where is_schema_bound = 1, me arrojó los objetos del esquema que tienen en su estructura la sentencia marcada en negritas:

CREATE VIEW dbo.vwName 

WITH SCHEMABINDING AS 

SELECT T1.ID, T1.FirstName, T1.LastName, T2.Address, T2.Phone 

FROM dbo.Table1 AS T1 

INNER JOIN dbo.Table2 AS T2 ON T1.Id = T2.Id GO

Lo que note es que estos objetos no son nativos de SAPB1, si no de desarrollos hechos por el mismo cliente, por lo que sintiéndolo mucho, modifique sus vistas quitándole esa sentencia SQL, no es necesario eliminar las vistas, solo borrando la sentencia.

Con esto podrán continuar su upgrade, si tienen alguna otra duda sobre este tema, con gusto lo vemos. ¡Saludos!

miércoles, 12 de octubre de 2022

Artículo ya definido en nivel superior en árbol producto [Lista de materiales: Componentes - Código de componente]

 ¡Hola!, ¿Cómo están?, ¿han tenido este problema en SAP B1 al querer crea una lista de materiales cuando aparentemente todo está en orden?: Artículo ya definido en nivel superior en árbol producto [Lista de materiales: Componentes - Código de componente][line: 1] , 'número de línea matriz 1' [Mensaje 3566-12].

Lo primero que hacemos es asegurar que efectivamente no exista ya una lista de material donde el código que queremos tener como hijo sea ya el padre del código que deseamos que sea el padre (podría pasar que alguien administrador se nos adelanto e hizo lo contrario de lo que queremos hacer ahora).

Si lo anterior no es así, surge la duda del porque entonces nos arroja este error.... pues hay una causa más que lo puede estar provocando, a continuación les explico:

Se quiere crear la siguiente lista de material, el código terminación -018 se requiere sea el producto creado a partir del terminación -017, pero marca el error aún cuando ya hemos asegurado que no existe una lista de material que haga lo contrario.


Para poder crearla debemos de verificar si no existen ordenes de producción abiertas en las que hallan hecho también lo contrario, para eso les dejo una consulta en la que podrán identificar si existen, de ser así, deben de cancelar o cerrar todas las ordenes de fabricación que estén de esa forma y entonces les dejará crear la lista de materiales deseada.


¡Saludos!