Клиентский алгоритм добавления объекта аналитики
Алгоритм служит для обработки события добавления объекта аналитики. Ссылка на алгоритм задается в менеджере настроек отображения.
Параметры алгоритма:
ВЫЧИСЛИТЬ (ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; ПЕРЕМ <T>: объект; ПЕРЕМ ПРАВА_ДОСТУПА: права_доступа; ПЕРЕМ МОДИФ_ПАРАМ: мп; ПЕРЕМ ПУБЛ_ПАРАМ: публ; ПЕРЕМ СТРОКА: рез) // ... КОНЕЦ
- контекст - входной параметр. Код текущего корневого объекта ветки или текущей группы каталогизатора + имя режима настроек.
- объект - входной и выходной параметр. Добавляемый объект аналитики. Вместо идентификатора <Т> задается имя объектного типа родительского объекта аналитики или имя базового объектного типа АНАЛИТИКА или АНАЛИТ_ОБЪЕКТ.
- права_доступа - входной и выходной параметр. Права доступа к добавляемому объекту.
- мп - выходной параметр. Параметр типа МОДИФ_ПАРАМ позволяет реализовать механизм сквозной передачи параметров между клиентским и серверными алгоритмами добавления. Серверный алгоритм может изменить полученные параметры, соответственно, следующему алгоритму будет передаваться изменный набор параметров. Тип МОДИФ_ПАРАМ включает в себя набор параметров и правила их передачи. То есть помимо параметров можно указать пути их передачи: логические поля "до", "после" и "возврат" задают условия передачи параметров серверным алгоритмам ДО_ДОБАВЛЕНИЯ и ПОСЛЕ_ДОБАВЛЕНИЯ и условие передачи параметров обратно в клиентский алгоритм. Если передача параметров запрещена - передается пустой контейнер параметров (пустая переменная типа АЛГ_ПАРАМ).
- публ - выходной параметр. Параметр типа ПУБЛ_ПАРАМ позволяет указать необходимость вызова клиентского алгоритма печати, а также передать ему данные в значении типа АЛГ_ПАРАМ.
- рез - выходной параметр. Результат выполнения алгоритма.
Алгоритм может возвращать три строковых значения результата: OK, CANCEL и CONTINUE.
- OK - возвращается в случае успешного выполнения алгоритма,
- CANCEL -в случае ошибки,
- CONTINUE -в случае, если по завершении работы алгоритма запускается стандартный диалог.
Коды навигации NEXT, PREV, FIRST, LAST возвращаются при активации редактирования следующего, предыдущего, первого и последнего объектов аналитики в списке с сохранением изменений в текущем объекте аналитики. Если редактирование объекта аналитики невозможно или в списке объектов больше нет объектов аналитики, то коды NEXT и PREV эквивалентны коду OK.
К примеру при указании сочетания кодов OK,PREV после добавления нового объекта аналитики будет вызвано окно для редактирования предыдущего объекта аналитики.
Существует код возврата 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 = [
левый = 20,
верхний = 90,
ширина = 35,
высота = 25,
табиндекс = 3,
текст = "Цена:" ];
ВВОД_ЧИСЛА: Ввод_числа1 = [
левый = 90,
верхний = 90,
ширина = 145,
высота = 25,
табиндекс = 7 ];
ТЕКСТ: Текст4 = [
левый = 10,
верхний = 135,
ширина = 125,
высота = 25,
табиндекс = 3,
текст = "Страна производитель:" ];
РЕДАКТОР: ред_страна = [
левый = 145,
верхний = 130,
ширина = 120,
высота = 25,
табиндекс = 1 ];
ФУНКЦИЯ ок_нажатие(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("OK")
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ отмена_нажатие(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("")
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ код_изменение(ПЕРЕМ РЕДАКТОР: ред)
ЕСЛИ ред.текст <> "" ТО
кн_ок.доступный = ДА
ОБНОВИТЬ
ИНАЧЕ
кн_ок.доступный = НЕТ
ОБНОВИТЬ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ(ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; // вход
ПЕРЕМ АНАЛИТИКА: об; // вход/выход
ПЕРЕМ ПРАВА_ДОСТУПА: права; // вход/выход
ПЕРЕМ МОДИФ_ПАРАМ: парам; // вход/выход
ПЕРЕМ ПУБЛ_ПАРАМ: публ; // вход/выход
ПЕРЕМ СТРОКА: рез) // вход/выход
// OK - CANCEL - CONTINUE
ПЕРЕМ ДобОбъект: длг;
ЕСЛИ длг.ПОКАЗАТЬ_МОДАЛЬНЫЙ = "OK" ТО
об._код = контекст.корень + "/" + длг.ред_код.текст
об._название = длг.ред_название.текст
об._свойства["цена"].значение = длг.Ввод_числа1.значение
об._свойства["страна"].значение = длг.ред_страна.текст
рез = "OK"
ИНАЧЕ
рез = "CANCEL"
КОНЕЦ_ЕСЛИ
КОНЕЦ