22.05.2014, 11:31 | #1 |
Участник
|
Сводное планирование. Кто сечет в нем?
Нужно в спланированных заказах для заказов типа журналов перемещения (reqTrans.refType = TransferPlannedOrder) найти покрывается ли их потребность с помощью закупок(reqTrans.refType = Purch)
Самый "корректный" путь, кот я вижу - это вызвать для спланированного заказа ать reqTransExplode.run - взять получившийся derivedMap и в нем поискать закупку. Таким образом поступакет сама аксапта, когда рисует Explode дерево зависимостей Но дело в том, что мне это надо делать в цикле по спланированным заказам поэтому вызывать полные вычисления reqTransExplode.run для каждой строки - накладно. Поэтому интересует можно ли как-то ускорить вычисления, посчитав "вручную"? В нашем случае между журналами перемещений и закупка, нет между ними никаких больше перемещений номенклатуры, т.е связь "прямая" Можно ли как-то корректно и просто посчитать через reqTransCov в моем случае? |
|
22.05.2014, 12:12 | #2 |
Moderator
|
Я когда-то делал таблицу 'статического развертывания'. То есть - для каждой (точнее - почти каждой) положительной записи в reqTrans делал запись в этой таблице и записывал туда ссылку на номер лота строки заказов. Алгоритм был достаточно примитивный. Сначала джойним reqTrans по заказам с reqTransSetlement и с покрывающим reqTrans (производствам, закупкам, перемещениям), пишем результат в эту таблицу с уровнем 0. Потом начинаем джойнить уже саму таблицу статического развертывания с зависимыми потребностями (то есть расходными потребнтстями по переносу, производству и тп) зависимые потребности джойним через reqTransSettle с потребностями покрывающими их. И так делаем в цикле, пока в очередной итерации не выясниться что на следующем уровне ни одной новой записи в таблицы статического развертывания не добавилось ни одной записи.
Каждую ночь, после регенерации плана мы запускаем построение таблицу статического развертывания, при 2000000 чистых потребностей это занимает порядка 15-20 минут. Конечно если пользователи чего-то перепланируют днем, таблица уплывает, но в целом пользователей удалось к этому приучить. |
|
|
За это сообщение автора поблагодарили: MikeR (9). |
22.05.2014, 12:17 | #3 |
Участник
|
Ну если связь прямая, то можно одним запросом это сделать. Да через reqTransCov. Там все просто должно быть. ReceiptRecId, IssueRecId ссылаются на соответствующие ReqTrans.recId. Посмотрите метод reqTrans.selectCovJoinTrans()
|
|