для чего нужен модуль менеджера
Модуль менеджера и модуль объекта в 1С
В новых версиях конфигураций системы 1С:Предприятие многие функции и процедуры переместились из модулей объектов (документов, справочников и т.д.) в модули менеджера. Рассмотрим различия между этими двумя модулями.
Согласно теории объектно-ориентированного программирования, методы объектов делятся на две группы: статические и простые. Простые методы имеют доступ только к конкретному экземпляру класса. Статические методы не имеют доступа к данным объектов, а работают с классом в целом.
Если перевести все это в термины системы 1С:Предприятие, то Модуль объекта содержит простые методы. Для их использования необходимо сначала получить конкретный объект: элемент справочника, документа и т.п. Модуль менеджера содержит статические методы. Для его использования нет необходимости отдельно получать каждый конкретный объект, он позволяет работать со всей коллекцией сразу.
Модуль объекта может иметь процедуры и функции, которые можно использовать извне. Для этого такая процедура или функция обозначается словом Экспорт.
Для того, чтобы использовать такую функцию из модуля объекта, нужно сначала, имея ссылку на необходимый объект, получить его с помощью функции ПолучитьОбъект().
Аналогично можно создавать новые переменные, которые могут быть использованы из различных объектов конфигурации.
Таким образом можно дополнять стандартные процедуры, функции и свойства (переменные) объектов. Такие переменные являются динамическими, они не сохраняются в информационной базе и существуют только во время работы с полученным объектом.
Модуль менеджера имеет все те же возможности, разница лишь в том, что для его использования не нужно получать конкретный объект, модуль менеджера позволяет работать со всей коллекцией объектов определенного типа.
Или для переменной:
Рассмотрим отличия в применении модуля объекта и модуля менеджера на примере процедуры создания печатной формы документа.
При использовании модуля объекта код будет выглядеть следующим образом:
На форме документа нужно создать процедуру, которая передавала бы в функцию печати ссылку на документ.
Недостаток данного метода заключается в том, что он позволяет напечатать только один объект. Если же требуется напечатать несколько документов сразу, то нужно получать каждый из них, а затем вызывать функцию из модуля объекта. Это требует значительных системных ресурсов, поскольку при получении объекта он целиком помещается в оперативную память.
С точки зрения производительности гораздо лучше использовать модуль менеджера, когда это возможно. В нашем примере решение задачи будет выглядеть следующим образом.
В случае использования модуля менеджера, процедуру печати можно вызывать как из формы документа, так и из формы списка, передавая в массиве ссылки на несколько документов. При этом системе не нужно получать каждый документ из массива, что значительно экономит системные ресурсы.
Так когда же использовать модуль объекта, а когда модуль менеджера?
Все зависит от задачи. Если для ее выполнения достаточно ссылки на объект (например задача печати), то лучше использовать модуль менеджера. Если же стоит задача изменения данных, например заполнения документа, то необходимо его получить и использовать модуль объекта.
Модуль менеджера и модуль объекта в 1С : 2 комментария
Вобщем, получается что модуль менеджера это тот же общий модуль но с фиксированным именем. Если б хоть ссылку передавали первым параметром, или дали возможность его функции прозрачно вызывать как из модуля объекта:
элемент = Справочники.Номенклатура.найтиПоКоду(123);
элемент.ПечатьВсякого(); // ПечатьВсякого — экспортная функция в менеджере справочника.
Цитата:
«При использовании модуля объекта код будет выглядеть следующим образом:
Функция ПечатьДокумента (Ссылка) Экспорт
//В эту функцию необходимо передать ссылку на конкретный документ
Возврат ТабДок;
КонецФункции».
При использовании модуля объекта, ссылку передавать излишне, она и так есть в контексте.
Модуль объекта и модуль менеджера. Отличия
Предисловие
Практически у всех объектов конфигурации есть модуль менеджера, и для большинства объектов модуль объекта. Часто начинающие программисты не понимают различия в назначении этих двух модулей.
Понимание в различии их назначения позволяет писать более правильный по структуре программный код, а в некоторых случаях сэкономить ресурсы сервера 1С и увеличить производительность прикладного решения.
В статье рассмотрим принципиальные различия между этими модулями как с теоретической стороны, так и на конкретном практическом примере.
Теория
В модуле объекта платформа хранит процедуры и функции, которые могут быть вызваны только при работе с конкретным объектом, например, с объектом элемента справочника «Номенклатура». В модуле менеджера содержатся процедуры и функции, которые могут быть применены ко всем объектам данного типа, но с первоначальным созданием экземпляра этого объекта. То есть для изменения элемента номенклатуры из этого модуля первоначально для ссылки на элемент выполнить метод «ПолучитьОбъект()» и в дальнейшем уже работать с ним.
От теории перейдем к практике.
Практика
Перейдем к практическому примеру. Предположим, что нам нужно решить задачу по печати списка товаров.Пользотель выводит на печать товар либо непосредственно из элемента справочника, либо из форму списка товаров. Рассмотрим два способа выполнения поставленной задачи.
Процедура печати в модуле объекта
В модуле объекта справочника добавим следующую функцию:
Программный код для вызова метода объекта «ПечатьВыбранныхТоваров» по команде формы «Печать» представлен на следующем листинге:
Таким образом, мы распечатали текущий элемент справочника, работая с его объектом. Но в задаче было сказано распечатать список товаров, которые пользователь сам должен выбрать. При работе с объектом дать пользователю такую возможность простым путем не представляется возможным. Наиболее правильно было бы выполнять печать из списка элементов справочника «Товары».
Процедура печати в модуле менеджера
В модуль менеджера справочника добавим следующую экспортную процедуру:
Программный код модуля команды формы «Печать» выглядит следующим образом:
При этом результат выполнения команды в режиме 1С:Предприятия будет следующим:
В случае использования метода из модуля менеджера мы можем обращаться к данным справончника «Товары» без получения объекта для каждой ссылки. Поскольку получения объекта означает получение всех данных из базы данных по элементу справочника и помещение полученных данных в оперативную память, то реализация задачи вторым способом положительно повлияет на производительность. Ведь в таком случае мы будем использовать минимум ресурсов (оперативной памяти) серверной машины.
Что же использовать?
В типовой конфигурации «Управление торговлей» версии 11 повсеместно используетмся модуль менеджера для печати документов. Если посмотреть на конфигурацию «Управление производственным предприятием», то модуль менеджера практически не используется, так как конфигурация писалась в старых версиях платформы, где полноценной поддержки этого механизма не было.
Конфигурация с примерами из статьи.
Модуль менеджера в 1С 8.3
Менеджер справочника
У каждого прикладного объекта (справочники, документы и т.п.) есть менеджер, который позволяет управлять им: создавать новые объекты, работать с формами и макетами. Чтобы обратиться к менеджеру прикладного объекта нужно указать имя вида объекта метаданных и через точку имя конкретного объекта метаданных. К менеджеру объекта можно обращаться только на сервере.
Модуль менеджера
Модуль менеджера позволяет написать на встроенном языке свои методы, которые можно будет вызывать через менеджер объекта. В модуле менеджера не может быть раздела объявления переменных и тела модуля, могут быть только процедуры и функции. При этом, чтобы эти процедуры и функции можно было вызывать через менеджер объекта они должны быть экспортными.
Для открытия модуля менеджера нужно перейти на закладку «Прочее» и нажать кнопку «Модуль менеджера»:
Или через контекстное меню в дереве объектов:
Или через меню Действия:
Для примера откроем модуль менеджера справочника «Номенклатура» и добавим туда 2 функции:
Из модуля формы обработки вызовем обе функции модуля менеджера:
При обращении к функции АртикулПоУмолчанию будет ошибка «Метод объекта не обнаружен (АртикулПоУмолчанию)», потому что у данного метода нет ключевого слова Экспорт, он доступен только в рамках модуля менеджера. А функция НаименованиеПоУмолчанию отработала и вернула строку «Новый товар».
Если сравнивать с другими языками программирования, то ближайшим аналогом методов модуля менеджера будут статические методы класса.
Обработчики событий
Как и в модуле объекта, в модуле менеджера есть обработчики событий:
Более подробно данные обработчики будут рассмотрены нами позднее.
Модуль менеджера объекта
Рассмотрим работу с Модулем менеджера объектов.
Пожалуй, начнем сразу с практического примера.
В справочник Контрагенты нам необходимо заносить информацию о поставщиках, покупателях, банках, налоговых органах, различных фондах и пр. Для каждого вида контрагента нас интересует разная информация.
Создадим функцию, возвращающую список «важных» реквизитов в зависимости от вида контрагента:
Код 1C v 8.2 УП
Где же ее правильнее разместить?
Можно выйти из этой ситуации создав Общий модуль «РаботаСКонтрагентами» и разместить в нем функцию возвращающую список реквизитов для проверки. В этом случае будем обращаться так «РаботаСКонтрагентами.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Но! На платформе 8.2 как раз для решения подобной задачи и был создан Модуль менежера. Там и разместим нашу функцию. А обращаться мы будем: «Справочники.Контрагенты.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Т.о. на ряду с предопределенными методами, мы можем самостоятельно разработать свои процедуры и обращаться к ним как методам Менеджера объекта, через точку. У нас отпадает необходимость создавать «тематические» внешние модули такие как «Работа с Контрагентами», «Процедуры Номенклатуры».
Обратимся теперь к теории, чтобы «разложить все по полочкам».
Руководство разработчика дает нам следующее описание: «Модуль менеджера существует у всех прикладных объектов и предназначен для управления этим объектом как объектом конфигурации. Модуль менеджера позволяет расширить функциональность менеджеров за счет введения процедур и функций на встроенном языке. Фактически это позволяет описать методы для объекта конфигурации, которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации». Именно это мы и разобрали в нашем практическом примере.
Отобразим иерархию классов прикладных объектов на примере Справочников:
Т.е. мы видим, что появление «Модуля менеджера объекта» логично расширяет свойства класса СправочникМенеджер, так же как экспортные процедуры «Модуля объекта» расширяют методы класса СправочникОбъект. Нужно ли было создавать «Модуль прикладного объекта Справочники (Документы, Перечисления)». Наверное нет. Достаточно трудно придумать какие-либо задачи для единой обработки всех видов справочников.
Программирование в 1С для всех
Платформе 1С 8.3. менеджер 1С необходим для организации работы с объектами метаданных. Посредством менеджера 1С создаются новые экземпляры справочников, документов, осуществляется поиск и выборка объектов, получаются формы и макет, а также выполняется другая работа, не связанная с конкретным экземпляром объекта.
Менеджер объекта 1С
Для доступа к тому или иному объекту конфигурации 1С необходимо сначала обратиться к менеджеру этого объекта. Например, для управления документом, как объектом конфигурации, следует обратиться к менеджеру документа, а для управления справочником, как объектом конфигурации, нужно обратиться к менеджеру справочника.
Для обращения к менеджеру объекта, сначала необходимо воспользоваться свойством глобального контекста. Например, для обращения к документу нужно воспользоваться свойством Документы, а для обращения к справочнику — Справочники.
Узнать, какое свойство за какой объект отвечает, можно в синтакс-помощнике в разделе Глобальный контекст, подразделе Свойства.
Если в модуле написать название свойства глобального контекста, и поставить «.» (или Ctrl + Space), то появится контекстная подсказка в которой, будут отображены все объекты этого прототипа, существующие в конфигурации на данный момент. Например, справочники.
После выбора конкретного объекта, мы уже обратимся к менеджеру этого объекта. Например, к менеджеру справочника.
И нам будут доступны все свойства и методы менеджера объекта. Заметим, что менеджер объекта даёт доступ не к конкретному экземпляру объекта, а ко всему объекту в целом.
Все свойства и методы менеджера нужного объекта можно посмотреть в синтакс-помощнике. Например, для справочника будет следующий путь.
Так мы получаем доступ к менеджеру конкретного справочника Контрагенты.
А так, к менеджеру документа Счет.
Естественно, и справочник Контрагенты, и документ Счет уже созданы в конфигурации.
Если после получения доступа к менеджеру объекта, мы поставим точку или выполним комбинацию клавиш Ctrl + Space, то появится контекстная подсказка со свойствами и методами менеджера объекта.
Подробно об этих методах можно почитать в синтакс-помощнике. Например, о методах менеджера справочника.
Например, в случае справочника, при помощи этих методов можно найти элемент, создать элемент, получить выборку и т.д.
Создать экземпляр объекта справочника можно так:
Где СоздатьЭлемент() – это функция менеджера справочника, которая возвращает новый экземпляр объекта.
А получить выборку элементов справочника можно так:
Где Выбрать() – это функция менеджера справочника, которая возвращает выборку элементов.
К примеру, получить выборку всех элементов и вывести в сообщение их наименование можно так:
Модуль менеджера 1С
Помимо методов менеджеров объектов, которые предоставляет платформа 1С можно создать собственные методы того или иного объекта. Делается это в модуле менеджера 1С. Открыть модуль менеджера объекта 1С достаточно просто: необходимо в дереве конфигурации выделить нужный объект, вызвать контекстное меню, и выполнить команду «Открыть модуль менеджера» этого меню.
Если в этом модуле менеджера написать процедуру или функцию, которая будет экспортной, то потом к ней можно обращаться посредством менеджера этого объекта. Например, в модуле менеджера справочника Контрагенты написали процедуру, которая выводит в сообщении наименование всех контрагентов.
Теперь, мы можем обратиться к этому методу посредством менеджера конкретного справочника.
Т.е. с помощью модуля менеджера мы можем создавать свойства и методы, которые будут применимы только к конкретному справочнику, документу и т.д.
Читайте также по теме:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655