Поиск и отображение результата

Здравствуйте!
Пытаюсь разобраться с бизнес-процессами.
Версия 3.3.2.

Нужно создать окно поиска по абонентам. И отобразить грид с результатом.

Я правильно понимаю, что у меня должно быть два action "Открытие окна", одно с окном поиска, другое с окном грида?
Из окна поиска мне нужно получить то, что ввели и сделать поиск по абонентам. И на основе отфильтрованной датасет уже делать грид?

Где делать сам поиск?
В скрипте поиска или передать параметры того что ввели куда-то еще, там сделать поиск и по получившемуся датасет строить грид?

С передачей параметров тоже не очень выходит. Создала параметр Name у диаграммы и у действия, связала их, но достать то, что ввели из Action1OnAfterExecute не получается.

Помогите, пожалуйста.

Нравится

10 комментариев

Здравствуйте, Светлана.
Посмотрите, может вам подойдет по функционалу окно wnd_SelectData (поиском найдите этот сервис в администраторе).
Это окно используется при выборе какого-либо значения из справочника в любое справочное поле. В нем возможна фильтрация по одному из полей и сразу же выводиться результат в гриде.

Здравствуйте Светлана,

Предлагаю вам создать сервис окна (Window) поместить в него компонент Edit, кнопку поиска и DataGrid, вызывать данное окно в БП можно с помощью действия "Открытия окна", далее выберете опцию "Другое окно" и выбирете сервис окна.
По нажатию кнопки проводить фильрацию датасета, согласно строке поиска.
Пример :

var Dataset = dlData.Dataset;
Dataset.Close();
ApplyDatasetFilter(Dataset, 'NameLike',edtFind.Value, true);
Dataset.Open();	

где NameLike - имя фильтра в датасете,
edtFind - имя контрола Edit

Здравствуйте,

Хочу добавить поле поиска на вкладку контрагенты.

Добавил на wnd_AccountsWorkspace

как советовал Алексей компонент Edit, кнопку поиска.
В обработчике события вставил код

var Dataset = dlAccounts.Dataset;
 Dataset.Close();
 ApplyDatasetFilter(Dataset, 'Name',admSerch.Value, true);
 Dataset.Open();
if (ShowConfirmationDialog("Событие по нажатию кнопки поиска") != wmrYes) {
			return; }

Больше нигде ничего не менял.
Поиск не выполняется, подскажите как реализовать

Здравствуйте Владимир,
В случае с контрагентами, срабатывает событие отключения фильтров, так сделано для того что бы срабатывали представления (которые реализованы как фильтры)
В Вашем случае следует сделать так:

function btnSrchClick(Control) {
dlData.Dataset.DisableEvents();
dlData.Dataset.Close();
//MessageBox(edtAccountName.Value);
if (edtAccountName.Value != '') 
{
ApplyDatasetFilter(dlData.Dataset,'Name',edtAccountName.Value,true);
}
else 
{ApplyDatasetFilter(dlData.Dataset,'Name',edtAccountName.Value,false);
}
dlData.Dataset.Open();
dlData.Dataset.EnableEvents();
}

Если значение в edtAccountName есть включаем фильтр, если значения нет, выключаем фильтр, что бы оторражалось все так как в наших представлениях в Контрагентах

Спасибо Все зарабртало.
Сменил имя датасета и едитов и все гуд!

Сейчас идет строгий поиск а я хочу сделать поиск на основе фильтра "Содержит"

Конечная цель, убрать кнопку поиска. Применение фильтра вставить в обработчик событий едита.онченж. Когда пользователь вводит более 3х символов начинается фильтроватся таблица контрагентов по имени. Если имя содержит в любом месте даный набор символов то оно отображается

Владимир, здравствуйте!

Для реализации Вашей задачи рекомендую создать функцию:

function searchName()
{ 		
        var Dataset = dlData.Dataset;
	Dataset.DisableEvents();
	Dataset.Close(); 
        ApplyDatasetFilter(Dataset, 'NameByLike', edtEdit.Value, true);
	Dataset.Open();
	Dataset.EnableEvents();
}

где NameByLike - фильтр типа Like. (tbl_Account.Name содержит Parameter: NameByLike).

Далее, на событии OnChange для Edit контрола, прописать приблизительно следующий код:

function edtEditOnChange(Edit) {
	if (edtEdit.Value.length > 2)
	{
		searchName();
	}
	if (edtEdit.Value.length == 0)
	{
		var Dataset = dlData.Dataset;
		Dataset.DisableEvents();
		Dataset.Close();
		ApplyDatasetFilter(Dataset, 'NameByLike', edtEdit.Value, false);
		Dataset.Open();
		Dataset.EnableEvents();
	}
}

Спасибо за ответ.
У меня ругается на

ApplyDatasetFilter(Dataset, 'NameByLike', edtEdit.Value, true);

Если я ставлю фильтр 'Name' то все работает.
Где можно посмотреть список фильтров, может это поможет решить вопрос

Здравствуйте Владимир,

"Олейник Дмитрий" написал:где NameByLike - фильтр типа Like. (tbl_Account.Name содержит Parameter: NameByLike).

NameByLike в примере Дмитрия, это названия фильтра, который предварительно необходимо создать
1
Скорее всего у Вас он не создан

Фильтр NameByLike существет, но параметер у него "Name", хотя как я понимаю, это не важно, а ошибка все равно осталась.
Создавал свой фильтр и результат тот-же!

Спасибо Алимовой Анне помогла.
Реально важно чтоб имя параметра совпадало с именем фильтра

Показать все комментарии