Зачем нужны общие модули в 1с
Перейти к содержимому

Зачем нужны общие модули в 1с

  • автор:

Программные модули в «1С:Предприятии 8»

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

Общие модули Общие модули принадлежат всей конфигурации в целом, но, в отличие от модуля приложения (см. ниже), их может быть несколько, например, модули РасчетНалогов , ОбработкаДокументов . Общие модули не могут содержать объявлений переменных, и в них нет раздела основной программы, таким образом, они состоят только из процедур и функций
Модуль приложения Это модуль, который относится ко всей конфигурации в целом и может быть только один. Модуль приложения является аналогом глобального модуля в версии 7.7. Он отвечает за пользовательскую сессию (сеанс) работы с «1С:Предприятием 8»
Модуль внешнего соединения Если конфигурация запускается не в режиме клиентской сессии, а через COM-соединение, то вместо модуля приложения используется модуль внешнего соединения, который в конфигурации может быть только один
Модули объектов У некоторых прикладных объектов конфигурации могут быть собственные модули, например, модуль документа РасходнаяНакладная , модуль справочника Номенклатура . Не следует их путать с модулями форм этих объектов
Модули форм У каждой формы есть модуль, в котором определяется поведение формы и действия, выполняемые из нее, например, открытие других форм

На следующем рисунке показано расположение всех этих модулей:

Разделы программного модуля

Любой программный модуль, за исключением общих модулей, состоит из следующих разделов:

  • раздел объявления переменных,
  • раздел процедур и функций,
  • раздел основной программы.

Внимание! У общих модулей есть только раздел процедур и функций.

Контекст

Контекст — очень важное понятие при программировании на любом языке. В «1С:Предприятии 8» контекст обозначает окружение модуля, т. е. какие ему будут доступны переменные, объекты, свойства, методы и события.

Можно выделить следующие виды контекстов, существующих в «1С:Предприятии 8»:

Глобальный контекст , доступный во всех остальных контекстах, состоит из следующих частей:

  • свойства, методы и события глобального контекста (например, свойство РабочаяДата ),
  • системные перечисления и системные наборы значений (например, КодВозвратаДиалога и Символы ).

В контексте модуля приложения (или модуля внешнего соединения) доступны экспортируемые процедуры и функции общих модулей.

В контексте общего модуля доступны экспортируемые процедуры и функции других общих модулей. В этом контексте недоступны экспортируемые переменные, процедуры и функции модуля приложения.

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

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

Необходимо помнить правила видимости экспортируемых переменных, процедур и функций различных модулей:

  1. В общем модуле недоступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения).
  2. В модуле приложения (модуле внешнего соединения) доступны экспортируемые процедуры и функции общих модулей.
  3. В общих модулях доступны экспортируемые процедуры и функции других общих модулей.
  4. В модулях прикладных объектов и модулях форм доступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения), а также экспортируемые процедуры и функции общих модулей.
  5. Если у формы назначен основной реквизит, то контекст модуля формы содержит дополнительные свойства и методы, связанные с основным реквизитом. Например, в модуле формы элемента справочника Номенклатура доступны свойства и методы объекта СправочникОбъект.Номенклатура .

Проиллюстрируем применение первых четырех правил на следующей схеме:

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

Структура модуля

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

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

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

Требование о разделении кода модуля на разделы призвано повысить читаемость кода и упростить внесение изменений в код разными авторами (разработчиками) как при коллективной разработке, так и при доработке прикладных решений на конкретных внедрениях.

1.2. Объемные разделы модулей рекомендуется разбивать на подразделы по функциональному признаку.

1.3. Разделы и подразделы оформляются в виде областей. При этом имена областей должны удовлетворять требованиям стандарта Правила образования имен переменных

1.4. Шаблон (заготовка для копирования) разделов для общих модулей:

#Область ПрограммныйИнтерфейс // Код процедур и функций #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Код процедур и функций #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций #КонецОбласти
#Region Public // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion

  • Раздел «Программный интерфейс» содержит экспортные процедуры и функции, предназначенные для использования другими объектами конфигурации или другими программами (например, через внешнее соединение).
  • Раздел « Служебный программный интерфейс » предназначен для модулей, которые являются частью некоторой функциональной подсистемы. В нем должны быть размещены экспортные процедуры и функции, которые допустимо вызывать только из других функциональных подсистем этой же библиотеки.
  • Раздел «Служебные процедуры и функции» содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля. В тех случаях, когда общий модуль является частью некоторой функциональной подсистемы, включающей в себя несколько объектов метаданных, в этом разделе также могут быть размещены служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы.

#Область ОбновлениеИнформационнойБазы // Код процедур и функций #КонецОбласти
#Region InfobaseUpdate // Enter code here. #EndRegion

1.5. Шаблон оформления разделов для модулей объектов, менеджеров, наборов записей, обработок, отчетов и т.п.:

#Область ОписаниеПеременных #КонецОбласти #Область ПрограммныйИнтерфейс // Код процедур и функций #КонецОбласти #Область ОбработчикиСобытий // Код процедур и функций #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Код процедур и функций #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций #КонецОбласти #Область Инициализация #КонецОбласти
#Region Variables #EndRegion #Region Public // Enter code here. #EndRegion #Region EventHandlers // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion #Region Initialize #EndRegion

  • Раздел «Программный интерфейс» содержит экспортные процедуры и функции, предназначенные для использования в других модулях конфигурации или другими программами (например, через внешнее соединение). Не следует в этот раздел помещать экспортные функции и процедуры, которые предназначены для вызова исключительно из модулей самого объекта, его форм и команд. Например, процедуры заполнения табличной части документа, которые вызываются из обработки заполнения в модуле объекта и из формы документа в обработчике команды формы не являются программным интерфейсом модуля объекта, т.к. вызываются только в самом модуле и из форм этого же объекта. Их следует размещать в разделе «Служебные процедуры и функции».
  • Раздел «Обработчики событий» содержит обработчики событий модуля объекта ( ПриЗаписи , ПриПроведении и др.)
  • Раздел « Служебный программный интерфейс » имеет такое же предназначение, как и в общих модулях.
  • Раздел «Служебные процедуры и функции» имеет такое же предназначение, как и в общих модулях.

1.6. Шаблон оформления разделов для модулей форм:

#Область ОписаниеПеременных #КонецОбласти #Область ОбработчикиСобытийФормы // Код процедур и функций #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы // Код процедур и функций #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормы // Код процедур и функций #КонецОбласти #Область ОбработчикиКомандФормы // Код процедур и функций #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций #КонецОбласти
#Region Variables #EndRegion #Region FormEventHandlers // Enter code here. #EndRegion #Region FormHeaderItemsEventHandlers // Enter code here. #EndRegion #Region FormTableItemsEventHandlers // Enter code here. #EndRegion #Region FormCommandsEventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion

  • Раздел «Обработчики событий формы» содержит процедуры-обработчики событий формы: ПриСозданииНаСервере , ПриОткрытии и т.п.
  • Раздел «Обработчики событий элементов шапки формы» содержит процедуры-обработчики элементов, расположенных в основной части формы (все, что не связано с таблицами на форме).
  • В разделах «Обработчики событий элементов таблицы формы » размещаются процедуры-обработчики таблиц формы и элементов таблиц. Для процедур-обработчиков каждой таблицы должен быть создан свой раздел.
  • Раздел «Обработчики команд формы» содержит процедуры-обработчики команд формы (имена которых задаются в свойстве Действие команд формы).
  • Раздел «Служебные процедуры и функции» имеет такое же предназначение, что и в общих модулях.

1.7. Шаблон оформления разделов для модулей команд:

#Область ОбработчикиСобытий // Код процедур и функций #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций #КонецОбласти
#Region EventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion

  • Раздел «Обработчики событий» содержит процедуру-обработчик команды ОбработкаКоманды .
  • Раздел «Служебные процедуры и функции» имеет такое же предназначение, что и в общих модулях.

1.8. В модуле не должно быть пустых областей.

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

2.1. Заголовок модуля представляет собой комментарий в самом начале модуля. В заголовке модуля приводится его краткое описание и условия применения.
Например:

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

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

2.2. Раздел описания переменных . Имена переменных назначаются согласно общим правилам образования имен переменных, а их использование описывается в статье Использование глобальных переменных в программных модулях.

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

#Область ОписаниеПеременных Перем ВалютаУчета; Перем АдресПоддержки; . #КонецОбласти
#Region Variables Var PresentationCurrency; Var SupportEmail; . #EndRegion

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

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

Методическая рекомендация (полезный совет)

2.4.2. Рекомендуется обработчики одного элемента формы располагать вместе, придерживаясь, при этом, порядка их следования в панели свойств редактора формы в конфигураторе.

2.4.3. У каждого события должна быть назначена своя процедура-обработчик. Если одинаковые действия должны выполняться при возникновении событий в разных элементах формы следует:

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

&НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); УстановитьОтборСписка(Список, ПараметрыОтбора); КонецПроцедуры &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) ПоИсполнителюПриИзменении(Неопределено); КонецПроцедуры
&НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаСервере Процедура УстановитьОтбор() ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); УстановитьОтборСписка(Список, ПараметрыОтбора); КонецПроцедуры

Это требование обусловлено тем, что логически процедуры-обработчики событий не предназначены для использования в коде модуля, а вызываются непосредственно платформой. Смешение же этих двух сценариев в одной процедуре неоправданно усложняет ее логику и снижает ее устойчивость (вместо одного предусмотренного сценария вызова — по событию из платформы — код процедуры должен рассчитывать и на другие «прямые» вызовы из кода).

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

Методическая рекомендация (полезный совет)

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

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

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

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

2.7. Раздел инициализации содержит операторы, инициализирующие переменные модуля или объект (форму).
Например:

#Область Инициализация АдресПоддержки = "v8@1c.ru"; ВыполнитьИнициализацию(); . #КонецОбласти
#Region Initialize SupportEmail = "v8@1c.ru"; Ctor(); . #EndRegion

Для оформления разделов кода в виде областей рекомендуется воспользоваться приложенной обработкой.

Переопределяемые и поставляемые объекты библиотеки

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

  • Непереопределяемые объекты – «готовые» объекты, которые можно брать и использовать в конфигурации-потребителе «как есть». Их не следует изменять в конфигурации-потребителе, чтобы они были гарантированно одинаковы во всех конфигурациях, основывающихся на данной библиотеке. Более того, такие объекты обязательно должны присутствовать в конфигурациях, использующих библиотеку. Примеры: справочник Пользователи .
  • Переопределяемые объекты – «изменяемые» объекты для настройки библиотеки под конкретную конфигурацию. Они могут или должны быть изменены в конфигурации-потребителе. С помощью таких объектов решаются задачи изменения поведения библиотечной функциональности, ее параметризации спецификой конфигурации-потребителя, а также для подключения библиотечной функциональности к объектам конфигурации-потребителя.
  • Определители типов – объекты-«классификаторы», которые не имеют базовой реализации. Предназначены для формирования единого пространства имен в конфигурациях, а реализация при этом может как угодно сильно различаться в конфигурациях-потребителях. Например: справочники-классификаторы, в которых определено только «название»; сущность «организация» должна быть везде представлена справочником с именем Организации и т.п.

2. Рекомендуется устанавливать для объектов этих категорий следующие правила поставки :

  • Непереопределяемые объекты – «изменения не рекомендуются»;
  • Переопределяемые объекты и определители типов – «изменения разрешены».

Эти рекомендации продиктованы следующими соображениями:

  • Непереопределяемые объекты – это зона ответственности разработчиков библиотеки, поэтому они не должны разрабатываться «по месту» в конфигурациях-потребителях. Но если необходимость изменений носит срочный характер (например, исправление критичной ошибки) или продиктована какими-то другими особыми соображениями, то допускается вносить изменения в непереопределяемые библиотечные объекты непосредственно в конфигурациях-потребителях. При этом нужно иметь в виду, что эти изменения могут быть потеряны при следующем обновлении версии библиотеки в конфигурации-потребителе, если не принять специальные меры (донести до разработчиков библиотеки необходимость внесения изменений или задокументировать этот отход от общей инструкции по обновлению библиотеки).
  • Переопределяемые объекты и определители типы должны или могут быть изменены в конфигурации-потребителе, исходя из их назначения.

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

  • Настройка состава типов переопределяемых реквизитов (свойств) тех или иных объектов библиотеки – для подключения библиотечной функциональности к объектам конфигурации-потребителя.
    Например: можно подключить библиотечную функциональность к конкретным объектам конфигурации с помощью расширения состава типов общей команды, измерения составного типа в регистре сведений и т.п.
  • Добавление предопределенных элементов – для параметризации библиотечной функциональности спецификой конфигурации-потребителя.
    Например: для библиотечной подсистемы ведения и обработки контактной информации с помощью предопределенных элементов библиотечного справочника ВидыКонтактнойИнформации можно указать, какие виды контактной информации (телефон, адрес, электронный адрес и т.п.) должны быть предусмотрены для объектов конфигурации-потребителя.
  • Переопределяемые общие модули – для изменения поведения библиотечной функциональности в конкретной конфигурации-потребителе
    • с помощью переопределения тех или иных «обработчиков событий», предоставляемых библиотекой; например:
      ПриПодготовкеМакетаОписанияОбновлений
      ПриЗаписиСпискаБизнесПроцессов
    • а также для того, чтобы сообщить ту или иную информацию из конфигурации-потребителя в библиотеку. Например:
      ПриОпределенииБазовойВерсииКонфигурации
      ПриДобавленииОбработчиковОбновления

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

    3.2. Переопределяемые общие модули должны содержать только экспортные процедуры, которые вызываются из кода самой библиотеки. Другими словами, не следует допускать вызовов процедур переопределяемых модулей непосредственно из кода конфигурации-потребителя.

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

    Например, в библиотеке имеются модули ПапкиФайлов и ПапкиФайловПереопределяемый . Для использования в конфигурациях-потребителях в модуле ПапкиФайлов реализуется экспортная функция:

    Функция ПапкаФайлов(ВладелецФайловСсылка) Экспорт

    СтандартнаяОбработка = Истина;
    Результат = Неопределено;
    ПапкиФайловПереопределяемый.ПриПолученииПапкиФайлов(ВладелецФайловСсылка, Результат, СтандартнаяОбработка);

    Если СтандартнаяОбработка Тогда
    // реализация по умолчанию
    Результат = .
    КонецЕсли;
    Возврат Результат;

    а в модуле ПапкиФайловПереопределяемый — процедура-обработчик ПриПолученииПапкиФайлов :

    // Вызывается из библиотеки при необходимости получить папку файлов для указанного владельца.
    //
    // Параметры:
    // ВладелецФайловСсылка – ЛюбаяСсылка — владелец файлов, для которого нужно вернуть папку.
    // ПапкаФайлов – СправочникСсылка.ПапкиФайлов — в этот параметр нужно записать результат.
    // СтандартнаяОбработка – Булево — по умолчанию, Истина. В этом случае папка будет получена способом по умолчанию.
    // Если значение параметра установить в Ложь, то в этой процедуре можно реализовать свой способ,
    // которым в конфигурации получают папки файлов.
    //
    Процедура ПриПолученииПапкиФайлов(ВладелецФайловСсылка, ПапкаФайлов, СтандартнаяОбработка) Экспорт

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

    3.3. При этом в переопределяемом модуле следует располагать только экспортные процедуры с пустой реализацией. В нем не должно быть каких-либо других не-экспортных процедур или функций. Базовую реализацию переопределяемых процедур следует располагать в непереопределяемом коде.

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

    Функция НастройкаПараметровРаботы() Экспорт

    ПараметрыРаботы = Новый Структура;
    // если настройки по умолчанию не подходят, то измените их.
    ПараметрыРаботы.Вставить(«ПоказыватьЕдинственныйРаздел», Ложь);
    ПараметрыРаботы.Вставить(«ЗадаватьДатуДляПрочихРазделов», Ложь);
    ПараметрыРаботы.Вставить(«ИспользоватьВнешнихПользователей», Ложь);
    Возврат ПараметрыРаботы;

    // Позволяет настроить работу подсистемы.
    //
    // Параметры:
    // ПараметрыРаботы — Структура — содержит свойства:
    // * ПоказыватьЕдинственныйРаздел — Булево — по умолчанию Ложь.
    // * ЗадаватьДатуДляПрочихРазделов — Булево — по умолчанию Ложь.
    // * ИспользоватьВнешнихПользователей — Булево — по умолчанию Ложь.
    //
    Процедура ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы) Экспорт

    а установку значений по умолчанию перенести в общий модуль библиотеки:

    ПараметрыРаботы = Новый Структура;
    // настройки по умолчанию
    ПараметрыРаботы.Вставить(«ПоказыватьЕдинственныйРаздел», Ложь);
    ПараметрыРаботы.Вставить(«ЗадаватьДатуДляПрочихРазделов», Ложь);
    ПараметрыРаботы.Вставить(«ИспользоватьВнешнихПользователей», Ложь);

    // а теперь запросим конфигурацию-потребитель на случай,
    // если эти умолчания не устраивают
    МояБиблиотекаПереопределяемый.ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы);
    Возврат ПараметрыРаботы;

    3.4. При обновлении версии библиотеки в конфигурации-потребителе особого внимания требуют модули корневого объекта конфигурации и переопределяемые общие модули, так как автоматическое обновление таких «узких мест» конфигурации-потребителя невозможно. Для настройки в конфигурации переопределяемых общих модулей рекомендуется придерживаться общего подхода:

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

    См. также

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

    Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

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

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

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

    В частности, в толстом клиенте в режиме управляемого приложения не следует создавать или получать объекты:

    • в клиентских общих модулях (пользуясь инструкцией препроцессора ТолстыйКлиентУправляемоеПриложение );
    • в обычных формах при запуске в управляемом режиме. Такие формы следует использовать только в режиме обычного приложения.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *