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

Клиентский алгоритм изменения объекта аналитики

Алгоритм служит для обработки события изменения объекта аналитики. Ссылка на алгоритм задается в менеджере настроек отображения.

Параметры алгоритма:

ВЫЧИСЛИТЬ (ПЕРЕМ АНАЛИТ_КОНТЕКСТ: контекст;  
           ПЕРЕМ <T>: объект; 
           ПЕРЕМ МОДИФ_ПАРАМ: мп; 
           ПЕРЕМ ПУБЛ_ПАРАМ: публ; 
           ПЕРЕМ СТРОКА: рез)
// ...
КОНЕЦ 
Алгоритм может возвращать строковые значения результата: OK, CANCEL, CONTINUE и NEXT, PREV, FIRST, LAST.

Коды навигации 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"
  КОНЕЦ_ЕСЛИ
КОНЕЦ

См. также: