18.06.2009, 13:15 | #1 |
Участник
|
Добрый день коллеги. Была поставлена задача, реализовать поиск по Ctrl+F в форме № 7139 бюджета продаж (Продажа и Маркетинг - Анализ и отчетность - Бюджеты), но честно сказать я даже не знаю с чего начать. В форме реализовано отображение данных через темповую таблицу с помощью триггеров OnFindRecord и OnNextrecord. Запускаю дебугер и вызывая форму поиска по Ctrl+F, вбиваю любой текст, нажимаю найти и не попадаю не в один триггер, только после закрытия формы поиска вываливаюсь в OnFindRecord.
Подскажите, пожалуйста, реально сделать такую задачу или возможно только закинуть в шапку формы поле "Описание фильтр" и запрограммировать функционал по аналогии с полем "Товар фильтр"? |
|
18.06.2009, 15:58 | #2 |
Участник
|
Стандартный поиск работать не будет тут никак.
Если делать именно поиск, то добавить TextBox c SourceExpr = FindText Примерный код: Код: <Control1000000000> - OnValidate() Code := FindText; <Control1000000000> - OnAfterValidate() CurrForm.UPDATE(FALSE); |
|
23.06.2009, 17:01 | #3 |
Участник
|
Цитата:
Честно сказать, код я ваш не понимаю. Введенное в TexBox закинуть в переменную code и обновить форму, а зачем? Сам поковырял код и пришел к выводу что TexBox на подобии ItemFilter делать проблематично, т.к темповая табла заполняется данным исходя из таблице Item Bufer Statistic вроде так пишется(щас нава под рукой нет) а к этой таблице прикручено куча вычисляемых полей, по которым считаются данные, в эти поля надо внедрять ItemdescriptionFilter , а чтобы эти поля считались надо добовлять поле Description в большинство ключей, что считаю вредным для системы. Ну а если, в общем, смотреть на проблему то фильтр через поле Описание не спасет: вот представите надо заполнить бюджет из 1000 позиций товара, что пользователь будет проваливаться в список товаров искать там свой товар потом выбирать его в качестве фильтра, потом заполнять циферку по бюджету по 3 месяцам и так 1000 раз, это же просто пытка какая то. Мне кажется проще сделать загрузку бюджета из excel. |
|
23.06.2009, 18:16 | #4 |
Участник
|
Code - это ключевое поле таблицы, на которой построена форма.
Присвоив этому поле значение и сделав Update формы произодет позиционирование на записи, если она существует. Для поиска и фильтрации строк изменять в логике расчета суммы ничего не нужно. Сейчас я не совсем понимаю, что же вам все таки нужно - возможность найти запись по полю описание? По вводу 1000 записей - пользователи не могут вводить данные в той последовательности, которая на экране? Тогда не придется тратить время на поиск. |
|
24.06.2009, 14:21 | #5 |
Участник
|
Цитата:
Вот набросал код для приметивного поиска по аналогии кнопки "Найти Следующую" Код: IF LineDimCode = 'Товар' THEN BEGIN IF STRPOS(DescriptionFindText,'*') = 0 THEN DescriptionFindText:= DescriptionFindText+'*'; ItemLoc.SETFILTER(Description,DescriptionFindText); IF NOT CallFind THEN BEGIN IF ItemLoc.FINDSET THEN BEGIN CallFind:=TRUE; //SETPOSITION(Rec.FIELDCAPTION(Code)+'=CONST('+ItemLoc."No."+')' ); Rec.Code:=ItemLoc."No."; END; END ELSE BEGIN IF ItemLoc.NEXT <>0 THEN BEGIN SETPOSITION(Rec.FIELDCAPTION(Code)+'=CONST('+ItemLoc."No."+')' ); END ELSE CallFind:=FALSE; END; END; DescriptionFindText Text250- это пременная для нашего textBox-са в котором будем вводить параметры поиск по наименованию CallFind Boolean - Флажок определяющий первый раз мы запускаем поиск или нет. ItemLoc Record 27 - локальная таблица товаров, но заведена C\al Globals как и все переменные. |
|
29.06.2009, 12:30 | #6 |
Участник
|
Я бы на OnFind считал бы наложенные на реку фильтры и далее, в OnFind, OnNext смотрел, попадает ли готовая к показу запись под этот фильтр. Код писать лень.. Вот как-то так.
|
|