Клиентский алгоритм изменения объекта аналитики
Алгоритм служит для обработки события изменения объекта аналитики. Ссылка на алгоритм задается в менеджере настроек отображения.
Параметры алгоритма:
ВЫЧИСЛИТЬ (ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; ПЕРЕМ <T>: объект; ПЕРЕМ МОДИФ_ПАРАМ: мп; ПЕРЕМ ПУБЛ_ПАРАМ: публ; ПЕРЕМ СТРОКА: рез) // ... КОНЕЦ
- контекст- входной параметр. Код текущего корневого объекта ветки или текущей группы каталогизатора + имя режима настроек.
- объект - входной и выходной параметр. Редактируемый объект аналитики. Вместо идентификатора <Т> задается имя объектного типа родительского объекта аналитики или имя базового объектного типа АНАЛИТИКА или АНАЛИТ_ОБЪЕКТ.
- мп - выходной параметр. Параметр типа МОДИФ_ПАРАМ позволяет реализовать механизм сквозной передачи параметров между клиентским и серверными алгоритмами изменения. Серверный алгоритм может изменить полученные параметры, соответственно, следующему алгоритму будет передаваться изменный набор параметров. Тип МОДИФ_ПАРАМ включает в себя набор параметров и правила их передачи. То есть помимо параметров можно указать пути их передачи: логические поля "до", "после" и "возврат" задают условия передачи параметров серверным алгоритмам ДО_ИЗМЕНЕНИЯ и ПОСЛЕ_ИЗМЕНЕНИЯ и условие передачи параметров обратно в клиентский алгоритм. Если передача параметров запрещена - передается пустой контейнер параметров (пустая переменная типа АЛГ_ПАРАМ).
- публ - выходной параметр. Параметр типа ПУБЛ_ПАРАМ позволяет указать необходимость вызова клиентского алгоритма печати, а также передать ему данные в значении типа АЛГ_ПАРАМ.
- рез - выходной параметр. Результат выполнения алгоритма.
- OK - возвращается в случае успешного выполнения алгоритма
- CANCEL - возвращается в случае ошибки
- CONTINUE - возвращается в случае, если по завершении работы алгоритма запускается стандартный диалог
Коды навигации NEXT, PREV, FIRST, LAST возвращаются при активации редактирования следующего, предыдущего, первого и последнего объектов аналитики в списке с сохранением изменений в текущем объекте аналитики. Если редактирование объекта аналитики невозможно или в списке объектов больше нет объектов аналитики, то коды NEXT и PREV эквивалентны коду OK.
Основные коды возврата и коды навигации можно сочетать между собой, например OK,NEXT возвращается при успешном выполнении алгоритма редактирования объекта аналитики, после чего происходит переход на следующий объект в выборке или CONTINUE,PREV возвращается в случае запуска стандартного диалога редактирования объекта аналитики, а затем происходит перемещение на предыдущий объект в в выборке. Если код навигации указан без основного кода, например NEXT, то указанный код соответствует коду CANCEL,NEXT. При сочетании кода навигации и кода возврата порядок указания неважен.
Существует код возврата CLOSE, который возвращается при закрытии родительского диалога, из которого был вызван диалог редактирования, и самого диалога редактирования. Данный код возврата имеет более высокий приоритет, чем у кодов навигации, то есть он подавляет команды NEXT, PREV, FIRST, LAST.
Пример
Пример иллюстрирует использование алгоритма изменения объекта, который вызывает диалог для редактирования кода, названия и значений свойств объекта ветки "ТОВАРЫ", и после принятия изменений для текущего объекта будет открыт диалог для редактирования следующего объекта аналитики.
В Настройке отображения указывается ссылка на алгоритм для ветки "ТОВАРЫ" в узле "Изменение".
ТИП ДобОбъект(ДИАЛОГ)
[
СТРОКА: заголовок = "Редактирование объекта ветки Товары";
ЧИСЛО: ширина = 355;
ЧИСЛО: высота = 242;
ЧИСЛО: верхний = 94;
КНОПКА: кн_отмена = [
левый = 280,
верхний = 205,
высота = 25,
ширина = 65,
табиндекс = 6,
текст = "Отмена",
нажатие = отмена_нажатие ];
КНОПКА: кн_ок = [
левый = 200,
верхний =205,
высота = 25,
ширина = 65,
табиндекс = 5,
доступный = ДА,
текст = "Ок",
нажатие = ок_нажатие ];
ТЕКСТ: Текст2 = [
левый = 15,
верхний = 50,
высота = 25,
ширина = 65,
табиндекс = 4,
текст = "Название:" ];
РЕДАКТОР: ред_название = [
левый = 90,
верхний = 50,
высота = 25,
ширина = 200,
табиндекс = 2 ];
ТЕКСТ: Текст1 = [ левый = 15,
верхний = 15,
высота = 25,
ширина = 35,
табиндекс = 3,
текст = "Код:" ];
РЕДАКТОР: ред_код = [ левый = 90,
верхний = 15,
высота = 25,
ширина = 120,
табиндекс = 1,
изменение = код_изменение ];
ТЕКСТ: Текст3 = [ левый = 15,
верхний = 95,
высота = 25,
ширина = 35,
табиндекс = 3,
текст = "Цена:" ];
ВВОД_ЧИСЛА: Ввод_числа1 = [
левый = 90,
верхний = 90,
ширина = 195,
высота = 25,
табиндекс = 7 ];
ТЕКСТ: Текст4 = [ левый = 15,
верхний = 135,
высота = 25,
ширина = 35,
табиндекс = 3,
текст = "Страна производитель:" ];
РЕДАКТОР: ред_страна = [
левый = 90,
верхний = 135,
высота = 25,
ширина = 120,
табиндекс = 1];
ФУНКЦИЯ ок_нажатие(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("OK")
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ отмена_нажатие(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("")
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ код_изменение(ПЕРЕМ РЕДАКТОР: ред)
ЕСЛИ ред.текст <> "" ТО
кн_ок.доступный = ДА
ОБНОВИТЬ
ИНАЧЕ
кн_ок.доступный = НЕТ
ОБНОВИТЬ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ(ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; // вход
ПЕРЕМ АНАЛИТИКА: об; // вход/выход
ПЕРЕМ МОДИФ_ПАРАМ: парам; // вход/выход
ПЕРЕМ ПУБЛ_ПАРАМ: публ; // вход/выход
ПЕРЕМ СТРОКА: рез) // вход/выход
// OK - CANCEL - CONTINUE
ПЕРЕМ ДобОбъект: длг
длг.ред_код.текст = КОД_ПОСЛ(об._код)
длг.ред_название.текст = об._название
длг.Ввод_числа1.значение = об._свойства["цена"].значение
длг.ред_страна.текст = об._свойства["страна"].значение
ЕСЛИ длг.ПОКАЗАТЬ_МОДАЛЬНЫЙ = "OK" ТО
об._код = длг.ред_код.текст
об._название = длг.ред_название.текст
об._свойства["цена"].значение = длг.Ввод_числа1.значение
об._свойства["страна"].значение = длг.ред_страна.текст
рез="NEXT"
ИНАЧЕ
рез = "CANCEL"
КОНЕЦ_ЕСЛИ
КОНЕЦ