Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Подробнее Фильтрация реквизита типа «Справочник»

Фильтр можно добавить с помощью метода setFilter() у реквизита в клиентском API веб-доступа, в который можно передать выражение фильтрации:

 

// При выборе работника отобразить только работников,

// относящихся к нашей организации с кодом 123418.

WA.CR.form.requisites['Работник'].setFilter('[НашаОрг2] = 123418');

 

Подробнее Получение фильтра через прикладной сценарий и установка на реквизите

Для построения выражения фильтрации можно использовать не только значения реквизитов карточки, но и данные с сервера, например, из прикладного сценария.

 

// Указать имя сценария, который возвращает список ИД записей справочника,

// доступных текущему пользователю.
CallServiceSync("/Script.asmx/Run", { Name: "WAGetAvailableLocationsForProcessorSuperUser", Params: { UserID: WA.CR.user.ID, Process: "Biddings" } }, function (res) {
if (res.Result !== null && typeof WA.CR.form.requisites['AffiliateT'] !== 'undefined') {
     WA.CR.form.requisites['AffiliateT'].setFilter('[НашаОрг2] in {' + res.Result + '}');
}
});

 

Подробнее Фильтрация ведущих-ведомых реквизитов

 

// Если указан страна, то при выборе города

// отображать только города выбранной страны. Иначе отображать все города.

WA.CR.form.requisites.Страна.bind('change', function () {
var countryVal = WA.CR.form.requisites.Страна.getValue();
if (countryVal) {
   WA.CR.form.requisites.Город.setFilter("[Страна] = " + countryVal);
} else {
   WA.CR.form.requisites.Город.setFilter('');
}
});

 

Подробнее Фильтрация списка записей справочника, открытого через быстрый запуск

В XML-файле веб-модуля нужно добавить выражение фильтрации в атрибуте filter:

 

<!-- В справочнике "Работники" отображать только утвержденные действующие записи -->

<RunTree>
<TreeNode type="Reference" refcode="РАБ" caption="ACTUAL_WORKERS"
  filter='[СтатУтв]= "+" &amp; [Состояние]="Д" '/>
</RunTree>

 

Подробнее Фильтрация списка записей справочника

Веб-доступ подхватывает событие «Набор данных.Открытие», в котором можно наложить фильтр на справочник с помощью AddWhere.

Подробнее Фильтрация значений параметра типового маршрута

Требуется создать функцию setFilterOnAskableParams, которая вызывает сценарий UserGroupFilter, возвращающий фильтр. Фильтр нужно применить к запрашиваемому параметру. Функцию setFilterOnAskableParams вызовем в событии AfterShow блока №16 типового маршрута по согласованию договоров. В результате в запрашиваемом параметре «Юрист» будет применяться фильтр, который вернул сценарий UserGroupFilter.

function setFilterOnAskableParams(param) {
var jReq = $('#askpar' + param);
if (jReq) {
   CallServiceSync("/Script.asmx/Run", { Name: "UserGroupFilter", Params: { 'JobID': WA.CR.ID } }, function (res) {
     jReq.data('filter', res.Result);
  });
 
  // Очистить список последних объектов.
   setTimeout(function () {
    var refInstance = jReq.data('ReferenceSelectInstance');
    if (typeof refInstance !== 'undefined') {
       refInstance.refcodes = { "ПОЛ": { Caption: "Users", NeedShowHint: true, Filter: null, DisableSpecialProcessing: false } }
       refInstance.refcodesCount = 1
    }
  }, 50);
}
}

 
Данная функция вызывается в событии AfterShow блока типового маршрута:

 

var afterShowParams = {
"AfterShow": function (callback) {
   setFilterOnAskableParams("Юрист");
}
}
var jobEvents = {
'  ContrAgr': {
   blocks: {
    '16': afterShowParams
  }
}
};
WebAccess.setEvents(jobEvents);
WebAccess.Job.loadEvents(jobEvents);

При получении значений для фильтра всегда выполняется синхронный запрос, чтобы выбор записей не начался до получения фильтра.

 

Подробнее Фильтрация записей справочника на клиенте

Веб-доступ подхватывает событие «До выбора», в котором можно реализовать фильтрацию на реквизите типа «Запись справочника».

Подробнее Фильтрация при выборе значения в строке табличной части

Фильтр в строках табличной части устанавливается аналогично реквизитам карточки с помощью метода setFilter():

' При выборе организации отобразить только организацию с ИД 65421.

WA.CR.form.controls.tables.STcxGrid3.rows[num].requisites['ОрганизацияТ3'].setFilter('[ИД] = 65421')

Если фильтр должен зависеть от значений реквизитов строки, то необходимо устанавливать фильтры для каждой строки:

 

' В реквизите ОрганизацияТ3 во всех строках таблицы установить фильтр по стране.

' Страна находится в реквизите строки текущей таблицы.

$.each(WA.CR.formcontrols.tables.STcxGrid3.rows.toArray(), function (row) {
 row.requisites['ОрганизацияТ3'].setFilter('[Страна] = ' + row.requisites['СтранаТ3'].getValue();
});

При этом фильтр необходимо обновлять при каждом изменении ведущего реквизита в строке.

 

Подробнее Открытие отфильтрованного справочника из дерева папок

Фильтр зависит только от реквизитов справочника:

В XML-файле веб-модуля нужно добавить выражение фильтрации в атрибуте filter:

 

<!-- В справочнике "Работники" отображать только утвержденные действующие записи -->

<RunTree>
<TreeNode type="Reference" refcode="РАБ" caption="ACTUAL_WORKERS"
  filter='[СтатУтв]= "+" &amp; [Состояние]="Д" '/>
</RunTree>

Фильтр зависит от информации о текущем пользователе (правах, вхождении в группы пользователей, нахождении на определенном уровне иерархии в орг. структуре):

Веб-доступ подхватывает событие «Набор данных.Открытие», в котором можно наложить фильтр на справочник с помощью AddWhere.

Подробнее Открытие отфильтрованного справочника в модальном окне

WA.CMP.dialogs.ReferenceGridDialog.createAndShow({
 referenceName: 'РАБ',
 mode: REFERENCE_MODAL_MODE.MULTI,

// Задать выражение фильтрации.
 filterExpression: '[Наименование] like "%тест%"'
}).selectionDone(function (res) {
// Преобразовать полученный результат в массив ИД.
var idList = res.map(function (item) {
  return item.id;
});
 
// Сформировать и вывести сообщение пользователю.
 alert(format("IDs = {0}\nRecordCount = {1}", idList.join(','), res.length));
});

Пример:

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

 

// Сценарий для получения работников по текущему пользователю.

Params = Sender.Params
 
CurrentUserID = Params.ValueByName('CurrentUserID')
EmployeesList = GetEmployeesByUserID(CurrentUserID; FALSE; FALSE)
if EmployeesList.Count = 0
   Result = ''
 endif
 EmployeesList.Delimiter = ','

 Result = EmployeesList.DelimitedText

 

// Вызов сценария и открытие справочника с фильтрацией в модальном окне.

var scriptName = 'GetEmployees';
WA.FC.scripts(scriptName).execute({ 'CurrentUserID': WA.CR.user.ID }).done(function (res) {
if (res) {
   WA.CMP.dialogs.ReferenceGridDialog.createAndShow({
     referenceName: 'RRCAssignments',
     mode: REFERENCE_MODAL_MODE.VIEW,
     filterExpression: '[Работник] in {' + res + '}'
  })
} else {
   WA.CR.inlineHint.showError("Нет работников для текущего пользователя");
}
}).fail(function (error) {
 WA.CR.inlineHint.showError(error);
})

 

// Вызов сценария и открытие справочника с фильтрацией в новой вкладке.

var scriptName = 'GetEmployees';
WA.FC.scripts(scriptName).execute({ 'CurrentUserID': WA.CR.user.ID }).done(function (res) {
if (res) {
  var filter = '[Работник] in {' + res + '}';
  var referenceLink = WebAccess.factories.references('RRCAssignments').toURL();
 
   referenceLink.setParam('filter', filter);
   referenceLink.open();
} else {
   WA.CR.inlineHint.showError("Нет работников для текущего пользователя");
}
}).fail(function (error) {
 WA.CR.inlineHint.showError(error);
})

© Компания DIRECTUM, 2018 Сообщество пользователей DIRECTUM
.navbar > a:hover { background: #FFD73B; }