08.08.2005, 08:57 | #1 |
Участник
|
Доброго времени суток!
Подскажите, пожалуйста, наиболее оптимизированный вариант решения следующей задачи: 1. По фильтру названия товара, задаваемому пользователем (вида '*стол*'), выбрать из таблицы "Товар" все номера товаров. 2. Для выбранных номеров товаров отобразить все операции из таблицы "Товар Книга Операций". Я знаю один вариант решения, но он не срабатывает в случае, если после первой фильтрации получатся большое количество записей. Может быть, кто-то сталкивался с похожей проблемой, помогите |
|
08.08.2005, 09:19 | #2 |
Участник
|
Как вариант используйте на 32 табличке маркировку записей. Например бежите по отфильтрованной табличке товаров, фильтруете 32 таблицу пономеру товара, маркируете. Потом отображаете на форме только маркированные записис.
P.S. Я так понимаю названия в 32 таблице отличаются от названий в Товарах?
__________________
Want to believe... |
|
08.08.2005, 09:34 | #3 |
Участник
|
Отобразить видимо в форме а не в репорте?
Маркировать не есть хорошо, ибо медленно. Лучше тупо пробежать по товарам, по каждому товару взять его записи в таблице 32й и свалить их во временную 32ю. И запустить форму 38, подсунув ей эту временную таблицу. |
|
08.08.2005, 09:44 | #4 |
Участник
|
У сожалению, предложенный DA_NEAL будет работать довольно медленно, особенно на 32 таблице .
Как вариант, можно сделать буферную таблицу с кодами товара и кодом пользователя и в 32 протянуть flowfield Exists. Можно так же попробовать "нечестным" образом пропускать записи на OnFindRecord и OnNextRecord, анализируя временную табличку с кодами товара, полученными в результате наложения фильтра. |
|
08.08.2005, 10:02 | #5 |
Участник
|
Цитата:
Сообщение от SVG
Отобразить видимо в форме а не в репорте?
Цитата:
Сообщение от SVG
Лучше тупо пробежать по товарам, по каждому товару взять его записи в таблице 32й и свалить их во временную 32ю.
И запустить форму 38, подсунув ей эту временную таблицу. |
|
08.08.2005, 10:08 | #6 |
Участник
|
kekki - ну тут все просто .
Делаете два датаайтема, 27 таблицу и 32 с отступом, связываете по коду товара, фильтр вида '*стол*' накладываете на 27, все остальное за Вас сделает Навижн. |
|
08.08.2005, 10:09 | #7 |
NavAx
|
А порядок операций важен?
Если не важен, то можно тупо задать основной датаайтем - Item, ему подчинить датаайтем Item Ledger Entry, связанный по коду товара, на верхний датаайтем наложить юзерский фильтр (например *стол*) и вывести все нужные записи. Как в отчете использовать временную таблицу: Задаете датаайтем "Целое" (Integer). Это такая хитрая табличка (в обжект дизайнере не видна, но видна в списке таблиц, который, например, открывается при создании формы. ID 2000000026), которая просто содержит в себе упорядочные целые числа. На OnPreDataItem (можно раньше) встаете на первую запись временной таблички TempTable.FIND('-'); На OnAfterGetRecord пишете что-нибудь вроде IF TempTable.NEXT = 0 THEN SETRANGE(число, число) - т.е. когда данные во временной табличке кончатся, Целое перестанет крутиться. Перед TempTable.NEXT запоминаете куда-нибудь нужные значения (например, номер товарной операции и код товара) и можете выводить их в секции Body датаайтема Целое.
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
08.08.2005, 11:11 | #8 |
Участник
|
Работа с временной таблицей в отчете - смотрите репорт 12410
ЗЫ сеня всем буду советовать этот репорт... |
|
10.08.2005, 14:54 | #9 |
Участник
|
Все получилось!
Всем огромное спасибо за советы!!!!! |
|