|
|
#1 |
|
Участник
|
Всем привет! Разбирался с методами создания строки номенклатуры при интерактивном вводе новой номенклатуры. Пытаюсь создать с помощью кода - не хочет добавлять новую строку - меняет текущую.
Есть у кого-нить пример как енто проделать???
|
|
|
|
|
#2 |
|
Moderator
|
PHP код:
|
|
|
|
|
#3 |
|
----------------
|
а дальше
Андре, а где же создаются вот эти таблички?
PHP код:
|
|
|
|
|
#4 |
|
Участник
|
Да это точно их то же ведь надо создать, иначе в форме InventTable не увидишь созданную позицию, там датасоурсы связаны по InnerJoin.
Единственное, надо создать записей в InventTableModule столько, сколько в Enum ModuleInventPurchSales, задав соотв. ModuleType. |
|
|
|
|
#5 |
|
Moderator
|
Цитата:
Андре, а где же создаются вот эти таблички?
![]() Потерялся вот этот кусочек: PHP код:
|
|
|
|
|
#6 |
|
Участник
|
Большое спасибо!!!
А какую смысловую нагрузку несет поле InventDimId в таблице InventItemLocation |
|
|
|
|
#7 |
|
Участник
|
А разве там есть такое поле ?
Там вроде бы InventLocationId должно быть |
|
|
|
|
#8 |
|
Участник
|
Цитата:
А разве там есть такое поле ?
Там вроде бы InventLocationId должно быть |
|
|
|
|
#9 |
|
Участник
|
Понятно, в трешке значит местоположение регулируется сразу комбинацией
аналитик, а не только одним складом. |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Изначально опубликовано Сергей Щербак
А какую смысловую нагрузку несет поле InventDimId в таблице InventItemLocation |
|
|
|
|
#11 |
|
Участник
|
пробовал этот код использовать в AX 2009, номенклатура не появляется, но создать с таким же именем нельзя, в таблицах SQL она есть. Подскажите, как программно этого добиться в 2009ой версии?
|
|
|
|
|
#12 |
|
Участник
|
X++: inventTable.clear();
inventTable.initValue();
inventTable.ItemId = NumberSeq::newGetNum(InventParameters::numRefItemId(), false).num();
inventTable.ItemName = "Название товара"
inventTable.txtDefault(true, "Описание товара");
inventTable.DimGroupId = "Группа аналитик";
inventTable.ModelGroupId = "Группа моделей";
inventTable.ItemGroupId= "Группа номенклатуры";
inventTable.insertInventItemOrderSetup(); // Новые таблицы AX2009
inventTable.PrimaryVendorId = "" // Код основного поставщика
inventTable.insert();
inventItemLocation.clear();
inventItemLocation.inventDimId = InventDim::inventDimIdBlank();
inventItemLocation.ItemId = inventTable.ItemId;
inventItemLocation.insert();
inventTableModule.clear();
inventTableModule.initValue();
inventTableModule.ModuleType = ModuleInventPurchSales::Purch;
inventTableModule.ItemId = inventTable.ItemId;
inventTableModule.insert();
inventTableModule.clear();
inventTableModule.initValue();
inventTableModule.ModuleType = ModuleInventPurchSales::Sales;
inventTableModule.ItemId = inventTable.ItemId;
inventTableModule.insert();
inventTableModule.clear();
inventTableModule.initValue();
inventTableModule.ModuleType = ModuleInventPurchSales::Invent;
inventTableModule.ItemId = inventTable.ItemId;
inventTableModule.insert();
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 22.07.2011 в 13:40. |
|
|
|
|
#13 |
|
Участник
|
Поблема здесь
X++: _inventItemLocation.inventDimId = 'Axapta';
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#14 |
|
Участник
|
всё равно ошибки всякие повылезали, начиная от ";" и тд...
помогло вот это, взятое с иностранного сайта X++: // Created on 06 Jul 2010 by Jovan Bulajic // This can be called to create a new item from code, for example CreateNewItem('AA01'); static void CreateNewItem(ItemId _itemId, ItemGroupId _itemGroup, ItemName _itemName) { InventTable inventTable; InventTableModule inventTableModule; InventItemLocation inventItemLocation; ; ttsbegin; // Master record in InventTable select forupdate inventTable; inventTable.initValue(); // If InventTable has other mandatory fields in addition to // ItemGroupId and ItemId, they should be defined here inventTable.ItemGroupId = _itemGroup; inventTable.ItemId = _itemId; inventTable.ItemName = _itemName; inventTable.ItemType = ItemType::Item; // You can put default DimGroupId, ModelGroupId, etc. here inventTable.insert(); // InventItemLocation for default dimension select forupdate inventItemLocation; inventItemLocation.initValue(); inventItemLocation.ItemId = _itemId; inventItemLocation.InventDimId = InventDim::inventDimIdBlank(); inventItemLocation.insert(); select forupdate inventTableModule; // запасы inventTableModule.initValue(); inventTableModule.ItemId = _itemId; inventTableModule.ModuleType = ModuleInventPurchSales::Invent; inventTableModule.insert(); // покупка inventTableModule.initValue(); inventTableModule.ItemId = _itemId; inventTableModule.ModuleType = ModuleInventPurchSales::Purch; inventTableModule.insert(); // продажа inventTableModule.initValue(); inventTableModule.ItemId = _itemId; inventTableModule.ModuleType = ModuleInventPurchSales::Sales; inventTableModule.insert(); ttscommit; } Теперь возникает другой вопрос: как запускать job из job'a с какими-то параметрами? Вот пример взятый из различных источников: X++: static void Jobs_MyJob(str _text) { ; info(_text); } X++: static void Jobs_ExecutingJob(Args _args) { Args args; ; args = new Args(); args.name(identifierStr(Jobs_MyJob)); new menuFunction(menuItemActionStr(Jobs_MyJob), MenuItemType::Action).run(args); } поиск по форуму ничем не помог Последний раз редактировалось niksen; 22.07.2011 в 15:50. |
|
|
|
|
#15 |
|
Administrator
|
Есть самый простой способ создать номенклатуру без лишних табличек:
X++: static void Job10(Args _args) { InventTable inventTable; AxInventTable axInventTable; ItemId _itemId = 'Ном001'; ItemName _itemName = 'Номенклатура 001'; ; axInventTable = AxInventTable::construct(); axInventTable.parmItemId(_itemId); axInventTable.parmItemName(_itemName); axInventTable.parmItemGroupId('МояГруппа'); axInventTable.parmNameAlias(_itemName); axInventTable.validateInput(true); axInventTable.save(); inventTable = axInventTable.inventTable(); }
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 22.07.2011 в 17:40. |
|
|
|
|
#16 |
|
Участник
|
Если писать, как предложил sukhanchik, то надо дописать тогда ещё строчки
X++: axInventTable.parmDimGroupId(_InventDimGroupId);
axInventTable.parmItemType(ItemType::Item);
axInventTable.parmModelGroupId(_InventModelGroupId); |
|
|
|
| За это сообщение автора поблагодарили: sukhanchik (2). | |
|
|
#17 |
|
Administrator
|
Цитата:
Сообщение от niksen
Если писать, как предложил sukhanchik, то надо дописать тогда ещё строчки
X++: axInventTable.parmDimGroupId(_InventDimGroupId);
axInventTable.parmItemType(ItemType::Item);
axInventTable.parmModelGroupId(_InventModelGroupId);Общая идея примера была в том, что в данном случае программисту не нужно заботиться о всяких там InventTableModule / InventItemLocation - связанных таблицах. PS. Вспомнил - да, у меня номенклатура создалась - т.к. на момент ее создания я поставил validateInput(false) .
__________________
Возможно сделать все. Вопрос времени |
|
|
|
| За это сообщение автора поблагодарили: niksen (1). | |
|
|
#18 |
|
Участник
|
интересен теперь другой вопрос, чтобы не плодить множество тем:
как правильно, используя axInventTable выделить нужную запись и обновить её, либо же удалить? как я понимаю, нужно использовать axInventTable.save для обновления-создания и axInventTable.delete, но как именно выбрать нужную запись и обновить-создать-удалить? |
|
|
|
|
#19 |
|
Участник
|
Наверное, как-то так: AxInventTable::newInventTable(inventTable), где inventTable - курсор с нужной номенклатурой.
__________________
Ivanhoe as is.. |
|
|
|
|
#20 |
|
Участник
|
вот что-то вроде начала
ItemId='_Болт' в начале, затем X++: ttsbegin; if (InventTable::find(_itemId,true)) ///// проверка на существование записи { select InventTable where InventTable.ItemId == '_Болт'; { AxInventTable.inventTable(InventTable); } Последний раз редактировалось niksen; 23.08.2011 в 15:52. |
|
|
| Теги |
| как правильно, номенклатура, программно |
|
|
|