Клиентский алгоритм добавления операции
Алгоритм служит для обработки события добавления в таблице операций журнала. Ссылка на алгоритм задается в менеджере настроек отображения.
Параметры алгоритма:
ВЫЧИСЛИТЬ(ПЕРЕМ ОПЕР_КОНТЕКСТ: контекст; ПЕРЕМ <ТИП>: оп; ПЕРЕМ ПРАВА_ДОСТУПА: права; ПЕРЕМ МОДИФ_ПАРАМ: мп; ПЕРЕМ ПУБЛ_ПАРАМ: публ; ПЕРЕМ СТРОКА: рез) // ... КОНЕЦ
- контекст - входной параметр. Имя журнала + имя режима настроек.
- оп - входной параметр. Добавляемая операция. Вместо идентификатора <ТИП> задается: для типовых операций - имя типа операции, одного из родительских типов или ОПЕРАЦИЯ, для ручных операций - ОПЕРАЦИЯ, для операций исходного остатка - ОСТАТОК.
- доступ - входной параметр. Права доступа к операции.
- мп - входной и выходной параметр. Параметр типа МОДИФ_ПАРАМ позволяет реализовать механизм сквозной передачи параметров между клиентским и серверными алгоритмами модификации. Серверный алгоритм может изменить полученные параметры, соответственно, следующему алгоритму будет передаваться изменный набор параметров. Тип МОДИФ_ПАРАМ включает в себя набор параметров и правила их передачи. То есть помимо параметров можно указать пути их передачи: логические поля "до", "после" и "возврат" задают условия передачи параметров серверным алгоритмам ДО_ДОБАВЛЕНИЯ и ПОСЛЕ_ДОБАВЛЕНИЯ и условие передачи параметров обратно в клиентский метод. Если передача параметров запрещена - в алгоритм передается пустой контейнер параметров (пустая переменная типа АЛГ_ПАРАМ).
- публ - выходной параметр. Параметр типа ПУБЛ_ПАРАМ позволяет реализовать механизм публикации добавленной операции. Публикация может включать печать необходимых документов, посылку почты и др. Алгоритм заполняет параметры публикации. Значение поля "публикация" определяет будет ли вызван алгоритм печати. В алгоритм печати передаются необходимые параметры публикации в виде поля "парам" типа АЛГ_ПАРАМ.
- рез - выходной параметр. Результат выполнения алгоритма.
Алгоритм может возвращать три строковых значения результата: OK, CANCEL и CONTINUE.
- OK - возвращается в случае успешного выполнения алгоритма,
- CANCEL -в случае ошибки,
- CONTINUE -в случае, если по завершении работы алгоритма запускается стандартный диалог.
Коды навигации NEXT, PREV, FIRST, LAST возвращаются при активации редактирования следующей, предыдущей, первой и последней операции в списке с сохранением изменений в текущей операции. Если редактирование операции невозможно или в списке операций больше нет операций, то коды NEXT и PREV эквивалентны коду OK.
К примеру при указании сочетания кодов OK,PREV после добавления новой операции будет вызвано окно для редактирования предыдущей операции.
Существует код возврата 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,
верхний = 385,
ширина = 85,
высота = 30,
табиндекс = 4,
текст = "Отмена",
нажатие = {наж_отмена} ];
КНОПКА: Кнопка1 = [
левый = 135,
верхний = 385,
ширина = 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" ТО
оп.комментарий = "Данные накладной"
оп.признаки["номер_накл"].значение = длг.Ввод_целого1.значение
ПЕРЕМ элемент = СТР(длг.Радиогруппа1.выбор)
ВЫБОР(элемент)
#"1":
оп.признаки["оплачена"].значение = ДА
рез = "OK"
#"2":
оп.признаки["оплачена"].значение = НЕТ
рез = "OK"
КОНЕЦ_ВЫБОРА
пров.дебет.код = длг.Ввод_кода2.текст
пров.кредит.код = длг.Ввод_кода1.текст
пров.единицы.код = длг.Ввод_кода3.текст
пров.количество = длг.Ввод_числа1.значение
оп.проводки[1] = пров
ИНАЧЕ
рез = "CANCEL"
КОНЕЦ_ЕСЛИ
КОНЕЦ