|
03.03.2010, 16:55 | #1 |
MCITP
|
Накладной расход, переход к основной таблице
Всем привет.
Наткнулся на интересное поведение ядра(?) Аксапты. На версиях от 3 до 2009. Ситуация такая: Берём, для чистоты эксперимента, создаём новую таблицу. В ней делаем 2 поля: - Field1 с типом PurchMarkupCode - Field2 с типом MarkupCode и связью с таблицей MarkupTable на поле МаrkupCode. Для Field2 можно создать и EDT аналогичный и не вешать связь на самой таблице, это ничего не меняет. Суть в том, что второе поле связывается с накладным расходом не конкретного типа (клиент\склад\поставщик), а как бы со всеми сразу. Дальше идём в сам справочник накладных расходов (форма MarkupTable) и ставим там брэйкпоинт на методе init() - там есть такой код: X++: if (element.args().parmEnumType()) { markupModule = element.args().parmEnum(); } else { // called from 'go to main table' if (element.args().dataset()) { Пробуем перейти к основной таблице с одного поля и с другого. Чувствуем разницу. Разница в том, что для прехода с Field1 element.args().dataset() (и .record(), соответственно) будут заданы, а для с Field2 - нет. При этом, если задать в связи для поля Field2 какое угодно дополнительное условие (например DataareaId == MarkupTable.DataareaId ), то эти значения в args магическим образом появляются. Думал может это как-то связано с индексами и ключами в таблице НР: менял, убирал, добавлял, игрался с уникальностью - никакого влияния не обнаружил. Вообщем ковырялся по всякому, так и не понял почему так происходит. Мистика, или есть логическое объяснение? PS Предвосхищая волну советов "как это обойти" оговорюсь, что да, обойти это можно многими различными способами. Вопрос не об этом, а о "теории происходящего".
__________________
Zhirenkov Vitaly |
|