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

от admin

Вызвать процедуру из общего модуля

Вызвать процедуру или функцию из общего модуля в 1С 8 можно используя имя модуля и название процедуры или функции.

Пример. В конфигурации Бухгалтерия 2.0 есть модуль Общего назначения, в нем расположена функция ЭтоДемонстрационнаяБаза(), вызовем ее в модуле внешней обработки.

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

Общий модуль в 1С 8.3

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

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

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

Вызов общего модуля

Вызов общего модуля выполняется через имя общего модуля. После имени общего модуля нужно указать точку, а потом имя метода. Метод должен быть экспортным, иначе при вызове возникнет ошибка «Метод объекта не обнаружен».

Для примера добавим в конфигурацию новый общий модуль. Общие модули расположены в узле Общие — Общие модули:

В свойствах общего модуля установим флаг Клиент:

В самом модуле добавим следующий код:

В модуле обработки вызовем оба метода общего модуля:

Вызов метода ТестОдин отработает корректно, а при вызове метода ТестДва возникнет ошибка «Метод объекта не обнаружен», потому что у процедуры нет ключевого слова Экспорт.

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

Клиентский общий модуль

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

Серверный общий модуль

Если установлен только флаг Сервер, то к методам такого модуля можно будет обращаться только на сервер.

Вызов сервера

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

Клиент-серверный общий модуль

У такого общего модуля в свойствах нужно установить и флаг Клиент и флаг Сервер.

Чтобы при компиляции такого общего модуля не было ошибок нужно с помощью инструкций препроцессора разделить процедуры на клиентские и серверные:

Вызывать серверные методы общего модуля можно только на сервере:

Глобальный общий модуль

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

Глобальные общие модули будут скомпилированы при запуске конфигурации.

Привилегированный общий модуль

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

Повторное использование возвращаемых значений

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

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

Есть два варианта повторного использования возвращаемых значений:

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

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

*Если в рабочем процессе сервера 1С не хватает оперативной памяти
*Рабочий процесс был перезапущен
*Клиент был переключен на другой рабочий процесс
*Прошло 20 минут после сохранения или 6 минут после последнего использования
*Если вызвать метод ОбновитьПовторноИспользуемыеЗначения

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

Читать:
Dictionary c что это

Для сохранения в кеше и повторного использования можно использовать параметры следующих типов:

Как в 1С вывести в реквизит формы данные из общего модуля

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

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

Для поиска решения я создал в тестовый пример для не типовой конфигурации.

Ниже представлены скриншоты рабочего примера. В своей базе вы должны самостоятельно сформировать ТЗ. Я привязался к конкретной конфигурации из-за необходимости проверить, что работа с ссылками ведется корректно.

Реквизиты объекта Настройки формы

Стоит обратить внимание, что на форме табличное поле связано с данными реквизита формы, а не реквизитом объекта.

Модуль формы Модуль объекта

Также, здесь мы видим как в 1С можно выполнить на клиенте в модуле формы обращение к функции Модуля объекта. Делаем функцию в модуле объекта Экспортной. Получаем Объект через РеквизитФормыВЗначение, вызываем экспортную функцию общего модуля.

Как создать общие модули 1с

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

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

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

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

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

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

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

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

общие модули

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

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

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

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

функции общего модуля

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

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

общий модуль 1с 8.3

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

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

Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.

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