Ventanas dentro del Workspace

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

Desde la nueva introducción de Dynamics Ax, hemos visto como se ha pasado de tener todas las ventanas que abrimos de Axapta dentro de un mismo Workspace, a tener cada ventana que se abre fuera de Axpata, siendo esto en algunas ocasiones un poco molesto para ciertos usuarios.

Si queremos cambiar este comportamiento, podemos modificar la clase SysSetupFormRun el método Init con el siguiente código:

public void init()
{
	//INI - www.dynamicsax.es 
	if(this.form().design().windowType()==FormWindowType::Standard)
		this.form().design().windowType(FormWindowType::Workspace);
	// END - www.dynamicsax.es
 
	super();
 
	SysSecurityFormSetup::loadSecurity(this);
	this.dimensionFieldCtrls();
	this.inventStorageDimFieldCtrls();
 
	if (this.isWorkflowEnabled())
	{
		workflowControls = SysWorkflowFormControls::construct(this);
		workflowControls.initControls();
	}
}

Una vez modificado este código veremos que las ventanas, se abren dentro del Workspace de Dynamics Ax, como podemos ver en el siguiente ejemplo:

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);

Eliminar reserva de una línea de pedido

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

En algunas ocasiones, nos puede ser interesante poder eliminar la cantidad que tengamos reservada en un pedido, para dejarla en esta En Pedido.

Esto lo podemos realizar utilizando el siguiente Job, el cual a partir de una línea de pedido elimina la reserva de su transacción.

static void DAXEliminaReserva(Args _args)
{
	InventUpd_Reservation     res;
	InventMovement            Inventmovement;
	Salesline                 Salesline;
	Inventtrans               Inventtrans;
	;
	Salesline = Salesline::findInventTransId('00035053_092');
 
	if(salesline.RecId)
	{
		Inventtrans =InventTrans::findTransId(Salesline.inventtransId);
		Inventmovement = Inventtrans.inventmovement(true);
		res = InventUpd_Reservation::newInventDim(Inventmovement,InventTrans.inventDim(),Salesline.SalesQty,true);
		res.updatenow();
	}
}