|  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 смотрел, попадает ли готовая к показу запись под этот фильтр. Код писать лень.. Вот как-то так.
		 | 
|  |