Справка Инфо-Бухгалтер 10

Алгоритм добавления каталогизатора

Алгоритм предназначен для создания нового каталогизатора из диалога для отображения плана аналитики или каталогизатора (тип ДИАЛОГ_АНАЛИТ в модуле 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].корень = "ТОВАРЫ"
  д.ПОКАЗАТЬ_МДИ
КОНЕЦ

В главном меню у ранее созданного пункта меню, вызывающее ветку "ТОВАРЫ", при помощи Редактора меню создается команда для вызова исполняемого кода добавления каталогизатора ( Параметрическое действие "Алгоритм").


См. также: