Описание модулей 1с. Правила создания общих модулей

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

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

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

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

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

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

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

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

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

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

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

Создание общего модуля в 1С

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

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

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

Бывают ситуации, когда требуется создать общий модуль с вызовами процедуры на сервере и клиенте с отличиями в алгоритме. Для разграничения кода используются директивы препроцессора с проверкой. В результате для серверного вызова это будет один код, а для клиентского – другой.
Процедура АлгоритмСерверКлиент() Экспорт #Если ТонкийКлиент Тогда // код выполняется, если вызов процедуры пришел с клиента ПоказатьОповещениеПользователя("На клиенте"); ИначеЕсли Сервер Тогда // код выполняется, если вызов процедуры пришел с сервера ПеременнаяСервер = "Серверный вызов"; #КонецЕсли КонецПроцедуры

Пример переноса кода в общий модуль 1С

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

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

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


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


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

Фрагмент 1

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

Фрагмент 2

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

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

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

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


Модуль управляемого приложения

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

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

Модуль обычного приложения

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

Модуль обычного приложения станет доступен из палитры свойств корневого узла конфигурации после установки в параметрах конфигуратора на вкладке «Общие» опции «Редактирование конфигурации для режимов запуска» в положение «Управляемое приложение и обычное».

Модуль внешнего соединения

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

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

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

Запускается в привилегированном режиме (не выполняется проверка прав доступа при обращении к БД). Модуль сеанса компилируется на сервере. Нет раздела описания переменных и раздела основной программы, нельзя описывать экспортные методы, используется только для установки параметров сеанса. Как видно у модуля сеанса очень узкое предназначение.

Общие модули

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

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

В общем модуле можно задавать некоторые параметры, которые будут влиять на его поведение. Если в общем модуле установлена галочка «Глобальный» то его экспортные функции будут участвовать в формировании глобального контекста. И к ним можно будет обратиться из другого контекста напрямую (без упоминания имени общего модуля) : МетодОбщегоМодуля();

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

Модуль объекта

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

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

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

Модуль формы

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

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

Модуль менеджера объекта

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

Модуль менеджера значений

У объекта конфигурации константы не существует модуля объекта, а существует очень похожий модуль – модуль менеджера значений. В модуле менеджера значения константы можно описать различные процедуры (в том числе и экспортные), а также обработать 3 события: ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения. Этот модуль компилируется на сервере.

Модули наборов записей

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

  • Перед записью
  • При записи
  • Обработка проверки заполнения

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

Печать (Ctrl+P)

Объекты, расположенные в ветви дерева конфигурации Общие модули, предназначены для размещения в них текстов функций и процедур, которые могут вызываться из любого другого модуля конфигурации.
ВНИМАНИЕ! Общий модуль может содержать только определения процедур и функций .
Процедуры и функции общего модуля, для которых в заголовках указано ключевое слово Экспорт, являются одними из составных частей глобального контекста. Подробнее о написании процедур в общем модуле можно узнать в разделах «Формат исходных текстов программных модулей» и «Операторы» справки по встроенному языку.
Для редактирования общего модуля необходимо в палитре свойств объекта типа Общие модули окна Конфигурация в свойстве Модуль щелкнуть мышью ссылку Открыть. Текст общего модуля будет выдан для редактирования в редакторе текстов системы «1С:Предприятие» в режиме редактирования текста программного модуля.
Общий модуль, являясь частью конфигурации, сохраняется только в составе конфигурации.
Свойство Глобальный определяет, являются ли экспортируемые методы общего модуля частью глобального контекста.
Если свойство Глобальный установлено в значение Истина, то экспортируемые методы общего модуля доступны как методы глобального контекста.
Если свойство Глобальный установлено в значение Ложь, то в глобальном контексте создается свойство с именем, соответствующим имени общего модуля в метаданных. Данное свойство доступно только для чтения. Значением данного свойства является объект ОбщийМодуль . Через данный объект доступны экспортируемые методы данного общего модуля. Таким образом, обращение к методам неглобальных общих модулей выглядит как XXXXX.YYYYY, где XXXXX – это имя свойства, соответствующее контексту общего модуля, а YYYYY – имя экспортируемого метода общего модуля.
Пример:

РаботаСТорговымОборудованием.ПодключитьСканерШтрихкодов() ;

Различные контекст и общие модули

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



#Если ТонкийКлиент Тогда
// Покажем предупреждение
ПоказатьОповещениеПользователя (“На клиенте”);
#КонецЕсли
КонецПроцедуры
Тогда на стороне сервера код приобретет следующий вид:
Процедура МетодОбщегоМодуля() Экспорт
// Тут размещается различный важный код
КонецПроцедуры
А на стороне тонкого клиента код будет иметь следующий вид:
Процедура МетодОбщегоМодуля() Экспорт
// Тут размещается различный важный код
// Покажем предупреждение
ПоказатьОповещениеПользователя(“На клиенте”);
КонецПроцедуры

Для передачи управления с клиента на сервер существует несколько способов:
● вызвать метод серверного общего модуля;
● в модуле формы или команды вызвать метод, который предваряется директивами компиляции &НаСервере, &НаСервереБезКонтекста

При этом из серверных процедур невозможно вызвать методы клиентских общих модулей (у которых не установлено свойство Сервер) и клиентские методы модуля формы или модуля команды. Управление вернется на клиента после того, как будет завершен самый внешний вызов серверного метода.
Исключение составляют методы модуля формы и модуля команды, которые предваряются директивами компиляции &НаКлиентеНаСервере , &НаКлиентеНаСервереБезКонтекста
Также следует упомянуть следующие моменты:
● Если общий модуль доступен более чем для одного клиента, то при написании программного кода следует учитывать максимальные ограничения, которые могут накладываться клиентами, либо использовать инструкции препроцессора для «изоляции» кода, специфичного для того или иного клиента.
● Инструкции препроцессора также имеют смысл тогда, когда один общий модуль имеет несколько контекстов исполнения, например, внешнее соединение и тонкий клиент или (что встречается значительно чаще) какой-либо клиент и сервер. В этом случае инструкции препроцессора будут обрамлять интерактивный код, который невозможно использовать на сервере, но возможно на клиенте (см. пример выше).
Подробнее об инструкциях препроцессора и директивах компиляции в разделе «Исполнение процедур и функций» справки по встроенному языку.
Свойство Вызов сервера предназначено для управления возможностью вызова экспортируемых методов серверного общего модуля из клиентского кода.
Если свойство установлено, то экспортируемые методы серверного общего модуля доступны для вызова со стороны клиента. Если свойство не установлено, то такие экспортируемые методы можно вызывать только из серверных методов (как методов серверных общих модулей, так и серверных методов модуля формы и модулей команд).
Совет . Рекомендуется устанавливать в значение Ложь свойство Вызов сервера в тех случаях, когда серверный общий модуль содержит методы, которые нежелательно вызывать с клиента (например, по причинам безопасности).
Примечание . Если одновременно установлены свойства Клиент (обычное приложение) , Клиент (управляемое приложение) , Внешнее соединение , то свойство Вызов сервера автоматически сбрасывается. Если устанавливается свойство Вызов сервера , то автоматически сбрасываются свойства Клиент (обычное приложение) , Клиент (управляемое приложение) и Внешнее соединение , если эти свойства были установлены одновременно.
Свойство Привилегированный предназначено для отключения контроля прав доступа при выполнении методов общего модуля.
ПРИМЕЧАНИЕ. Если свойство Привилегированный установлено, то общему модулю автоматически устанавливается свойство Сервер и сбрасываются остальные свойства (Клиент (обычное приложение) , Клиент (управляемое приложение) и Внешнее соединение ). Привилегированный общий модуль может исполняться только на сервере.

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

Если общий модуль не является глобальным, то становится доступно свойство Повторное использование возвращаемых значений. Это свойство может принимать следующие значения:
● Не использовать – повторное использование возвращаемых значений для функций этого общего модуля не используется.
● На время вызова и На время сеанса – для общего модуля используется метод определения повторного использования данных. Суть этого метода заключается в том, что в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции. Если функция во время своего выполнения меняет значения параметров, то повторный вызов функции не будет это делать.
Можно выделить следующие особенности сохранения результатов вызова:
● если функция выполняется на сервере и вызывается из серверного кода, то значения параметров и результат вызова запоминаются для текущего сеанса на стороне сервера;
● если функция выполняется на толстом или тонком клиенте, то значения параметров и результатов вызова запоминаются на стороне клиента;
● если функция выполняется на стороне сервера, а вызывается из клиентского кода, то значения параметров вызова запоминаются и на стороне клиента, и на стороне сервера (для текущего сеанса).
Сохраненные значения удаляются:
● если свойство установлено в значение На время вызова:
● на стороне сервера – при возврате управления с сервера;
● на стороне клиента – при завершении работы процедуры или функции встроенного языка верхнего уровня (вызванной системой из интерфейса, а не из другой процедуры или функции встроенного языка);
● если свойство общего модуля установлено в значение На время сеанса:
● на стороне сервера – при окончании сеанса;
● на стороне клиента – при закрытии клиентского приложения.
Сохраненные значения будут удалены:
● на сервере, в толстом клиенте, во внешнем соединении, в тонком клиенте и в веб-клиенте с обычной скоростью соединения – через 20 минут после вычисления сохраняемого значения или через 6 минут после последнего использования;
● в тонком клиенте и веб-клиенте с низкой скоростью соединения – через 20 минут после вычисления сохраняемого значения;
● при нехватке оперативной памяти в рабочем процессе сервера;
● при перезапуске рабочего процесса;
● при переключении клиента на другой рабочий процесс.
После удаления значений вызов экспортируемой функции выполняется как при первом вызове.
На выполнение процедур данное свойство общих модулей не влияет – процедуры выполняются всегда.

Если у общего модуля установлено повторное использование возвращаемых значений, то на типы параметров экспортируемых функции накладывается ряд ограничений. Типы параметров могут быть только:
● Примитивными типами (Неопределено, NULL, Булево, Число, Строка, Дата ).
● Любыми ссылками на объекты базы данных.
● Структурами со значениями свойств вышеперечисленных типов. В этом случае идентичность параметров контролируется «по содержимому» структур.
Если экспортируемая функция возвращает какой-либо объект, то фактически возвращается ссылка на объект, хранимый в кеше. Если после получения этой ссылки произойдет изменение состояния объекта, то последующий вызов той же самой функции приведет к возврату ссылки на уже измененный объект без фактического выполнения функции. Такое поведение будет наблюдаться до удаления сохраненного значения (по любой причине). Другими словами – изменение состояния объекта, полученного в результате вызова функции из общего модуля с повторным использованием возвращаемых значений, не является основанием для фактического вызова функции. Также следует помнить, что кеш возвращаемых объектов индифферентен к
состоянию привелигированного режима в момент вызова функции с повторным использованием возвращаемых значений. Эта особенность может привести к следующей особенности поведения:
● Фактическое выполнение вызова функции с повторным использованием возвращаемых значений (первый вызов) выполнялось при включенном привелигированном режиме.
● При выполнении функции был получен объект, который не может быть получен с отключенным привелигированным режимом.
● Последующие вызовы функции выполнялись без установки привелигированного режима.
● Однако, до момента очистки кеша возвращаемых объектов или повторного фактического вызова, функция будет возвращать формально недоступный объект.
● Также верно и обратное поведение, когда первый вызов выполняется без установки привелигированного режима, а в привелигированном режиме не возвращается объект, который мог быть получен в привелигированном режиме.

Если у общего модуля свойство Повторное использование возвращаемых значений установлено в значение На время сеанса , то в значениях, возвращаемых функциями такого модуля, нельзя использовать значения типа МенеджерВременныхТаблиц .
Если функция общего модуля, с установленным повторным использованием, вызываются из этого же самого общего модуля (например, с именем ОбщийМодуль ), то следует помнить о следующей особенности: если функция вызывается по имени МояФункция() , то исполнение функции будет происходить при каждом вызове функции. Для того чтобы использовались сохраненные значения, функция следует вызывать по полному имени:
ОбщийМодуль.МояФункция().
Метод глобального контекста удаляет все повторно используемые значения, как на стороне сервера, так и на стороне клиента, независимо от места вызова метода. После выполнения метода ОбновитьПовторноИспользуемыеЗначения() первый вызов функции будет выполнен полностью.

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

Однако эта самая программа должна быть где-то написана, то есть где-то находиться. В большинстве случаев код программы пишется в обычных текстовых файлов. Разница только в том, что расширение в них не.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С

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