|
![]() |
#1 |
:o)
|
снова updateMarking 4.0
Добрый день, коллеги!
Есть проблема с маркировкой, может кто-то посоветует с какой стороны её решить (кроме отказа работать с 4кой) Есть исправление функционала в updateMarking, связанного с кредит-нодой, это отразилось на процедуре сторнирования журналов переноса есть постановка о том, что Цитата:
В момент создания строк/разноски? сторно журнала для исходных строк должно заполняеться:
- у строки StatusReceipt (Куплено...) - InventRefTransId (проставляется InventTransId сторнирующей строки) - у строки StatusIssue (Продано...)- InventTransIdReturn (проставляется InventTransId сторнирующей строки) У сторнирующих строк: - у строки StatusReceipt (Куплено...) - InventTransIdReturn и InventRefTransId (проставляется InventTransId исходной строки) - у строки StatusIssue (Продано...) InventRefTransId (проставляется InventTransId исходной строки) X++: if ((inventTrans.InvoiceId != '') && (inventTrans.InvoiceId == _invoiceId)) // здесь обернули строку кода в условие { inventTrans.InventRefTransId = _inventRefTransId; } X++: Qty1 = InventTrans::updateMarking(transOrig.InventTransId, transNew.InventTransId , transOrig.Qty); Qty2 = InventTrans::updateMarking(transNew.InventTransId , transOrig.InventTransId, -transOrig.Qty); if (Qty1 != -Qty2) error('Не удалось сопоставить проводки'); задача срочная, если есть какие-то мысли в каком направлении двигаться, подскажите, пожалуйста. то, что нашлось по теме ![]() http://axforum.info/forums/archive/i...p?t-17558.html Маркировка - достала!
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
![]() |
#2 |
Участник
|
ты хотя бы код целиком выложи.
мысль тут простая: посмотреть в дебугере, почему эти количества не равны.
__________________
Felix nihil admirari |
|
![]() |
#3 |
:o)
|
Мысль хорошая, тоже приходила и ещё до поста:
По конкретно моей задаче: не было очистки референсного значения при удалении строки транзакции, а алгоритм подбирает значение, учитывая данные только с непустым этим значением, отсюда расхождение, но ... вопрос в том, что можно ещё зацепить или сломать, делая изменения в updateMarking (перекрёстные ссылки просмотрены) Может кто-нибудь проконсультировать по предметной части?
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
![]() |
#4 |
:o)
|
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
![]() |
#5 |
Участник
|
Пара предложений. Не уверен, что правильно понял логику ...
1. InventTrans::updateMarking() Проверка на код накладной, предположительно, это "защита" от изменения документа. В том смысле, что раз накладную создали, то количество по складским проводкам уже не может быть изменено. Вероятно, по этой причине и в delete() не было очистки маркировок. Просто маркированные проводки не могли быть удалены. Точнее, наоборот. Маркировка только в тех проводках, которые не удаляются ![]() Для складских журналов аналогичным признаком будет факт разноски журнала. Вот через ИЛИ и добавить соответствующее условие if ("Указана накладная" ИЛИ "складской журнал разнесен") - (Маркируем) 2. InventJourCopyStorno.run() Сделать сопоставление не вообще "всего" количества, а именно того, которое удалось сопоставить. Т.е. примерно так X++: markQty = InventTrans::updateMarking(transOrig.InventTransId, transNew.InventTransId , transOrig.Qty);
if (markQty)
InventTrans::updateMarking(transNew.InventTransId , transOrig.InventTransId, -markQty); Ведь если не удалось сопоставить какое-то количество, значит, это количество где-то, как-то "заблокировано" к сопоставлению. Ну, и зачем "ломать об колено"? Здесь даже проверка уже смысла не имеет, ведь сторно-документ только что создан, так что вторая маркировка в сторно-документе всегда будет на все указанное количество
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: jeky (3). |
![]() |
#6 |
:o)
|
![]()
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
![]() |
#7 |
:o)
|
Цитата:
Сообщение от Владимир Максимов
![]() 1. InventTrans::updateMarking()
Проверка на код накладной, предположительно, это "защита" от изменения документа. В том смысле, что раз накладную создали, то количество по складским проводкам уже не может быть изменено. Вероятно, по этой причине и в delete() не было очистки маркировок. Просто маркированные проводки не могли быть удалены. Точнее, наоборот. Маркировка только в тех проводках, которые не удаляются ![]() - создали строки в журнале, используя функцию "сторно на основании", журнал не разнесён, маркировка проставлена - решили строки удалить маркировку в этом случае необходимо очистить? (я про доработку, которую мы сделали) или это необязательно? и возможно ли идентифицировать данные проводки, еcли мы помещаем функционал в общий delete() ? просто ошибка "Не удалось сопоставить проводки" плавающая, в определённый момент удаление маркировки "помогло" избавиться от её возникновения, но через какое-то время она снова возникла, я могу, безусловно, оттрассировать ошибку и выяснить причину её возникновения, но мне пока не хватает опыта понять условия возникновения причины. т.е. симптомы ясны, не ясны причины. если маркировка была проставлена, как вы объяснили выше и не было необходимости в её очистке, то, возможно, и ошибка как раз имеет право на существование и от неё не надо избавляться, а есть необходимость откорректировать что-то другое, возможно в т.ч. действия пользователей, но это надо достаточно четко выявить
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
![]() |
#8 |
Участник
|
Насколько я в курсе, удаление маркировок и так выполняется при помощи
InventTrans::deleteMarking() Возможно, раз был изменен InventTrans::updateMarking() и в качестве поля "маркировки" стали использовать еще и InventTransIdReturn, то именно с этим полем и связаны проблемы По поводу InvoiceId, я же уже написал. Вроде бы, в складской проводке это поле заполняется в момент финансовой разноски. Т.е. Вам надо выполнять маркировку не в момент создания копии журнала, а в момент разноски журнала (post). Очевидно, для этих целей надо сохранять ссылку на лот-источник в строке самого журнала. Тогда отпадет необходимость модифицировать удаление Хотя, вроде, поля в строках журнала для этих целей и так есть \Classes\InventMov_Journal\setInventRefFields. Просто используются в стандартном функционале по другому. Зеркально. Но никто не мешает заполнить их заранее в момент копирования ![]()
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
![]() |
||||
Тема | Ответов | |||
Снова SpreadSheet 8) | 23 | |||
И снова про номерные серии... правда немного глубже... | 29 | |||
Снова запрос | 11 | |||
снова COM Connector | 11 | |||
И снова про Сводное планирование | 2 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|