23.04.2004, 10:07 | #1 |
Участник
|
Как программно создать строку номенклатуры???
Всем привет! Разбирался с методами создания строки номенклатуры при интерактивном вводе новой номенклатуры. Пытаюсь создать с помощью кода - не хочет добавлять новую строку - меняет текущую. Есть у кого-нить пример как енто проделать???
|
|
23.04.2004, 10:39 | #2 |
Moderator
|
PHP код:
|
|
23.04.2004, 10:49 | #3 |
----------------
|
а дальше
Андре, а где же создаются вот эти таблички?
PHP код:
|
|
23.04.2004, 10:53 | #4 |
Участник
|
Да это точно их то же ведь надо создать, иначе в форме InventTable не увидишь созданную позицию, там датасоурсы связаны по InnerJoin.
Единственное, надо создать записей в InventTableModule столько, сколько в Enum ModuleInventPurchSales, задав соотв. ModuleType. |
|
23.04.2004, 10:58 | #5 |
Moderator
|
Цитата:
Андре, а где же создаются вот эти таблички?
Потерялся вот этот кусочек: PHP код:
|
|
23.04.2004, 13:30 | #6 |
Участник
|
Большое спасибо!!!
А какую смысловую нагрузку несет поле InventDimId в таблице InventItemLocation |
|
23.04.2004, 16:58 | #7 |
Участник
|
А разве там есть такое поле ?
Там вроде бы InventLocationId должно быть |
|
23.04.2004, 17:09 | #8 |
Участник
|
Цитата:
А разве там есть такое поле ?
Там вроде бы InventLocationId должно быть |
|
23.04.2004, 17:13 | #9 |
Участник
|
Понятно, в трешке значит местоположение регулируется сразу комбинацией
аналитик, а не только одним складом. |
|
23.04.2004, 17:16 | #10 |
Участник
|
Цитата:
Изначально опубликовано Сергей Щербак
А какую смысловую нагрузку несет поле InventDimId в таблице InventItemLocation |
|
22.07.2011, 13:26 | #11 |
Участник
|
пробовал этот код использовать в AX 2009, номенклатура не появляется, но создать с таким же именем нельзя, в таблицах SQL она есть. Подскажите, как программно этого добиться в 2009ой версии?
|
|
22.07.2011, 13:37 | #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. |
|
22.07.2011, 13:44 | #13 |
Участник
|
Поблема здесь
X++: _inventItemLocation.inventDimId = 'Axapta';
__________________
Axapta v.3.0 sp5 kr2 |
|
22.07.2011, 15:43 | #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. |
|
22.07.2011, 17:38 | #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. |
|
26.07.2011, 08:22 | #16 |
Участник
|
Если писать, как предложил sukhanchik, то надо дописать тогда ещё строчки
X++: axInventTable.parmDimGroupId(_InventDimGroupId); axInventTable.parmItemType(ItemType::Item); axInventTable.parmModelGroupId(_InventModelGroupId); |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
26.07.2011, 09:07 | #17 |
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 | #18 |
Участник
|
интересен теперь другой вопрос, чтобы не плодить множество тем:
как правильно, используя axInventTable выделить нужную запись и обновить её, либо же удалить? как я понимаю, нужно использовать axInventTable.save для обновления-создания и axInventTable.delete, но как именно выбрать нужную запись и обновить-создать-удалить? |
|
23.08.2011, 15:05 | #19 |
Участник
|
Наверное, как-то так: AxInventTable::newInventTable(inventTable), где inventTable - курсор с нужной номенклатурой.
__________________
Ivanhoe as is.. |
|
23.08.2011, 15:48 | #20 |
Участник
|
вот что-то вроде начала
ItemId='_Болт' в начале, затем X++: ttsbegin; if (InventTable::find(_itemId,true)) ///// проверка на существование записи { select InventTable where InventTable.ItemId == '_Болт'; { AxInventTable.inventTable(InventTable); } Последний раз редактировалось niksen; 23.08.2011 в 15:52. |
|
Теги |
как правильно, номенклатура, программно |
|
|