|
|
#1 |
|
Участник
|
Добрый день коллеги. Была поставлена задача, реализовать поиск по Ctrl+F в форме № 7139 бюджета продаж (Продажа и Маркетинг - Анализ и отчетность - Бюджеты), но честно сказать я даже не знаю с чего начать. В форме реализовано отображение данных через темповую таблицу с помощью триггеров OnFindRecord и OnNextrecord. Запускаю дебугер и вызывая форму поиска по Ctrl+F, вбиваю любой текст, нажимаю найти и не попадаю не в один триггер, только после закрытия формы поиска вываливаюсь в OnFindRecord.
Подскажите, пожалуйста, реально сделать такую задачу или возможно только закинуть в шапку формы поле "Описание фильтр" и запрограммировать функционал по аналогии с полем "Товар фильтр"? |
|
|
|
|
#2 |
|
Участник
|
Стандартный поиск работать не будет тут никак.
Если делать именно поиск, то добавить TextBox c SourceExpr = FindText Примерный код: Код: <Control1000000000> - OnValidate() Code := FindText; <Control1000000000> - OnAfterValidate() CurrForm.UPDATE(FALSE); |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Честно сказать, код я ваш не понимаю. Введенное в TexBox закинуть в переменную code и обновить форму, а зачем?Сам поковырял код и пришел к выводу что TexBox на подобии ItemFilter делать проблематично, т.к темповая табла заполняется данным исходя из таблице Item Bufer Statistic вроде так пишется(щас нава под рукой нет) а к этой таблице прикручено куча вычисляемых полей, по которым считаются данные, в эти поля надо внедрять ItemdescriptionFilter , а чтобы эти поля считались надо добовлять поле Description в большинство ключей, что считаю вредным для системы. Ну а если, в общем, смотреть на проблему то фильтр через поле Описание не спасет: вот представите надо заполнить бюджет из 1000 позиций товара, что пользователь будет проваливаться в список товаров искать там свой товар потом выбирать его в качестве фильтра, потом заполнять циферку по бюджету по 3 месяцам и так 1000 раз, это же просто пытка какая то. Мне кажется проще сделать загрузку бюджета из excel. |
|
|
|
|
#4 |
|
Участник
|
Code - это ключевое поле таблицы, на которой построена форма.
Присвоив этому поле значение и сделав Update формы произодет позиционирование на записи, если она существует. Для поиска и фильтрации строк изменять в логике расчета суммы ничего не нужно. Сейчас я не совсем понимаю, что же вам все таки нужно - возможность найти запись по полю описание? По вводу 1000 записей - пользователи не могут вводить данные в той последовательности, которая на экране? Тогда не придется тратить время на поиск. |
|
|
|
|
#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 как и все переменные. |
|
|
|
|
#6 |
|
Участник
|
Я бы на OnFind считал бы наложенные на реку фильтры и далее, в OnFind, OnNext смотрел, попадает ли готовая к показу запись под этот фильтр. Код писать лень.. Вот как-то так.
|
|
|