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.
Hola soy nuevo en ax y tengo una duda en las lineas
ResponderBorrarpurchTable.camponuevo1 = "valordelcampo1"
No entiendo a que te refieres.
Esto es únicamente para cuando tienes campos extras en PurchTable, por ejemplo que te hayan pedido que en el encabezado de la orden de compra agregues el campo llamado "camponuevo1", entonces puedes asignarle el valor antes de usar axpurchtable para asignarle el valor.
BorrarHola gracias por este post. Me pregunto algo, podria usar este codigo para cargar varias Ordenes de Compra que vienen en un archivo plano? Soy algo nuevo en este tema de AX y de programacion en X++.
ResponderBorrarGracias de antemano
Hola!,
ResponderBorrarSoy bastante nueva en X++, mi duda es, si es posible crear varias ordenes de compra, utilizando el código, y como sería el mismo?, por ejemplo si tengo q tomar datos de un excel o un .csv.
Muchas Gracias!