|
18.07.2011, 11:27 | #1 |
Участник
|
Привет всем.
Возникла следующая проблема с наложением фильтров. Никак не могу сообразить. Есть некая простенькая таблица "Резервы", куда филиалы вносят свои данные о резервах. Точнее, не вносят, а периодически присылают почтой, а менеджер в ЦО (центральном офисе) потом эти данные загружает. Собственно, вопрос?! Как прикрутить эти данные к таблице Товар так, чтобы менеджеры в ЦО могли смотреть остатки филиалов (как сразу, так и по отдельности) Поля в этой таблице Резервы совсем простые: "Код отдела" "Товар Но." "Дата резерва" "Резерв Кол-во" Всё вроде бы тупо и я начал было делать так... В таблице Товар создаю поле "Дата резерва филиала" тип переменной Date, а тип поля FlowField На это поле накладываю формулу, которая ищет максимальную дату обновления резервов по этому товару в таблице Резервы. = Max("Резервы"."Дата Резерва" WHERE (Товар Но.=FIELD(Но.))) Далее в таблице товар делаю поле "Резерв филиал" Decimal и тоже FlowField с формулой = Sum("Резервы"."Резерв Кол-во" WHERE (Товар Но.=FIELD(Но.),Код отдела=FIELD(Отдел Фильтр),Дата Резерва=FIELD(FILTER(Дата резерва филиала)))) Если схематично, то Товар Но. -> Но. Код Отдела -> Отдел Фильтр Дата резерва -> Резерв филиал фильтр + ставлю галочку на св-ве "Value as filter" Собственно, вот. Всё просто до идиотизма, но... Но не работает! Ругается на несоответствие типа поля "Дата резерва филиала"(Date) и накладываемого фильтра (Code или Text) (а если ставлю полю "Дата резерва филиала" вместо Date тип Text, то на нём тогда отказывается работать формула поиска максимальной даты) Подскажите, кто знает как это победить или как-то наложить фильтры иначе? Никакого КОДА писать не хочу принципиально! Вот упёрся лбом и всё - НЕ БУДУ!!! Хочется победить все эти "ограничения" красиво, лишь наложением фильтров и ПРАВИЛЬНЫМ составлением формул. |
|
18.07.2011, 14:33 | #2 |
Участник
|
Думаю, проблема в галочке на св-ве "Value as filter"
|
|
18.07.2011, 15:08 | #3 |
Участник
|
|
|
20.07.2011, 12:46 | #4 |
Участник
|
Блин! То работало-работало "без галочки", а то вдруг - ХЛОП! И перестало.
Короче, там оказалось всё ЕЩЁ немного хитрее Поскольку оба поля являются CalcField'ами, а результат второго зависит от вычисленного значения первого, то Nav путается. И тут главный вопрос: какое поле при выводе этих полей на форму Nav для себя считат "первым", а какое "вторым"? Поля во всём этом Nav-зоопарке могут вычисляться в 3-х местах. 1) В свойствах формы CalcFields, когда перечисляем там поля через запятую. (кстати, не факт, что вычисляется именно в том порядке, что вы написали, а не по ID этого поля в объекте) 2) При выводе колонки в таблице на экран. Тоже там Nav сам себе запускает calcfields. 3) В триггерах формы типа OnAfterGetRecord (или прочих) втупую вызовом Товар.calcfields(xxx) в нужном НАМ(!), а не Nav порядке. И вот если предположить, что программист написал одновременно несколько вычисляемых полей в свойствах формы, потом в колонки таблицы их вывел (а юзер у себя на компе эти колонки ещё и местами поменял) То ХРЕН ЗНАЕТ, как там вызывается CalcField и в каком порядке. Короче, не надо делать зависящие друг от друга вычисляемые поля - вот я всё это к чему. Извращение это. Это так... совет. Мало ли... пригодится. Всем удачи. ЗЫ: Сам же решил вопрос "втупую" по способу 3. Вроде работает |
|