Что такое программный модуль?

Встроенный язык

Синтаксис и применение Что такое программный модуль? в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Что такое программный модуль?

Программные модули в конфигурации системы 1С:Предприятие не являются самостоятельными программами в общепринятом понимании этого слова, поскольку они являются только частью всей конфигурации. Программный модуль — это текст на встроенном языке, в котором размещены тексты процедур и функций с необходимыми алгоритмами, вызываемые системой во время работы системы в определенные моменты. Поэтому программный модуль не имеет формальных границ своего описания типа: "Начало модуля" — "Конец модуля".

Место размещения конкретного программного модуля предоставляется конфигуратором в тех точках конфигурации, которые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые будут вызваны самой системой в заранее предусмотренных ситуациях (например, при нажатии кнопки в диалоговом окне).
Каждый отдельный программный модуль воспринимается системой как единое целое, поэтому все процедуры и функции программного модуля выполняются в едином контексте.

Практические примеры

Модуль: отделить расчёт учебного заказа от его показа

Готовая серверная библиотека считает две собственные позиции и скидку. Экспортный вход, экспортная функция и внутренняя проверка имеют разные роли; у общего модуля нет исполняемого тела.

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.

  2. Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.

  3. В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.

  4. Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.

  5. HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.

Процедура ВыполнитьПример() Экспорт
    Позиции = Новый Массив;
    Позиции.Добавить(Новый Структура("Товар,Цена,Количество", "Азбука", 250, 3));
    Позиции.Добавить(Новый Структура("Товар,Цена,Количество", "Блокнот", 100, 2));
    Итог = РассчитатьУчебныйЗаказ(Позиции, 10);
    Сообщить(Итог.СуммаДоСкидки = 950);
    Сообщить(Итог.Скидка = 95);
    Сообщить(Итог.КОплате = 855);
    Сообщить(Позиции.Количество() = 2);
    Отклонено = Ложь;
    Попытка
        НеверныйИтог = РассчитатьУчебныйЗаказ(Позиции, 101);
        Сообщить(НеверныйИтог.КОплате);
    Исключение
        Отклонено = Истина;
    КонецПопытки;
    Сообщить(Отклонено);
КонецПроцедуры

Функция РассчитатьУчебныйЗаказ(Позиции, Знач Процент) Экспорт
    ПроверитьУчебныйПроцент(Процент);
    Сумма = 0;
    Для Каждого Позиция Из Позиции Цикл
        Сумма = Сумма + Позиция.Цена * Позиция.Количество;
    КонецЦикла;
    Скидка = Окр(Сумма * Процент / 100, 2);
    Возврат Новый Структура("СуммаДоСкидки,Скидка,КОплате", Сумма, Скидка, Сумма - Скидка);
КонецФункции

Процедура ПроверитьУчебныйПроцент(Знач Процент)
    Если ТипЗнч(Процент) <> Тип("Число") Тогда
        ВызватьИсключение "Учебный процент должен быть числом";
    КонецЕсли;
    Если Процент < 0 Или Процент > 100 Тогда
        ВызватьИсключение "Учебный процент вне диапазона 0–100";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. ВыполнитьПример создаёт два объекта позиций и помещает их в свой массив. Сам общий модуль не является отдельной запускаемой программой.

  2. Из точки входа вызвать РассчитатьУчебныйЗаказ. Экспорт допускает обращение к этой функции через имя неглобального общего модуля из подходящего серверного контекста.

  3. Внутренняя ПроверитьУчебныйПроцент проверяет тип до сравнений и диапазон 0–100 до расчёта. Её Экспорт намеренно отсутствует: внешнему вызывающему коду достаточно публичного расчёта.

  4. Три Азбуки стоят 750, два Блокнота 200. Из суммы 950 вычислить скидку 95 и вернуть структуру трёх чисел, а не сформатированный текст.

  5. Показать результат отдельно. Затем передать 101: исключение не допускает выдачи отрицательной суммы к оплате.

  6. Раздел переменных и основная программа не обязательны для всякого модуля. Этот серверный общий модуль содержит только процедуры/функции; не добавляйте в конец вызов ВыполнитьПример(). Модуль формы или объекта — другой контекст и другой способ входа.

Как проверить результат

  1. Пять проверок Истина: три суммы, исходные две позиции и отклонение процента 101.

  2. В своём серверном обработчике можно вместо точки входа создать такие же позиции и вызвать УчебныйЯзык.РассчитатьУчебныйЗаказ(Позиции,0): до скидки и к оплате 950, скидка 0. Не вызывайте внутреннюю ПроверитьУчебныйПроцент через имя модуля.

Ожидаемый результат

Получена небольшая осмысленная библиотека: понятный вход, публичный расчёт, внутренняя защита и отделённый вывод. Ничего в базе не записано.

На что обратить внимание

  1. Экспорт не переносит функцию на клиент и не заменяет настройки общего модуля. Здесь серверный код вызывает серверную библиотеку.

  2. У общего модуля нет тела и переменных модуля. Общее описание структуры языка не разрешает все разделы в каждом виде модуля.

  3. Функция предназначена для собственной подготовленной коллекции с полями Цена/Количество. Она не является универсальной проверкой неизвестной структуры внешнего заказа и не учитывает налоги или правила торговой конфигурации.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.