Buscar en este blog

martes, 31 de marzo de 2015

Crear una orden de compra por código X++ en Dynamics Ax 2012 R2

Muchas veces necesitamos crear ordenes de compra mediante código x++, además de confirmar y recepcionar, y muchas otras mas es necesario cancelar las recepciones y las ordenes, así que aquí van un par de post, uno para crear la orden de compra donde se puedan considerar sus dimensiones financieras en las líneas y el siguiente va a ser para cancelar:

Para crear la orden con una línea:

static void creaOC(Args _args)
{   
    PurchTable              purchTable;
    AxPurchTable            axPurchTable;
    VendTable               vendTable; 
    PurchLine               purchLine;
    AxPurchLine             axPurchLine;
    PurchId                 purchId;

    //Inicializando a partir de datos del proveedor
    vendTable = vendTable::find( "CodigoProveedor1");
    purchTable.initFromVendTable(vendTable);

    //Llenando campos nuevos si hubiera en la tabla de oc
    purchTable.CampoNuevo1 = "valorCampoNuevo1";
    purchTable.CampoNuevo2 = "valorCampoNuevo2";

    axPurchTable = axPurchTable::newPurchTable(purchTable);
    axPurchTable.parmPurchaseType(PurchaseType::Purch);
    axPurchTable.parmDocumentStatus(DocumentStatus::PurchaseOrder);
    axPurchTable.parmCurrencyCode( "MXN");
    axPurchTable.parmDeliveryDate( 30\03\2015);
    axPurchTable.parmInventSiteId( "100");
    axPurchTable.parmAccountingDate( 30\03\2015);
    axPurchTable.parmPurchStatus(PurchStatus::Backorder);
    axPurchTable.doSave();
   

    // Esta sección se repite por cuantas líneas tenga la orden
    purchLine.clear();
    purchLine.initFromPurchTable(purchTable);
   
    //lenando campos nuevos
    purchLine.CampoNuevo1 = "valorCampoNuevo3";
    purchLine.CampoNuevo2   = "valorCampoNuevo4";          

    axPurchLine = null ;
    axPurchLine = AxPurchLine::newPurchLine(purchLine);
    axpurchLine.parmItemId( "Articulo1");
    axPurchLine.parmPurchQty( 10);
    axPurchLine.parmQtyOrdered( 10);
    axPurchLine.parmPurchUnit( "pza");
    axPurchLine.parmPurchPrice( 14.35);
    axPurchLine.parmLineAmount( 143.50);
    //axPurchLine.parmTaxItemGroup("grupo de impuestos 1");  //Si no se llena, toma el del artículo
    //axPurchLine.parmTaxGroup("grupo de impuestos 2"); //Si no se llena, toma el del cliente
    axPurchLine.parmDeliveryDate( 30\03\2015);
    axPurchLine.parmConfirmedDlv( 30\03\2015);
    axPurchLine.axInventDim().parmInventSiteId( "100");
    axPurchLine.parmDefaultDimension(this.getDefaultDimension( "valorDimension1", "valorDimension2" , "valorDimension3"));

    axPurchLine.save();

    // en esta variable almacenamos el ID de la orden de compra
    purchId = purchTable.PurchId;

}



Y para las dimensiones financieras, uso el método getDefaultDimension como sigue:

static void getDefaultDimension(str _valor1, str _valor2, str valor3)
{
    DimensionAttributeValueSetStorage   setStorage  =   new DimensionAttributeValueSetStorage();
    DimensionAttribute                  dimAttribute;
    DimensionAttributeValue             dimAttrValue;
    int                                 idx;
   
    //Aquí van los nombres de las dimensiones de nuestro Ax
    container       conAttr = [ "REGION", "CEDIS" , "CENTROCOSTO"];
    container       conValue = [_valor1, _valor2, valor3];

    for(idx= 1; idx<=conLen (_dimNames); idx++)
    {
        dimAttribute    =   DimensionAttribute::findByName( conPeek(conAttr, idx));
        dimAttrValue    =   DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute,conPeek(conValue, idx),false,true );
        setStorage.addItem(dimAttrValue);
    }

    return  setStorage.save();   

}





En los siguientes post, viene:
Cómo crear la confirmación y la recepción.
Cómo cancelar una orden de compra y su recepción.


Post relacionados:
Cómo crear una orden de venta por código.
Cómo crear la confirmación y la remisión de una orden de venta.
Cómo cancelar la orden de venta y su remisión.



Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 




lunes, 23 de marzo de 2015

Escribir XML desde Microsoft Dynamics Ax 2012

Una forma rápida de crear un xml desde Ax 2012 en un job.

static void CreaXML(Args _args)
{
    XMLDocument xmlDoc;
    XMLNode nodeRoot, commentNode;

    XMLNode RespuestaOVNodo;
    XMLNode OrdenVentaNodo;
    XMLNode RemisionNodo;
    XmlNode ProcesoCompletoNodo;
    XmlNode MensajeError;
    boolean _procesoCompleto;

    FileName xmlFileName;
    ;

    xmlDoc = XMLDocument::newBlank();
    nodeRoot = xmlDoc.documentElement();
    _procesoCompleto = false ;

    RespuestaOVNodo = xmlDoc.appendChild(xmlDoc.createElement( 'RespuestaOV' ));
    ProcesoCompletoNodo = RespuestaOVNodo.appendChild(xmlDoc.createElement( 'ProcesoCompleto' ));

    if (_procesoCompleto)
    {
        ProcesoCompletoNodo.text( "1" );
        OrdenVentaNodo = RespuestaOVNodo.appendChild(xmlDoc.createElement( 'NoOrdenVenta' ));
        OrdenVentaNodo.text( "ORV_000000094" );
        RemisionNodo = RespuestaOVNodo.appendChild(xmlDoc.createElement( 'NoRemision' ));
        RemisionNodo.text( "REM_000000055" );
    }
    else
    {
        ProcesoCompletoNodo.text( "0" );
        MensajeError = RespuestaOVNodo.appendChild(xmlDoc.createElement( "Error" ));
        MensajeError.text( "El cliente no existe" );
    }
    //info(strfmt("cadena xml: %1", xmlDoc.toString()));   // para usarlo como cadena


    // escribir el xml sobre un archivo
    xmlFileName= @'C:\TEMP\MyXML.XML' ;
    new FileIoPermission(xmlFileName, 'rw' ).assert();
    xmlDoc.save(xmlFileName);
    CodeAccessPermission::revertAssert();
}

Este código genera dos tipos de respuestas, cuando es correcta o incorrecta cierta información. El Xml resultante se ve de la siguiente forma:

  


Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.