Mostrando entradas con la etiqueta ax 2012. Mostrar todas las entradas
Mostrando entradas con la etiqueta ax 2012. Mostrar todas las entradas

miércoles, 7 de febrero de 2018

Codigo X++ para simular depreciación de un activo fijo [AX2012]

Con el siguiente código X++ podemos simular la depreciación de un activo fijo hasta el final de su vida, que guardaremos en una tabla para su posterior análisis.
static void DIPSimularDepreciacionActivo()
{
    TmpDateSum      tmpDateSum;
    AssetTable      assetTable;
    AssetBook       assetBook;
    AssetLedgerAccounts  assetLedgerAccounts;
    MainAccountNum       mainAccountNum;
    DIPSimulacionDepreciacion    simulacion;

    delete_from simulacion;

    while select assetTable join assetBook where
        assetTable.AssetId                      == assetBook.AssetId
    &&  assetBook.Depreciation                  == NoYes::Yes
    &&  assetBook.Status                        == AssetStatus::Open
    &&  assetTable.AssetId                      == "218-000063"
    {
        simulacion.clear();
        assetLedgerAccounts = AssetLedgerAccounts::find(assetBook.BookId,AssetParameters::find().PostingProfile,enum2int(AssetTransType::Depreciation),TableGroupAll::GroupId,assetTable.AssetGroup);
        mainAccountNum =  MainAccount::find(DimensionAttributeValueCombination::find(assetLedgerAccounts.OffsetLedgerDimension).MainAccount).MainAccountId;

        //Metodo de calculo utilizado por AX
        tmpDateSum.setTmpData(assetBook.initDepreciationProfile());

        //Datos comunes de linea
        simulacion.AssetGroupId       = assetTable.AssetGroup;
        simulacion.AssetId            = assetTable.AssetId;
        simulacion.MainAccountId      = mainAccountNum;
        simulacion.ImporteAdquisicion = assetBook.AcquisitionPrice;

        //Recorrer dataset depreciacion
        while select tmpDateSum where tmpDateSum.TmpNumerals01 != 0
        {
            simulacion.Periodo               = tmpDateSum.TransDate;        // Fecha depreciacion
            simulacion.Depreciacion          = tmpDateSum.TmpNumerals01;    // Importe depreciacion del periodo
            simulacion.DepreciacionAcumulada = tmpDateSum.Total;            // Importe depreciacion acumulada
            simulacion.NetBookValue          = tmpDateSum.TmpNumerals02;    // Valor neto en libros
            simulacion.insert();
        }
    }
    info("Simulacion terminada");
}
Resultado:









Espero que os sirva de ayuda

jueves, 31 de agosto de 2017

Depurar un informe Report Data Provider en AX2012 R3

En una entrada antigua del blog, hablábamos sobre como depurar código desde Visual Studio en AX2012 (que podéis ver aquí). Este proceso es válido para cualquier código que se ejecute en CIL (Common Intermediate Language), pero debemos tener en cuenta algunas consideraciones para depurar las clases RDP (usadas para desarrollar informes).
El principal inconveniente radica en que los informes RDP se basan en tablas temporales o en memoria, haciendo que no se puedan depurar directamente.
Vamos a ver cómo podemos solucionar este inconveniente y depurar nuestro informe RDP.
Primero debemos asegurarnos de tener permisos para depurar en el servidor actual, por lo que nuestro usuario debe ser miembro del grupo Microsoft Dynamics AX Debugging Users. Y revisar todo lo explicado en mi anterior post.
En la clase que ejecuta el RDP debemos cambiar:
//class TestReportDP extends SRSReportDataProviderBase
class TestReportDP extends SrsReportDataProviderPreProcess
Con esto conseguimos que el informe procese primero los datos, y por último muestre el informe por pantalla. Así podremos acceder a los datos con el depurador.
Debemos asegurarnos también que el método processReport() contenga la siguiente llamada:
Tabla_Temporal.setConnection(this.parmUserConnection());
Por último, tenemos modificar las propiedades de la tabla temporal:
  • CreatedBy = Yes
  • CreatedTransactionId = Yes
  • TableType = Regular
Con estos cambios, ya podemos depurar el código de la clase que procesa los datos del informe.

viernes, 13 de enero de 2017

Rellenar con 0 un texto en AX2012

AX2012 nos proporciona una manera fácil de añadir caracteres extra a una cadena de texto. Imaginemos que necesitamos representar una secuencia FV-#### dentro de AX. Necesitamos entonces incrementar un contador para después almacenarlo o mostrarlo con un formato tipo "FV-0001", "FV-0002" etc. Será necesario entonces rellenar el contador con ceros.

Podemos utilizar los métodos strRFix () y strLFix () para lograr esto.

    
// ------------------------------------------------(c) 2017 Last
// System: Microsoft Dynamics AX 2013 R3 CU12
// Description:     JOB de ejemplo para rellenar con 0
// Creator:         Juan Ruiz Romero
// Creation date:   13.01.2017
// -----------------------------------------------------------------
// -----------------------------------------------------------------
static void testRellenar0(Args _args)
{
    int i = 1;
    str cadena;
    str resultado;
    
    /*Creamos un string, de longitud 4, con el valor de i y rellenamos con 0*/    
    cadena = strRFix(int2str(i), 4, "0");
    resultado = strFmt("FV-%1", cadena);    
    info(resultado);
    
    cadena = strLFix(int2str(i), 4, "0");
    resultado = strFmt("FV-%1", cadena);    
    info(resultado);
}

Esto llenará resultado con FV-0001. Si usamos strLFix en lugar de strRFix, se rellenará con 0 a la derecha, dando como resultado FV-1000.



jueves, 23 de junio de 2016

Crear documentos de MS Word desde AX 2012 R3

Buenas tardes a todos, hace tiempo que no publico nada en el blog por motivos de falta de tiempo, los que hayan realizado una migración de algún ERP me entenderán....

Nuestro objetivo de hoy es crear documentos de Word directamente desde AX 2012. Para ello utilizaremos una plantilla de Word previamente diseñada, que después utilizaremos en nuestro código x++.

Crearemos nuestra plantilla, para ello insertaremos los marcadores de posición en el lugar deseado, según veis en la imagen:


viernes, 23 de octubre de 2015

Importar Clientes Prospecto (Relaciones Empresariales) en AX 2012 R3 [JOB]

Buenos tardes a todos, durante la migración de Dynamics AX4 a AX2012 R3 nos encontramos con que no existe ninguna entidad en el DMF (Data Migration FrameWork) para importar clientes prospecto (antiguas relaciones empresariales en AX4).

En este caso he realizado un JOB para simular este proceso. Utilizando las clases System.Data.SqlClient podemos leer datos directamente de la base de datos SQL Server de AX4.
El job puede ser ejecutado para actualizar los nuevos clientes prospecto creados durante la fase de migración.

viernes, 12 de junio de 2015

Actualización Acumulativa 9 (CU9) para AX 2012 R3

Ayer (10 de junio) fue liberada la nueva actualización acumulativa 9 para Dynamics AX 2012 R3, conocida popularmente como CU9. Esta actualización ya puede ser descargada desde Lifecycle Services, CustomerSource y PartnerSource. El Build number para este CU9 es 6.3.2000.326. Para los que necesitéis instrucciones para la instalación, pueden descargar la guía oficial de instalación de CU9 para AX 2012R3.
Esta CU9 presenta cambios en los siguientes módulos:
– Recursos Humanos
– Retail
– TMS
– WMS
También presenta cambios en las siguientes funcionalidades específicas de país:
Australia, Bélgica, Brasil, Europa, Alemania, India, Italia, Lituania, México, Holanda, Polonia, Rusia, España, Reino Unido, Estados Unidos.
A nivel de Desarrollo, también se introdujo un cambio en la funcionalidad de Extensibilidad MPOS en Retail.
Para ver el detalle de estos cambios, pueden consultar la página oficial aquí (What’s new). Para el caso de WMS y TMS, pueden encontrar información aún más detallada sobre los cambios aquí (Blog oficial de SCM).
Como sucedió con la CU8 de AX 2012 R3, el número de versión de la aplicación mostrará un número distinto de 6.3.2000.323 si se le aplica la CU9 a una instalación existente de AX2012R3. Esto es debido a todos los modelos granulares que han sido aplicados al sistema a través del instalador de CU9. El modelo (ax-model) que indica que todo los modelos de la CU9 han sido aplicados es el que tiene el número de versión 6.3.2000.323. Usando el método de  slipstream como se detalla en la guía de instalación, resultará en una instalación con un único modelo aplicado para la CU9, con el build number 6.3.2000.326.

jueves, 15 de enero de 2015

Depurar código desde Visual Studio en AX2012

A partir de la versión 6 de AX (AX2012) la mayor parte del código se ejecuta en el entorno de CIL y no puede depurarse desde el depurador de Microsoft Dynamics AX en X++. Igual os habréis sorprendido al introducir un punto de interrupción en x++ y después ver que no se ejecuta el depurador aun estando seguros de que la ejecución pasa por ese punto. Esto significa que el código se está ejecutando en CIL y necesitamos depurarlo con Visual Studio.

Vamos a ver el proceso que debemos realizar (siempre en un entorno de tes/desarrollo):

lunes, 22 de diciembre de 2014

Microsoft Dynamics AX 2012 R3 CU8 - FAQ


Con el lanzamiento anunciado recientemente de la actualización acumulativa CU8 para Microsoft Dynamics AX 2012 R3 (6.3.1000.309) con KB2998197, hay varios cambios fundamentales en cómo se distribuye y se instala en entornos locales el paquete CU. La diferencia más notable es que la instalación de la actualización se descarga primero y no contiene realmente ningún fichero de actualización de productos. Las correcciones y mejoras se descargan como parte de la ejecución del instalador de actualizaciones. Aquí se resuelven algunas de las preguntas o dudas mas comunes que pueden surgir:
  1. Mi entorno no me permite descargar el paquete desde el sitio web de Lifecycle Services (LCS). ¿Dónde está el "paquete sin conexión?
    • El paquete completo se puede aplicar con una nueva instalación de  AX2012R3 cuando se utiliza el proceso inserción de la update en el disco de instalación. Usted tendrá que acceder a LCS y descargar el paquete CU8 y guardarlo como un paquete de actualización personalizada localmente. Este paquete de actualización se puede copiar a cualquier ubicación para su uso en modo "offline". Esto aparece en la Guía de instalación (paso 7 en la página 7):
      "Opcional: En la página Guardar cambios, haga clic en Guardar paquete de actualización personalizada. A continuación, puede volver a utilizar el paquete de instalación que ha creado en otro equipo en su entorno.
      Después de que el paquete de actualización personalizada se ha creado, puede abrir la ubicación donde queda almacenado."
  2. ¿Por qué hay dos números de versión de CU8?
    • Al instalar CU8 en una instalación existente, los modelos granulares se instalan de forma individual. El paquete específico que indica todas las correcciones de aplicaciones incluidas en CU8 es la build específica: 6.3.1000.473.
      En mi caso 
      aquí podéis ver como queda al realizar la actualización sobre una instalación existente de AX2012R3:
      Versión del kernel: 6.3.1000.309
      Versión de aplicación: 6.3.1000.473



  3. ¿Por qué hay más de 1500 modelos nuevos instalados en mi sistema cuando veo los modelos instalados en pantalla Ayuda> Acerca?
    • CU8 es una colección de todas las revisiones publicadas anteriormente, actualizaciones legales, y mejoras de características. Cada uno de estos cambios es capturado en su propio modelo individual con el objetivo de lograr menos dependencias entre parches, en comparación con el desarrollo actual de AX2012 R2.
  4. ¿Qué es "Spliptreaming" y por qué debo utilizarlo?
    • Slipstreaming está bien definido en la pagina 4 de la Guía de instalación:

      "Si va a instalar Microsoft Dynamics AX 2012 R3, por primera vez, puede utilizar el asistente de configuración y el proceso slipstreaming para instalar CU 8 junto con el resto del producto. Cuando se usa este proceso, el programa de instalación detecta automáticamente las actualizaciones y las aplica."
      Básicamente consiste en descargar el paquete de actualizaciones y meterlo en la carpeta "Updates" como veis en la imagen (descarga desde LCS):


  5. ¿CU8 requiere Visual Studio 2013?
    • Sí. Si necesita abrir un proyecto de Visual Studio como por ejemplo un diseño de informes u otro proyecto de C #, Visual Studio 2013 es obligatorio.


jueves, 18 de diciembre de 2014

Nueva actualización de Dynamics AX para facturas electrónicas (España)

A partir del 15 de Enero de 2015, las facturas enviadas o recibidas de/a las Administraciones Públicas deberán ser presentadas solo a través de formato electrónico.

El Gobierno Español ha definido un sólo punto general de entrada de Facturas Electrónicas de la Administración General del Estado. Este punto general de entrada se conoce como FACe (https://face.gob.es/es/) y permite la presentación de facturas electrónicas a
través de 2 métodos:
  • Cargar la factura electrónica en una página web.
  • Utilizar la integración de servicios web.

En ambos casos, la factura electrónica debe ser generada usando un formato estándar definido por la AEAT conocido como FacturaE.


Desde Microsoft, se ha publicado un nuevo hotfix relacionado con la factura electrónica para España (e-factura). Está disponible para Microsoft Dynamics AX 2009 SP1, Dynamics AX 2012, Dynamics AX 2012 R2, y Dynamics AX 2012 R3.

Se han realizado los siguientes cambios funcionales en Dynamics AX:
  • Nuevos parámetros de e-factura en el módulo de Clientes que permiten definir diferentes escenarios.
  • Creación automática de facturas electrónicas al contabilizar Facturas de venta, facturas de servicio o facturas de proyectos, así como Notas de abono.
  • Firma electrónica de e-facturas, tanto con el Certificado de Empresa como con Certificado de usuario.
  • Nueva funcionalidad para definir si las facturas electrónicas se crearán automáticamente o para clientes en particular.
  • Monitorización, re-creación, re-firma y re-envío de facturas electrónicas en el caso de que sea necesario por motivos del negocio.
  • La versión soportada de “FacturaE” es 3.2.1.

El hotfix de puede descargar en el siguiente enlace: https://mbs2.microsoft.com/Knowledgebase/KBDisplay.aspx?scid=kb;EN-US;2980045

El Whitepaper con la descripción de la funcionalidad está disponible (de momento sólo en inglés) en este enlace: https://mbs.microsoft.com/partnersource/spain/deployment/documentation/msdax20092012elecinvoicefacturaspain

viernes, 12 de diciembre de 2014

Añadir parámetros a informe SSRS basado en una Query [AX2012]

En el siguiente artículo veremos como añadir parámetros a un informe SSRS que utiliza como origen de datos una Query. Después presentaremos estos parámetros en el formulario Dialog de AX2012.

1. Creamos una nueva Query en el AOT y la llamamos JRVendTable.
2. Añadimos la tabla VendTable al nodo Data Sources.
3. Añadimos los siguientes campos al nodo Fields:

jueves, 20 de noviembre de 2014

Cumulative Update 8 para Microsoft Dynamics AX2012 R3 disponible


Cumulative Update 8 (CU8) para Dynamics AX 2012 R3 está disponible para descargar en CustomerSource y PartnerSource. CU8 incluye algunas nuevas características ademas de varias actualizaciones y hotfix.
Novedades y hotfix en CU8
  • Nuevas funciones: CU8 incluye varias actualizaciones y mejoras en varios modulos de AX2012R3. La lista completa de características las podéis encontrar aquí, What's new in Microsoft Dynamics AX 2012 R3 cumulative update 8. Como desarrollador destacaría que ya podemos utilizar Visual Studio 2013, gracias a "Microsoft Dynamics AX developer tools for Visual Studio 2013".
  • Application hotfixex: CU8 incluye mas de mil revisiones. Para ver la lista completa de hotfix, ver CU8 download page.
  • Binary hotfixes: CU8 incluye mas de cien Binary hotfixes. Para ver la lista completa, CU8 download page.
  • Actualizaciones especificas para países: CU8 incluye varias actualizaciones especificas para paises y regiones. Para ver la lista completa, ver CU8 download page. Destacar aquí varias mejoras referentes a la normativa SEPA (reports, batch process...)

martes, 18 de noviembre de 2014

Gráfico en informe SSRS [AX2012]

En el siguiente articulo vamos a aprender a crear un informe con un gráfico circular (en AX Pie or Doughnut Chart). Utilizaremos un Query de AX para obtener los datos. En en ejemplo se muestran el importe de facturación por grupos de clientes. Al final obtendremos algo así:



martes, 11 de noviembre de 2014

Adjuntar documentos mediante X++ en AX2012 R3

En el departamento de compras me solicitaron adjuntar de manera automática una serie de documentos (pdf) a los registros de facturas de compra. Aquí os propongo un ejemplo de como adjuntar un documento en AX mediante x++.

Para ello utilizaremos la tabla DocuRef y la clase DocuActionArchive. En el siguiente ejemplo adjunto al cliente "000001" el documento "documento.pdf" situado en el directorio C:/

static void DocumentAttachment(Args _args)
{
    DocuRef docuRef;
    DocuActionArchive archive;
    CustTable _custtable;

    str _path;
    ;

    _path=@"c:\\documento.pdf";
    _custtable = CustTable::find("000001");    

    if (_custtable!=null) {

        ttsBegin;
        docuRef.clear();
        docuRef.RefRecId = _custtable.RecId;
        docuRef.RefTableId = tableNum("CustTable");
        docuRef.RefCompanyId = curext();
        docuRef.Name = _path;
        docuRef.TypeId = 'Archivo';
        docuRef.insert();

        archive = new DocuActionArchive();
        archive.add(docuRef, _path);
        ttsCommit;
    }

    info("Documento adjuntado correctamente");
}

Podemos realizar un proceso automático que haga una lectura de todos los documentos y los adjunte en sus registros correspondiente. Aquí tenéis mas información:

lunes, 27 de octubre de 2014

Nuevas clases para enviar E-mail con AX 2012 R3

En la nueva versión de Dynamics AX 2012 (la R3) existe un nuevo framwork para el envío de e-mail. Está basado totalmente en la API de .Net. Una gran parte del código estándar de AX utiliza esta nueva clase. Requiere .Net 4.5 para ser usado.
Tenéis un ejemplo en \Classes\TrvMailHelper\sendMail
Podéis encontrar mas información en MSDN SysMailerNet Class [AX 2012]

miércoles, 10 de septiembre de 2014

Dynamics AX 2012 - Lista completa de flujos de trabajo

Microsoft Dynamics AX 2012 R3 cuenta con 75 tipos de flujo de trabajo en la instalación predeterminada. La utilización de estos flujos puede ser muy útil para las empresas pues añade un valor añadido a las implantaciones del ERP.

Lo más importante es saber cuáles son estos y flujos y lo que hacen. Después con unas pequeñas modificaciones podemos adaptarlos a las necesidades de cada empresa. Puede haber flujos de trabajo con múltiples configuraciones que utilizan uno o más de los flujos de trabajo que aquí muestro.


He utilizado el siguiente JOB para extraer la lista completa del AOT. Cambiando el código de idioma 'es' se puede sacar la lista con diferentes traducciones. Algunos aparecen en inglés, supongo que será debido a que la etiqueta no tiene traducción al castellano.

JOB:

static void ListaFlujosDeTrabajo(Args _args)
{
    #AOT
    #Properties
    TreeNodeIterator    NodeIterator;
    TreeNode            Node;    
  
    NodeIterator = TreeNode::findNode(#WorkflowTypesPath).AOTiterator();
    Node  = NodeIterator.next();
  
    while (Node)
    {       
        info(strFmt("%1 ; %2", SysLabel::labelId2String2(findProperty(Node.AOTgetProperties(), #PropertyLabel), 'es'),
                               SysLabel::labelId2String2(findProperty(Node.AOTgetProperties(), #PropertyHelpText), 'es')));
      
        Node = NodeIterator.next();
    }
}

lunes, 1 de septiembre de 2014

Configurar Microsoft Dynamics AX 2012 X++ Editor Extensions

Si hemos desarrollado anteriormente en Visual Studio o Visual Basic y ahora tenemos que trabajar con el editor X++ de Dynamics AX quizás echaremos de menos algunas características que nos facilitan la vida a los desarrolladores. Sobre todo cuando tenemos muchas líneas de código. Por suerte y gracias a nuestro amigo José Antonio Estevan podemos instalar una extensión para el editor X++ con unos sencillos pasos:

Paso 1: Descargar el archivo zip de CodePlex

http://ax2012editorext.codeplex.com/


viernes, 29 de agosto de 2014

Usar formularios como LookUp (desplegable) en Dynamics AX 2012

Imaginemos que necesitamos un control StringEdit que nos despliegue una lista de todos los proveedores. Podemos hacerlo de manera automática asignando el ExtendedDataType al campo y estaría listo. Pero si queremos personalizar los campos que nos despliega podemos usar formularios como LookUp.

Empezaremos creando el propio formulario desplegable o LookUp:



miércoles, 13 de agosto de 2014

Comprobar la sentencia SQL a partir de consulta select en X++

Si queremos saber que sentencia SQL ejecuta el procesador de consultas de SQL Server a partir de nuestra consulta select en X++ debemos hacer lo siguiente:


  1. Agregar la palabra clave generateOnly en la sentencia select de X++.
  2. Llamar al método getSQLStatement().
Ejemplo:


static void JobSQL(Args _args)
{
    PurchAgreementHeader      purchAgreementHeader;
    PurchAgreementActivity    purchAgreementActivity;    

    select generateonly purchAgreementHeader join purchAgreementActivity
        where purchAgreementHeader.RecId == purchAgreementActivity.PurchAgreementHeader;
    
    info(purchAgreementHeader.getSQLStatement());
}

Lo que resulta:


Nuevo libro: Inside Microsoft Dynamics AX 2012 R3


Nuestro libro favorito "Inside Microsoft Dynamics AX 2012" se ha actualizado para AX 2012 R3 y ahora está disponible en formato de libro electrónico. Sin duda uno de los mas completos, sino el que más, sobre AX 2012. La edición impresa estará disponible el 21 de agosto. 


Entre las novedades: 

  • Un nuevo capítulo sobre el desarrollo de las "comapion apps" para AX 2012. 
  • Un nuevo capítulo sobre la gestión del ciclo de vida de la aplicación, que incluye descripciones de las herramientas que se incluyen con Lifecycle Services.
  • Nuevas secciones sobre el soporte para LINQ y gestión de impresión.

Los enlaces para adquirir la copia digital: