"ГАЛАКТИКА ERP" Применение JavaScript в "Контуре планирования и управления производством"

Страница создана Таисия Королева
 
ПРОДОЛЖИТЬ ЧТЕНИЕ
СИСТЕМА

«ГАЛАКТИКА ERP»

    Применение JavaScript
  в "Контуре планирования
и управления производством"

     МЕТОДИЧЕСКОЕ ПОСОБИЕ

             2007
Аннотация
Методическое пособие включает элементарные сведения об языке JavaScript, а
также обзор реализованных в системе Галактика ERP возможностей, связан-
ных с его применением.
Воспроизвести приведенные в пособии упражнения можно с помощью дистри-
бутивной базы с тестовыми данными, поставляемой в составе Галактики ERP.
По всем вопросам обращайтесь в Учебный центр корпорации "ГАЛАКТИКА".

                               Издание 03.2007

© ЗАО "Галактика Софт" 2007
Запрещается распространять без согласования с собственником ПО.
Оглавление
ВВЕДЕНИЕ................................................................................................................................................5

1.      ОСНОВЫ JAVASCRIPT В СИСТЕМЕ «ГАЛАКТИКА ERP» ................................................6
     1.1. ТИПЫ ДАННЫХ, ПЕРЕМЕННЫЕ И ЛИТЕРАЛЫ ................................................................................6
       1.1.1. Типы данных........................................................................................................................6
       1.1.2. Преобразование типов данных..........................................................................................6
       1.1.3. Переменные.........................................................................................................................8
       1.1.4. Литералы ............................................................................................................................8
       1.1.5. Выражения и простые операторы ..................................................................................9
            1.1.5.1.      Условные выражения.................................................................................................................... 9
            1.1.5.2.      Оператор присваивания ................................................................................................................ 9
            1.1.5.3.      Операторы cравнения ................................................................................................................... 9
            1.1.5.4.      Арифметические операторы....................................................................................................... 10
            1.1.5.5.      Логические операторы ................................................................................................................ 10
            1.1.5.6.      Строковые операторы ................................................................................................................. 11
            1.1.5.7.      Специальный оператор new........................................................................................................ 11
     1.2. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ JAVASCRIPT .................................................................................11
       1.2.1. Условный оператор if...else..............................................................................................11
       1.2.2. Операторы цикла .............................................................................................................11
            1.2.2.1.      Общие сведения........................................................................................................................... 11
            1.2.2.2.      Оператор for................................................................................................................................. 11
            1.2.2.3.      Оператор while............................................................................................................................. 12
            1.2.2.4.      Оператор do...while...................................................................................................................... 12
            1.2.2.5.      Оператор break............................................................................................................................. 12
            1.2.2.6.      Оператор continue........................................................................................................................ 13
     1.3. КОММЕНТАРИИ ..........................................................................................................................13
     1.4. ФУНКЦИИ ...................................................................................................................................13
     1.5. ОСНОВЫ ОБЪЕКТНОЙ МОДЕЛИ JAVASCRIPT...............................................................................14
       1.5.1. Общие сведения.................................................................................................................14
       1.5.2. Объекты и свойства ........................................................................................................14
       1.5.3. Методы .............................................................................................................................14
       1.5.4. Создание новых объектов................................................................................................14
     1.6. НАВИГАЦИЯ ПО БАЗЕ ДАННЫХ СИСТЕМЫ ГАЛАКТИКА ERP .....................................................15
     1.7. ЧТЕНИЕ ПОЛЕЙ ТАБЛИЦЫ И МОДИФИКАЦИЯ ДАННЫХ...............................................................15
2. ТЕХНОЛОГИЯ JAVASCRIPT В «КОНТУРЕ ПЛАНИРОВАНИЯ И УПРАВЛЕНИЯ
ПРОИЗВОДСТВОМ».............................................................................................................................17
     2.1. БИБЛИОТЕКА АЛГОРИТМОВ JAVASCRIPT ...................................................................................17
        2.1.1.   Общие сведения.................................................................................................................17
        2.1.2.   Окно настройки алгоритма JavaScript ..........................................................................17
     2.2. ПРИМЕНЕНИЕ JAVASCRIPT В ШАБЛОНЕ ПЛАНОВОГО ДОКУМЕНТА ............................................19
     2.3. ПОДКЛЮЧЕНИЕ АЛГОРИТМОВ JAVASCRIPT В ШАБЛОНЕ ЗАЯВКИ ..............................................22
     2.4.    JAVASCRIPT И ПЛАНОВОЕ ДВИЖЕНИЕ МЦ ...................................................................................24
     2.5. ПРИМЕНЕНИЕ JAVASCRIPT ДЛЯ ФОРМИРОВАНИЯ НАСТРАИВАЕМЫХ ПОЛЕЙ ОТЧЕТОВ..............26
     2.6. АЛГОРИТМЫ ДЛЯ ЗАПУСКА JAVASCRIPT ...................................................................................28
        2.6.1.   Общие сведения.................................................................................................................28
        2.6.2.   Настройка системного алгоритма №52 .......................................................................29
        2.6.3.   Настройка системного алгоритма №31 .......................................................................29
        2.6.4.   Настройка алгоритма вычисляемого поля №7008 .......................................................32
     2.7. ПРИМЕНЕНИЕ АЛГОРИТМОВ JAVASCRIPT В ШАБЛОНАХ РЕГЛАМЕНТОВ ....................................34
     2.8. ИСПОЛЬЗОВАНИЕ АЛГОРИТМА №52 ДЛЯ РАСЧЕТА ЦЕН ГОТОВОЙ ПРОДУКЦИИ ........................35
     2.9. JAVASCRIPT В МОДУЛЕ СПЕЦИФИКАЦИИ ПРОДУКТОВ...............................................................38
        2.9.1.   Формулы ............................................................................................................................38
        2.9.2.   JavaScript и извещения об изменениях ............................................................................40
     2.10.     ПЕРЕСЧЕТ ПОЛЕЙ РЕГИСТРАЦИОННОГО ЛИСТА ......................................................................41
     2.11.     ВОЗМОЖНОСТИ ТЕХНОЛОГИИ ACTIVEX ................................................................................44

Оглавление                                                                                                                                                             3
2.12.        РОЛЬ JAVASCRIPT В ИНТЕГРАЦИИ ГАЛАКТИКИ ERP С ДРУГИМИ СИСТЕМАМИ .....................46
    2.13.        ПРИМЕРЫ СЦЕНАРИЕВ JAVASCRIPT В ДИСТРИБУТИВЕ И ПАТЧАХ/ОБНОВЛЕНИЯХ СИСТЕМЫ 46
    2.14.        ПЕРСПЕКТИВНЫЕ РАЗРАБОТКИ...............................................................................................47
ЗАКЛЮЧЕНИЕ ......................................................................................................................................48

ПРИЛОЖЕНИЯ......................................................................................................................................49
      Основные интерфейсы и функции, связанные с применением JavaScript ...................................49
      Список использованных источников...............................................................................................50

4                                                                                                                              Оглавление
ВВЕДЕНИЕ

       Язык программирования JavaScript упоминается, как правило, в связи с разра-
       боткой интерактивных web-страниц, на которых ведется диалог с клиентом, об-
       рабатываются некоторые события, запускаются различные приложения и т.п.
       При этом JavaScript-операторы интерпретируются браузером, в отличие от ряда
       других распространенных языков программирования, предполагающих компи-
       ляцию исходного кода (в первом приближении здесь можно провести аналогию с
       пакетными файлами, широко применяющимися в ОС DOS). Таким образом,
       язык JavaScript позволяет записать набор команд (сценарий) или алгоритм, ис-
       полняемые в некотором программном контексте.

       › Термины "сценарий", "JavaScript", "алгоритм JavaScript", "скрипт" употреб-
       ляются как синонимы.

       В системе Галактика ERP реализована поддержка работы с языком JavaScript,
       ориентированная на решение широкого спектра задач, начиная от несложных
       арифметических операций над полями документов и заканчивая формированием
       позиций спецификаций, конвертацией данных других прикладных систем, вы-
       грузкой информации в MS Excel и т.д.
       При этом практическое применение данной технологии максимально упрощено
       — таким образом, чтобы любой пользователь, даже не обладающий серьезными
       навыками программирования, мог воспользоваться всеми ее преимуществами,
       существенно расширяющими функциональность и повышающими гибкость на-
       стройки Контура планирования и управления производством.

Введение                                                                         5
1. ОСНОВЫ JAVASCRIPT В
            СИСТЕМЕ «ГАЛАКТИКА ERP»

1.1. ТИПЫ ДАННЫХ, ПЕРЕМЕННЫЕ И
ЛИТЕРАЛЫ

1.1.1. Типы данных
      JavaScript распознает следующие типы:
      ♦ Numbers, такие как 17 или 3.14159;
      ♦ Logical (Boolean), true или false;
      ♦ Strings, такие как "Hello !";
      ♦ null, специальное ключевое слово для обозначения пустого значения.
      Явное различие между целыми и действительными данными в JavaScript отсут-
      ствует.
      Число типов данных, различаемых в системе Галактика ERP, существенно
      больше. Например, достаточно широко применяется тип Дата, аналог которого
      в JavaScript отсутствует (использование объекта JavaScript Date не рекомендует-
      ся). Данные типа Дата передаются в JavaScript и обрабатываются в нем в виде
      строки формата ГГГГ/ММ/ДД. Использование такого формата позволяет напря-
      мую сравнивать даты в сценарии.
      Кроме того, одни и те же типы данных в JavaScript и в системе Галактика ERP
      могут иметь некоторые отличия. Например, длина строки в JavaScript не лими-
      тирована, а строка в БД системы — меньше 256 символов.

1.1.2. Преобразование типов данных
     В JavaScript необязательно определять тип данных — они преобразуются авто-
     матически в процессе выполнения программы. Так, например, можно опреде-
     лить переменную var str15 = 42, а позже можно присвоить этой же пере-
     менной строковое значение str15 = "This is new value...", и это не
     вызовет ошибки. В выражениях, где числовые и строковые значения использу-
     ются одновременно, JavaScript преобразует числовое значение к строковому. На-
     пример, в следующих операторах:
     x = "This is new value — " + 42
     y = 42 + " — is new value"
     первый возвратит строку This is new value — 42, второй — 42 — is new value.

6                                       Основы JavaScript в системе «Галактика ERP»
В JavaScript имеются специальные функции для манипулирования строковыми и
        числовыми значениями:
        ♦ eval — пытается преобразовать строковое значение к типу number;
        ♦ parseInt — преобразует строковое значение в целое, если это возможно;
        ♦ parseFloat — преобразует строковое значение в число с плавающей запятой,
          если это возможно.
        Если данные передаются из системы Галактики ERP в JavaScript, а затем, после
        какой-либо обработки, возвращаются назад в систему, то выполняемые в
        JavaScript преобразования могут оказаться источником нежелательных ситуаций.
        Например, если целочисленное значение преобразовано в действительное, то
        при возвращении в систему оно лишится дробной части.
        При желании быстро воспроизвести в системе Галактика ERP приведенные
        здесь и далее простейшие примеры, касающиеся синтаксиса JavaScript, сделать
        это проще всего следующим образом. В модуле Спецификации продуктов от-
        кройте окно редактирования конструкторской или производственной специфи-
        кации, либо маршрутной карты и вызовите в верхней панели локальную функ-
        цию Формула расчета. Убедитесь в том, что в открывшемся окне =Формулы
        расчета= выбран Источник текста — ручной ввод и установлен флаг Исполь-
        зовать для редактирования. Затем введите Исходный текст в мемо-поле. Для
        просмотра результатов используйте специальную "галактическую" функцию:
        ShowMessage(Text[, Text[, ...[, Text]]]).
        Перед запуском сценария на исполнение его необходимо [Сохранить]. Запуск
        выполняется с помощью кнопки [Применить].
        На Рис. 1 приведен пример простейшего сценария и результат его работы — вы-
        вод информационного сообщения.

                       Рис. 1. Ввод простейшего JavaScript и результат его исполнения

Основы JavaScript в системе «Галактика ERP»                                        7
1.1.3. Переменные
     Имена переменных в JavaScript должны начинаться с буквы или символа под-
     черкивания ("_"), последующие символы могут быть также и цифрами (0-9). Не-
     обходимо учитывать, что JavaScript чувствителен к регистру. Примеры коррект-
     ных имен: MnPlan, temp99, _name и т.п.
     Переменные можно объявить двумя способами:
     ♦ непосредственно определяя значение переменной, например, x = 42;
     ♦ либо с ключевым словом var, например, var x = 19.
     Различают глобальные и локальные переменные. Если переменная объявлена
     вне функции, то это — глобальная переменная, и ее можно использовать везде в
     текущем сценарии. Локальная переменная доступна только в пределах функции.
     Использование var необязательно, однако целесообразно использовать это клю-
     чевое слово, если требуется иметь локальную переменную с таким же именем,
     как у глобальной.

1.1.4. Литералы
     Литералы — это константы различных типов.
     Целые. Целые могут выражаться десятичным, шестнадцатеричным или восьме-
     ричным числом. Различаются они следующим образом: десятичное обязательно
     начинается не с нуля, предшествующий нуль означает, что это восьмеричное
     число, а предшествующие 0x (или 0X) означают шестнадцатеричное. Шестна-
     дцатеричное целое может включать цифры (0-9) и символы a-f и A-F, восьмерич-
     ное целое — только цифры 0-7. Примеры целых литералов: 17, 0xFFF, –345 и т.п.
     Литералы с плавающей точкой. Они могут иметь следующие части: десятич-
     ное целое число, десятичная точка ("."), дробная часть (десятичное целое), при-
     знак порядка ("e" или "E") и порядок (десятичное целое со знаком). Некоторые
     примеры литералов с плавающей точкой: 3.1415, –3.1E1, .107e2, 2E−10.
     Литералы Boolean. Тип Boolean имеет два значения: true и false.
     Строковые литералы. Это ноль или больше символов, заключенных в двойные
     (" ") или одинарные кавычки (' '). Примеры строковых литералов: "code", 'code',
     "4321", " one line \n another line". В последнем примере используется специаль-
     ный символ новой строки "\n", т.е. при выводе данного литерала, например, в
     информационное сообщение, он отображается как показано на Рис. 2.

                                                         Рис. 2. Вывод в две строки
     Для того, чтобы использовать обратный слеш ("\") внутри строки, необходимо
     использовать двойной обратный слеш. Например, чтобы определить путь к фай-
     лу c:\temp как строку, следует указать: var home = "c:\\temp".

8                                    Основы JavaScript в системе «Галактика ERP»
1.1.5. Выражения и простые операторы
        Выражение — любой имеющий значение набор литералов, переменных, опера-
        торов и т.п., который приводит к единственному значению. Значение может быть
        числом, строкой или Boolean. Специальное ключевое слово null обозначает пус-
        тое значение. Следует различать null и переменные, которым не были присвоены
        значения — последние не определены и будут вызывать ошибку во время вы-
        полнения, если используются как числовые переменные.

1.1.5.1. Условные выражения
        Условное выражение может иметь одно из двух значений, в зависимости от ус-
        ловия.
        Его синтаксис:
        (condition)? value1: value2
        Если условие (condition) истинно, выражение имеет значение value1, иначе —
        value2. Можно использовать условное выражение везде, где допустимо стан-
        дартное выражение.
        Например, size = (length >= 50)? "big": "small".

1.1.5.2. Оператор присваивания
        Оператор присваивания (=) присваивает значение правого операнда левому, т. е.
        x = y присваивает x значение y. Существует сокращенная форма оператора
        присваивания, общий вид которой:
         = 
        При этом  и следующий за ним знак равенства записываются
        без пробела и подразумевается выполнение следующего оператора присваива-
        ния:
         =   
        Знаком операции могут быть:
        ♦ + (сложение);
        ♦ – (вычитание);
        ♦ * (умножение);
        ♦ / (деление) и др.
        Например, x += y эквивалентно x = x + y.

1.1.5.3. Операторы cравнения
        Операторы сравнения сравнивают числовые или строковые операнды и возвра-
        щают логическое значение, основанное на истинности сравнения. Когда исполь-
        зуются строковые значения операндов, сравнение проводится с помощью стан-
        дартного лексикографического анализа.
        Операторы сравнения приведены в следующей таблице:
              Оператор                     Описание оператора                Пример
        равно (==)             возвращает true, если операнды равны          x == y

        не равно (!=)          возвращает true, если операнды не равны       x != y

Основы JavaScript в системе «Галактика ERP»                                        9
Оператор                      Описание оператора                     Пример
      больше (>)              возвращает true, если левый операнд больше         x > y

      больше или равно (>=)   возвращает true, если левый операнд больше         x >= y
                              или равен правому
      меньше (
1.1.5.6. Строковые операторы
        В дополнение к операторам сравнения, которые могут использоваться для срав-
        нения строк, имеется оператор конкатенации, используемый для слияния строк.
        Например, "two " + "words" возвращает значение two words. Оператор при-
        сваивания += также может использоваться при конкатенации, например, если
        переменная mystring имеет значение "alpha" и вычисляется выражение:
        mystring += "bet",
        то возвращается результат, равный alphabet, который присваивается переменной
        mystring.

1.1.5.7. Специальный оператор new
        Оператор new используется для создания встроенного или определенного поль-
        зователем объекта.
        Синтаксис этого оператора:
        name = new type(param1 [,param2] ...[,paramN])
        где name — имя вновь созданного объекта, type — его тип и param — парамет-
        ры.

1.2. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
JAVASCRIPT
1.2.1. Условный оператор if...else
        Синтаксис:
        if (condition) { statements1 [ } else { statements2 ] }
        Если условие condition истинно, выполняется оператор statements1, иначе —
        statements2. Условие может быть любым JavaScript-выражением, которое можно
        оценить как истинное или ложное. Операторы, которые требуется выполнить,
        могут быть любыми JavaScript-операторами, включая условные. Более чем один
        оператор должен быть заключен в фигурные скобки { }.

1.2.2. Операторы цикла

1.2.2.1. Общие сведения
        Цикл — набор команд, который выполняется неоднократно до выполнения за-
        данного условия.
        JavaScript поддерживает два вида оператора цикла — for и while.
        Внутри операторов цикла могут использоваться операторы break и continue.

1.2.2.2. Оператор for
        Цикл повторяется до тех пор, пока заданное условие не станет ложно (false).

Основы JavaScript в системе «Галактика ERP»                                           11
Синтаксис:
       for ( [начальное выражение]; [условие]; [выражение
       приращения] ) {операторы}
       При выполнении цикла происходит следующее.
       1. Инициализация начального выражения. Это выражение обычно содержит
          одну или несколько переменных цикла, но синтаксис позволяет использовать
          выражение любой степени сложности.
       2. Оценка условия. Если значение условия true, то выполняются операторы
          цикла. Если значение условия false, цикл прекращается.
       3. Исполняется выражение приращения.
       4. Происходит переход к шагу 2.

1.2.2.3. Оператор while
       Цикл повторяется до тех пор, пока заданное условие истинно (true).
       Синтаксис:
       while (условие) {операторы}
       Если условие становится ложным (false), цикл прекращается и управление пере-
       дается операторам после цикла. Условие проверяется не непрерывно, а первона-
       чально и после выполнения всех операторов цикла.

1.2.2.4. Оператор do...while
       Цикл повторяется до тех пор, пока заданное условие не станет ложным (false).
       Синтаксис:
       do {операторы} while (условие)
       Операторы выполняются по крайней мере один раз, затем проверяется условие.
       Если условие истинно (true), цикл повторяется.

1.2.2.5. Оператор break
       Этот оператор прерывает цикл for или while и передает управление операто-
       ру, следующему за оператором цикла.
       Пример. В следующем фрагменте оператор break прерывает цикл while, ко-
       гда i = 3, и передает управление оператору z = i * x.
       var i = 0
       while (i < 6) {
           if (i == 3)
            break
            i++
       }
       z= i * x

12                                     Основы JavaScript в системе «Галактика ERP»
1.2.2.6. Оператор continue
        Этот оператор прерывает выполнение операторов внутри цикла (while или
        for) и продолжает выполнение цикла с новой итерации. В противоположность
        оператору break, выполнение цикла не заканчивается — вместо этого:
        ♦ в цикле while происходит переход к проверке условия;
        ♦ в цикле for происходит переход к выражению приращения.
        Пример. В следующем фрагменте приведен оператор while с continue, ко-
        торый выполняется, когда i = 3. Т.о., переменная n принимает значения 1, 3, 7
        и 12.
        i = 0
        n = 0
        while (i < 5) {
            i++
            if (i == 3)
            continue
        n += i
        }

1.3. КОММЕНТАРИИ
        JavaScript поддерживает комментарии в стиле языка Java:
        ♦ комментарий, распространяющийся на одну строку, которому предшествует
          двойной слеш (//);
        ♦ многострочный комментарий, начинающийся с символов /* и заканчиваю-
          щийся символами */.
        Примеры:
        // Это — однострочный комментарий.
        /* Это — многострочный комментарий.
        Он может иметь любую длину. */

1.4. ФУНКЦИИ
        Функции — один из фундаментальных блоков JavaScript. Функция представляет
        собой набор операторов, предназначенный для исполнения некоторой задачи.
        Чтобы использовать функцию, необходимо сначала определить ее.
        Определение функции состоит из ключевого слова function, за которым сле-
        дуют:
        ♦ имя функции;
        ♦ заключенный в круглые скобки () список аргументов функции, которые от-
          деляются друг от друга запятыми;
        ♦ операторы JavaScript, заключенные в фигурные скобки {}.

Основы JavaScript в системе «Галактика ERP»                                       13
Операторы могут включать в себя вызовы других функций, определенных в те-
       кущем сценарии. Различие между определением и вызовом функции традицион-
       но для языков программирования. Определение называет функцию и задает вы-
       полняемые ею действия. Вызов функции исполняет заданные действия с факти-
       ческими параметрами.

1.5. ОСНОВЫ ОБЪЕКТНОЙ МОДЕЛИ
JAVASCRIPT
1.5.1. Общие сведения
       JavaScript основан на простой объектно-ориентированной парадигме. Объект
       строят со свойствами, которые являются переменными JavaScript или другими
       объектами. Объект имеет также связанные с ним функции, которые называются
       методами объекта.

1.5.2. Объекты и свойства
       Свойства объектов JavaScript доступны следующим образом:
       Object.Property
       где Object — имя объекта, Property — его свойство.

1.5.3. Методы
       Метод определяется таким же способом, что и любая другая функция. Для ассо-
       циации с существующим объектом используется следующий синтаксис:
       Object.MethodName = function_name
       где Object — существующий объект, MethodName — имя, которое назначается
       методу, function_name — имя функции. Метод вызывается следующим образом:
       Object.MethodName(params);
       где params — параметры метода.

1.5.4. Создание новых объектов
       Для создания нового объекта (не являющегося предопределенным в языке
       JavaScript) необходимо:
       1. определить тип (класс) объекта с помощью функции-конструктора;
       2. создать экземпляр объекта с помощью оператора new.
       Методы для новых объектов определяются таким же образом, как и остальные
       функции, а затем ассоциируются с требуемыми объектами.
       JavaScript имеет специальное ключевое слово this, которое предназначено для
       использования в пределах метода (функции) по отношению к текущему объекту.
       Пример:
function Sum(Item1, Item2) { //Определение объекта Sum
this.Item1 = Item1; //свойство
this.Item2 = Item2; //свойство
this.Composition = Composition //метод
}

14                                      Основы JavaScript в системе «Галактика ERP»
function Composition() { //Определение функции, используемой как метод
var result = this.Item1 + this.Item2; /* в локальную переменную result
записывается сумма Item1 и Item2 */
}
Sum1 = new Sum(3, 4); /* создание экземпляра объекта Sum с заданными
свойствами */
Sum1.Composition(); /* вызов метода Composition для экземпляра Sum1 —
в результате локальная переменная result устанавливается в значение 7
*/
        При работе с JavaScript в системе Галактика ERP прибегать к описанию типов
        (классов) и экземпляров объектов подобным способом практически не прихо-
        дится — для конструирования объектов реализован специальный интерфейс.

1.6. НАВИГАЦИЯ ПО БАЗЕ ДАННЫХ
СИСТЕМЫ ГАЛАКТИКА ERP
        Для навигации по таблице БД предусмотрены пять функций и две глобальные
        переменные.
        Для каждого объекта автоматически описываются следующие функции:
        ♦ getFirst() — выполнить позиционирование на первую позицию таблицы БД;
        ♦ getNext() — перейти на следующую позицию таблицы;
        ♦ getPrev() — перейти на предыдущую позицию таблицы.
        ♦ getLast() — перейти на последнюю позицию таблицы;
        ♦ setPosition(Pos) — выполнить позиционирование на позицию таблицы
          БД с уникальным идентификатором nRec, равным Pos.
        Все пять функций возвращают результат логического типа. Если операция про-
        изведена успешно, возвращается true, иначе — false.
        В системе имеются две глобальные переменные, хранящие результат последней
        операции навигации:
        ♦ ResultOfNavigation — переменная логического типа, хранит значение
          последней операции навигации: true — операция завершилась успешно, ина-
          че — false;
        ♦ PositionOfNavigation — переменная типа ссылка, хранит nRec по-
          следней позиции таблицы БД, на которую выполнялось позиционирование.
          Может использоваться в функции setPosition(Pos).
        Кроме этого, для некоторых объектов имеются собственные дополнительные ме-
        тоды навигации, а также методы установки ограничений на выборку данных, по-
        зволяющие применять функции getFirst(), getNext() и т.п. не ко всем, а только к
        удовлетворяющим заданным условиям записям.

1.7. ЧТЕНИЕ ПОЛЕЙ ТАБЛИЦЫ И
МОДИФИКАЦИЯ ДАННЫХ
        Для чтения полей таблицы используется функция reread(). Например, если опи-
        сан экземпляр Claim класса TClaim, то для того, чтобы перечитать все его поля,
        обрабатываемые в сценарии, необходимо внести в код следующую строку:
        Claim.reread() // перечитывает буфер таблицы Claim

Основы JavaScript в системе «Галактика ERP»                                         15
Вызывать этот метод напрямую разработчику требуется не часто, т.к. в самом
     распространенном случае перечитывания полей — при переходе на какую-либо
     новую позицию таблицы — его вызов происходит автоматически.
     Для того, чтобы выполненные в сценарии изменения значений полей сохрани-
     лись в базе данных, необходимо вызвать функцию rewrite().

     › Фактически обновление таблиц с помощью JavaScript происходит не в мо-
     мент вызова метода rewrite(), а лишь после вызова функции навигации по моди-
     фицируемой таблице (getFirst, getNext, getPrev, getLast, setPosition — см. преды-
     дущий раздел), либо при закрытии интерфейса.
     , При модификации данных необходимо проявлять особую осторожность.
     Кроме того, не следует производить модификацию тех полей, по которым ус-
     тановлены ограничения на выборку.

16                                   Основы JavaScript в системе «Галактика ERP»
2. ТЕХНОЛОГИЯ JAVASCRIPT В
      «КОНТУРЕ ПЛАНИРОВАНИЯ И
  УПРАВЛЕНИЯ ПРОИЗВОДСТВОМ»

2.1. БИБЛИОТЕКА АЛГОРИТМОВ JAVASCRIPT
2.1.1. Общие сведения
        Для ввода и хранения пользовательских алгоритмов JavaScript предусмотрена
        специальная библиотека, доступная в модулях Управление заказами, Плани-
        рование производства, МТО и Корпоративное планирование по функции
        Настройка ⇒ Алгоритмы JavaScript и в модуле Спецификации продуктов —
        по функции Операции ⇒ Алгоритмы JavaScript. Вообще говоря, возможности
        использования JavaScript не ограничиваются вызовом алгоритмов из данной
        библиотеки, однако во многих случаев целесообразно обращаться именно к этой
        функциональности.
        Введенные в библиотеку алгоритмы JavaScript могут подключаться к шаблонам
        плановых документов и заявок, выбираться в качестве значений специальных
        параметров реестра настроек, запускаться с помощью системных алгоритмов
        расчета №№ 52 и 31, а также алгоритма вычисляемого поля №7008 и т.д.
        Работа с этой библиотекой практически не отличается от ведения библиотеки
        расчетных алгоритмов, причем непосредственный ввод и редактирование алго-
        ритма JavaScript, независимо от его назначения, выполняется в одном и том же
        окне настройки.

2.1.2. Окно настройки алгоритма JavaScript
        Сценарий
        Вкладка представляет собой мемо-поле, в которое записывается исполняемый
        при запуске алгоритма сценарий.
        Библиотеки
        В верхней панели вкладки отображаются используемые алгоритмом библиотеки,
        каждая из которых включает ряд функций, объектов, констант, сгруппированных
        по их назначению и доступных пользователю для создания сценария (см. описа-
        ние в мемо-поле).
        По F7 выводится иерархический список всех имеющихся в системе библиотек.
        Для добавления новой библиотеки ее следует отметить по Insert (на низшем
        уровне иерархии).
        Например, если при выполнении сценария требуется выводить какие-либо со-
        общения, то необходимо подключить библиотеку Сервисные функции ⇒ Визуа-
        лизация и запросы ⇒ Сообщения и визуализация.

Технология JavaScript в «Контуре планирования и управления производством»        17
Объекты
     Вкладка предоставляет разработчику сценария возможность описать таблицы
     Галактики ERP как объекты JavaScript. Используя эти объекты, можно получать
     значения полей, осуществлять навигацию по БД, устанавливать ограничения на
     выборку и т.д.
     В верхней панели — панели описания классов — вводится уникальное для сце-
     нария Наименование класса и выбирается соответствующий Документ (на-
     пример, Заголовок плана, Строка плана или Ячейка плана). Таким образом абст-
     рактный класс связывается с определенной таблицей БД. В иерархическом спра-
     вочнике, который открывается при выборе Документа, все доступные таблицы
     сгруппированы по их функциональному назначению.
     Поле № содержит внутреннюю информацию сценария, в большинстве случаев
     не представляющую интереса для его разработки.
     Нижняя панель зависит от выбранной вверху окна вкладки.
     Свойства, описываемые для класса из верхней панели, включают:
     ♦ уникальное для класса Наименование свойства (строковая переменная);
     ♦ Поле документа, которое выбирается из списка доступных полей соответст-
       вующей таблицы (например, создан класс c наименованием TSpMnPl, свя-
       занный с Документом Ячейка плана; для этого класса описывается свойство
       с наименованием Field_1, связываемое с Полем документа Поле 1);
     ♦ Тип переменной и режим доступа (поле Д; r – чтение, w – запись), устанав-
       ливающиеся автоматически при выборе Поля документа.
     Методы описываются в целом аналогично Свойствам. При выборе Метода до-
     кумента в поле Тип устанавливается тип результата применения метода. Неза-
     полненное поле означает, что функция не возвращает никакого результата. Поле
     К.П. — количество параметров функции — также заполняется автоматически.
     Например, для класса TCatParty, связанного с каталогом партий МЦ, можно соз-
     дать метод FindParty и связать его с Методом документа Найти партию по ко-
     ду (см. группу Быстрая навигация). При этом устанавливается Тип Позиция и
     К.П. 1 (в данном случае единственным параметром является код партии).
     Экземпляры формируются после конструирования классов. Для этого вводятся
     Наименования экземпляров, которые в дальнейшем непосредственно исполь-
     зуются в сценарии. В поле № отображается служебная информация, идентифи-
     цирующая экземпляр любого класса.
     Константы
     Вкладка предназначена для описания констант типа "Ссылка" (в т.ч. аналитик,
     типов строки спецификации заявок и т.п.).
     При необходимости описать константы других типов, это следует сделать непо-
     средственно в коде сценария, например:
     ♦ DocNumber = "000001"; // Описание строковой константы
     ♦ Quantity = 12; // Описание числовой целочисленной константы
     ♦ Pi = 3.1415926; // Описание числовой действительной константы
     Локальные константы — это константы, непосредственно связанные с создан-
     ными Объектами. Например, если для класса TSpMnPl, связанного с Докумен-
     том Ячейка плана, используется Метод документа К заголовку плана и пред-
     ставлению, одним из параметров которого является ссылка на системное пред-

18   Технология JavaScript в «Контуре планирования и управления производством»
ставление (пусть требуется обработать представление Производственный заказ),
        то целесообразно настроить локальную константу следующим образом:
        ♦ Наименование константы — PrPZ (любое уникальное имя);
        ♦ Источник — Ячейка плана;
        ♦ Ссылка — Системное представление;
        ♦ Значение — Производственный заказ.
        Глобальные константы описываются аналогичным образом, однако в данном
        случае Источник не указывается, т.к. к глобальным относятся константы, не
        имеющие прямого отношения к созданным Объектам, а используемые, напри-
        мер, для работы с подключенными библиотеками функций расширения.
        Аналитика — константы для аналитик любого типа. Вводится Наименование
        константы, затем выбираются Наименование аналитики и ее Значение. Ос-
        тальные поля содержат служебную информацию и заполняются автоматически.
        Упражнение 1.
        В модуле Управление заказами откройте библиотеку =Н(астройка)= ⇒ Алго-
        ритмы JavaScript и нажмите F7. В окне =Редактирование алгоритма
        JavaScript= введите Наименование алгоритма — Запрос на выполнение и на-
        жмите кнопку [Настройка].
        В окне настройки алгоритма на вкладке Библиотеки нажмите F7 и найдите в от-
        крывшемся окне библиотеку Сервисные функции ⇒ Визуализация и запросы ⇒
        Сообщения и визуализация. Ознакомьтесь с описанием функции Message, приве-
        денном в нижней панели. Отметьте библиотеку Сообщения и визуализация по
        Insert и нажмите Enter.
        Переключитесь на вкладку Сценарий и введите следующий код:
Choice = 0;
if (Message('Выполнить расчет?', mfConfirmation + mfOKCancel) == cmOk)
  Choice = 1;
        Таким образом, подготовлен простейший алгоритм JavaScript, выводящий запрос
        на выполнение некоего расчета и запоминающий выбор пользователя в перемен-
        ной Choice. Этот алгоритм еще пригодится в дальнейшем.

2.2. ПРИМЕНЕНИЕ JAVASCRIPT В ШАБЛОНЕ
ПЛАНОВОГО ДОКУМЕНТА
        Подключение JavaScript в шаблоне планового документа применяется, главным
        образом, для пересчета значений полей текущего представления, находящихся в
        функциональной зависимости от других полей этого же или другого заданного в
        данном шаблоне представления.
        Для использования этой возможности на вкладке Представления шаблона тре-
        буется установить флажок При изменении данных пересчитывать по формуле
        и ввести [Формулу] на языке JavaScript с помощью соответствующей экранной
        кнопки.
        =Настройка формулы для полей документа=, выполняемая в одноименном окне,
        как правило включает не только выбор требуемого алгоритма JavaScript из биб-
        лиотеки или непосредственный ввод кода скрипта, но и определение ряда пара-
        метров.

Технология JavaScript в «Контуре планирования и управления производством»        19
Пересчитывать данные при изменении полей — флажками отмечаются поля
     представления документа, при редактировании которых (с клавиатуры) должен
     автоматически выполняться пересчет по формуле. Если на основной вкладке
     Представления установлен флажок Использовать наименования полей из
     шаблона документа, то в верхней панели окна настройки формулы отобража-
     ются Наименования полей, входящие в Настройки полей представления по
     умолчанию на вкладке Поля документа (в противном случае — наименования
     полей из используемого Алгоритма обработки).
     Кодировка для написания формул в скрипте (русская.../английская...) — поло-
     жение переключателя определяет возможность использования кириллицы при
     вводе формулы в мемо-поле в нижней панели рассматриваемого окна (например,
     при русской кодировке допускаются кириллические имена переменных).
     Выполнять формулу в расчетных алгоритмах — если этот флаг установлен,
     то пересчет по формуле производится при выполнении расчетных алгоритмов,
     поддерживающих запуск JavaScript. Это алгоритмы №№ 1, 2, 5, 9, 13, 16, 19-22,
     26-28, 31, 32, 36, 37, 40, 59, 63, 65, 72, 75 (полный список поддерживающих за-
     пуск JavaScript расчетных алгоритмов пополняется по мере их разработки).
     Запускать скрипт при удалении позиции спецификации — если этот флаг ус-
     тановлен, то пересчет по формуле выполняется по событию удаления строки
     спецификации документа.

     › Для запуска скрипта при удалении позиции спецификации должен быть ус-
     тановлен хотя бы один флаг из группы Пересчитывать данные при изменении
     полей.

     Кроме запуска по событию, пересчет полей согласно настроенной формуле мо-
     жет производиться также по локальным функциям спецификации планового до-
     кумента Выполнить Java скрипт текущего представления и Выполнить Java
     скрипт для текущей колонки (данные функции присутствуют в меню только по-
     сле ввода в шаблоне документа какой-либо [Формулы]).
     Отображать окно отладки — если этот флаг установлен, то после пересчета
     по формуле выводится окно, содержащее код скрипта, полную информацию о
     его выполнении и средства для отладки.
     В окне отладки можно отредактировать код скрипта, загрузить другой скрипт из
     выбранного файла, запустить скрипт на выполнение, сохранить сделанные изме-
     нения.

     › Отладочные функции находятся в локальном меню, вызываемом с помощью
     специальной клавиши, находящейся на клавиатуре справа рядом с клавишей Ctrl.
     "Стандартная" комбинация Alt+F10 в данном случае не применяется.
     , Для быстрого перехода в окне отладки к строке кода, вызывающей ошибку,
     нажмите клавишу стрелка вправо.

     Для ввода формулы предусмотрены две возможности, которые могут использо-
     ваться одновременно:
     ♦ Алгоритм JavaScript выбирается из библиотеки;
     ♦ скрипт вводится в мемо-поле в нижней панели окна настройки формулы.
     Первым выполняется скрипт, выбранный из библиотеки, затем — введенный в
     мемо-поле окна настройки формулы.

20   Технология JavaScript в «Контуре планирования и управления производством»
Если выбран предварительно созданный Алгоритм JavaScript, то в тексте
        скрипта в мемо-поле могут использоваться любые объекты, сконструированные
        для этого алгоритма, а также подключенные в нем библиотеки функций расши-
        рения.
        В то же время, независимо от использования готового Алгоритма JavaScript,
        при вводе скрипта в мемо-поле могут использоваться любые выражения и опера-
        торы, поддерживаемые в языке сценариев JavaScript (в т.ч. do...while, for,
        if...else и т.д.). Кроме того, скрипт в мемо-поле может вводиться с приме-
        нением упрощенной навигации по полям текущего документа — для этого под-
        держиваются следующие правила написания формул:
        ♦ поля спецификации (ячейки) документа записываются как Field_1, Field_2,
          ..., Field_14 или Поле_1, Поле_2, ..., Поле_14 (в зависимости от положения
          переключателя Кодировка для написания формул в скрипте);
        ♦ поля заголовка документа — FieldDoc_1, FieldDoc_2, ..., FieldDoc_7 или
          ПолеДок_1, ПолеДок_2, ..., ПолеДок_7;
        ♦ вычисляемые поля спецификации документа — FieldSp_1, FieldSp_2,
          FieldSp_3 или ПолеСпец_1, ПолеСпец_2, ПолеСпец_3;
        ♦ вычисляемые поля спецификации документа для текущего представления —
          FieldVid_1, FieldVid_2, FieldVid_3 или ПолеПредст_1, ПолеПредст_2,
          ПолеПредст_3.
        Независимо от выбранной Кодировки..., можно использовать также Наименова-
        ния полей, заданные в Настройках полей представления по умолчанию на
        вкладке Поля документа. При этом наименование поля заключается в символы
        '$', например, $Сумма в валюте$.
        Пример:
        if ($План$ >= $Факт$)
               ПолеДок_1 = $План$;
        else
               ПолеДок_1 = $Факт$;
        Упражнение 2.
        В модуле Управление заказами откройте Документы ⇒ Планы сбыта, Свод-
        ный план реализации ГП (январь).
        В спецификации этого документа поле К заказу рассчитывается как разность по-
        лей По заявкам и На складе, причем пересчет выполняется автоматически при
        редактировании любого из указанных полей.
        По Ctrl+Enter в верхней панели окна редактирования плана откройте окно
        =Расширенная информация=, а затем — Шаблон документа с помощью кнопки
        выбора или по F4 в одноименном поле. В окне редактирования шаблона пере-
        ключитесь на вкладку Представления, обратите внимание на установленный
        флаг При изменении данных пересчитывать по формуле и нажмите кнопку
        [Формула].
        Ознакомьтесь с тем, как выполнена =Настройка формулы для полей докумен-
        та=.
        Внесем некоторые изменения в настройку — пусть пересчет выполняется с
        предварительным запросом. Для этого в поле Алгоритм JavaScript выберем
        подготовленный при выполнении предыдущего упражнения сценарий Запрос на
        выполнение (поле для выбора алгоритма JavaScript находится внизу верхней па-

Технология JavaScript в «Контуре планирования и управления производством»        21
нели окна =Настройка формулы для полей документа= — как правило, требует-
     ся воспользоваться вертикальным скроллингом). Кроме того, добавим в скрипт,
     введенный в нижней панели окна настройки формулы, строку:
     if (Choice == 1),
     выделенную на Рис. 3.

                             Рис. 3. Редактирование формулы пересчета полей плана
     Теперь при редактировании полей спецификации плана По заявкам и На складе
     выводится запрос на подтверждение, и пересчет поля К заказу выполняется
     только при нажатии кнопки [OK].

2.3. ПОДКЛЮЧЕНИЕ АЛГОРИТМОВ
JAVASCRIPT В ШАБЛОНЕ ЗАЯВКИ
     Подключение JavaScript в шаблоне заявки существенно отличается от примене-
     ния аналогичной функциональности при работе с шаблонами плановых доку-
     ментов. В данном случае порядок действий напоминает выбор фильтра или на-
     стройки просмотра.
     На вкладке Поля шаблона заявки находится группа настроек Наименование до-
     полнительных расчетных полей. Здесь по F3 в поле Код или Наименование
     открывается окно =Выберите алгоритм=, в котором формируются иерархиче-
     ские списки настроек подключения JavaScript для Заголовка или Спецификации
     заявки. При редактировании каждой такой настройки вводятся от одного до пяти
     Наименований колонок (т.е. дополнительных расчетных полей) с соответст-
     вующими Наименованиями переменных, которые используются в коде скрипта
     для передачи значений в требуемое дополнительное поле (Рис. 4).

22   Технология JavaScript в «Контуре планирования и управления производством»
Рис. 4. Настройка подключения JavaScript для спецификации заявки
        Собственно Алгоритм расчета выбирается из библиотеки в одноименном поле.
        Наименование функции вводится с клавиатуры — функция с заданным наиме-
        нованием используется в коде скрипта (без параметров) для получения уникаль-
        ного идентификатора (nRec) текущей заявки или строки ее спецификации. На-
        пример, если задано Наименование функции CurClaim, то обращение к ней в
        коде скрипта записывается как CurClaim(). Наконец, устанавливается режим
        отображения Окна отладки, выводить которое имеет смысл только на этапах
        разработки и тестирования.

        › Следует подчеркнуть, что Расчетные поля заголовка заявки отображаются
        на соответствующей вкладке окна ее редактирования независимо от каких-
        либо дополнительных настроек, а режим отображения расчетных полей спе-
        цификации устанавливается на вкладке Отображать шаблона с помощью
        флажков Расчетное 1, Расчетное 2,... Расчетное 5. Если отображение рас-
        четных полей спецификации отключено, то запуск применяемого для определе-
        ния их значений JavaScript не выполняется.

        В общем случае запуск JavaScript выполняется по событию "перерисовки" ин-
        терфейса редактирования заявки (при ее открытии, при удалении/добавлении
        позиций спецификации и т.п.).
        Упражнение 3. Настройка и подключение алгоритма JavaScript для вывода в
        расчетное поле спецификации заявки текущего наличия МЦ по предприятию.
        Управление заказами ⇒ =Н(астройка)= ⇒ Алгоритмы JavaScript, F7. Создай-
        те алгоритм с наименованием Текущее наличие (по предприятию) и произведите
        его настройку следующим образом.
        Сценарий
        Claim.setPosition(CurClaim());
        Rest = RestInAll(Claim.cMc);
        Библиотеки
        ♦ Складской учет ⇒ Текущие остатки и резервы

Технология JavaScript в «Контуре планирования и управления производством»         23
Объекты
     Наименование класса                    Документ
     TClaim                                 Планирование ⇒ Заявка ⇒ Специфи-
                                            кация заявки
     ♦ Свойства
        Наименование свойства                 Поле документа
        cMc                                   Объект\Ресурс ⇒ МЦ\Усл
     ♦ Экземпляры
        Наименование экземпляра
        Claim
     После того, как требуемый алгоритм JavaScript подготовлен, откройте Докумен-
     ты ⇒ Заявки, заявка №СМ-Д-01 (предпоследняя в списке). Перейдите к редак-
     тированию шаблона заявки (F3 поле Шаблон верхней панели, затем — F4 в окне
     выбора шаблона). В окне редактирования шаблона заявки поставщикам пере-
     ключитесь на вкладку Поля и нажмите F3 в поле Спецификация — Код или
     Спецификация — Наименование из группы настроек Наименование дополни-
     тельных расчетных полей. В открывшемся окне =Выберите алгоритм= по F7
     создайте настройку подключения алгоритма JavaScript, показанную на Рис. 4. За-
     тем закройте окно настройки подключения и нажмите Enter.
     В окне редактирования шаблона заявки переключитесь на вкладку Отображать
     и установите флаг Расчетное 1.
     Закройте окно редактирования шаблона заявки.
     В результате выполненного подключения алгоритма JavaScript спецификация за-
     явки приобретает вид, показанный на Рис. 5.

         Рис. 5. Спецификация заявки с дополнительным расчетным полем Наличие,
                                               формируемым с помощью JavaScript

2.4. JAVASCRIPT И ПЛАНОВОЕ ДВИЖЕНИЕ МЦ
     Настройка механизма планового движения в наиболее полном объеме предпола-
     гает применение алгоритмов JavaScript для решения следующих двух основных
     задач.
     1. При регистрации плановых операций одного и того же направления по взаи-
        мосвязанным документам формируется иерархия плановых операций, обес-
        печивающая корректный расчет планового наличия. На низшем уровне ие-
        рархии при этом располагаются складские ордера, фактически подтвер-
        ждающие исполнение запланированных операций. Для построения иерархии
        плановых операций системой анализируется и обрабатывается целый ряд
        типовых (предопределенных) схем связей между документами. В то же вре-

24   Технология JavaScript в «Контуре планирования и управления производством»
мя, учитывая многообразие возможных вариантов документооборота, доста-
           точно часто возникает необходимость формировать пользовательские иерар-
           хии плановых операций.
        2. После регистрации плановых приходов и расходов как правило целесообраз-
           но выполнять так называемую разноску, т.е. распределение операций расхода
           на операции прихода (или наоборот) в качественном и количественном от-
           ношении. Результатом разноски является формирование специальных запи-
           сей, содержащих количество МЦ из общего объема по операции, отнесенное
           на операцию противоположного направления. Эта функциональность ориен-
           тирована, например, на автоматическое резервирование МЦ в требуемых
           разрезах по мере фактического выполнения запланированных приходов. Для
           автоматизации разноски требуется разработать и применять алгоритм поиска
           плановых операций, пригодных для формирования разноски по некоторым
           заданным критериям.
        Подключение алгоритмов JavaScript, предназначенных для решения этих задач,
        выполняется в реестре настроек системы Галактика ERP с помощью парамет-
        ров, находящихся в подразделах Производство и планирование ⇒ Планирова-
        ние ⇒ Плановое движение ⇒ Разноска операций и ...⇒ Связанные операции.

        Разноска операций
        Параметры, объединенные в подраздел Плановое движение ⇒ Разноска опера-
        ций, предназначены для задания способа разноски плановых операций расхода
        по операциям прихода и фактическому наличию МЦ.
        Осуществлять авторазноску при регистрации операций планового движе-
        ния (нет/только для расхода/только для прихода/для расхода и прихода) — зна-
        чение параметра указывает вид операций планового движения, при формирова-
        нии которых автоматически выполняется заданный в этом же подразделе Алго-
        ритм разноски JavaScript.
        Запускать алгоритм разноски для плановых операций (нет/только для расхо-
        да/только для прихода/для расхода и прихода) — значение параметра указывает
        вид операций, для которых предусматривается возможность запускать Алго-
        ритм разноски JavaScript (автоматически или вручную).
        Алгоритм разноски JavaScript — в качестве значения параметра из библиотеки
        пользовательских алгоритмов JavaScript выбирается сценарий, используемый
        для разноски операций планового движения.
        Наименование функции для передачи текущей операции — в качестве значе-
        ния параметра вводится наименование функции, с помощью которой в сценарий
        разноски передается уникальный идентификатор (nRec) обрабатываемой опера-
        ции планового движения.
        Отображать окно отладки в алгоритме разноски — значение параметра оп-
        ределяет режим отображения отладочной консоли после исполнения сценария.

        , В каталоге системы по адресу ...\exe\ManufExt\Samples\JScript\PlaneMove на-
        ходится пример алгоритма разноски, для использования которого требуется
        выполнить Импорт данных из XML-файла StdTakeFunction.xml (Операции ⇒...).
        Данный алгоритм осуществляет выбор операций ПД наиболее простым спосо-
        бом: по очереди, от более ранних операций к более поздним. Наименование
        функции для передачи текущей операции — PlanOperation.

Технология JavaScript в «Контуре планирования и управления производством»         25
Связанные операции
     В подразделе Плановое движение ⇒ Связанные операции находятся парамет-
     ры, позволяющие использовать алгоритм JavaScript для поиска связанных доку-
     ментов и построения их иерархии при регистрации операций планового движе-
     ния.
     Алгоритм JavaScript для поиска операций — из библиотеки пользовательских
     алгоритмов JavaScript выбирается сценарий, используемый для поиска связан-
     ных документов. Если такой сценарий выбран, то в плановом движении рас-
     сматриваются только схемы связей (иерархия) документов, описанные в данном
     сценарии.
     Наименование функции для передачи ссылки на документ — в качестве зна-
     чения параметра водится наименование функции, с помощью которой в сцена-
     рии поиска операций передается nRec операции планового движения или nRec
     позиции спецификации ордера — в зависимости от значения, которое возвраща-
     ет описанная в этом же подразделе функция для передачи типа документа.
     Наименование функции для передачи типа документа — вводится наимено-
     вание используемой в сценарии функции, которая должна возвращать значение
     0, если обрабатывается операция планового движения (зарегистрированная по
     ДО, заявке или плановому документу) и значение 1, если обрабатывается склад-
     ской ордер, фактически подтверждающий некоторую плановую операцию.
     Алгоритм поиска операций – отображать окно отладки — значение пара-
     метра определяет режим отображения отладочной консоли после исполнения
     сценария.

     , В каталоге системы по адресу ...\exe\ManufExt\Samples\JScript\PlaneMove на-
     ходится пример алгоритма поиска операций, для использования которого тре-
     буется выполнить Импорт данных из XML-файла FindPlanMoveOperations.xml
     (Операции ⇒...). Данный алгоритм осуществляет поиск операций ПД по схеме
     связей документов План сбыта ⇒ Исходящие заявки сбыта ⇒ ДО на продажу
     ⇒ Накладные на отпуск ⇒ Расходные складские ордера. Наименование функ-
     ции для передачи ссылки на документ — curDoc; Наименование функции для
     передачи типа документа — curTypeDoc.

2.5. ПРИМЕНЕНИЕ JAVASCRIPT ДЛЯ
ФОРМИРОВАНИЯ НАСТРАИВАЕМЫХ ПОЛЕЙ
ОТЧЕТОВ
     Для Excel-отчетов Печать и сравнение заявок, Печать и сравнение докумен-
     тов, Печать планового движения МЦ, Печать журнала резервирования преду-
     смотрены возможности формирования с помощью JavaScript дополнительных
     расчетных полей, близкие к использованию аналогичной технологии при работе
     с шаблонами заявок.
     Например, уже рассмотренный алгоритм JavaScript для вывода в расчетное поле
     спецификации заявки текущего наличия МЦ по предприятию может применять-
     ся и при Печати и сравнения заявок. Для этого на вкладке Поля спецификации
     окна настройки отчета следует нажать экранную кнопку [Настраиваемые поля] и
     выполнить в открывшемся окне настройки, показанные на Рис. 6 (сравните с
     Рис. 4). Обратите внимание, что Наименования столбцов вводятся по F7, т.е. их
     общее количество в данном случае не ограничено пятью.

26   Технология JavaScript в «Контуре планирования и управления производством»
Рис. 6. Настройка подключения JavaScript для печати заявок в MS Excel
        Для отчетов Печать планового движения МЦ и Печать журнала резервирования
        (при выводе последнего в MS Excel) функции, наименования которых вводятся в
        окне =Настраиваемые переменные=, используются для получения уникальных
        идентификаторов (nRec) текущей плановой операции и текущей записи Журнала
        резервирования времени работы ПЦ соответственно.
        Упражнение 4.
        В модуле Управление заказами вызовите Отчеты ⇒ Печать и сравнение зая-
        вок, выберите группу Печать заявок поставщикам и перейдите к редактирова-
        нию новой настройки.
        Введите Наименование настройки (например, совпадающее с наименованием
        группы — Печать заявок поставщикам) и нажмите на вкладке Поля специфика-
        ции кнопку [Настраиваемые поля]. В открывшемся окне =Настраиваемые пере-
        менные= выберите Алгоритм расчета Текущее наличие (по предприятию), соз-
        данный при выполнении предыдущего упражнения для подключения к шаблону
        заявки, а также выполните остальные настройки, показанные на Рис. 6.
        Сохраните настройку и запустите формирование отчета (Enter на Наименова-
        нии настройки в окне =Ведомость "Печать заявок поставщикам"=). В окне
        выбора заявки, по которой требуется получить отчет, выберите заявку №СМ-Д-
        01 (предпоследнюю в списке).
        Фрагмент формируемого в результате Excel-отчета приведен на Рис. 7.

     Рис. 7. Фрагмент Excel-отчета с данными из заявки и дополнительным расчетным
                                 полем Наличие, формируемым с помощью JavaScript

Технология JavaScript в «Контуре планирования и управления производством»         27
2.6. АЛГОРИТМЫ ДЛЯ ЗАПУСКА JAVASCRIPT
2.6.1. Общие сведения
     В дополнение к уже рассмотренным специальным настройкам запуска JavaScript
     из различных интерфейсов системы, возможности использования данной техно-
     логии существенно расширяются благодаря алгоритму расчета №52 "Алгоритм
     исполнения JavaScript". Таким образом, для алгоритмов JavaScript обеспечены
     все те варианты запуска, которые поддерживаются для алгоритмов расчета —
     подключение к пользовательским локальным функциям планового документа,
     заявки, накладной и др. В частности, для подключения алгоритмов расчета к
     первичным документам предусмотрены следующие параметры настройки:
     ♦ Логистика ⇒ Документы ⇒ Управление снабжением ⇒ Приходная на-
       кладная ⇒ Запуск алгоритмов (перед оприходованием/после оприходова-
       ния и/или перед удалением ордера/после удаления ордера) и ...⇒ Дополни-
       тельные функции локального меню (при выборе алгоритма одноименная
       локальная функция активизируется в окне =Расширенная информация по на-
       кладной=, открывающемся по кнопке [Расширенная информация] в верхней
       панели окна редактирования документа);
     ♦ Логистика ⇒ Документы ⇒ Управление сбытом ⇒ Накладная на от-
       пуск ⇒ Запуск алгоритмов (перед списанием/после списания и/или перед
       удалением ордера/после удаления ордера) и ...⇒ Дополнительные функции
       локального меню (при выборе алгоритма одноименная локальная функция
       активизируется в окне =Расширенная информация по накладной= — анало-
       гично приходным накладным);
     ♦ Логистика ⇒ Складской учет ⇒ Сопроводительные документы ⇒
       Внутреннее перемещение ⇒ Дополнительные функции локального меню
       (вызываются из группы Дополнительные функции локального меню в верх-
       ней панели окна редактирования накладной на внутреннее перемещение) и
       ...⇒ Запуск алгоритмов (перед формированием/удалением ордеров и/или
       после формирования/удаления ордеров);
     ♦ Логистика ⇒ Управление качеством ⇒ Алгоритмы (⇒ для накладной на
       приход товара, ...⇒ для накладной на отпуск товара, ...⇒ для накладной
       на внутреннее перемещение (склад) и т.д., включая первичные документы
       производства) — алгоритмы запускаются автоматически при проведении по
       документу любых операций, сопровождающихся формированием или удале-
       нием ордеров;
     ♦ Производство и планирование ⇒ Учет в производстве ⇒ ДО/ЛЗК ⇒ до-
       полнительные функции локального меню документа, ...⇒ функции ло-
       кального меню для "Входящих", …⇒ функции локального меню вкладки
       "Список" и аналогичные настройки для Акта на доп. отпуск, ...⇒ Наклад-
       ная на отпуск ⇒ при списании, ...⇒ при удалении ордеров, ...⇒ дополни-
       тельные функции локального меню накладной, ...⇒ функции локального
       меню для "Входящих" и аналогичные настройки для остальных накладных
       и актов модуля Управление производственной логистикой — алгоритмы
       подключаются к пользовательским локальным функциям, активизирующим-
       ся на вкладках "Список", "Документ", "Входящие" интерфейса редактирова-
       ния документов соответствующего вида, либо запускаются автоматически
       при проведении операций, сопровождающихся формированием или удалени-
       ем ордеров.

28   Технология JavaScript в «Контуре планирования и управления производством»
Вы также можете почитать