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.