1с модуль менеджера документа

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

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

1. Модуль объекта предназначен для реализации поведения отдельного экземпляра объекта ( СправочникОбъект , ДокументОбъект и т.п.). В модуле объекта размещаются процедуры и функции, которые работают с данными объекта ( ЭтотОбъект и переменные модуля объекта), в том числе когда он еще не записан в информационную базу.

Например, в модуле объекта могут размещаться:

  • обработчики событий объекта
  • процедуры заполнения экземпляра объекта.

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

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

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

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

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

Модуль менеджера существует у всех объектов метаданных, даже у перечислений и внешних источников данных, но появился только с версии 8.2, в 8.3 расширился.

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

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

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

Внешняя видимость также определяется свойством Экспорт в конце определения функции.

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

Реклама магазина самообслуживания: треска, стоящая в очереди за cобственной печенью.

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

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

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

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

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

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

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

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

Или для переменной:

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

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

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

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

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

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

Так когда же использовать модуль объекта, а когда модуль менеджера?

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

Модуль менеджера и модуль объекта в 1С : 2 комментария

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

элемент = Справочники.Номенклатура.найтиПоКоду(123);
элемент.ПечатьВсякого(); // ПечатьВсякого — экспортная функция в менеджере справочника.

Цитата:
«При использовании модуля объекта код будет выглядеть следующим образом:
Функция ПечатьДокумента (Ссылка) Экспорт
//В эту функцию необходимо передать ссылку на конкретный документ
Возврат ТабДок;
КонецФункции».

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: