Клиентский алгоритм изменения операции
Алгоритм служит для обработки события изменения операции в таблице операций журнала. Ссылка на алгоритм задается в менеджере настроек отображения.
Параметры алгоритма:
ВЫЧИСЛИТЬ(ПЕРЕМ ОПЕР_КОНТЕКСТ: контекст; ПЕРЕМ <ТИП>: оп; ПЕРЕМ МОДИФ_ПАРАМ: мп; ПЕРЕМ ПУБЛ_ПАРАМ: публ; ПЕРЕМ СТРОКА: рез) // ... КОНЕЦ
- контекст - входной параметр. Имя журнала + имя режима настроек.
 - оп - входной параметр. Добавляемая операция. Вместо идентификатора <ТИП> задается: для типовых операций - имя типа операции, одного из родительских типов или ОПЕРАЦИЯ, для ручных операций - ОПЕРАЦИЯ, для операций исходного остатка - ОСТАТОК.
 - мп - входной параметр. Параметр типа МОДИФ_ПАРАМ позволяет реализовать механизм сквозной передачи параметров между клиентским и серверными алгоритмами модификации. Серверный алгоритм может изменить полученные параметры, соответственно, следующему алгоритму будет передаваться изменный набор параметров. Тип МОДИФ_ПАРАМ включает в себя набор параметров и правила их передачи. То есть помимо параметров можно указать пути их передачи: логические поля "до", "после" и "возврат" задают условия передачи параметров серверным алгоритмам ДО_ИЗМЕНЕНИЯ и ПОСЛЕ_ИЗМЕНЕНИЯ и условие передачи параметров обратно в клиентский метод. Если передача параметров запрещена - в алгоритм передается пустой контейнер параметров (пустая переменная типа АЛГ_ПАРАМ).
 - публ - выходной параметр. Параметр типа ПУБЛ_ПАРАМ позволяет реализовать механизм публикации измененной операции. Публикация может включать печать необходимых документов, посылку почты и др. Алгоритм заполняет параметры публикации. Значение поля "публикация" определяет будет ли вызван алгоритм печати. В алгоритм печати передаются необходимые параметры публикации в виде поля "парам" типа АЛГ_ПАРАМ.
 - рез - выходной параметр. Результат выполнения алгоритма.
 
- OK - возвращается в случае успешного выполнения алгоритма
 - CANCEL - возвращается в случае ошибки
 - CONTINUE - возвращается в случае, если по завершении работы алгоритма запускается стандартный диалог
 
Коды навигации NEXT, PREV, FIRST, LAST возвращаются при активации редактирования следующей, предыдущей, первой и последней операции в списке с сохранением изменений в текущей операции. Если редактирование операции невозможно или в списке операции больше нет операций, то коды NEXT и PREV эквивалентны коду OK.
Основные коды возврата и коды навигации можно сочетать между собой, например OK,NEXT возвращается при успешном выполнении алгоритма редактирования операции , после чего происходит переход на следующую операцию в выборке или CONTINUE,PREV возвращается в случае запуска стандартного диалога редактирования операции, а затем происходит перемещение на предыдущую операцию в в выборке. Если код навигации указан без основного кода, например NEXT, то указанный код соответствует коду CANCEL,NEXT. При сочетании кода навигации и кода возврата порядок указания неважен.
Существует код возврата CLOSE, который возвращается при закрытии родительского диалога, из которого был вызван диалог редактирования, и самого диалога редактирования. Данный код возврата имеет более высокий приоритет, чем у кодов навигации, то есть он подавляет команды NEXT, PREV, FIRST, LAST.
Пример
Пример иллюстрирует использование алгоритма редактирования операции. В ходе работы алгоритма происходит вызов диалогового окна для изменения значений признаков и параметров проводки. В качетсве признаков операции выступают номер накладной и признак, указывающий на то, оплачена ли накладная, а параметрами проводки являются в дебете и кредите - коды выбранных организаций, в единицах - код валюты, в количестве - сумма проводки.
В настройке отображения в узле "Изменение" для нужного типа операции задается алгоритм редактирования операции.
ТИП ДобОпер(ДИАЛОГ)
[
  РАДИОГРУППА: Радиогруппа1 = [
    левый = 215,
    верхний = 75,
    ширина = 70,
    высота = 65,
    табиндекс = 2,
    элементы = ( "ДА", "НЕТ" ) ];
  ТЕКСТ: Текст2 = [
    левый = 30,
    верхний = 80,
    ширина = 165,
    высота = 25,
    текст = "Оплата товара произведена" ];
  ВВОД_ЦЕЛОГО: Ввод_целого1 = [
    левый = 145,
    верхний = 40,
    ширина = 150,
    высота = 20,
    табиндекс = 1 ];
  ТЕКСТ: Текст1 = [
    левый = 30,
    верхний = 45,
    ширина = 100,
    высота = 20,
    текст = "номер накладной" ];
  КНОПКА: Кнопка2 = [ 
    левый = 240,
    верхний = 345,
    ширина = 85,
    высота = 30,
    табиндекс = 4,
    текст = "Отмена",
    нажатие = {наж_отмена} ];
  КНОПКА: Кнопка1 = [ 
    левый = 135,
    верхний = 345,
    ширина = 85,
    высота = 30,
    табиндекс = 3,
    текст = "OK",
    нажатие = {наж_ок} ];
  ВВОД_КОДА: Ввод_кода3 = [
    левый = 230,
    верхний = 280,
    ширина = 110,
    высота = 20,
    табиндекс = 8 ];
  ТЕКСТ: Текст6 = [
    левый = 40,
    верхний = 280,
    ширина = 80,
    высота = 15,
    текст = "Единицы" ];
  ВВОД_ЧИСЛА: Ввод_числа1 = [
    левый = 230,
    верхний = 240,
    ширина = 115,
    высота = 20,
    табиндекс = 7 ];
  ТЕКСТ: Текст5 = [
    левый = 35,
    верхний = 245,
    ширина = 105,
    высота = 15,
    текст = "Сумма операции" ];
  ВВОД_КОДА: Ввод_кода2 = [
    левый = 230,
    верхний = 195,
    ширина = 115,
    высота = 20,
    табиндекс = 6 ];
  ВВОД_КОДА: Ввод_кода1 = [
    левый = 235,
    верхний = 160,
    ширина = 110,
    высота = 20,
    табиндекс = 5 ];
  ТЕКСТ: Текст4 = [
    левый = 35,
    верхний = 200,
    ширина = 180,
    высота = 15,
    текст = "Код организации покупателя" ];
  ТЕКСТ: Текст3 = [
    левый = 35,
    верхний = 165,
    ширина = 180,
    высота = 15,
    текст = "Код организации продавца" ];
  ФУНКЦИЯ наж_ок(ПЕРЕМ КНОПКА: кнопка)
    ЗАКРЫТЬ("OK")
  КОНЕЦ_ФУНКЦИИ
  ФУНКЦИЯ наж_отмена(ПЕРЕМ КНОПКА: кнопка)
    ЗАКРЫТЬ("")
  КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ(ПЕРЕМ ОПЕР_КОНТЕКСТ: контекст; // вход
          ПЕРЕМ ОПЕРАЦИЯ: оп;            // вход/выход
          ПЕРЕМ МОДИФ_ПАРАМ: мп;         // вход/выход
          ПЕРЕМ ПУБЛ_ПАРАМ: публ;        // вход/выход
          ПЕРЕМ СТРОКА: рез)             // вход/выход
  // OK - CANCEL - CONTINUE
  ПЕРЕМ ДобОпер: длг
  ПЕРЕМ ПРОВОДКА: пров
  длг.Ввод_целого1.значение = оп.признаки["номер_накл"].значение
  ЕСЛИ оп.признаки["оплачена"].значение = ДА ТО
    длг.Радиогруппа1.выбор = 1
  ИНАЧЕ
    длг.Радиогруппа1.выбор = 2
  КОНЕЦ_ЕСЛИ
  длг.Ввод_кода2.текст = оп.проводки[1].дебет.код
  длг.Ввод_кода1.текст = оп.проводки[1].кредит.код
  длг.Ввод_кода3.текст = оп.проводки[1].единицы.код
  длг.Ввод_числа1.значение = оп.проводки[1].количество
  ЕСЛИ длг.ПОКАЗАТЬ_МОДАЛЬНЫЙ = "OK" ТО
  оп.комментарий = "Данные накладной"
  оп.признаки["номер_накл"].значение = длг.Ввод_целого1.значение
    ПЕРЕМ элемент = СТР(длг.Радиогруппа1.выбор)
    ВЫБОР(элемент)
      #"1":
        оп.признаки["оплачена"].значение = ДА
        рез = "OK"
      #"2":
        оп.признаки["оплачена"].значение = НЕТ
        рез = "OK"
    КОНЕЦ_ВЫБОРА
    пров.дебет.код = длг.Ввод_кода2.текст
    пров.кредит.код = длг.Ввод_кода1.текст
    пров.единицы.код = длг.Ввод_кода3.текст
    пров.количество = длг.Ввод_числа1.значение
    оп.проводки[1] = пров
  ИНАЧЕ
    рез = "CANCEL"
  КОНЕЦ_ЕСЛИ
КОНЕЦ