11.11.2004, 17:35 | #1 |
Участник
|
уже всю голову сломал...
Всех приветствую!
Я создаю форму, в которую впихиваются строки накладной (Таблица CustInvoiceTrans). В каждой строке есть ссылка на номенклатуру (т.е. на InventTable), которая в свою очередь ссылается на InventItemRange. В последней таблице есть 2 поля: RangeId и RangeIdParent - родитель. Мне надо раскрутить цепочку для отдельно взятой строки из CustInvoiceTrans. К примеру в строке у меня указана номенклатура Н. Переходим к таблице InventItemRange и узнаем по полю RangeId, что это Сыры. Однако поле RangeIdParent говорит о том, что есть уровень повыше. Берем значение этого поля и ищем его опять в поле RangeId. Находим "Молоко. Гасртоном", но и это не последний уровень. Последний будет когда в поле RangeIdParent ничего не окажется, значит, все. Возвращаясь к моей форме: будет 6 полей, в которые нужно записать вот эти уровни. И как это сделать, я пока не придумал. Цепочку эту можно раскрутить в отдельном методе, можно запихнуть результаты в переменные и дергать их дисплейными методами, но куда этот метод раскрутки вставить? Чтобы он не один раз сработал (как в Init), а для каждой строки. И не долго ли так будет? Прошу высказывать соображения, если я понятно изложил задачу. |
|
12.11.2004, 12:01 | #2 |
Участник
|
Вставить рекурсию лучше в метод таблицы InventTable, а возвращать он должен контейнер со значениями. В форме - дисплейные методы, забирающие из контейнера каждый свое значение, а заодно проверяющие для какого ItemID в контейнере лежат значения.
Цитата:
Чтобы он не один раз сработал (как в Init), а для каждой строки. И не долго ли так будет?
Скорость можно повысить разместив эти поля для каждого ItemID в талице InventTable. |
|
12.11.2004, 15:14 | #3 |
Участник
|
Если известно что количество уровней не превышает некое число N, то можно сделать это с минимальными накладными расходами и без использования вычислимых полей, если набросать на форму N дополнительных DataSource-ов соединённых по outer join.
|
|