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

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

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

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

ВЫЧИСЛИТЬ(ПЕРЕМ ОПЕР_КОНТЕКСТ: контекст;
          ПЕРЕМ <ТИП>: оп;
          ПЕРЕМ МОДИФ_ПАРАМ: мп;
          ПЕРЕМ ПУБЛ_ПАРАМ: публ;
          ПЕРЕМ СТРОКА: рез)  
// ...
КОНЕЦ 
Алгоритм может возвращать строковые значения результата: 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.

Пример

Пример иллюстрирует использование алгоритма редактирования операции. В ходе работы алгоритма происходит вызов диалогового окна для изменения значений признаков и параметров проводки. В качетсве признаков операции выступают номер накладной и признак, указывающий на то, оплачена ли накладная, а параметрами проводки являются в дебете и кредите - коды выбранных организаций, в единицах - код валюты, в количестве - сумма проводки.

В настройке отображения в узле "Изменение" для нужного типа операции задается алгоритм редактирования операции.

Показатьподробное объявление типов для диалогового окна

ТИП ДобОпер(ДИАЛОГ)
[
  РАДИОГРУППА: Радиогруппа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"
  КОНЕЦ_ЕСЛИ
КОНЕЦ

См. также: