23.09.2011, 09:20 | #1 |
Участник
|
Перекодировать код номеклатуры
MD AX 2009, kernel vers 5.0, Appl vers 5.0
|
|
23.09.2011, 09:21 | #2 |
Участник
|
Можно ли перекодировать код номеклатуры на другой код, если были проводки, движения, есть в наличии?
|
|
23.09.2011, 09:24 | #3 |
Участник
|
Цель перекодирования - привести в порядок номеклатурный справочник, исключить дублирующие записи с одинаковым наименованием.
|
|
23.09.2011, 09:28 | #4 |
Ищущий знания...
|
можно с помощью паспорта записи (правой кнопкой мыши на номенклатуре --> паспорт записи --> кнопка Переименовать).
но у этого метода есть проблемы с производительностью, похожее обсужени уже ведется в соседней ветке
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: fara21 (1). |
23.09.2011, 09:31 | #5 |
Участник
|
Перекодировать можно.Правая кнопка мыши на коде номенклатуры в справочнике - Паспорт записи - переименовать.
А еще заглянуть вот сюда Производительность в Паспорте_записи
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: fara21 (1). |
23.09.2011, 09:39 | #6 |
Участник
|
Переименование немного не то. Если вам необходимо не просто перекодировать один код в другой новый, а объеденить два уже существующих кода то тогда читайте про метод merge
|
|
|
За это сообщение автора поблагодарили: fara21 (1). |
23.09.2011, 09:40 | #7 |
северный Будда
|
Коллеги, полагаю, что вопрос был не просто в смене кода артикула, но и в объединении нескольких артикулов в один
__________________
С уважением, Вячеслав |
|
23.09.2011, 14:02 | #8 |
Участник
|
Как вариант
1. Списать дублирующие номенклатуры и сделать приход "правильной". либо 2. Провести инвентаризацию: указать 0 в дублирующей ном-ре и увеличить количество "правильной". |
|
23.09.2011, 14:18 | #9 |
Участник
|
еще надо подумать как в отчетах отразить, тк захотят увидить только одну "новую" номенклатуру и "ее" движения
|
|
23.09.2011, 14:39 | #10 |
Участник
|
Цитата:
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.09.2011, 14:40 | #11 |
MS Dynamics AX 2012 R3
|
не проще сделать подснятие (читать как частичная инвентаризация) и далее работать с новой номенклатурой?
ведь переименовывать не правильно как то.
__________________
"Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов Последний раз редактировалось ZornFire; 23.09.2011 в 14:55. Причина: пояснение слова подснятие |
|
25.09.2011, 20:56 | #12 |
Участник
|
Цитата:
Очень удобно "броться" с "задвоенностью" по номенклатуре. При этом объединяются и проводки по номенклатуре, и текущие остатки в разрезе складских аналитик. X++: static server void renameItemIdAx(ItemId _fromItemId, ItemId _toItemId) { inventTable inventTable; inventTable inventTableTo; inventTableModule inventTableModule; InventItemLocation inventItemLocation; inventSum inventSum; inventSum inventSumUpd; InventTxt inventTxt; InventSumReCalcItem inventSumReCalcItem; ReqItemTable reqItemTable; InventBatch inventBatch; InventBatch inventBatchFind; CustVendExternalItem custVendExternalItem; InventItemBarcode inventItemBarcode; InventItemBarcode inventItemBarcodeFind; InventItemPurchSetup inventItemPurchSetup; InventItemSalesSetup inventItemSalesSetup; InventItemInventSetup inventItemInventSetup; InventItemPrice inventItemPrice; if (_fromItemId == _toItemId) { error(strfmt("Нельзя объединить номенклатуру %1 саму в себя", _toItemId)); return; } inventTableModule.skipDataMethods(true); inventTableModule.skipDeleteActions(true); inventTableModule.skipDeleteMethod(true); inventItemLocation.skipDataMethods(true); inventItemLocation.skipDeleteActions(true); inventItemLocation.skipDeleteMethod(true); inventSumUpd.skipDataMethods(); inventSumUpd.skipDeleteActions(); inventSumUpd.skipDeleteMethod(); inventTable = InventTable::find(_toItemId); if (inventTable.RecId == 0) { error(strfmt("Номер %1 не найден в справочнике номенклатуры", _toItemId)); continue; } inventTable = InventTable::find(_fromItemId); if (inventTable.RecId == 0) { error(strfmt("Номер %1 не найден в справочнике номенклатуры", _fromItemId)); continue; } ttsbegin; while select inventItemBarcode where inventItemBarcode.itemId == _fromItemId { delete_from inventItemBarcodeFind where inventItemBarcodeFind.itemId == _toItemId && inventItemBarcodeFind.itemBarCode == inventItemBarcode.itemBarCode; } while select inventBatch where InventBatch.itemId == _fromItemId { inventBatchFind = inventBatch::find(inventBatch.inventBatchId, _toItemId, true); if (inventBatchFind.RecId != 0) inventBatchFind.delete(); } delete_from reqItemTable where reqItemTable.ItemId == _fromItemId; delete_from custVendExternalItem where custVendExternalItem.ItemId == _fromItemId; delete_from inventItemPurchSetup where inventItemPurchSetup.ItemId == _fromItemId; delete_from inventItemSalesSetup where inventItemSalesSetup.ItemId == _fromItemId; delete_from inventItemInventSetup where inventItemInventSetup.ItemId == _fromItemId; delete_from inventItemPrice where inventItemPrice.ItemId == _fromItemId; while select inventSum where inventSum.ItemId == _fromitemId { inventSumUpd = inventSum::find(_toItemId, inventSum.InventDimId, true); if (inventSumUpd.RecId !=0) { inventSumUpd.PostedQty += inventSum.PostedQty; inventSumUpd.PostedValue += inventSum.PostedValue; inventSumUpd.PhysicalValue += inventSum.PhysicalValue; inventSumUpd.Deducted += inventSum.Deducted; inventSumUpd.Received += inventSum.Received; inventSumUpd.ReservPhysical += inventSum.ReservPhysical; inventSumUpd.ReservOrdered += inventSum.ReservOrdered; inventSumUpd.Registered += inventSum.Registered; inventSumUpd.Picked += inventSum.Picked; inventSumUpd.OnOrder += inventSum.OnOrder; inventSumUpd.Ordered += inventSum.Ordered; inventSumUpd.Arrived += inventSum.Arrived; inventSumUpd.QuotationReceipt += inventSum.QuotationReceipt; inventSumUpd.QuotationIssue += inventSum.QuotationIssue; inventSumUpd.AvailPhysical += inventSum.AvailPhysical; inventSumUpd.AvailOrdered += inventSum.AvailOrdered; inventSumUpd.PostedValueSecCur_RU += inventSum.PostedValueSecCur_RU; inventSumUpd.PhysicalValueSecCur_RU += inventSum.PhysicalValueSecCur_RU; inventSumUpd.PhysicalInvent += inventSum.PhysicalInvent; inventSumUpd.update(); } } while select forupdate inventSumUpd where inventSumUpd.ItemId == _toItemId { inventSumUpd.ItemId = "-1"; inventSumUpd.doUpdate(); } while select inventSum where inventSum.ItemId == _toItemId { info(inventSum.ItemId); } inventTable = InventTable::find(_toItemId, true); inventTable.ItemId = "-1"; inventTable.doUpdate(); update_recordset inventTableModule setting ItemId = "-1" where inventTableModule.ItemId == _toItemId; update_recordset inventItemLocation setting ItemId = "-1" where inventItemLocation.ItemId == _toItemId; delete_from inventTxt where inventTxt.ItemId == _toItemId; inventTable = InventTable::find(_fromItemId, true); inventTable.ItemId = _toItemId; inventTable.renamePrimaryKey(); inventTable.doUpdate(); inventTable = InventTable::find(_toItemId, true); inventTable.ItemId = "-2"; inventTable.doUpdate(); update_recordset inventTableModule setting ItemId = "-2" where inventTableModule.ItemId == _toItemId; update_recordset inventItemLocation setting ItemId = "-2" where inventItemLocation.ItemId == _toItemId; while select forupdate inventSumUpd where inventSumUpd.ItemId == _toItemId { inventSumUpd.ItemId = "-2"; inventSumUpd.doUpdate(); } inventTable = InventTable::find("-1", true); inventTable.ItemId = _toItemId; inventTable.doUpdate(); update_recordset inventTableModule setting ItemId = _toItemId where inventTableModule.ItemId == "-1"; update_recordset inventItemLocation setting ItemId = _toItemId where inventItemLocation.ItemId == "-1"; while select forupdate inventSumUpd where inventSumUpd.ItemId == "-1" { inventSumUpd.ItemId = _toItemId; inventSumUpd.doUpdate(); } inventTable = InventTable::find(_toItemId); inventTable = InventTable::find("-2", true); inventTable.delete(); inventSumReCalcItem = new InventSumReCalcItem(_toItemId, false, CheckFix::Fix); inventSumReCalcItem.updateNow(); ttscommit; } |
|
|
За это сообщение автора поблагодарили: fara21 (1). |