Как найти модуль формы в 1с

О чем эта статья

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

  • Что такое программный модуль и из каких разделов он состоит?
  • Для чего нужен модуль приложения? Почему их два? Когда какой запускается? Какие есть тонкости работы?
  • Какие события связаны с началом работы системы, как и где их обрабатывать?
  • Для чего нужен модуль внешнего соединения? Когда и как его использовать?
  • Когда используется модуль сеанса?
  • Что такое общие модули? Какие у него свойства и правила работы? Для чего нужно использовать свойство “Повторное использование возвращаемых значений”?
  • Когда используется модуль формы и какие события в нем могут быть обработаны?
  • Для чего предназначен модуль объекта? Из каких разделов он состоит? Как посмотреть доступные события модуля?
  • Какие тонкости работы существуют с модулями менеджера значения (для констант) и модулями набора записей (для регистров)?
  • В чем отличия между модулем объекта и модулем менеджера? Когда нужно использовать последний?

Применимость

В статье рассматривается платформа «1C:Предприятие» 8.3.4.496. Материал актуален и для текущих релизов платформы.

Модули в «1С:Предприятие 8.3»

  • Модуль приложения
  • Модуль внешнего соединения
  • Модуль сеанса
  • Общие модули
  • Модуль формы
  • Модуль объекта
  • Модуль менеджера

Модули – это те объекты, где содержится программный код.

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

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

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

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

Несмотря на одинаковое название, это две разные переменные: одна используется внутри конкретной процедуры, а другая – вне ее.

В некоторых модулях для переменных может указываться место компиляции (доступность) на Сервере или на Клиенте. Например:

Пример модуля 1С

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

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

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

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

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

Модуль приложения

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

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

Это могут быть события от ридера магнитных карт, фискального регистратора. И эти события можно каким-то образом тоже обработать.

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

Модуль приложения не будет работать, если запуск программы 1С осуществляется, например, в режиме com-соединения. В этом случае окно программы не создается.

Следует отметить, что в Платформе 8.3 существует два разных модуля приложения: модуль Управляемого приложения и модуль Обычного приложения. События модуля управляемого приложения отрабатываются при запуске Тонкого и Толстого клиента Управляемого приложения и Веб-клиента.

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

Если приложение работает и в режиме Управляемого, и в режиме Обычного приложения, то необходимо описывать процедуры-обработчики как для модуля Управляемого приложения, так и для модуля Обычного приложения.

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

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

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

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

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

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

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

Редактирование конфигурации для режимов запуска

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

Открыть модуль обычного приложения

Открыть модуль обычного приложения

Список событий, которые можно обрабатывать, для Управляемого и Обычного приложения одинаков.

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

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

1С обработки

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

Есть два события, связанные с началом работы системы (“перед” и “при”). Два события, связанные с завершением работы системы (“перед” и “при”). А также обработка внешнего события (например, события торгового оборудования).

Когда выполняется обработчик события “перед”, считается, что действие еще не совершено. Когда выполняется обработчик события “при” – действие уже совершено.

Событие ПередНачаломРаботыСистемы возникает в тот момент, когда производится запуск Предприятия 8.3, но само приложение еще не появилось на экране. У данного события есть такой параметр, как Отказ.

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

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

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

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

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

Процедуры, функции и переменные модуля приложения могут быть описаны как экспортные.

Модуль на Клиенте

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

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

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

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

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

В этом модуле есть события: ПриНачалеРаботыСистемы и ПриЗавершенииРаботыСистемы.

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

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

Открыть модуль внешнего соединения

1С Открыть модуль внешнего соединения

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

В Модуле внешнего соединения возможно описывать экспортные переменные и экспортные методы, которые будут доступны на той стороне, где происходит внешний вызов 1С:Предприятие 8.3.

Поскольку во внешнем соединении нет пользовательского интерфейса, Модуль внешнего соединения компилируется целиком на Сервере.

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

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

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

Открыть модуль сеанса

Инициализация параметров сеанса

В Модуле сеанса предусмотрено событие УстановкаПараметровСеанса.

Событие УстановкаПараметровСеанса

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

В Модуле сеанса описываются различные действия по инициализации параметров сеанса в зависимости от разных условий.

В данном модуле, как правило, описываются несколько процедур, которые вызываются из процедуры УстановкаПараметровСеанса. Поэтому все эти процедуры выделены в отдельный модуль.

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

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

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

  • процедура УстановкаПараметровСеанса выполняется не только при старте системы, а также при обращении к неинициализированным параметрам сеанса. Т.е. обработчик УстановкаПараметровСеанса может вызываться неоднократно в процессе работы приложения;
  • если количество элементов в массиве параметров сеанса равно нулю (у массива требуемых параметров тип данных Неопределено), то это момент запуска приложения;
  • поскольку Модуль сеанса работает в привелигированном режиме и проверки прав доступа не будет, следует очень аккуратно работать с объектами базы данных, так как пользователь может получить доступ к тем данным, которые ему не должны быть предоставлены;
  • при запуске системы достоверно еще не известно: будет ли запущено приложение. При этом в обработчике события УстановкаПараметровСеанса могут быть произведены лишние действия.
Общие модули

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

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

Общие модули

Можно добавить любое количество общих модулей. Чтобы методы Общих модулей были доступны в других местах конфигурации, необходимо их определять с ключевым словом Экспорт. Клиентские процедуры общих модулей будут доступны на Клиенте, а серверные – на Сервере.

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

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

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

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

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

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

Те Общие модули, которые отмечены признаком Глобальный, будут компилироваться при старте системы. Чем больше таких модулей, тем медленнее программа будет стартовать.

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

Кроме того, использование глобальных общих модулей влияет на понимание кода. Вызов методов не глобального общего модуля осуществляется через имя Общего модуля и имя метода, например:
МодульРасчетаСебестоимости.РаспределитьКосвенныеЗатраты();

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

Для Общего модуля в Палитре свойств можно установить свойство Привилегированный.

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

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

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

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

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

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

Если Общий модуль является привилегированным, то процедуры этого модуля могут быть скомпилированы только на Сервере.

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

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

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

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

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

Кроме того, если перевести режим редактирования конфигурации в Управляемое приложение и обычное приложение, то будет возможен еще один контекст компиляции – Клиент (обычное приложение).

Место компиляции общих модулей

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

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

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

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

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

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

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

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

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

В названиях общих модулей рекомендуется это указывать. Например: РегламентныеПроцедурыСервер, РегламентныеПроцедурыКлиент.

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

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

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

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

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

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

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

Кэширование значений 1С

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

Тем не менее, существуют определенные временные ограничения. Очистка кэша происходит автоматически через 20 минут после попадания значения в кэш.

Модуль формы

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

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

Например, можно обработать событие открытия формы и провести некую начальную инициализацию. Также можно обработать событие закрытия формы и проверить, а все ли правильно ввел пользователь.

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

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

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

Примеры событий в 1С

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

Список стандартных событий 1С

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

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

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

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

В принципе, событие записи существует и в Модуле формы. Но событие записи в Модуле формы возникает в процессе интерактивной записи, при работе с конкретной формой.

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

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

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

Событие модуля объекта

Палитра свойств объекта

Окно редактирования объекта

Ниже на рисунке представлен перечень доступных событий модуля справочника.

События модуля справочника

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

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

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

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

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

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

ОбработкаПроверкиЗаполнения

Весь контекст модуля исполняется на Сервере.

Для регистров существует Модуль набора записей.

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

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

ОбработкаЗаполнения

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

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

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

Контекстная подсказка в Справочнике

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

Обращение НовоеСвойство

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

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

Модуль менеджера

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

Открыть модуль менеджера

Палитра свойств: открыть модуль менеджера

Окно редактирования: открыть модуль менеджера

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

ОбработкаПолученияДанныхВыбора

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

Для того, чтобы выполнить данное обращение, необходимо получить тип данных СправочникМенеджер.

ДополнительныйМетод

Отличие экспортных методов Модуля менеджера и Модуля объекта состоит в том, что для обращения к методу Модуля объекта вначале нужно получить сам объект (т.е каким-то образом получить ссылку и далее эту ссылку преобразовать в объект).

После этого будут доступны экспортные переменные и методы Модуля объекта. Для Модуля менеджера обращение более простое, например:
Справочники.Контрагенты.ИмяМетода

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

Второе отличие в том, что МодульОбъекта вызывается в контексте конкретного элемента. Соответственно можно считать, что он применим для данного элемента (в большинстве случаев закладывается именно такая логика).

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

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

Кроме того, обращение к Модулю объекта – это все-таки более длительное действие. Поэтому решать данную задачу в модуле менеджера более предпочтительно.

На этом завершим наше знакомство с модулями в конфигурации системы «1С:Предприятие». Если подвести краткое резюме всему вышенаписанному, то в сухом остатке получаются следующие выводы:

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

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

Пока весь наш программный код мы рассматривали отрывочно от прикладного решения, и как правило, писали его в какой-то своей небольшой тестовой конфигурации. А вы в курсе, что «нельзя просто так взять» и начать редактировать код типовой конфигурации? Нет? Тогда в следующей статье мы все это объясним!

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

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

Статья по программированию - в PDF-формате

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

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

Модуль формы

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

Чтобы открыть модуль формы нужно сначала создать форму. Для этого в окне редактирования свойств объекта нужно перейти на закладку «Формы» и в поле «Элемента» нажать на кнопку с лупой:

Откроется конструктор формы. В нем можно выбрать тип формы, указать имя и синоним:

* Форма элемента — это форма, которая открывается при редактировании элемента справочника.
* Форма списка — это форма, в которой отображаются все элементы справочника.
* Форма выбора — это форма, которая открывается при выборе элемента справочника в поле другого объекта.

Оставим в конструкторе все без изменений и нажмем кнопку «Готово».

Откроется редактор формы. Для открытия модуля формы нужно внизу выбрать закладку «Модуль»:

Добавим в модуль формы код:

Сообщить(«Это модуль формы!»);

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

Почему сообщение вывелось дважды? Дело в том, что форма одновременно существует и на клиенте на сервере, поэтому модуль был скомпилирован дважды.

Директивы компиляции

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

* &НаКлиенте
* &НаСервере
* &НаСервереБезКонтекста
* &НаКлиентеНаСервереБезКонтекста

Что такое контекст будет рассмотрено позже, пока можно сказать, что это доступность реквизитов, элементов и параметров формы.

Добавим в модуль формы две процедуры:

&НаСервере Процедура Серверная() Сообщить("На сервере"); КонецПроцедуры &НаКлиенте Процедура Клиентская() Сообщить("На клиенте"); КонецПроцедуры

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

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

&НаСервере
Перем СервернаяПеременная;

&НаКлиенте
Перем КлиентскаяПеременная;

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

Обработчики событий модуля формы

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

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

Рассмотрим основные из них:

ПриЧтенииНаСервере — выполняется только для уже существующих в базе данных объектов, есть параметр ТекущийОбъект, через который доступен прикладной объект, можно вызывать его экспортные методы из модуля объекта. Директива компиляции &НаСервере.

ПриСозданииНаСервере — выполняется как для существующих, так и для новых объектов. Если установить параметр Отказ = Истина, то форма не будет создана и не будет открыта. Директива компиляции &НаСервере.

ПриОткрытии — выполняется при непосредственном открытии формы, можно отказаться от открытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.

ПередЗакрытием — выполняется до закрытия формы. Можно отказаться от закрытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.

ПриЗакрытии — выполняется после закрытия формы, уже нельзя отказаться от закрытия формы. Директива компиляции &НаКлиенте.

Для примера добавим в модуль формы 2 обработки событий: ПриСозданииНаСервере и ПередЗакрытием и добавим туда следующий код:

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Сообщить("Форма создана"); КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Отказ = Истина; Сообщить("Нельзя закрыть форму"); КонецПроцедуры

При открытии формы выйдет сообщение: «Форма создана». А если попытаться закрыть форму, то выйдет сообщение «Нельзя закрыть форму» и форма не будет закрыта.

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

Редактор формы

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

Любая форма представляет совокупность нескольких составляющих:

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


Редактор формы

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

В отдельном окне, в нижней части редактора, отображается внешний вид формы в режиме 1С:Предприятие.

Редактирование элементов

Редактор форм позволяет разработчику использовать широкий набор возможностей для изменения внешнего вида формы — того вида, который форма будет иметь в режиме 1С:Предприятие. Перечислим основные из этих возможностей:

Страницы, закладки

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

Редактор позволяет добавить в форму несколько элементов Группа — Страницы, каждая из которых может содержать несколько элементов Группа — Страница.

Например, форма документа может содержать один элемент Группа — Страницы, которому подчинены несколько элементов Группа — Страница с заголовками Изображение, Характеристики и Описание:


Редактор формы

Тогда в режиме 1С:Предприятие она будет выглядеть следующим образом:


Редактор формы

Заголовок каждой группы — страницы отображается на отдельной закладке. Разработчик имеет возможность задать режим отображения закладок: снизу или сверху:


Редактор формы

Например, закладки можно расположить снизу:


Редактор формы

Элементы

Редактор позволяет добавлять в форму различные элементы. Добавлять элементы можно с помощью команды добавления или путем перетаскивания реквизитов формы в дерево элементов:


Редактор формы

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


Редактор формы

Располагая элементы выше/ниже в дереве, подчиняя их другим элементам и задавая свойства элементов-групп можно задавать порядок, в котором пользователь будет обходить элементы управления формы при вводе и редактировании данных. В режиме 1С:Предприятие элементы формы будут обходиться в порядке их иерархии и в соответствии с тем, какой тип группировки выбран для групп: вертикальная или горизонтальная.

Разделители

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


Редактор формы

При перемещении разделителя, все элементы, связанные с разделителем, будут изменять свои размеры или перемещаться.

Модуль формы

Для редактирования модуля формы конфигуратор вызывает редактор текстов и модулей. Этот редактор предоставляет разработчику большое разнообразие возможностей для создания и изменения текста модуля. Подробнее…

Реквизиты формы

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


Редактор формы

Если у формы существует основной реквизит, определяющий поведение формы, отличное от типового, — он выделяется жирным шрифтом.

Командный интерфейс формы

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


Редактор формы

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

Команды формы

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


Редактор формы

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

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

Параметры формы

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


Редактор формы

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

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

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

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

Внимание! Только раздел процедур и функций содержат:

  1. общие модули;
  2. модули сеанса.

Методические рекомендации по наполнению (структуре) программных модулей 1С.

Виды программных модулей:

  1. Общие модули принадлежат всей конфигурации в целом. В отличие от модуля приложения (см. ниже), их может быть несколько. Общие модули не могут содержать объявлений переменных, и в них нет раздела основной программы, таким образом, они состоят только из процедур и функций.
  2. Модуль приложения (обычного и управляемого) — это модуль, который относится ко всей конфигурации в целом и может быть только один (является аналогом глобального модуля в версии 7.7). Он отвечает за пользовательскую сессию (сеанс) работы с 1С:Предприятие 8.
  3. Модуль внешнего соединения — используется вместо модуля приложения в том случае,  если конфигурация запускается через COM-соединение, а не в режиме клиентской сессии.
  4. Модуль объекта — собственный модуль некоторых прикладных объектов конфигурации  (например, модуль документа РасходнаяНакладная, модуль справочника Номенклатура). Не путать с модулями форм этих объектов!
  5. Модуль сеанса.
  6. Модули форм — модуль, в котором определяется поведение формы и действия, выполняемые из нее (например, открытие других форм).
  7. Модуль менеджера объекта — для переопределения стандартного события выбора, которое возникает в момент ввода по строке и для расширение функционала менеджера.
  8. Модули команд.
  9. Модули набора записей.

Как открыть модули 1С

Открыть общий модуль 1С:

Общий модуль 1С свойства

Открыть модуль объекта 1С:

Открыть модуль объекта 1С

Открыть модуль формы 1С:

Открыть модуль формы 1С

[свернуть]

Контекст программного модуля

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

Особенности директив компиляции в модуле:

  • если в свойствах модуля установлены флаги и Клиент, и Сервер, то по умолчанию для всех процедур модуля применяется директива компиляции &НаСервере.

Виды контекстов в 1С:Предприятии 8

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

[свернуть]

Объявление переменных в 1С

О префиксах при объявлении переменных:

  • ссылка 1
  • ссылка 2

Локальные переменные:

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

    // Локальные переменные

    Функция РассчитатьСумму()

    Сумма = 1;

    Возврат Сумма;

    КонецФункции;

Глобальные переменные:

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

    Перем гСумма;

    Функция РассчитатьСумму()

    // В этом случае значение переменной задается внутри функции

    гСумма = 1;

    КонецФункции;

    // В этом случае значение переменной задается при создании объекта

    гСумма = 2;

Экспортные переменные:

  • глобальную переменную можно сделать экспортной, указав ключевое слово Экспорт. Например, если экспортная переменная создаётся в модуле объекта справочника, то к ней можно обратиться через объект этого справочника, СправочникОбъект.ИмяПеременной

// Экспорт переменной

Перем гСумма Экспорт;

[свернуть]

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

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

«Экспорт« — необязательное ключевое слово, которое указывает на то, что процедура является доступной из других программных модулей.

Рисунок «Доступность модулей 1С»

доступность модулей 1с

(подробнее)

[свернуть]

Выполняться модули 1С могут (в общем случае):

  1. на клиенте;
  2. на сервере;
  3. как на стороне клиента, так и на стороне сервера.

Модуль приложения 1С

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

  1. запуска приложения и
  2. завершения его работы.

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

ВАЖНО! В модуле приложения отслеживается именно интерактивный запуск системы (т.е. когда создается окно программы); он не будет работать, если запуск программы 1С осуществляется, например, в режиме com-соединения, так как в этом случае окно программы не создается.

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

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

Виды модуля приложения:

  1. модуль управляемого приложения (события этого модуля обрабатываются при запуске тонкого клиента, толстого клиента и веб-клиента);
  2. модуль обычного приложения (работает при запуске толстого клиента в режиме обычного приложения).

ВАЖНО! Если приложение работает и в режиме управляемого приложения, и в режиме обычного приложения, то необходимо описывать процедуры-обработчики как для модуля управляемого приложения, так и для модуля обычного приложения.

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

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

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

  • командой из контекстного меню корневого узла конфигурации;
  • из палитры свойств корневого элемента конфигурации.

Подробнее

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

[свернуть]

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

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

Обработка модуля приложения 1С

В модуле приложения можно размещать стандартные разделы модуля:

  1. раздел объявления переменных;
  2. раздел описания произвольных процедур и функций;
  3. раздел основной программы.

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

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

Рисунки (вызов окна «Процедуры и функции» модуля

Обработка модуля приложения 1С

[свернуть]

События модуля приложения

Когда выполняется обработчик события “перед”, считается, что действие еще не совершено. Когда выполняется обработчик события “при” – действие уже совершено.

  1. события, связанные с началом работы системы:
    • <ПередНачаломРаботыСистемы> возникает в момент запуска Предприятия 8.3 до появления приложения на экране; если параметр «Отказ» примет значение Истина, то приложение не запустится.
    • <ПриНачалеРаботыСистемы> предполагает, что окно уже создано, и в этом случае можно, например, отобразить какую-то специальную форму. Отказаться от запуска уже нельзя.
  2. события, связанные с завершением работы системы:
    • <ПередЗавершениемРаботыСистемы> — приложение еще открыто и можно отказаться от его завершения.
    • <ПриЗавершенииРаботыСистемы> — окно приложения уже закрылось; возможно выполнить лишь дополнительные действия, например, по удалению файлов или отправке электронного письма.
  3. обработка внешнего события (например, события торгового оборудования):
    • <ОбработкаВнешнегоСобытия>

ВАЖНО! Процедуры-обработчики событий, расположенные в модуле приложения, модуле внешнего соединения, модуле прикладного объекта должны называться точно так, как называются соответствующие события. (подробнее)

[свернуть]

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

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

  1. запуска приложения и
  2. завершения его работы.

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

Отличие модуля внешнего соединения от модуля приложения:

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

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

События

<ПриНачалеРаботыСистемы> — действия, выполняемые при инициализации соединения.

<ПриЗавершенииРаботыСистемы> — действия, выполняемые при завершении соединения.

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

[свернуть]

ВАЖНО! Процедуры-обработчики событий, расположенные в модуле приложения, модуле внешнего соединения, модуле прикладного объекта должны называться точно так, как называются соответствующие события. (подробнее)

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

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

Особенности модуля сеанса:

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

Событие модуля сеанса

Событие <УстановкаПараметровСеанса>, единственное для этого модуля, выполняется самым первым (даже раньше события модуля приложения <ПередНачаломРаботыСистемы>).

Модуль сеанса 1С

Модуль сеанса 1С

[свернуть]

ВАЖНО! Не стоит располагать в модуле сеанса код, не связанный напрямую с инициализацией параметров сеанса:

  1. обработчик УстановкаПараметровСеанса может неоднократно вызываться в процессе работе системы (например, когда мы обращаемся к не инициализированным параметрам);
  2. данный модуль компилируется в привилегированном режиме, т.е. в нем  не осуществляется контроль прав доступа;
  3. мы не можем быть полностью уверены, что запуск системы будет произведен, и в случае отказа приложения пытаемся выполнить какие-то действия с базой данных.

Общие модули

Общие модули содержат программный код (процедуры и функции), который:

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

Подробнее читайте Объект 1С:Предприятие «Общие модули»

Модуль формы 1C

Модуль формы 1C предназначен для обработки:

  1. событий, связанных непосредственно с самой формой (например, открытие или закрытие), а также
  2. событий, связанных с действиями пользователя (например, вводом данных и обработкой корректности их ввода).

Модуль формы компилируется:

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

В модуле формы доступны разделы описания переменных и методов, а также раздел основной программы.

События, процедуры и функции модуля управляемой формы 1С

К стандартным событиям формы можно обратиться:

  • через список процедур и функций (Ctrl+Alt+P) либо
  • в палитре свойств самой формы.

События модуля формы 1С

События модуля формы 1С

[свернуть]

Особенности управляемых форм:

  1. модуль управляемой формы четко разделяется на контекст: каждая процедура (функция) должна иметь директиву компиляции;
  2. в модуле управляемой формы можно объявлять процедуры и функции, объявлять переменные и описывать раздел основной программы;
  3. в управляемой форме можно обработать событие записи элемента (присутствует только для форм объектов — справочников, документов и некоторых других).

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

взаимодействия модуля формы и модуля объекта

Замечания:

  1. схема описывает поведение системы при интерактивной записи; при программной соответственно не возникает событий на форме;
  2. заливкой выделены моменты, происходящие в транзакции.

Форма, ПередЗаписью() — обработчик нужен, если нужен диалог с пользователем перед тем, как записать объект.

Форма, ОбработкаПроверкиЗаполненияНаСервере() — проверяем заполнение, есть доступ к данным формы.

Объект, ОбработкаПроверкиЗаполнения() — проверяем заполнение, доступа к данным формы нет.

Форма, ПередЗаписьюНаСервере() — в этот момент экземпляр класса объекта уже существует, можем обратиться к его свойствам и методам, но в базу он пока не записан. Можно дозаполнить реквизиты объекта или провести дополнительные проверки.

Объект, ПередЗаписью() — в этот момент экземпляр класса объекта уже записан в базу данных, но транзакция еще не завершена (следовательно, может быть отменена). Можно дозаполнить реквизиты объекта или провести доп.проверки.

Объект, ПриЗаписи() — в этот момент экземпляр класса объекта уже записан в базу данных, на него есть ссылка, но транзакция еще не завершена (следовательно, может быть отменена). Используя эту ссылку, можно записать в базу какие-то данные, на основе данных объекта.

Форма, ПриЗаписиНаСервере() — в этот момент экземпляр класса объекта уже записан в базу данных, на него есть ссылка, но транзакция еще не завершена (следовательно, может быть отменена), но уже есть доступ к данным формы. От записи можно еще отказаться на этом шаге.

Форма, ПослеЗаписиНаСервере() — объект записан, транзакция завершена. Можно отобразить что-то на форме.

Форма, ПослеЗаписи() — можно отобразить что-то на форме.

[свернуть]

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

Модуль объекта 1С предназначен, в общем случае, для обработки событий объектов (например, события записи и удаления объектов, событие проведения документов и т.д.).

Некоторые события модуля объекта дублируют события модуля формы (например, события связанные с записью). Однако следует понимать:

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

Особенности модуля объекта:

  1. компилируется исключительно на сервере;
  2. в нем можно определять экспортные переменные и методы, которые будут доступны в других модулях конфигурации.
  3. отличие модуля объекта от модуля менеджера — по ссылке.

Модуль объекта можно вызывать:

  • через контекстное меню;
  • из Палитры свойств объекта;
  • из окна редактирования объекта.

Процедуры и функции модуля объекта 1С

Открыть модуль объекта 1С

События модуля объекта 1С

[свернуть]

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

  1. ПередЗаписью
  2. ПриЗаписи.

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

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

Это могут быть процедуры и функции:

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

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

Отличие модуля менеджера от модуля объекта:

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

Особенности модуля менеджера:

  1. компилируется на стороне сервера;
  2. в нем возможно определение экспортных свойств и методов;
  3. вызов экспортных методов менеджера не требует создания  самого объекта.

Процедуры и функции модуля менеджера объекта 1С

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

[свернуть]

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

Обычно программный модуль состоит  из трех разделов:

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

Пример структуры программного модуля:

//***************** ОБЛАСТЬ ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ **********************

Перем Фамилия Экспорт; //это глобальная переменная
Перем Имя, Отчество    //это переменная модуля
Перем ФИО;       //это тоже переменная модуля и к ней можно обращаться

                          //из любой процедуры и функции нашего модуля 

//*************** ОБЛАСТЬ ОПИСАНИЯ ПРОЦЕДУР И ФУНКЦИЙ ****************

Процедура Процедура1( )
    Перем Итог;    //Итог это локальная переменная (переменная процедуры)

Итог = Фамилия+» «+Имя+» «+Отчество;

   КонецПроцедуры

Функция Функция1( )

    // операторы функции

Возврат(Фамилия + » «+ Имя);

КонецФункции

//******************* ОСНОВНОЙ ТЕКСТ ПРОГРАММЫ ***********************

Фамилия =«Иванов»;
Имя = «Иван»;
Отчество = «Иванович»;

//******************************************************************************

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

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

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

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

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

Контекст выполнения модулей делится на клиентский и серверный. Кроме того, некоторые программные модули могут быть скомпилированы как на стороне клиента, так и на стороне сервера.

Модуль приложения (управляемого или обычного)

  • может содержать все 3 области
  • выполняется на стороне клиента
  • располагается в корневом разделе конфигурации

В модуле приложения описываются процедуры (обработчики) событий, которые инициализируются при старте и окончании работы системы. Например, при начале работы приложения можно обновить какие-либо данные конфигурации, а при завершении работы  — поинтересоваться, стоит ли вообще выходить из программы. Кроме того, в данном модуле перехватываются события от внешнего оборудования, например, торгового или фискального. Стоит отметить, что модуль приложения выполняется  только в случае интерактивного запуска приложения, то есть когда запускается окно программы. Этого не происходит, если приложение запускается в режиме com- соединения.
В платформе 1С 8 существует два различных модуля приложения. Это модуль Обычного приложения и модуль Управляемого приложения. Они срабатывают  при запуске различных клиентов. Так, модуль Управляемого приложения срабатывает при запуске веб-клиента, тонкого клиента и толстого клиента в режиме управляемого приложения. А модуль обычного приложения срабатывает при запуске толстого клиента в режиме обычного приложения. Настройка режима запуска приложения задается в свойстве конфигурации «Основной режим запуска».

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

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

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

  • может содержать все 3 области
  • выполняется на стороне сервера
  • располагается в корневом разделе конфигурации

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

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

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

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

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

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

Общие модули

  • может содержать область описания процедур и функций
  • выполняется на стороне сервера или клиента (зависит от настроек модуля)
  • располагается в ветке дерева объектов конфигурации «Общие» — «Общие модули»

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

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

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

Модуль формы

  • может содержать все 3 области
  • выполняется на стороне сервера и клиента

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

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

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

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

  • может содержать все 3 области
  • выполняется на стороне сервера

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

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

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

  • может содержать все 3 области
  • выполняется на стороне сервера

Модуль менеджера объектов появился только начиная с версии 1С 8.2. Модуль менеджера существует у всех прикладных объектов и предназначен для управления этим объектом как объектом конфигурации. Модуль менеджера позволяет расширить функциональность объекта за счет введения (написания) процедур и функций, которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации. Модуль менеджера объектов позволяет размещать общие процедуры и функции для данного объекта и обращаться к ним из вне, например, из обработки (конечно, если эта процедура или функция будет с ключевым словом Экспорт). Что это нам дает нового? В общем-то, ничего, кроме упорядочивания процедур по объектам и хранения их в отдельных местах — Модулях менеджеров объектов. Мы можем с таким же успехом эти процедуры и функции помещать в общих модулях, но 1С советует общие процедуры и функции объектов размещать в Модуле менеджера объектов. Примеры использования процедур и функций Модуля менеджеров объектов: первоначальное заполнение отдельных реквизитов справочника или документа по определенным условиям, проверка заполнения реквизитов справочника или документа по определенным условиям и т.д.

Модуль команды

  • может содержать раздел описания процедур и функций
  • выполняется на стороне клиента

Команды – это объекты, подчиненные прикладным объектам или конфигурации в целом. У каждой команды есть модуль команды, в котором можно описать предопределенную процедуру ОбработкаКоманды() для выполнения этой команды.
 

Понравилась статья? Поделить с друзьями:
  • Как вк найти музыку друзей через телефон
  • Как найти момент инерции тела вращения
  • Как гею найти спонсора для
  • Как найти уравнение движения при постоянной скорости
  • Как найти сколько целых чисел между корнями