|
23.04.2004, 10:07 | #1 |
Участник
|
Как программно создать строку номенклатуры???
Всем привет! Разбирался с методами создания строки номенклатуры при интерактивном вводе новой номенклатуры. Пытаюсь создать с помощью кода - не хочет добавлять новую строку - меняет текущую. Есть у кого-нить пример как енто проделать???
|
|
22.07.2011, 13:26 | #2 |
Участник
|
пробовал этот код использовать в AX 2009, номенклатура не появляется, но создать с таким же именем нельзя, в таблицах SQL она есть. Подскажите, как программно этого добиться в 2009ой версии?
|
|
22.07.2011, 13:37 | #3 |
Участник
|
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. |
|
22.07.2011, 13:44 | #4 |
Участник
|
Поблема здесь
X++: _inventItemLocation.inventDimId = 'Axapta';
__________________
Axapta v.3.0 sp5 kr2 |
|
22.07.2011, 15:43 | #5 |
Участник
|
всё равно ошибки всякие повылезали, начиная от ";" и тд...
помогло вот это, взятое с иностранного сайта 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. |
|
22.07.2011, 17:38 | #6 |
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. |
|
26.07.2011, 08:22 | #7 |
Участник
|
Если писать, как предложил sukhanchik, то надо дописать тогда ещё строчки
X++: axInventTable.parmDimGroupId(_InventDimGroupId); axInventTable.parmItemType(ItemType::Item); axInventTable.parmModelGroupId(_InventModelGroupId); |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
26.07.2011, 09:07 | #8 |
Administrator
|
Цитата:
Сообщение от niksen
Если писать, как предложил sukhanchik, то надо дописать тогда ещё строчки
X++: axInventTable.parmDimGroupId(_InventDimGroupId); axInventTable.parmItemType(ItemType::Item); axInventTable.parmModelGroupId(_InventModelGroupId); Общая идея примера была в том, что в данном случае программисту не нужно заботиться о всяких там InventTableModule / InventItemLocation - связанных таблицах. PS. Вспомнил - да, у меня номенклатура создалась - т.к. на момент ее создания я поставил validateInput(false) .
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: niksen (1). |
23.08.2011, 14:51 | #9 |
Участник
|
интересен теперь другой вопрос, чтобы не плодить множество тем:
как правильно, используя axInventTable выделить нужную запись и обновить её, либо же удалить? как я понимаю, нужно использовать axInventTable.save для обновления-создания и axInventTable.delete, но как именно выбрать нужную запись и обновить-создать-удалить? |
|
23.08.2011, 15:05 | #10 |
Участник
|
Наверное, как-то так: AxInventTable::newInventTable(inventTable), где inventTable - курсор с нужной номенклатурой.
__________________
Ivanhoe as is.. |
|
23.08.2011, 15:48 | #11 |
Участник
|
вот что-то вроде начала
ItemId='_Болт' в начале, затем X++: ttsbegin; if (InventTable::find(_itemId,true)) ///// проверка на существование записи { select InventTable where InventTable.ItemId == '_Болт'; { AxInventTable.inventTable(InventTable); } Последний раз редактировалось niksen; 23.08.2011 в 15:52. |
|
23.08.2011, 15:52 | #12 |
Участник
|
для проверки на существование используейте метод InventTable::exist()
|
|
23.08.2011, 17:50 | #13 |
Участник
|
Это вы так вольно изменили мой вариант? Или вообще его не рассматривали?
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: niksen (1). |
24.08.2011, 00:05 | #14 |
Administrator
|
У меня совершенно прекрасно работает такой код, независимо от наличия записи в inventTable после отработки find:
X++: inventTable = InventTable::find(_itemId, true); axInventTable = AxInventTable::construct(); axInventTable.inventTable(inventTable); axInventTable.parmItemId(_itemId); axInventTable.parmItemName(_itemName); ..................... axInventTable.validateInput(true); axInventTable.save(); inventTable = axInventTable.inventTable();
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2), niksen (1). |
24.08.2011, 08:37 | #15 |
Участник
|
пробовал вместо
X++: AxInventTable.inventTable(InventTable); AxInventTable.delete(); X++: AxInventTable::construct(); AxInventTable::newInventTable(InventTable); AxInventTable.delete(); |
|
24.08.2011, 08:50 | #16 |
Участник
|
вместо
X++: AxInventTable::construct(); AxInventTable::newInventTable(InventTable); AxInventTable.delete(); X++: axInventTable = AxInventTable::newInventTable(InventTable); axInventTable.delete(); |
|
|
За это сообщение автора поблагодарили: niksen (1). |
02.09.2011, 11:45 | #17 |
Участник
|
Ivanhoe
рассматривал, но не заработало, потому что забыл где-то что-то дописать, видимо нельзя работать сонным sukhanchik Вариант с find отлично работает ice именно так теперь и делаю, забыл, что некоторые вещи нужно вызывать особым способом всем спасибо |
|
Теги |
как правильно, номенклатура, программно |
|
|