Publicaciones etiquetadas ‘X++’

Errores falsos en Log al sincronizar base datos

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en Programacion, SQL Server, X++

En ocasiones cuando sincronizamos la base de datos de Dynamics AX 2012, nos encontramos que nos muestra una serie de errores.

001

 

Es posible que estos errores ya los hayas arreglados y te estén apareciendo siempre, esto es debido a que Dynamics AX 2012 guarda en la tabla SqlSyncInfo los errores que se ha encontrado en la sincronización, y cada vez que encuentra un error nuevo, va aumentando esta tabla.

En algunas ocasiones al arreglar un error, este no se borra de la tabla y al sincronizar vuelve aparecer.

La manera de arreglar esto es borrando esta tabla antes de sincronizar, para ello podemos utilizar el siguiente Job:

 

static void DAX_Borrado_SyncLog(Args _args)
{
    deleteTable('SqlSyncInfo');
 
    info( 'Log de la sincronización borrado');
}

Como copiar registros

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

En ciertas ocasiones, necesitamos poder copiar un registro, sin utilizar el método Data(),sino que lo que queremos es ir recorriendo uno a uno todos los campos de un registro seleccionado y copiarlo en otro variable del mismo tipo.

Para ello podemos utilizar el siguiente ejemplo, el cual se llamaría de la siguiente forma: copyFields(custTable, custTableTo);

static void CopyFields(Common _from, Common _to)
{
	DictTable 	t;
	DictField 	f;
	int 		i;
	fieldId 	id;
	FieldName 	fieldname;
	;
 
	t = new DictTable(_to.TableId);
	if (t)
	{
		for (i=1; i<=t.fieldCnt(); i++)
		{
			id = t.fieldCnt2Id(i);
			f = new DictField(_to.TableId,t.fieldCnt2Id(i));
 
			//Aqui podemos excluir campos del sistema como DataAreaid, RecId, CreatedDateTime ..
			if (f && !f.isSystem())
			{
				_to.(id) = _from.(id);
			}
		}
	}
}

Como borrar un objeto del AOT por código

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

Cuando trabajamos con Axapta en ciertas circunstancias podemos encontramos con la necesidad de borrar un objeto del AOT, ya sea por temas de programación o porque este objeto este corrupto y nos da error.

Si nos encontramos con que el objeto está corrupto, no podremos borrarlo de forma manual y lo tendremos que realizar por código, para hacer esto podemos utilizar el siguiente código, en el cual se muestra como borrar una tabla del AOT.

static void DAXBorradoObjeto(Args _args)
{
	UtilIdElements utilElement;
	UtilElementName tableName;
	UtilEntryLevel Layer;
	;
 
	tableName = 'Nombre del tabla';
	Layer = utilEntryLevel::usr;
 
	ttsbegin;
 
	select utilElement where utilElement.name == tableName
		&& utilElement.utilLevel == Layer
		&& utilElement.recordType == utilElementType::Table;
 
	if (utilElement)
	{
		utilElement.delete();
		ttscommit;
		info(strFmt('El objeto %1 en la capa %2 ha sido borrado!', tableName, Layer));
	}
	else
	{
		ttsAbort;
		warning(strFmt('El objeto %1 en la capa %2 no se ha encontrado!', tableName, Layer));
	}
}

Ocultar mensaje de ajuste en reports

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

En ocasiones nos encontramos que a la hora de diseñar un report, este tiene que mostrar mucha información y se tiene que ajustar casi todo el tamaño posible, y en algunas ocasiones, al ejecutarlo Axapta nos muestra un mensaje indicando que se ha ajustado el tamaño del report:

Informe se ha definido en 76 por ciento para ajustarlo a la página

Si deseamos evitar que no se muestre este mensaje, simplemente tendremos que utilizar la siguiente línea de código en el método Init de nuestro Report

element.printJobSettings().SuppressScalingMessage(true);

Actualizar InventSum desde InventTrans

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

En algunas ocasiones, necesitamos volver a calcular los valores de la inventsum, a partir de los datos existentes en la inventtrans, para ello tenemos una forma muy sencilla para realizarlo sobre un artículo, utilizando la clase InventSumReCalcItem

InventSumReCalcItem InventSumReCalcItem;
;
InventSumReCalcItem = new InventSumReCalcItem("Código de artículo");
InventSumReCalcItem.updateNow();