Модуль объекта в 1С 8.3
Модуль объекта
Модуль объекта есть почти у всех основных прикладных объектов конфигурации в 1С.
У справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов и задач он называется Модуль объекта. У константы — Модуль менеджера значения. У последовательностей, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета и перерасчетов — Модуль набора записей.
Чтобы открыть модуль объекта нужно в окне свойств объекта на закладке «Прочее» нажать кнопку «Модуль объекта»
Также модуль объекта можно открыть из контекстного меню объекта:
Или из меню Действия:
Модуль объекта выполняется при создании объекта. В нем можно объявлять переменные модуля. Экспортные процедуры и функции можно вызывать у созданных программных объектов. К экспортным переменным можно обращаться как к свойствам программных объектов. В модуле есть прямой доступ к реквизитам и табличным частям объекта.
Вызов методов модуля объекта
Для примера создадим в конфигурации справочник «Номенклатура» с реквизитом «Артикул» и табличной частью «Остатки». У табличной части будет 2 реквизита: «Склад» и «Остаток»:
В модуле объекта напишем следующий код:
Теперь создадим обработку с одной формой и в модуле обработки в событии ПриСозданииНаСервере напишем следующий код:
Здесь мы сначала создаем новый программный объект справочника Номенклатура вызвав встроенный метод Справочники.Номенклатура.СоздатьЭлемент( ). Потом через ссылку на этот объект обращаемся к экспортным переменной и функции объекта.
Сохраним конфигурацию базы данных и откроем нашу обработку в пользовательском режиме. Событие формы ПриСозданииНаСервере выполняется при открытии формы в итоге в сообщениях мы увидим число 300. То есть через ссылку на программный объект мы можем обращаться к экспортным переменным и функция модуля объекта. Но значения переменных не сохраняются в базе данных. Как только объект будет удален из памяти все значения экспортных переменных будут потеряны.
Теперь поменяем код в модуле формы обработки на следующий:
Здесь мы делаем все то же самое, но обращаемся к не экспортным переменной и функции.
При открытии формы возникнет ошибка «Поле объекта не обнаружено ПолноеНаименование»:
Так как переменная ПолноеНаименование не является экспортной, то к ней нет доступа из других модулей.
Теперь попробуем обратиться к не экспортной функции модуля объекта. Вставим в модуль формы следующий код и откроем обработку:
Выйдет ошибка «Метод объекта не обнаружен ПолноеНаименованиеНоменклатуры»:
Теперь вставим в форму обработки такой код и откроем обработку:
Здесь мы вызываем экспорную процедуру модуля объекта, а потом встроенным методом Записать записываем объект в базу данных.
В результате в базе данных будет создан новый элемент, у которого заполнен артикул и добавлены 2 строки в табличную часть:
В методе ЗаполнитьРеквизиты() мы обращались напрямую к реквизитам объекта, после чего записали его методом Записать(). Значения реквизитов сохранились в базе данных.
Обработчики событий
В модуле объекта есть множество различных обработчиков событий, которые вызываются в определенные моменты времени. Чтобы увидеть все события нужно нажать на кнопку «Процедуру и функции» в панели инструментов:
В результате откроется список возможных событий:
Если выделить какое-то событие и нажать кнопку «Перейти» или просто щелкнуть по нему два раза левой кнопкой мыши, то в модуле объекта будет создана процедура для обработки данного события.
Рассмотрим основные события модуля объекта:
* ОбработкаЗаполнения — выполняется при интерактивном создании нового объекта, при вводе на основании, при вызове метода Заполнить().
* ОбработкаПроверкиЗаполнения — выполняется перед записью объекта в базу данных, но до начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПередЗаписью — выполняется до записи объекта в базу данных, но после начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПриЗаписи — выполняется после записи объекта в базу данных, транзакция записи еще не зафиксирована. Все еще можно отказаться от записи.
* ПередУдалением — выполняется перед непосредственным удалением объекта из базы данных.
* ПриКопировании — выполняется при создании нового объекта копированием.
Для примера создадим в модуле объекта 3 обработчика события и вставим в них следующий код:
Создадим интерактивно новый элемент справочника. Поле артикул уже будет заполнено:
Произвольно заполним наименование и нажмем на кнопку «Записать». В табличной части появятся 2 строки с остатками:
Одна строка была добавлена в событии ПередЗаписью, вторая ПриЗаписи.
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
Модуль объекта есть почти у всех основных прикладных объектов конфигурации в 1С.
У справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов и задач он называется Модуль объекта. У константы — Модуль менеджера значения. У последовательностей, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета и перерасчетов — Модуль набора записей.
Чтобы открыть модуль объекта нужно в окне свойств объекта на закладке «Прочее» нажать кнопку «Модуль объекта»
Также модуль объекта можно открыть из контекстного меню объекта:
Или из меню Действия:
Модуль объекта выполняется при создании объекта. В нем можно объявлять переменные модуля. Экспортные процедуры и функции можно вызывать у созданных программных объектов. К экспортным переменным можно обращаться как к свойствам программных объектов. В модуле есть прямой доступ к реквизитам и табличным частям объекта.
Вызов методов модуля объекта
Для примера создадим в конфигурации справочник «Номенклатура» с реквизитом «Артикул» и табличной частью «Остатки». У табличной части будет 2 реквизита: «Склад» и «Остаток»:
В модуле объекта напишем следующий код:
//переменные Перем ОбщийОстаток Экспорт; Перем ПолноеНаименование; //процедуры и функции Функция ПолноеНаименованиеНоменклатуры() Возврат "Системный блок в сборе"; КонецФункции Функция ОбщийОстаток() Экспорт Возврат 300; КонецФункции Процедура ЗаполнитьРеквизиты() Экспорт Артикул = "Арт1"; НовСтр = Остатки.Добавить(); НовСтр.Склад = "Основной"; НовСтр.Остаток = 100; НовСтр = Остатки.Добавить(); НовСтр.Склад = "Торговый зал"; НовСтр.Остаток = 200; КонецПроцедуры
Теперь создадим обработку с одной формой и в модуле обработки в событии ПриСозданииНаСервере напишем следующий код:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //заполняем экспортную переменную модуля объекта вызвав экспортную функцию ОбъектНоменклатура.ОбщийОстаток = ОбъектНоменклатура.ОбщийОстаток(); Сообщить(ОбъектНоменклатура.ОбщийОстаток); //300 КонецПроцедуры
Здесь мы сначала создаем новый программный объект справочника Номенклатура вызвав встроенный метод Справочники.Номенклатура.СоздатьЭлемент(
Сохраним конфигурацию базы данных и откроем нашу обработку в пользовательском режиме. Событие формы ПриСозданииНаСервере выполняется при открытии формы в итоге в сообщениях мы увидим число 300. То есть через ссылку на программный объект мы можем обращаться к экспортным переменным и функция модуля объекта. Но значения переменных не сохраняются в базе данных. Как только объект будет удален из памяти все значения экспортных переменных будут потеряны.
Теперь поменяем код в модуле формы обработки на следующий:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //пытаемся заполнить переменную модуля объекта вызвав функцию модуля объекта ОбъектНоменклатура.ПолноеНаименование = ОбъектНоменклатура.ПолноеНаименованиеНоменклатуры(); Сообщить(ОбъектНоменклатура.ПолноеНаименование); //ошибка КонецПроцедуры
Здесь мы делаем все то же самое, но обращаемся к не экспортным переменной и функции.
При открытии формы возникнет ошибка «Поле объекта не обнаружено ПолноеНаименование»:
Так как переменная ПолноеНаименование не является экспортной, то к ней нет доступа из других модулей.
Теперь попробуем обратиться к не экспортной функции модуля объекта. Вставим в модуль формы следующий код и откроем обработку:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //просто вызовем функцию модуля объекта Сообщить(ОбъектНоменклатура.ПолноеНаименованиеНоменклатуры()); //опять ошибка КонецПроцедуры
Выйдет ошибка «Метод объекта не обнаружен ПолноеНаименованиеНоменклатуры»:
Теперь вставим в форму обработки такой код и откроем обработку:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //вызовем экспортную процедуру модуля объекта ОбъектНоменклатура.ЗаполнитьРеквизиты(); //запишем объект в базу данных ОбъектНоменклатура.Записать(); КонецПроцедуры
Здесь мы вызываем экспорную процедуру модуля объекта, а потом встроенным методом Записать записываем объект в базу данных.
В результате в базе данных будет создан новый элемент, у которого заполнен артикул и добавлены 2 строки в табличную часть:
В методе ЗаполнитьРеквизиты() мы обращались напрямую к реквизитам объекта, после чего записали его методом Записать(). Значения реквизитов сохранились в базе данных.
Обработчики событий
В модуле объекта есть множество различных обработчиков событий, которые вызываются в определенные моменты времени. Чтобы увидеть все события нужно нажать на кнопку «Процедуру и функции» в панели инструментов:
В результате откроется список возможных событий:
Если выделить какое-то событие и нажать кнопку «Перейти» или просто щелкнуть по нему два раза левой кнопкой мыши, то в модуле объекта будет создана процедура для обработки данного события.
Рассмотрим основные события модуля объекта:
* ОбработкаЗаполнения — выполняется при интерактивном создании нового объекта, при вводе на основании, при вызове метода Заполнить().
* ОбработкаПроверкиЗаполнения — выполняется перед записью объекта в базу данных, но до начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПередЗаписью — выполняется до записи объекта в базу данных, но после начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПриЗаписи — выполняется после записи объекта в базу данных, транзакция записи еще не зафиксирована. Все еще можно отказаться от записи.
* ПередУдалением — выполняется перед непосредственным удалением объекта из базы данных.
* ПриКопировании — выполняется при создании нового объекта копированием.
Для примера создадим в модуле объекта 3 обработчика события и вставим в них следующий код:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Артикул = "Артикул"; КонецПроцедуры Процедура ПередЗаписью(Отказ) НовСтр = Остатки.Добавить(); НовСтр.Склад = "Основной"; НовСтр.Остаток = 50; КонецПроцедуры Процедура ПриЗаписи(Отказ) НовСтр = Остатки.Добавить(); НовСтр.Склад = "Ордерный"; НовСтр.Остаток = 90; КонецПроцедуры
Создадим интерактивно новый элемент справочника. Поле артикул уже будет заполнено:
Произвольно заполним наименование и нажмем на кнопку «Записать». В табличной части появятся 2 строки с остатками:
Одна строка была добавлена в событии ПередЗаписью, вторая ПриЗаписи.
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки