Buscar en este blog

miércoles, 8 de abril de 2015

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

Y siguiendo con la serie de creación de ordenes, en este post se muestra cómo crear una orden de venta por código x++ donde se puedan considerar sus dimensiones financieras en las líneas.

public SalesTable createOV()
{
    SalesTable          salesTable;
    AxSalesTable        axSalesTable;
    CustTable           custTable;
    SalesLine           salesLine;
    AxSalesLine         axSalesLine;

    //Inicializando a partir del cliente
    custTable = custTable::find( "NumeroCliente" );
    salesTable.CustAccount  = "NumeroCliente" ;
    salesTable.initFromCustTable();

    //Llenando campos nuevos si hubiera en la tabla de ov
    salesTable.PurchOrderFormNum    = "ReferenciaCliente" ;
    salesTable.CampoNuevo1          = "ValorCampoNuevo1" ;
      
    axSalesTable = axSalesTable::newSalesTable(salesTable);
    axSalesTable.parmCustAccount( "NumeroCliente" );
    axSalesTable.parmSalesType(SalesType::Sales);
    axSalesTable.parmDocumentStatus(DocumentStatus::None);
    axSalesTable.parmReceiptDateRequested( 30\03\2015 );
    axSalesTable.parmShippingDateRequested( 30\03\2015 );
    axSalesTable.parmCurrencyCode( "MXN" );
    axSalesTable.doSave();
   
    // Esta sección se repite por cuantas líneas tenga la orden
    salesLine.clear();
    salesLine.initFromSalesTable(_salesTable);

    //lenando campos nuevos
    salesLine.Cajas               = "ValorCampoNuevo2" ;
    salesLine.ClaveRechazo        = "ValorCampoNuevo3" ;                      

    axSalesLine = null ;
    axSalesLine = AxSalesLine::newSalesLine(salesLine);
    axSalesLine.parmItemId( "CodigoArticulo" );
    axSalesLine.parmSalesQty( 10 );
    axSalesLine.parmQtyOrdered( 10 );
    axSalesLine.parmSalesUnit( "pza" );
    axSalesLine.parmSalesPrice( 18.00 );
    axSalesLine.parmLineAmount( 180.00 );
    //axSalesLine.parmTaxGroup(lines.TaxGroup); //Si no se llena, toma el del cliente
    //axSalesLine.parmTaxItemGroup(lines.TaxItemGroup); //Si no se llena, toma el del artículo
    axSalesLine.parmReceiptDateRequested( 30\03\2015 );
    axSalesLine.parmShippingDateRequested( 30\03\2015 );
    axSalesLine.axInventDim().parmInventSiteId( "100" );
    axSalesLine.parmDefaultDimension(this.getDefaultDimension( "valorDimension1" "valorDimension2" ,"valorDimension3"));

    axSalesLine.save();

    salesId = salesTable.SalesId;

    return salesTable;
}


Y para el DefaultDimension, se tiene el método getDefaultDimension:

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 remisión de una orden de venta.
Cómo cancelar la orden de venta y su remisión.


Post anteriores relacionados:
Cómo crear una orden de compra.
Cómo crear la confirmación y la recepción de una orden de compra.
Cómo cancelar una orden de compra y su recepció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. 



No hay comentarios.:

Publicar un comentario