|
![]() |
#1 |
Участник
|
Цитата:
Очень удобно "броться" с "задвоенностью" по номенклатуре. При этом объединяются и проводки по номенклатуре, и текущие остатки в разрезе складских аналитик. 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). |