Алгоритм добавления каталогизатора
Алгоритм предназначен для создания нового каталогизатора из диалога для отображения плана аналитики или каталогизатора (тип ДИАЛОГ_АНАЛИТ в модуле Specdlg). Ссылка на алгоритм задается в качестве значения поля "алг_доб" типа ДИАЛОГ_АНАЛИТ. Алгоритм вызывается, когда в поле для выбора состояния плана аналитики выбирается пункт добавления нового каталогизатора.
Параметры алгоритма:
ВЫЧИСЛИТЬ (ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст; ПЕРЕМ СТРОКА: корень; ПЕРЕМ СТРОКА: каталог; ПЕРЕМ СТРОКА: режим; ПЕРЕМ ЛОГИКА: рез) // ... КОНЕЦ
- контекст - входной параметр. Контекст текущего состояния, выбранного в диалоге в момент вызова алгоритма: код корневого объекта ветки или имя группы каталогизатора + имя режима настроек.
- корень - входной и выходной параметр. Код корневого объекта каталогизатора. Изначально в качестве значения параметра принимается значение поля "корень_доб" типа ДИАЛОГ_АНАЛИТ. Алгоритм может изменить это значение - в итоге каталогизатор будет создан для объекта, указанного в значении этого параметра.
- каталог - выходной параметр. Имя каталогизатора.
- режим - входной и выходной параметр. Имя режима настроек для создаваемого каталогизатора. Изначально в качестве значения параметра принимается значение поля "режим_доб" типа ДИАЛОГ_АНАЛИТ. Алгоритм может изменить это значение.
- рез - выходной параметр. Результат выполнения алгоритма. Возвращает ссылку на логическое значение: ДА - алгоритм выполнен успешно, НЕТ - алгоритм не выполняется.
Пример
Пример иллюстрирует использование алгоритма добавления каталогизатора, который вызывается из диалога выбора объектов аналитики. В диалоге отображается ветка "ТОВАРЫ". В поле, переключающем отображаемые состояния плана аналитики, добавляется пункт, при выборе которого запускается алгоритм создания автоматического каталогизатора. Пользователь задает имя каталогизатора и выбирает по каким свойствам объектов создавать каталогизатор - по свойству "цена" с заданием диапазона, по свойству "страна производитель". В результате создается автоматический каталогизатор с группировкой объектов по значению выбранного одного или сразу двух свойств.
Создается алгоритм добавления каталогизатора, который хранится локально.
ТИП Доб_Каталог(ДИАЛОГ)
[ ПОДМЕНА закрытие = проверка_имени;
//параметры диалогового окна
СТРОКА: заголовок = "Добавление автоматического каталогизатора";
ЧИСЛО: ширина = 461;
ЧИСЛО: высота = 180;
ЧИСЛО: верхний = 169;
ЧИСЛО: левый = 103;
//параметры строки ввода
РЕДАКТОР: ред_имя = [ левый = 145,
верхний = 20,
высота = 25,
ширина = 250,
табиндекс = 1,
изменение = изменение_имени ];
//параметры опции
ОПЦИЯ: опц_вклдиап = [ левый = 20,
верхний = 95,
высота = 15,
ширина = 15,
табиндекс = 10,
изменение = выбрать_диапазон];
ВВОД_ЧИСЛА: кон_цена = [ левый = 245,
верхний = 95,
высота = 20,
ширина = 60,
табиндекс = 7,
доступный = НЕТ ];
ТЕКСТ: текст_до = [ левый = 225,
верхний =95,
высота = 15,
ширина = 20,
доступный = НЕТ,
текст = "до" ];
ВВОД_ЧИСЛА: нач_цена = [ левый = 155,
верхний = 95,
высота = 20,
ширина = 60,
табиндекс = 6,
доступный = НЕТ ];
ТЕКСТ: текст_цены = [ левый = 50,
верхний = 95,
высота = 15,
ширина = 95,
доступный = НЕТ,
текст = "Диапазон цен: от" ];
ОПЦИЯ: опц_страна = [ левый = 20,
верхний = 60,
высота = 15,
ширина = 15,
табиндекс = 5,
изменение = выбрать_страну];
ТЕКСТ: текст_страна = [ левый = 50,
верхний = 60,
высота = 15,
ширина = 190,
доступный = НЕТ,
текст = "каталогизатор по странам" ];
ТЕКСТ: Текст1 = [ левый = 20,
верхний = 20,
высота = 25,
ширина = 120,
текст = "Имя каталогизатора:" ];
//параметры кнопки
КНОПКА: кн_Отмена = [ левый = 355,
верхний = 135,
высота = 25,
ширина = 70,
табиндекс = 3,
текст = "Отмена",
нажатие = наж_отмена ];
КНОПКА: кн_Ок = [ левый = 275,
верхний = 135,
высота = 25,
ширина = 70,
табиндекс = 2,
доступный = НЕТ,
текст = "Ok",
нажатие = наж_ок ];
//при выборе диапазона цен функция делает активными поля для ввода чисел
ФУНКЦИЯ выбрать_диапазон(ПЕРЕМ ОПЦИЯ: опция)
текст_цены.доступный = опция.выбор
текст_до.доступный = опция.выбор
нач_цена.доступный = опция.выбор
кон_цена.доступный = опция.выбор
ОБНОВИТЬ
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ выбрать_страну(ПЕРЕМ ОПЦИЯ: опция)
текст_страна.доступный = опция.выбор
ОБНОВИТЬ
КОНЕЦ_ФУНКЦИИ
//закрытие диалога при нажатии кнопки "ОK" с возвратом кода OK
ФУНКЦИЯ наж_ок(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("OK")
КОНЕЦ_ФУНКЦИИ
//закрытие диалога при нажатии кнопки "Отмена" с возвратом пустой строки
ФУНКЦИЯ наж_отмена(ПЕРЕМ КНОПКА: кнопка)
ЗАКРЫТЬ("")
КОНЕЦ_ФУНКЦИИ
//если каталогизатор с введенным именем уже существует, то он добавлен не будет
ФУНКЦИЯ ЛОГИКА: проверка_имени(СТРОКА: код_выхода)
ПЕРЕМ КАТ_СПИСОК: список_кат
список_кат.СЧИТАТЬ
ЦИКЛ ИНДЕКС(знач = список_кат.список[*])
ЕСЛИ ред_имя.текст = знач.имя ТО
СООБЩЕНИЕ("Каталогизатор с таким именем уже существует")
РЕЗУЛЬТАТ=НЕТ
ИНАЧЕ
РЕЗУЛЬТАТ=ДА
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ
//если введено имя каталогизатора, то кнопка "OK" становится активной
ФУНКЦИЯ изменение_имени(ПЕРЕМ РЕДАКТОР: ред)
ЕСЛИ ред_имя.текст <> "" ТО
кн_Ок.доступный = ДА
ОБНОВИТЬ
ИНАЧЕ
кн_Ок.доступный = НЕТ
ОБНОВИТЬ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ(ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст;
ПЕРЕМ СТРОКА: корень;
ПЕРЕМ СТРОКА: каталог;
ПЕРЕМ СТРОКА: режим;
ПЕРЕМ ЛОГИКА: рез)
ПЕРЕМ Доб_Каталог: длг
//если в диалоге была нажата клавиша "ОК"
ЕСЛИ длг.ПОКАЗАТЬ_МОДАЛЬНЫЙ = "OK" ТО
ПЕРЕМ возвр_имя=длг.ред_имя.текст
корень = "ТОВАРЫ"
ПЕРЕМ КАТ_ПАРАМ: кат
кат.тип = КАТ_АВТО
//если выбрана опция создания каталогизатора по странам
ЕСЛИ длг.опц_страна.выбор = ДА И длг.опц_вклдиап.выбор = НЕТ ТО
кат.авто_парам += [имя = "страна", тип = ТСВ_СТРОКА, диапазон = НЕТ]
КОНЕЦ_ЕСЛИ
//если выбрана опция создания каталогизатора по ценам
ЕСЛИ длг.опц_страна.выбор = НЕТ И длг.опц_вклдиап.выбор = ДА ТО
кат.авто_парам += [имя = "цена", тип = ТСВ_ЧИСЛО, диапазон = ДА,
начало = длг.нач_цена.значение, конец = длг.кон_цена.значение, шаг = 1]
КОНЕЦ_ЕСЛИ
//если выбраны две опции создания каталогизатора и по ценам, и по странам
ЕСЛИ длг.опц_страна.выбор = ДА И длг.опц_вклдиап.выбор = ДА ТО
кат.авто_парам += [имя="страна", тип = ТСВ_СТРОКА, диапазон = НЕТ]
кат.авто_парам += [имя="цена", тип = ТСВ_ЧИСЛО, диапазон=ДА,
начало = длг.нач_цена.значение, конец=длг.кон_цена.значение, шаг = 1]
КОНЕЦ_ЕСЛИ
ПЕРЕМ КАТ_СПИСОК: список_каталогизаторов
список_каталогизаторов.ДОБАВИТЬ(корень,возвр_имя,кат)
каталог=возвр_имя
рез = ДА
КОНЕЦ_ЕСЛИ
КОНЕЦ
Далее необходимо создать алгоритм для вызова диалогового окна, при помощи которого будет вызываться алгоритм добавления каталогизатора.
ВЫЧИСЛИТЬ ПЕРЕМ ДИАЛОГ_АНАЛИТ: д д.доб_сост = ДА д.текст_доб = "добавить новый каталогизатор" д.алг_доб = "добавление_каталогизатора.ibx" д.состояния[1].корень = "ТОВАРЫ" д.ПОКАЗАТЬ_МДИ КОНЕЦ
В главном меню у ранее созданного пункта меню, вызывающее ветку "ТОВАРЫ", при помощи Редактора меню создается команда для вызова исполняемого кода добавления каталогизатора ( Параметрическое действие "Алгоритм").