Общие модули 1С — объект метаданных конфигурации 1С 8.3, который хранит в себе программный код, который часто вызывается в конфигурации. Функцию/процедуру можно вызвать из любого места конфигурации (если она экспортная).
Как использовать общий модуль
Хороший тон — поместить процедуру или функцию в общий модуль, если она вызывается в более чем одном месте. Во-первых, если процедура корректируется, её надо править только в одном месте. Во-вторых, этим достигается больший порядок в коде.
Типичный пример общего модуля — обработка проведения по какому-то регистру, получение количества разницы рабочих дней, пересчет курсов валют, пересчет количества/цены/суммы в табличной части и другие функции.
Свойства общих модулей
Одно из основных особенностей общих модулей от других модулей — нельзя объявлять общие переменные.
Рассмотрим подробнее палитру свойств общего модуля:
Глобальный — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте. Т.е. их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля. Однако добавляется условие — название процедур и функций в этом общем модуле должны быть уникальны в рамках глобального контекста.
Сервер — процедуры и функции данного общего модуля могут быть выполнены на сервере.
Внешнее соединение — программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
Клиент (управляемое приложение) — процедуры и функции данного общего модуля могут быть использованы в толстом клиенте в режиме управляемого приложения.
Клиент (обычное приложение) — программные коды данного общего модуля могут быть использованы в толстом клиенте в режиме обычного приложения.
Вызов сервера — флаг, разрешающий на клиенте использовать процедуры и функции из этого общего модуля.
Привилегированный — если установлена Истина, в этом общем модуле будет отключена проверка прав доступа.
Повторное использование — определяет настройки возвращаемых значений, если опция включена, то после первого выполнения система запомнит значение для данных входных параметров и будет возвращать уже готовое значение. Может принимать следующие значения: не используется — отключение, на время вызова — на время выполнения определенной процедуры, на время сеанса — пока пользователь не закрыл сеанс (программу).
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя. Попробуйте бесплатно по ссылке >>
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
Правила создания общих модулей
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. Общие модули создаются для реализации процедур и функций, объединенных по некоторому признаку. Как правило, в один общий модуль помещаются процедуры и функции одной подсистемы конфигурации (продажи, закупки) или процедуры и функции сходного функционального назначения (работа со строками, общего назначения).
1.2. При разработке общих модулей следует выбирать один из четырех контекстов выполнения кода:
Тип общего модуля
Пример наименования
Вызов сервера
Сервер
Внешнее соединение
Клиент (обычное приложение)
Клиент (управляемое приложение)
1.
Серверный
ОбщегоНазначения (или ОбщегоНазначенияСервер)
2.
Серверный для вызова с клиента
ОбщегоНазначенияВызовСервера
3.
Клиентский
ОбщегоНазначенияКлиент (или ОбщегоНазначенияГлобальный)
4.
Клиент-серверный
ОбщегоНазначенияКлиентСервер
2.1. Серверные общие модули предназначены для размещения серверных процедур и функций, не доступных для использования из клиентского кода. В них реализуется вся внутренняя серверная бизнес-логика приложения. Для корректной работы конфигурации в режимах внешнего соединения, управляемого и обычного приложений, серверные процедуры и функции следует размещать в общих модулях с признаками:
Сервер (флажок Вызов сервера снят),
Клиент (обычное приложение) ,
Внешнее соединение .
В таком случае гарантируется возможность вызова серверных процедур и функций с параметрами мутабельных типов (например, СправочникОбъект , ДокументОбъект и т.п.). Как правило, это:
обработчики подписок на события документов, справочников и т.п., которые принимают в качестве параметра мутабельное значение (объект).
серверные процедуры и функции, в которые в качестве параметра передается объект из модулей справочников, документов и пр., а также из модулей с подписками на события.
Серверные общие модули называются по общим правилам именования объектов метаданных. Например: РаботаСФайлами , ОбщегоНазначения .
В отдельных случаях для предотвращения конфликта имен со свойствами глобального контекста может быть добавлен постфикс «Сервер» (англ. «Server» ). Например: РегламентныеЗаданияСервер , ОбменДаннымиСервер, ScheduledJobsServer .
2.2. Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, доступные для использования из клиентского кода. Они составляют клиентский программный интерфейс сервера приложения. Такие процедуры и функции размещаются в общих модулях с признаком:
Сервер (флажок Вызов сервера установлен)
Серверные общие модули для вызова с клиента называются по общим правилам именования объектов метаданных и должны именоваться с постфиксом «ВызовСервера» (англ. «ServerCall» ). Например: РаботаСФайламиВызовСервера, CommonServerCall .
Следует иметь в виду, что экспортные процедуры и функции в таких общих модулях не должны содержать параметров мутабельных типов ( СправочникОбъект , ДокументОбъект и т.п.), так как их передача из (или в) клиентского кода невозможна.
2.3. Клиентские общие модули содержат клиентскую бизнес-логику (функциональность, определенную только для клиента) и имеют признаки:
Клиент (управляемое приложение) ,
Клиент (обычное приложение) .
Исключение составляют случаи, когда клиентские процедуры и функции должны быть доступны только в режиме управляемого приложения (только в режиме обычного приложения или только в режиме внешнего соединения). В таких случаях, допустима иная комбинация двух этих признаков.
Клиентские общие модули именуются с постфиксом «Клиент» (англ. «Client» ). Например: РаботаСФайламиКлиент , ОбщегоНазначенияКлиент, StandardSubsystemsClient .
2.4. Для того чтобы избежать дублирования кода, рекомендуется создавать клиент-серверные общие модули с теми процедурами и функциями, содержание которых одинаково на сервере и на клиенте. Такие процедуры и функции размещаются в общих модулях с признаками:
Клиент (управляемое приложение) ,
Сервер (флажок Вызов сервера сброшен),
Клиент (обычное приложение) ,
Внешнее соединение .
Общие модули этого вида именуются с постфиксом «КлиентСервер» (англ. «ClientServer» ). Например: РаботаСФайламиКлиентСервер , ОбщегоНазначенияКлиентСервер, UsersClientServer .
В то же время, как только возникает необходимость ветвить код в клиент-серверных общих модулях на серверный и клиентский, то не следует использовать для этого инструкции препроцессора. Вместо этого, функциональность, различную для клиента и для сервера, рекомендуется реализовывать по общим правилам в модулях соответствующего типа – см. пп. 2.1 и 2.3. Такое явное разделение клиентской и серверной бизнес-логики продиктовано соображениями повышения модульности прикладного решения, упрощения контроля со стороны разработчика над клиент-серверным взаимодействием и снижением риска ошибок из-за принципиальных отличий требований к разработке клиентского и серверного кода (необходимость минимизации кода, выполняемого на клиенте, разной доступностью объектов и типов платформы и др.). При этом нужно иметь в виду неизбежное увеличение числа общих модулей в конфигурации.
Особым случаем смешанных клиент-серверных модулей являются модули форм и команд, которые специально предназначены для реализации серверной и клиентской бизнес-логики в одном модуле.
3.1. Имена общих модулей рекомендуется строить по общим правилам именования объектов метаданных. Название общего модуля должно совпадать с названием подсистемы или отдельного механизма, процедуры и функции которой он реализует. Рекомендуется избегать в названиях общих модулей таких общих слов как «Процедуры», «Функции», «Обработчики», «Модуль», «Функциональность» и т.п. и применять их только в исключительных случаях, когда они более полно раскрывают назначение модуля.
Для того чтобы различать общие модули одной подсистемы, которые созданы для реализации процедур и функций, выполняемых в разных контекстах, рекомендуется задавать им постфиксы, описанные ранее в пп. 2.1-2.4.
3.2. Дополнительно к общим модулям могут быть добавлены уточняющие постфиксы.
3.2.1. Для глобальных модулей добавляется постфикс «Глобальный» (англ. «Global» ), в этом случае постфикс «Клиент» добавлять не следует. Например: РаботаСФайламиГлобальный, InfobaseUpdateGlobal .
3.2.2. Модули, выполняющиеся в привилегированном режиме, имеющие признак Привилегированный , именуются с постфиксом «ПолныеПрава» (англ. «FullAccess» ). Например: РаботаСФайламиПолныеПрава .
3.2.3. Модули, предназначенные для реализации на сервере или на клиенте функций с повторным использованием возвращаемых значений (на время вызова или на время сеанса), именуются с постфиксом «ПовтИсп» (англ. «Cached» ) и «КлиентПовтИсп» (англ. «ClientCached» ) соответственно. Например: РаботаСФайламиКлиентПовтИсп, UsersInternalCached .
3.2.4. Серверные и клиентские модули библиотечных конфигураций (которые предназначены не для самостоятельного использования, а для разработки других конфигураций) с процедурами и функциями, допускающие изменение своей реализации, именуются с постфиксами «Переопределяемый» (англ. «Overridable» ) и «КлиентПереопределяемый» (англ. «ClientOverridable» ). Например: РаботаСФайламиКлиентПереопределяемый, CommonOverridable .
3.2.5. В локализуемых конфигурациях, на базе которых выпускаются национальные прикладные решения для различных стран или регионов, модули, реализующие национальную специфику, именуются с постфиксами «Локализация» (англ. «Localization» ) и «КлиентЛокализация» (англ. «Client Localization » ). Например: ЭлктроннаяПодписьЛокализация, ElectonicSignature Localization .
Источник
Внешнее соединение
Внешнее соединение — это один из механизмов интеграции с другими системами. Основная задача, решаемая с помощью внешнего соединения — обеспечение надежного и быстрого программного доступа к данным 1С:Предприятия 8 из внешних приложений.
Отличия от Automation-сервера
В случае Automation-сервера запускается полноценное приложение 1С:Предприятие 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер.
При работе через внешнее соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса;
При работе внешнего соединения не используется модуль приложения. Его роль при работе с внешним соединением играет модуль внешнего соединения.
Преимущества
более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
более быстрое обращение к свойствам и методам объектов 1С:Предприятия 8, так как для организации обращения не требуется организации межпроцессной коммуникации;
меньший расход ресурсов операционной системы.
Пример
создается менеджер COM-соединений, с помощью которого производится установка соединения;
через полученный объект внешнего соединения производится обращение к допустимым методам, свойствам и объектам базы данных, с которой установлено соединение.
В качестве примера можно привести обращение к информационной базе 1С:Предприятия 8 через внешнее соединение из программы на языке MS Visual Basic.
Информационная база находится в каталоге c:\InfoBases\Trade. В программе 1С:Предприятие 8 создается объект типа СправочникМенеджер.Товары и создается новая группа элементов с названием ***** Экспорт из Excel ******. Во вновь созданную группу каталога записываются данные из таблицы MS Excel:
Dim cntr As Object Dim trade As Object Dim Элемент As Object
Set cntr = CreateObject («V82.COMConnector») ‘Создать менеджер COM-соединений Set trade = cntr.Connect («File=»»c:\InfoBases\Trade»»; Usr=»»Director»»;») ‘Получить внешнее соединение Set СправочникТоваров = trade.Справочники.Товары Set ГруппаТоваров = СправочникТоваров.СоздатьГруппу ()
ГруппаТоваров.Наименование = «***** Экспорт из Excel ******» ГруппаТоваров.Записать
N = 100 ‘Количество строк в документе For Count = 1 To N
Обязанности модуля приложения при работе через внешнее соединение выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий, в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.
Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.
системные константы;
значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры);
переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.
системные процедуры и функции;
процедуры и функции модуля внешнего соединения и общих модулей, объявленные с ключевым словом Экспорт;
дополнительный метод NewObject.
Пул соединений
Открытые внешние соединения могут быть сохранены в пуле для их повторного использования, что позволяет экономить ресурсы и ускорять работу пользователей, которые ранее уже подключались к данной информационной базе.
Варианты использования
С помощью внешнего соединения можно, например, организовать веб-доступ к базе данных 1С:Предприятия 8:
Также внешнее соединение позволяет организовать обмен XML-документами системы 1С:Предприятие 8 с внешним приложением: