11.03.2005, 17:06 | #1 |
Участник
|
Возможно ли создание такой же формы как и стандартная форма при вызове фильтра таблицы(Ctrl+F7)?
__________________
MBS Certified Master in Navision Developer |
|
11.03.2005, 17:11 | #2 |
NavAx
|
"Такой же" - это чтобы можно было выбрать, какое поле в левую часть зафигачить? Тогда, наверное, с помощью таблички Fields можно.
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
11.03.2005, 17:21 | #3 |
Участник
|
Предлагаю посмотреть в сторону использования стандартной закладки с фильтрами в реквест-форме отчета.
В некоторых случаях вполне годится вместо такой новой формы. |
|
11.03.2005, 17:32 | #4 |
Участник
|
Дуд, с левой частью мне все ясно, я не могу понять каким образом значения в правой задавать, как этот текстбокс определить.
Wizard, не пойдет, аляповато, но ес-сно проще.
__________________
MBS Certified Master in Navision Developer |
|
11.03.2005, 17:45 | #5 |
NavAx
|
А в чем именно проблема?
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
11.03.2005, 17:56 | #6 |
Участник
|
А проблема видимо в том, чтобы программно менять в текстбоксе формат ввода (как минимум). А как максимум - чтобы была полная уверенность, что ты редактируешь число, дату, код или текст
__________________
С уваженем, rootadmin |
|
11.03.2005, 17:56 | #7 |
Участник
|
Проблема в том, что не могу понять каким образом определить СоусЭкспрешн для правой части. Чтоб туда, соответственно полям, ставить значения фильтра. И потом всю эту фигню передать надо будет в функцию (но это не проблема). Вся эта штука с фильтрами необходима для оптимизации работы, т.к. стандартная фильтрация сильно тормозит. Конечно, я могу сделать тупо форму как в отчетах, но хотца однообразия в стиле Navision.
__________________
MBS Certified Master in Navision Developer |
|
11.03.2005, 18:02 | #8 |
Участник
|
Наверное полной аналогии не получится. Хотя бы потому, что если связь с таблицей есть - выводится лукапная стрелочка. Если дата или число - не выводится. Либо создвать дополнительную таблицу с нужными полями и связями и т.д. (под нашу таблицу), делать ее темповой и с ней уже работать.
__________________
С уваженем, rootadmin |
|
11.03.2005, 18:03 | #9 |
Участник
|
может всё таки поделишься своей идеей?
для чего эта форма нужна? что такое "сильно тормозит фильтрация"? может отговорю... |
|
11.03.2005, 18:13 | #10 |
Участник
|
Понятно. Всем спасибо. Если такую же форму не получится сделать без дополнительных таблиц, пойду другим путём.
to Wizard Сильно тормозит, в данном случае означает, что при наложенном стандартным способом фильтре перемещение по записям очень замедленно происходит. В моем случае уже сделана оптимизация и работает в 10, если не больше раз быстрее. Вопрос был только в организации пользовательского интерфейса.
__________________
MBS Certified Master in Navision Developer |
|
11.03.2005, 18:16 | #11 |
Участник
|
ну так проблема-то не в способе накладывания фильтров, а в способе поиска записей...
если действительно такой выигрыш в скорости - можно переписать триггеры OnFindRecord и OnNextRecord |
|
11.03.2005, 18:29 | #12 |
Участник
|
Спасибо, я об этом не думал, надо будет посмотреть. Но проблема все-таки в способе наложения фильтра. В стандартном варианте он явно накладывается на мою основную таблицу. У меня же на основании другой таблицы маркируются записи в основной таблице и, соответственно, в форме показываются только промаркированные.
__________________
MBS Certified Master in Navision Developer |
|
11.03.2005, 18:36 | #13 |
Участник
|
т.е. я так понимаю, что в этой основной таблице есть какое-то поле (несколько), при наложении фильтра на которое поиск записей долгий, и есть обходной способ реализации этого фильтра.
Но тем не менее хочется сохранить пользовательскую функциональность наложения фильтра на любое поле. Ну так ровно это и надо сделать в упомянутых мной триггерах. Сложности там особой нет, однако если нет опыта - понадобится некоторая настойчивость и аккуратность. и ещё, к слову... отображение маркированных записей работает быстро только при сортировке по первичному ключу, в связи с чем рекомендую не маркировать записи, а во временную таблицу их собирать (если только их не слишком много) |
|
11.03.2005, 18:42 | #14 |
NavAx
|
Че-то совсем туплю к вечеру...
Возвращаясь к форме: а нельзя ручками написать лукап, в поле соурсэкспрешн - текстовый, при лукапе класть туда FORMAT, а потом, ориентируясь на тип поля (он есть в Fields) разбирать его как надо?
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
11.03.2005, 18:55 | #15 |
Участник
|
можно конечно написать лукап, но полной эмуляции Ctrl+F7 не получится всё равно, поскольку, как было сказано выше - способ заполнения поля сильно зависит от самого этого поля - от типа данных, от описания реляций, от триггеров его обработки и т.п.
ну нет возможности на лету подменить SourceExpression в колонке.. как, например, комбобокс для Option сделать на текстовом сурсе? |
|
11.03.2005, 19:07 | #16 |
NavAx
|
Полной - нет
Но до некоторой степени извратиться можно... Типа например сделать не одно, а пять полей и делать видимым нужное в зависимости от типа (текст, код, дата, интегер, риал)... Или еще как извратнуться... Но вообще изврат конечно
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
14.03.2005, 16:51 | #17 |
Участник
|
Если использовать вышеупомянутые тригеры, то как работать с временной таблицей? Работаю с таблицей товаров. Написал ниже приведенный код, записи из временной таблицы не отображаются. В чем ошибка? Почему у меня Found всегда нет? Не пойму, что нужно делать!
OnFindRecord <div class='CALtop'>C/AL</div><div class='CAL'> IF (Условие для создания вр.табл.) THEN BEGIN TempItem.COPY(Rec); Found := TempItem.FIND(Which); IF Found THEN Rec := TempItem; EXIT(Found); END ELSE EXIT(FIND(Which));</div> OnNextRecord <div class='CALtop'>C/AL</div><div class='CAL'> IF (Условие для создания вр.табл.) THEN BEGIN TempItem.COPY(Rec); ResultSteps := TempItem.NEXT(Steps); IF ResultSteps <> 0 THEN Rec := TempItem; EXIT(ResultSteps); END ELSE EXIT(NEXT(Steps)); </div>
__________________
MBS Certified Master in Navision Developer |
|
15.03.2005, 01:19 | #18 |
Участник
|
Роман, Ваш код, касающийся триггеров получения данных, выглядит вполне работоспособным. Думаю, дело в наполнении временной таблицы.
Я набросал примерчик, в котором демонстрируется подмена фильтра по полю "Комплект" в справочнике товаров. Код: OnFindRecord(Which : Text[1024]) : Boolean IF GETFILTER("Bill of Materials") = FORMAT(TRUE) THEN BEGIN IF NOT BOMcollected THEN CollectBills(); TempItem.COPY(Rec); Found := TempItem.FIND(Which); IF Found THEN Rec := TempItem; EXIT(Found); END ELSE EXIT(FIND(Which)); OnNextRecord(Steps : Integer) : Integer IF GETFILTER("Bill of Materials") = FORMAT(TRUE) THEN BEGIN TempItem.COPY(Rec); ResultSteps := TempItem.NEXT(Steps); IF ResultSteps <> 0 THEN Rec := TempItem; EXIT(ResultSteps); END ELSE EXIT(NEXT(Steps)); //--------------------------------------- CollectBills() IF BOM.FIND('-') THEN REPEAT ParentItem.GET(BOM."Parent Item No."); TempItem := ParentItem; TempItem."Search Description" := 'Temp '+TempItem."No."; TempItem.INSERT; BOM."Line No." := 2147483647; //Maximum Integer UNTIL BOM.NEXT=0; BOMcollected := TRUE; |
|
15.03.2005, 10:00 | #19 |
Участник
|
to Wizard
Спасибо большое за пример! Исходя из него буду эксперементировать со своей формой
__________________
MBS Certified Master in Navision Developer |
|
15.03.2005, 15:02 | #20 |
Участник
|
Круто! Работает даже быстрее, чем по промаркированным записям. Правда глючит иногда при смене фильтра, но с этим я разберусь.
__________________
MBS Certified Master in Navision Developer |
|