Талантливый разгвоздяй
Регистрация: 14.12.2008
Адрес: Москва
|
Методам и переменным нельзя передать более 47 аргументов
Цитата:
Сообщение от Gustav
P.S. Попутно выяснился предел кол-ва параметров функции strFmt. Если добавить еще один (_par48), то компилятор ругается ошибкой переполнения стека.
Аналогичная проблема появилась при передаче 48 и более аргументов методу, который принимает значения типа Container в формате [арг1, арг2,арг3 ...]. Проблема решилась передачей методу переменной типа Container, а не указанной кострукции. Это навело меня на мысль, что:
методам и переменным хардкодом нельзя передать более 47 аргументов
Например, даже переменной типа Container путем грубой силы не может быть присвоено более 47 аргументов:
X++: //Проверка максимального количества аргументов, которые можно передавать в коде через запятую
static void ArgsLimitCheck(Args _args)
{
InventTable inventTable;
Container conFields;
int i;
;
select firstFast inventTable;
conFields = conIns([
inventTable.ItemGroupId //1
,inventTable.ItemId //2
,inventTable.ItemName //3
,inventTable.ItemType //4
,inventTable.PurchModel //5
,inventTable.Height //6
,inventTable.Width //7
,inventTable.SalesModel //8
,inventTable.ReqGroupId //9
,inventTable.EPCManager //10
,inventTable.PrimaryVendorId //11
,inventTable.NetWeight //12
,inventTable.Depth //13
,inventTable.UnitVolume //14
,inventTable.BOMUnitId //15
,inventTable.Density //16
,inventTable.Dimension //17
,inventTable.Dimension //18
,inventTable.Dimension //19
,inventTable.CostModel //20
,inventTable.UseAltItemId //21
,inventTable.AltItemId //22
,inventTable.Intracode //23
,inventTable.ProdFlushingPrincip //24
,inventTable.PBAItemAutoGenerated //25
,inventTable.BOMManualReceipt //26
,inventTable.StopExplode //27
,inventTable.Phantom //28
,inventTable.IntraUnit //29
,inventTable.BOMLevel //30
,inventTable.BatchNumGroupId //31
,inventTable.AutoReportFinished //32
,inventTable.OrigCountryRegionId //33
,inventTable.StatisticsFactor //34
,inventTable.AltConfigId //35
,inventTable.StandardConfigId //36
,inventTable.ProdPoolId //37
,inventTable.PropertyId //38
,inventTable.ABCTieUp //39
,inventTable.ABCRevenue //40
,inventTable.ABCValue //41
,inventTable.ABCContributionMargin //42
,inventTable.CommissionGroupId //43
,inventTable.Configurable //44
,inventTable.SalesPercentMarkup //45
,inventTable.SalesContributionRatio //46
,inventTable.SalesPriceModelBasic //47
/* ,inventTable.MinAverageSettle //48 Для проверки переместить комментарий на одну строку ниже
,inventTable.NameAlias //49
,inventTable.ProdGroupId //50
,inventTable.projCategoryId //51
,inventTable.grossDepth //52
,inventTable.grossWidth //53
,inventTable.grossHeight //54
,inventTable.standardPalletQuantity //55
,inventTable.qtyPerLayer //56
,inventTable.sortCode //57
,inventTable.ConfigSimilar //58
,inventTable.SerialNumGroupId //59
,inventTable.DimGroupId //60
,inventTable.ModelGroupId //61
,inventTable.ItemBuyerGroupId //62
,inventTable.TaxPackagingQty //63
,inventTable.WMSPalletTypeId //64
,inventTable.OrigStateId //65
,inventTable.WMSPickingQtyTime //66
,inventTable.TaraWeight //67
,inventTable.PackagingGroupId //68
,inventTable.ScrapVar //69
,inventTable.ScrapConst //70
,inventTable.StandardInventColorId //71
,inventTable.StandardInventSizeId //72
,inventTable.ItemDimCombinationAutoCreate //73
,inventTable.ItemDimCostPrice //74
,inventTable.ItemIdCompany //75
,inventTable.AltInventSizeId //76
,inventTable.AltInventColorId //77
,inventTable.ForecastDMPInclude //78
,inventTable.PalletTagging //79
,inventTable.ItemTaggingLevel //80
,inventTable.BOMCalcGroupId //81
,inventTable.PBAItemConfigurable //82
,inventTable.PBAInventItemGroupId //83
,inventTable.PBAHideDialog //84
,inventTable.PBAHideApproval //85
,inventTable.PBAAutoStart //86
,inventTable.PBAMandatoryConfig //87
,inventTable.Packing_RU //88
,inventTable.IntrastatWeight_CZ //89
,inventTable.dataAreaId //90
,inventTable.recVersion //91
,inventTable.RecId //92
*/
], 1);
for (i = 1 ; i <= conLen(conFields); i++)
{
info(strFmt("%1 - %2", i, typeOf(conPeek(conFields, i)) ));
}
} Но если присваивать переменной-контейнеру значения в цикле, то проблему можно избежать.
Думаю, ограниченние введено нарочно, чтобы разработчики шевелили извилинами, а не балова лись копипейстом  .
upd: изменил джоб, убрал поля DEL_. Джоб работает в AX4.0 SP2, в AX2009 SP1 -- не работает. Времени не хватило придумать новый пример.
Последний раз редактировалось Kabardian; 14.12.2009 в 00:07.
|