AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.06.2009, 13:15   #1  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Добрый день коллеги. Была поставлена задача, реализовать поиск по Ctrl+F в форме № 7139 бюджета продаж (Продажа и Маркетинг - Анализ и отчетность - Бюджеты), но честно сказать я даже не знаю с чего начать. В форме реализовано отображение данных через темповую таблицу с помощью триггеров OnFindRecord и OnNextrecord. Запускаю дебугер и вызывая форму поиска по Ctrl+F, вбиваю любой текст, нажимаю найти и не попадаю не в один триггер, только после закрытия формы поиска вываливаюсь в OnFindRecord.
Подскажите, пожалуйста, реально сделать такую задачу или возможно только закинуть в шапку формы поле "Описание фильтр" и запрограммировать функционал по аналогии с полем "Товар фильтр"?
Старый 18.06.2009, 15:58   #2  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Стандартный поиск работать не будет тут никак.
Если делать именно поиск, то добавить TextBox c SourceExpr = FindText
Примерный код:
Код:
<Control1000000000> - OnValidate()
Code := FindText;
<Control1000000000> - OnAfterValidate()
CurrForm.UPDATE(FALSE);
Старый 23.06.2009, 17:01   #3  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Цитата:
Сообщение от .Quattro. Посмотреть сообщение
Стандартный поиск работать не будет тут никак.
Если делать именно поиск, то добавить TextBox c SourceExpr = FindText
Примерный код:
Код:
<Control1000000000> - OnValidate()
Code := FindText;
<Control1000000000> - OnAfterValidate()
CurrForm.UPDATE(FALSE);

Честно сказать, код я ваш не понимаю. Введенное в TexBox закинуть в переменную code и обновить форму, а зачем?

Сам поковырял код и пришел к выводу что TexBox на подобии ItemFilter делать проблематично, т.к темповая табла заполняется данным исходя из таблице Item Bufer Statistic вроде так пишется(щас нава под рукой нет) а к этой таблице прикручено куча вычисляемых полей, по которым считаются данные, в эти поля надо внедрять ItemdescriptionFilter , а чтобы эти поля считались надо добовлять поле Description в большинство ключей, что считаю вредным для системы.
Ну а если, в общем, смотреть на проблему то фильтр через поле Описание не спасет: вот представите надо заполнить бюджет из 1000 позиций товара, что пользователь будет проваливаться в список товаров искать там свой товар потом выбирать его в качестве фильтра, потом заполнять циферку по бюджету по 3 месяцам и так 1000 раз, это же просто пытка какая то.

Мне кажется проще сделать загрузку бюджета из excel.
Старый 23.06.2009, 18:16   #4  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Code - это ключевое поле таблицы, на которой построена форма.
Присвоив этому поле значение и сделав Update формы произодет позиционирование на записи, если она существует.

Для поиска и фильтрации строк изменять в логике расчета суммы ничего не нужно.
Сейчас я не совсем понимаю, что же вам все таки нужно - возможность найти запись по полю описание?

По вводу 1000 записей - пользователи не могут вводить данные в той последовательности, которая на экране? Тогда не придется тратить время на поиск.
Старый 24.06.2009, 14:21   #5  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Цитата:
Сообщение от .Quattro. Посмотреть сообщение
Присвоив этому поле значение и сделав Update формы произодет позиционирование на записи, если она существует.
О пирикольно век живи век учись, а я setposition всегда пользовал.
Вот набросал код для приметивного поиска по аналогии кнопки "Найти Следующую"
Код:
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;
LineDimCode Text30 это переменая для выбора значения в textBox-се "Выводить в строках" (уже существует)
DescriptionFindText Text250- это пременная для нашего textBox-са в котором будем вводить параметры поиск по наименованию
CallFind Boolean - Флажок определяющий первый раз мы запускаем поиск или нет.
ItemLoc Record 27 - локальная таблица товаров, но заведена C\al Globals как и все переменные.
Старый 29.06.2009, 12:30   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Я бы на OnFind считал бы наложенные на реку фильтры и далее, в OnFind, OnNext смотрел, попадает ли готовая к показу запись под этот фильтр. Код писать лень.. Вот как-то так.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.