Алгоритм фильтра расширенного поиска объектов аналитики
Алгоритм предназначен для задания фильтра отбора объектов аналитики в соответствии с заданными критериями. Перекрывает стандартный диалог расширенного поиска (стандартное действие План аналитики-Расширенный поиск). В результате работы алгоритма указатель перемещается в таблице на найденный объект аналитики, либо открывается окно со списком найденных объектов (если найдено несколько). Ссылка на алгоритм задается в менеджере настроек отображения.
Параметры алгоритма:
ВЫЧИСЛИТЬ(ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; ПЕРЕМ ФИЛЬТР_ОБЪЕКТОВ: фильтр; ПЕРЕМ СТРОКА: рез) // ... КОНЕЦ
- контекст - входной параметр. Код корневого объекта ветки или имя группы каталогизатора + имя режима настроек.
- фильтр - входной и выходной параметр. Условия поиска объектов.
- рез - выходной параметр. Выходной параметр, результат выполнения алгоритма.
Алгоритм может возвращать три строковых значения результата: OK, CANCEL и CONTINUE.
- OK - алгоритм завершил выполнение действия.
- CONTINUE - обработка действия передается платформе.
- CANCEL - алгоритм отменил действие.
Примечание Если в результате поиска не найдено ни одного объекта аналитики - происходит повторный вызов алгоритма (аналогично в случае стандартного диалога: если объект не найден - происходит возврат в диалог). Поэтому обработка возможного зацикливания алгоритма возлагается на прикладного программиста: необходимо предусмотреть случаи, когда алгоритм будет возвращать CANCEL.
Пример
Пример иллюстрирует использование алгоритма расширенного поиска объектов аналитики. Вместо стандартного диалога расширенного поиска объектов отображается прикладной диалог для объектов ветки "ТОВАРЫ". В диалоге задаются условия поиска по маске кода и названия и по признаку страны производства товара.
В Настройке отображения добавьте для ветки алгоритм "Расширенный поиск". Для вызова ветки "ТОВАРЫ" на главное меню нужно добавить параметрическое действие План аналитики. При выборе пункта Расширенный поиск контекстного меню должен запускаться прикладной алгоритм расширенного поиска.
ТИП РасшПоискДлг(ДИАЛОГ)
[
ПОДМЕНА открытие = ОБНОВИТЬ;
//параметры диалогового окна
СТРОКА: заголовок = "Поиск товаров";
ЧИСЛО: ширина = 461;
ЧИСЛО: высота = 260;
//параметры для строки ввода названия объекта
РЕДАКТОР: ред_назв = [
левый = 125,
верхний = 50,
высота = 20,
ширина = 190,
табиндекс = 4
];
//название поля ввода для названия объекта
ТЕКСТ: текст_название = [
левый = 25,
верхний = 55,
высота = 15,
ширина = 90,
текст = "Маска названия:" ];
//параметры для строки ввода кода объекта
РЕДАКТОР: ред_код = [
левый = 125,
верхний = 20,
высота = 20,
ширина = 190,
табиндекс = 3 ];
//название поля ввода для кода объекта
ТЕКСТ: текст_код = [
левый = 25,
верхний = 25,
высота = 15,
ширина = 65,
текст = "Маска кода:" ];
//параметры для переключателей
ОПЦИЯ: опц_вкл = [
левый = 40,
верхний = 115,
высота = 15,
ширина = 205,
табиндекс = 9,
текст = "Не искать выключенные объекты" ];
ОПЦИЯ: опц_разлрег = [
левый = 40,
верхний = 90,
высота = 15,
ширина = 175,
табиндекс = 5,
текст = "Различать регистр символов" ];
ТЕКСТ: текст_опц = [
левый = 25,
верхний = 145,
высота = 15,
ширина = 180,
текст = "Страна произволдитель товара:" ];
СПИСОК_ОПЦИЙ: Список_опций1 = [
левый = 40,
верхний = 170,
высота = 55,
ширина = 295,
табиндекс = 3,
элементы = ("Россия", "Германия", "Италия") ];
//параметры кнопок
КНОПКА: Кнопка1 = [ левый = 350,
верхний = 15,
высота = 25,
ширина = 90,
табиндекс = 2,
текст = "Найти",
нажатие = НажНайти ];
КНОПКА: Кнопка2 = [ левый = 350,
верхний = 50,
высота = 25,
ширина = 90,
табиндекс = 3,
текст = "Отмена",
нажатие = НажОтмена ];
ФУНКЦИЯ НажНайти(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("ОК")
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ НажОтмена(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("")
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ(ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; // вход
ПЕРЕМ ФИЛЬТР_ОБЪЕКТОВ: фильтр; // вход/выход
ПЕРЕМ СТРОКА: рез) // вход/выход
ПЕРЕМ РасшПоискДлг: д
ПЕРЕМ АНАЛИТИКА: сч
ПЕРЕМ УСЛ_УРОВЕНЬ: усл;
ЕСЛИ д.ПОКАЗАТЬ_МОДАЛЬНЫЙ = "ОК" ТО
//присваиваем параметрам фильтра значения, заданные пользователем через диалог
фильтр.маска_кода = д.ред_код.текст
фильтр.маска_назв = д.ред_назв.текст
фильтр.разл_рег_кода = д.опц_разлрег.выбор
фильтр.разл_рег_назв = д.опц_разлрег.выбор
фильтр.сост_выкл = ?(д.опц_вкл.выбор, ФВЫКЛ_ВКЛ, ФВЫКЛ_ВСЕ)
ЦИКЛ ИНДЕКС(знач = д.Список_опций1.опции[инд])
ЕСЛИ знач = ДА ТО
ПЕРЕМ знач1 = д.Список_опций1.элементы[инд]
усл.условия += УСЛ_РАВЕНСТВА[свойство = "страна", значение = знач1]
усл.лог_опер = ЛОГОП_ИЛИ //учитываем, что выбранных опций (стран) может быть несколько
фильтр.усл_свойств = усл
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
рез = "OK"
ИНАЧЕ
рез = "CANCEL"
КОНЕЦ_ЕСЛИ
КОНЕЦ