31.01.2018, 08:04 | #1 |
Участник
|
Местоположение (InventDim.wMSLocationId)
Можно ли автоматически определить местоположения ТМЦ на центральном складе, согласно его физическим параметрам?
Модуль "Заказ на покупку", Microsoft Dynamics AX 2009 |
|
31.01.2018, 09:45 | #2 |
Участник
|
Вопрос не совсем понятен. Определить где ТМЦ сейчас стоит или найти товару подходящее место при приемке на склад?
Модуля "Заказ на покупку" нет. Есть Управление запасами и расчеты с поставщиками, если уж речь о покупках.
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! |
|
31.01.2018, 15:01 | #3 |
Участник
|
Найти товару подходящее место при приемке на склад. Модуль "Расчеты с поставщиками".
Задача состоит в том, что в зависимости от физических параметров номенклатуры и местоположении, надо автоматически определить местоположение на складе, возможно, даже распределить на несколько свободных мест одну и ту же номенклатуру. https://drive.google.com/open?id=1qy..._3nws0GYZKvoVe Последний раз редактировалось TalgatAb; 31.01.2018 в 15:30. |
|
31.01.2018, 20:52 | #4 |
MCTS
|
Можно, но для этого вам надо детально изучить и настроить модуль Управление складом.
__________________
I could tell you, but then I would have to bill you. |
|
01.02.2018, 13:10 | #5 |
Участник
|
Все можно, только дорабатывать надо. А сейчас как принимаете? Вручную ячейку прописываете или все-таки через журнал прибытия?
При разноске строки журнала прибытия как раз ищется свободная ячейка, согласно настройкам зоны хранения номенклатуры и области хранения ячеек. См. метод findFreeLocation в таблице WMSStoreZone. Вопрос довольно обширный, если задан не из праздного любопытства, а действительно нужна такая доработка - могу помочь. У меня поиск свободных ячеек реализован с учетом нескольких параметров. Зона хранения, высота погрузчика, ширина и высота ячейки, габариты и вес короба, количество коробов в слое на паллете, ярус стеллажа, этаж склада...
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! |
|
05.02.2018, 08:20 | #6 |
Участник
|
Спасибо, за отклик!
Модуль называется "Управление запасами", а то что вы рассказываете, наверно реализовано в модуле "Управление складами". Данный вопрос не из-за собственного любопытства. И думаю, ваш опыт для меня бесценен. Задача состоит в следующем: 1) Модуль "Расчеты с поставщиками", при приеме нового заказа покупки, во время формирования "Отборочная накладная", надо автоматически определить свободное местоположение InventDim.wMSLocationId, при этом, если большая партия, то надо распределить на несколько свободных мест. Вообще на уровне "Отборочной накладной" это возможно? По этому вопросу, я предлагал следующий вариант: Новые товары, номенклатуры принимать на виртуальный склад, при этом не будем определят местоположения. Проводим как обычно отборочную накладную в Axapta-е и заказ оприходуем. Затем загружаем данный заказ на покупку в ТСД (Android), и проводим операцию "Прибытие", т.е. через MS Business Connector программно создаем журнал переноса из виртуального склада на центральный склад, при этом есть возможности автоматически определить свободные местоположения на центральном складе. Но нашим менеджерам этот вариант не очень нравятся, они хотят чтобы местоположения определились во время отборочной накладной... Кстати, где "Управление запасами" не могу найти привязки к палетте? |
|
05.02.2018, 08:50 | #7 |
Участник
|
Кстати, ниже пример из кода X++
X++: void closeOk() { ; // <Talgat 23.02.2016 12:45> // Здесь в режиме "Разноска" -> "Отборочная накладная", после нажатия кнопки Ok // присваивается новый серийный номер if (documentStatus == DocumentStatus::PackingSlip) this.ALA_InitSerialNum(); // </Talgat> if (purchParmUpdate) purchParmUpdate_ds.write(); if (purchParmTable.RecId) purchParmTable_ds.write(); if (purchParmSubTable) purchParmSubTable_ds.write(); if (purchParmLine) purchParmLine_ds.write(); purchFormLetter.initParameters(purchParmUpdate.data(), printout.selection(), printFormletter.value(), euVat.value(), usePrintManagement.value()); purchFormLetter.printSalesFormLetter(printSalesFormLetter.value()); purchFormLetter.editLinesChanged(editLinesChanged); purchFormLetter.reArrangeNow(reArrangeNow); // <GEEU> purchFormLetter.parmPrintFacture_RU(printFacture_RU.value()); purchFormLetter.parmPrintAcceptanceReport_RU(printAcceptanceReport_RU.value()); purchFormLetter.parmPrintInventBaileeReport_RU(printInventBaileeReport_RU.value()); purchFormLetter.parmPrintReimbursementSlip_RU(printReimbursementSlip_RU.value()); purchFormLetter.parmDocNumberingCode_LT(docNumberingCode_LT.text()); purchFormLetter.parmReceiptListDeviationType_RU(printReceiptListDeviationType_RU.selection()); // </GEEU> // If this is an Invoice that is not posting but is printing, and changes have been made, ask to save changes if ( purchEditLinesForm.saveWhenPrinting() && Box::yesNo("@SYS112345", DialogButton::Yes) == DialogButton::Yes ) { purchFormLetter.parmSaveChanges(true); } else { purchFormLetter.parmSaveChanges(false); } super(); // , , 30.05.2015, Denis --> if (DocuRefLink.value() <= 0) { throw("Необходимо выбрать обрабатываемый документ (вложение)!"); } // , , 30.05.2015, Denis <-- } |
|
05.02.2018, 08:52 | #8 |
Участник
|
Сам метод работает таким образом:
X++: public void ALA_InitSerialNum() { // <Talgat 22.02.2016 9:44> PurchParmLine _purchParmLine; PurchLine _purchLine; InventDim _inventDim, _inventDimNew; InventSerialId _inventSerialId; InventLocationId _inventLocationId; InventDimGroupId _dimGroupId; //ConfigId _configId; // </Talgat> ; // <Talgat 22.02.2016 9:31> ttsBegin; while select forUpdate _purchParmLine where _purchParmLine.ParmId == PurchParmTable.ParmId { _dimGroupId = InventTable::find(_purchParmLine.ItemId).DimGroupId; if (ALA_DimGroupId::find(_dimGroupId).DimGroupId) { _inventDim = InventDim::find(_purchParmLine.InventDimId); if (_inventDim) { if (!_inventDim.inventSerialId) { _inventLocationId = _inventDim.InventLocationId; if (ALA_InventLocationId::find(_inventLocationId).InventLocationId) { _inventSerialId = InventSerial::findOrCreate(_purchParmLine.ItemId, _inventLocationId, PurchParmTable.TransDate).InventSerialId; _inventDimNew = InventDim::find(_purchParmLine.InventDimId, true); _inventDimNew.inventSerialId = _inventSerialId; // if (!_inventDimNew.configId) // { // _configId = PurchLine::findRecId(_purchParmLine.PurchLineRecId).Dimension[5]; // _inventDimNew.configId = ConfigTable::findOrCreate(_purchParmLine.ItemId, _configId, PurchLine::findRecId(_purchParmLine.PurchLineRecId).PurchUnit).ConfigId; // } _purchParmLine.InventDimId = InventDim::findOrCreate(_inventDimNew).inventDimId; _purchParmLine.update(); while select forUpdate _purchLine where _purchLine.RecId == _purchParmLine.PurchLineRecId { _purchLine.InventDimId = _purchParmLine.InventDimId; _purchLine.update(); } } } } } } ttsCommit; // </Talgat> } |
|
05.02.2018, 09:36 | #9 |
Участник
|
Цитата:
Модуль называется "Управление запасами", а то что вы рассказываете, наверно реализовано в модуле "Управление складами".
А почему при формировании отборочной? Чем не нравится разноска списка приходов? При этом формируется журнал прибытия. Там как раз кладовщик разбивает товар по паллетам(если больше одного места) и при его разноске ищется свободная ячейка для каждой паллеты.
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! |
|
05.02.2018, 09:40 | #10 |
Участник
|
Расчеты с поставщиками. Закупка - Разноска - Список прихода.
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! |
|
05.02.2018, 09:44 | #11 |
Участник
|
Спасибо!
|
|
|
|