Вызвать процедуру из общего модуля
Вызвать процедуру или функцию из общего модуля в 1С 8 можно используя имя модуля и название процедуры или функции.
Пример. В конфигурации Бухгалтерия 2.0 есть модуль Общего назначения, в нем расположена функция ЭтоДемонстрационнаяБаза(), вызовем ее в модуле внешней обработки.
Заметим, что вызвать процедуру / функцию общего модуля из другого модуля можно только если она экспортная(после ее имени стоит слово Экспорт).
Общий модуль в 1С 8.3
Общий модуль нужен для того, чтобы вынести код процедуры или функции в одно место, откуда в дальнейшем его можно будет вызывать. Например, есть процедура для расчета суммы строки:
Если в конфигурации есть несколько видов документов с табличной частью, то данную процедуру придется расположить в модуле формы каждого вида документа. Если в дальнейшем потребуется внести изменения в эту процедуру, то придется сделать это несколько раз, в модуле формы каждого вида документа.
В этом случае целесообразно вынести данную процедуру в общий модуль, добавить ключевое слово Экспорт, чтобы данная процедура была доступна из других модулей и вызывать ее из модуля формы:
Вызов общего модуля
Вызов общего модуля выполняется через имя общего модуля. После имени общего модуля нужно указать точку, а потом имя метода. Метод должен быть экспортным, иначе при вызове возникнет ошибка «Метод объекта не обнаружен».
Для примера добавим в конфигурацию новый общий модуль. Общие модули расположены в узле Общие — Общие модули:
В свойствах общего модуля установим флаг Клиент:
В самом модуле добавим следующий код:
В модуле обработки вызовем оба метода общего модуля:
Вызов метода ТестОдин отработает корректно, а при вызове метода ТестДва возникнет ошибка «Метод объекта не обнаружен», потому что у процедуры нет ключевого слова Экспорт.
Переменные в общем модуле могут быть только внутри методов. Нельзя создать переменную, доступную во всем модуле или через свойства модуля.
Клиентский общий модуль
Если в свойствах общего модуля установлен только флаг Клиент, то к методам такого модуля можно будет обращаться только на клиенте. Из самого общего модуля можно выполнять вызов экспортных методов модуля приложения.
Серверный общий модуль
Если установлен только флаг Сервер, то к методам такого модуля можно будет обращаться только на сервер.
Вызов сервера
При установленных двух флагах Сервер и Вызов сервера к методам модуля можно обращаться как на клиенте, так и на сервере. Но само выполнение методов будет выполнено на сервере.
Клиент-серверный общий модуль
У такого общего модуля в свойствах нужно установить и флаг Клиент и флаг Сервер.
Чтобы при компиляции такого общего модуля не было ошибок нужно с помощью инструкций препроцессора разделить процедуры на клиентские и серверные:
Вызывать серверные методы общего модуля можно только на сервере:
Глобальный общий модуль
Если в свойствах модуля поставить флаг Глобальный, то для вызова методов общего модуля не нужно указывать имя общего модуля.
Глобальные общие модули будут скомпилированы при запуске конфигурации.
Привилегированный общий модуль
Общий модуль с таким флагом всегда выполняется без проверки прав доступа. Такой общий модуль может быть только серверным.
Повторное использование возвращаемых значений
Использование данного свойства позволяет сохранять в кеше параметры и результат функций. Работает только для функций в неглобальных общих модулях.
При первом вызове такой функции она будет выполнена как обычно. После выполнения значения параметров и результат будут сохранены в кеше. Если снова обратиться к такой функции с теми же значениями параметров, то результат будет сразу взят из кеша, без выполнения тела функции.
Есть два варианта повторного использования возвращаемых значений:
* На время вызова — в этом случае кеширование выполняется только на время одного серверного вызова или вызова клиентского кода из интерфейса. Если в течении одного вызова несколько раз вызвать функцию с теми же параметрами, то функция будет выполнена только в первый раз, а потом результат будет взят из кеша.
* На время сеанса — значения сохраняются до конца сеанса пользователя.
Кешированный результат выполнения может быть удален в нескольких случаях:
*Если в рабочем процессе сервера 1С не хватает оперативной памяти
*Рабочий процесс был перезапущен
*Клиент был переключен на другой рабочий процесс
*Прошло 20 минут после сохранения или 6 минут после последнего использования
*Если вызвать метод ОбновитьПовторноИспользуемыеЗначения
Если выполнить вызов функции общего модуля с повторным использованием возвращаемых значений из самого общего модуля и не указать до имени функции имя общего модуля, то функция будет выполнена как в первый раз.
Для сохранения в кеше и повторного использования можно использовать параметры следующих типов:
1С 8.3 Процедуры и Функции — Программист 1С Минск. Автоматизация бизнеса.
✔ Возврат значения из функции
&НаКлиенте
Функция Округление1 ( ПараметрЧисло , ПараметрЗнОкр )
Возврат Окр ( ПараметрЧисло , ПараметрЗнОкр ); //3.1415926535, 2
&НаКлиенте
Процедура ИсполняемаяПроцедура1 ( Команда )
ТекущееЧисло = 3.1415926535 ;
КолЗнОкр = 2 ;
ОкругленноеЧисло = Округление1 ( ТекущееЧисло , КолЗнОкр );
Сообщить ( ОкругленноеЧисло ); // 3.14
&НаКлиенте
Функция СообщениеПараметров2 ( ПараметрЧисло , ПараметрДата , ПараметрСтрока = «Строковое значение» )
Сообщить ( ПараметрЧисло ); // 2020
Сообщить ( ПараметрДата ); // Неопределено
Сообщить ( ПараметрСтрока ); // «Строковое значение»
&НаКлиенте
Процедура ИсполняемаяПроцедура2 ( Команда )
// Если у функции несколько параметров, то ненужный можно пропустить (указав запятую)
// при этом будет передано или Неопределено или значение по-умолчанию (в параметрах самой функции)
СообщениеПараметров2 ( 2020 ,,); //
&НаКлиенте
Процедура ИзменениеПараметра3 ( ПараметрСсылка )
// Изменение значения внутри и снаружи
ПараметрСсылка = 2020 ;
&НаКлиенте
Процедура ИсполняемаяПроцедура3 ( Команда )
ГодЗаписи = 2019 ;
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019
ИзменениеПараметра3 ( ГодЗаписи );
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2020
&НаКлиенте
Процедура ИзменениеПараметра4 (Знач ПараметрЗначение )
// Изменение значения только внутри процедуры
ПараметрЗначение = 2020 ;
&НаКлиенте
Процедура ИсполняемаяПроцедура4 ( Команда )
ГодЗаписи = 2019 ;
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019
// Только для простых типов (строка, число, дата), сложные объекты всё равно будут переданы в виде ссылки
ИзменениеПараметра4 ( ГодЗаписи );
Сообщить ( ГодЗаписи ); // ГодЗаписи = 2019 (остался прежним)
&НаКлиенте
Процедура ИзменениеПараметра5 ( ПараметрМассив )
// Изменение первого элемента массива
ПараметрМассив [ 0 ] = 2021 ;
// ПараметрМассив = 2021 и 2020
&НаКлиенте
Процедура ИсполняемаяПроцедура5 ( Команда )
Года = Новый Массив ();
Года . Добавить ( 2019 );
Года . Добавить ( 2020 );
// Создание копии массива через список значений
КопияГода = Новый СписокЗначений ;
КопияГода . ЗагрузитьЗначения ( Года );
КопияГода = КопияГода . ВыгрузитьЗначения ();
// Вызов процедуры, меняющую переданный массив (копия: Года)
ИзменениеПараметра5 ( КопияГода );
// После вызова процедуры в массиве Года по прежнему = 2019 и 2020
1с как вызвать функцию из общего модуля
Функции, которые объявлены с флагом «экспорт» в таком модуле, можно вызывать из любых мест конфигурации. Вызов делается через ИмяОбщегоМодуля.ИмяФункции().
В таких модулях отсутствует раздел переменных.
Выполнение общих модулей зависит от выставленных параметров в их свойствах:
Флаг «Глобальный»
Если этот флаг установлен, то контекст такого модуля становится глобальным. То есть при обращении к его экспортным функциям не нужно указывать имя модуля. Но имена его экспортных функций должны быть уникальными в пределах глобального контекста конфигурации.
Флаг «Сервер»
Функции такого модуля могут выполняться на сервере.
Флаг «Клиент (обычное приложение)»
Функции такого модуля могут выполняться на клиенте в режиме обычного приложения.
Флаг «Клиент (управляемое приложение)»
Функции такого модуля могут выполняться на клиенте в режиме управляемого приложения.
Флаг «Вызов сервера»
Флаг доступен для модулей с установленным флагом «Сервер». Разрешает вызов на клиенте экспортных функций этого модуля (которые будут выполняться на сервере).
Флаг «Внешнее соединение»
Экспортные функции такого модуля могут быть вызваны при подключении из внешнего источника.
Флаг «Привилегированный»
В модуле с таким флагом будет отключена проверка прав. Подходит для повышения производительности или действий по администрированию.
Параметр «Повторное использование»
Если включить данный параметр, то возвращаемые значения экспортных функций будут кэшироваться сразу после первого вызова. Кэширование возможно на время вызова (время исполнение определенной процедуры) или на время сеанса пользователя.
Модуль приложения
Предназначен для обработки событий запуска и завершения приложения. Бывает двух видов: для обычного и управляемого приложений.
Не следует его перегружать, так как это влияет на время запуска приложения.
Модуль сеанса
Специальный модуль, который используется для инициализации параметров сеанса. Нужен для того, чтобы не дублировать код в различных модулях приложений.
Использовать его следует осторожно, так как модуль может выполняться несколько раз, а также выполняться без дальнейшего запуска базы. Выполняется до модулей приложения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.