Правила создания общих модулей. Клиент- серверные вызовы Глобальный модуль 1с 8.3

Модули платформы 1С:Предприятие 8.3, 8.2

Общие модули

Функции, которые объявлены с флагом "экспорт" в таком модуле, можно вызывать из любых мест конфигурации. Вызов делается через ИмяОбщегоМодуля.ИмяФункции().

В таких модулях отсутствует раздел переменных.

Выполнение общих модулей зависит от выставленных параметров в их свойствах:

Флаг "Глобальный"

Если этот флаг установлен, то контекст такого модуля становится глобальным. То есть при обращении к его экспортным функциям не нужно указывать имя модуля. Но имена его экспортных функций должны быть уникальными в пределах глобального контекста конфигурации.

Флаг "Сервер"

Функции такого модуля могут выполняться на сервере.

Флаг "Клиент (обычное приложение)"

Функции такого модуля могут выполняться на клиенте в режиме обычного приложения.

Флаг "Клиент (управляемое приложение)"

Функции такого модуля могут выполняться на клиенте в режиме управляемого приложения.

Флаг "Вызов сервера"

Флаг доступен для модулей с установленным флагом "Сервер". Разрешает вызов на клиенте экспортных функций этого модуля (которые будут выполняться на сервере).

Флаг "Внешнее соединение"

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

Флаг "Привилегированный"

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

Параметр "Повторное использование"

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

Модуль приложения

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

Не следует его перегружать, так как это влияет на время запуска приложения.

Модуль сеанса

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

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

С уважением, (преподаватель и разработчик ).

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

Для примера возьмем нашу старую конфигурацию, которую я использовал в предыдущих статьях. У нас в ней есть два документа это Приход Товара на склад и Отпуск товара на склад. В обоих документах есть процедуры, которые рассчитывают сумму в строке табличной части.

В каждом документе написан один и тот же код для расчёта суммы.

Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

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

Создаём общий модуль для расчета суммы

И так начнем для начала нужно создать общий модуль. Для этого заходим в конфигуратор ищем пункт Общие модули кликаем правой кнопкой и добавляем новы пишем имя РаботаСДокументами. Вписываем в него следующих код.

Так же обязательно поставьте в окне свойств галочки напротив Клиент(Управляемое приложение) и Сервер.

Теперь нужно немного изменить код в модуле формы документов. Слева в конфигурации ищем документ Приход товара разворачиваем окна до окна Формы кликаем два раза на Форма Документа и в открывшемся окне формы снизу переходим на вкладку Модуль. У нас есть вот такой код

Эта процедура работает при изменение Количества в табличной части документа Приход товара и подсчитывает сумму.

&НаКлиенте



КонецПроцедуры

А это процедура начинает работать при изменении Цены в табличной части документа Приход товара и рассчитывает сумму.

&НаКлиенте

СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

Заменяем его на этот

&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

КонецПроцедуры
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

Как вы заметили меняется только одна строчка на первый взгляд может показаться что одну строчку заменили на другую. Но не забывайте, что это пример. На самом деле количество кода может быть намного больше если вы, например, производили расчёты по сложной формуле в этом случае код заметно сократиться.

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

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

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

Тип общего модуля Пример наименования Вызов сервера Сервер Внешнее соединение Клиент
(обычное приложение)
Клиент
(управляемое приложение)
1. Серверный ОбщегоНазначения (или ОбщегоНазначенияСервер)
2. Серверный для вызова с клиента ОбщегоНазначенияВызовСервера
3. Клиентский ОбщегоНазначенияКлиент (или ОбщегоНазначенияГлобальный)
4. Клиент-серверный ОбщегоНазначенияКлиентСервер

2.1. Серверные общие модули предназначены для размещения серверных процедур и функций, не доступных для использования из клиентского кода. В них реализуется вся внутренняя серверная бизнес-логика приложения.
Для корректной работы конфигурации в режимах внешнего соединения, управляемого и обычного приложений, серверные процедуры и функции следует размещать в общих модулях с признаками:

  • Сервер (флажок Вызов сервера сброшен),
  • Клиент (обычное приложение) ,
  • Внешнее соединение .

В таком случае гарантируется возможность вызова серверных процедур и функций с параметрами мутабельных типов (например, СправочникОбъект , ДокументОбъект и т.п.). Как правило, это:

  • обработчики подписок на события документов, справочников и т.п., которые принимают в качестве параметра мутабельное значение (объект).
  • серверные процедуры и функции, в которые в качестве параметра передается объект из модулей справочников, документов и пр., а также из модулей с подписками на события.

Серверные общие модули называются по общим правилам именования объектов метаданных.
Например: РаботаСФайлами , ОбщегоНазначения

В отдельных случаях для предотвращения конфликта имен со свойствами глобального контекста может быть добавлен постфикс «Сервер» .
Например: РегламентныеЗаданияСервер , ОбменДаннымиСервер .

2.2. Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, доступные для использования из клиентского кода. Они составляют клиентский программный интерфейс сервера приложения.
Такие процедуры и функции размещаются в общих модулях с признаком:

  • Сервер (флажок Вызов сервера установлен)

Серверные общие модули для вызова с клиента называются по общим правилам именования объектов метаданных и должны именоваться с постфиксом «ВызовСервера» .
Например: РаботаСФайламиВызовСервера

Следует иметь в виду, что экспортные процедуры и функции в таких общих модулях не должны содержать параметров мутабельных типов (СправочникОбъект , ДокументОбъект и т.п.), так как их передача из (или в) клиентского кода невозможна.

См. также: Ограничение на установку признака «Вызов сервера» у общих модулей

2.3. Клиентские общие модули содержат клиентскую бизнес-логику (функциональность , определенную только для клиента) и имеют признаки:

  • Клиент (управляемое приложение )
  • Клиент (обычное приложение)

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

Клиентские общие модули именуются с постфиксом «Клиент» .
Например: РаботаСФайламиКлиент , ОбщегоНазначенияКлиент

См. также: минимизация кода, выполняемого на клиенте

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

  • Клиент (управляемое приложение)
  • Сервер (флажок Вызов сервера сброшен)
  • Клиент (обычное приложение)
  • Внешнее соединение

Общие модули этого вида именуются с постфиксом «КлиентСервер» .
Например: РаботаСФайламиКлиент , ОбщегоНазначенияКлиентСервер

В общем случае, не рекомендуется определять общие модули одновременно для сервера и для клиента (управляемое приложение). Функциональность, определенную для клиента и для сервера, рекомендуется реализовывать в разных общих модулях - см. пп. 2.1 и 2.3. Такое явное разделение клиентской и серверной бизнес-логики продиктовано соображениями повышения модульности прикладного решения, упрощения контроля со стороны разработчика над клиент-серверным взаимодействием и снижением риска ошибок из-за принципиальных отличий требований к разработке клиентского и серверного кода (необходимость минимизации кода, выполняемого на клиенте, разной доступностью объектов и типов платформы и др.). При этом нужно иметь в виду неизбежное увеличение числа общих модулей в конфигурации .

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

3.1. Имена общих модулей рекомендуется строить по общим правилам именования объектов метаданных. Название общего модуля должно совпадать с названием подсистемы или отдельного механизма, процедуры и функции которой он реализует. Рекомендуется избегать в названиях общих модулей таких общих слов как "Процедуры", "Функции", "Обработчики", "Модуль", "Функциональность" и т.п. и применять их только в исключительных случаях, когда они более полно раскрывают назначение модуля.

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

Любая программа состоит из программного кода, то есть собственно из написанных на каком-либо языке последовательности действий, которые должны быть выполнены.

Однако эта самая программа должна быть где-то написана, то есть где-то находиться. В большинстве случаев код программы пишется в обычных текстовых файлов. Разница только в том, что расширение в них не.txt, а.cpp или.php.

Где пишется программа 1С?

Что такое Модуль 1С?

Конечно код 1С можно было бы тоже написать в каком-нибудь текстовом файле. Однако есть понятие Конфигурация 1С – которое включает в себя не только список настроек, шаблонов форм и прочего, но и программный код 1С. Поэтому код 1С хранится в конфигурации.

Конфигурация состоит из объектов 1С, как мы уже рассматривали в предыдущих уроках. Каждый объект 1С содержит в себе вложенные объекты, например справочник имеет несколько форм.

Каждый объект 1С, включая некоторые вложенные, имеет свой Модуль – некий текстовый файл, который содержит программный код.

Также есть независимые от объектов модули, в которых может быть написан программный код, независимый от конкретного объекта.

Таким образом в 1С нет «единой» программы. Есть набор модулей для написания программного кода для каждого объекта конфигурации 1С.

Как используются Модули 1С?

Всю программу можно грубо поделить на два вида:

  • Метод объекта
  • Реакция на события.

Методы . Как мы уже говорили ранее – объект 1С является цельной структурой, которая включает в себя как данные, так и способы их обработки. Эти способы – это набор действий (методов), которые можно вызывать для обработки данных. Пример такого действия СправочникОбъект.Записать() – записывает элемент справочника в базу данных.

Методы многих объектов 1С могут быть стандартными (т.е. запрограммированными в платформе 1С) и написанными программистом на языке 1С. С помощью вторых – можно расширять функционал объектов 1С по своему желанию.

События . События есть во множестве других средств разработки. Цель программы не только что-то вычислить при запуске, но и поддерживать работу пользователя.

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

Системные события – мы записали объект 1С в базу данных. Возникло системное событие «Запись объекта». Возможно настроить реакцию, которая возникнет на события, вызванные не пользователем (которые нажал на кнопку или что-то еще сделал), а самой системой. Яркий пример такого события – при запуске программы.

Порядок выполнения модулей 1С

Во многих языках есть такое понятие как «точка входа». Это та самая первая строчка или функция которая будет выполнена при запуске программы.

В 1С таких точек входа несколько – на каждый вид клиента. То есть при запуске толстого клиента точка входа одна, при запуске тонкого клиента – другая. Это позволяет запрограммировать особенности, различные в разных видах клиентов.

Точкой входа в соответствующем модуле является обработчики системного события ПередНачаломРаботыСистемы() и ПриНачалеРаботыСистемы() соответственно (т.е. по порядку). Эти функции выполняется первыми, они может запустить что-то автоматически.

Если ничего запущено автоматически не было, то перед пользователем открывается интерфейс 1С и далее все зависит от него. Он нажимает на кнопку – происходит выполнение обработчика нажатия этой кнопки (который в свою очередь тоже может что-то запустить автоматически).

Работа с модулями 1С

Производится в конфигураторе. Открыть модуль можно с помощью окна Конфигурация.

Общие модули 1С — объект метаданных конфигурации 1С 8.3 и 8.2, который хранит в себе программный код, который часто вызывается в конфигурации. Функцию/процедуру можно вызвать из любого места конфигурации (если она экспортная).

Как использовать общий модуль

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

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

Свойства общих модулей

Одно из основных особенностей общих модулей от других модулей — нельзя объявлять общие переменные.

Получите 267 видеоуроков по 1С бесплатно:

Рассмотрим подробнее палитру свойств общего модуля:

  • Глобальный — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте. Т.е. их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля. Однако добавляется условие — название процедур и функций в этом общем модуле должны быть уникальны в рамках глобального контекста.
  • Сервер — процедуры и функции данного общего модуля могут быть выполнены на сервере.
  • Внешнее соединение — программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
  • Клиент (управляемое приложение) — процедуры и функции данного общего модуля могут быть использованы в толстом клиенте в режиме управляемого приложения.
  • Клиент (обычное приложение) — программные коды данного общего модуля могут быть использованы в толстом клиенте в режиме обычного приложения.
  • Вызов сервера — флаг, разрешающий на клиенте использовать процедуры и функции из этого общего модуля.
  • — если установлена Истина, в этом общем модуле будет отключена проверка прав доступа.
  • Повторное использование — определяет настройки возвращаемых значений, если опция включена, то после первого выполнения система запомнит значение для данных входных параметров и будет возвращать уже готовое значение. Может принимать следующие значения: не используется — отключение, на время вызова — на время выполнения определенной процедуры, на время сеанса — пока пользователь не закрыл сеанс (программу).

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте

Похожие статьи