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

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


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

Пробую:
&НаСервере
Процедура МояПроцедура() Обработка = РеквизитФормыВЗначение("Запись",Тип("ОбработкаОбъект.НужнаяОбработка")); Результат = Обработка.ЭкспортнаяПроцедураВМодулеНужнойОбработки("НужныйПараметр"); КонецПроцедуры Ошибка: неверный параметр № 1

Ответ: И это касается не только обработок - а вообще в принципе даже любых объектов.

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


Здравствуйте!
Подскажите пример кода, как можно программно вызвать заполненую печатную форму по ссылке на объект,
например,
ссылка=Документы.СчетФактураВыданный.НайтиПоКоду(...);
...
ссылка...ПолучитьДанныеПечатныхФорм...
и т.п

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

Вопрос: управляемые формы в УПП 1.3


Добрый день! В конфигураторе создаю обработку с управляемой формой (переключаю флаг на управляемую). В режиме предприятия не открывается никак. Кто сталкивался? как открыть созданную управляемую форму?

Ответ: +() Классика жанра:

<<К сожалению, это невозможно. Свойство "Использовать управляемые формы в обычном приложении" не влияет на внешние обработки и отчёты. В обычном приложении можно открывать только обычные формы таких объектов, а в управляемом только управляемые. Это ограничение платформы.>>

Вопрос: [РЕШЕНО] Вызов процедуры модуля формы из модуля управляемой формы внешней обработки


Уважаемые эксперты, подскажите, пожалуйста:
8.3.9.2170
Как из клиентской процедуры модуля формы внешней обработки (УФ), привязанной к документу, вызвать процедуру модуля формы этого документа?
Спасибо

Ответ:

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

Вопрос: Управляемые формы, а также доп. реквизиты справочника


Здравствуйте!
Я наконец-то начал работать с управляемыми формами, а также доп. реквизитами справочника, которые были введены в режиме предприятие.
1С:Предприятие 8.3 (8.3.8.2054), 1С:Комплексная автоматизация 2 (2.2.3.196).
К сожалению, столкнулся с проблемой и не смог нагуглить её решение.
Суть такова - есть внешняя обработка, в ней пользователь выбирает номенклатуру, после чего другие поля этой обработки должны автоматически заполниться доп. реквизитами этой номенклатуры. Споткнулся в самом начале - пытаюсь запросом получить эти доп. реквизиты.
1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 & НаКлиенте Процедура НоменклатураПриИзменении(Элемент) ДопРеквизиты = ЗапросДопРеквизитов(Объект. Номенклатура) ; КонецПроцедуры & НаСервере Функция ЗапросДопРеквизитов(Номенклатура) ЗапросДопРеквизитов = Новый Запрос() ; ЗапросДопРеквизитов. Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка, | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение, | НоменклатураДополнительныеРеквизиты.ТекстоваяСтрока |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка = &Номенклатура" ; ЗапросДопРеквизитов. УстановитьПараметр ("Номенклатура" , Объект. Номенклатура) ; РезультатЗапросДопРеквизитов = ЗапросДопРеквизитов. Выполнить () . Выгрузить() ; Возврат РезультатЗапросДопРеквизитов; конецфункции

Выдает

"{ВнешняяОбработка.ПечатьЭтикеток.Форма.Форма.Форма(11)}: Ошибка при вызове метода контекста (ЗапросДопРеквизитов)
ДопРеквизиты = ЗапросДопРеквизитов(Объект.Номенклатура);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа "{http://v8.1c.ru/8.1/data/core}ValueTable""

Пожалуйста, помогите!

Добавлено через 9 минут
В 28 строке "Возврат РезультатЗапросДопРеквизитов;" возвращается таблица значений. Пробую на клиенте обозначить переменную "ДопРеквизиты" как "Новый ТаблицаЗначений" - программа ругается, что не знает, что такое "ТаблицаЗначений". Пробую менять контекст с "НаКлиенте" на "НаСервере" - тогда уже не ругается, но и отладчик перестает работать.

Ответ: Спасибо за ответ!

Разместите на форме табличную часть аналогичной структуры

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

Добавлено через 6 минут
Попробую просто создать таб. часть обработки (без вынесения её на форму) и в неё загрузить результат.

Так и получилось! Спасибо!

Вопрос: Работа с ТаблицейЗначений в управляемой форме


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

и пишу "ТЗ."и в выпадающем списке есть свойство "Колонки" . Вопрос-почему????????

Ответ:

Сообщение от Briolin

А 1с надо сделать что бы прям в конфигураторе было написано что у реквизита на форме тип данных ДанныеФормыКоллекция!

Тогда будет не понятно в какой прикладной объект это можно перевести

Вопрос: Управляемая форма (доступность элементов)


На Базе УТэшки 10.3.40.1 платформа 8.3.9.2033 делаю форму подбора товара в веб-е. Создал новую роль, для неё начал открывать доступ к объектам постепенно. Все было хорошо, пока не дошел до справочника Значения свойств объектов. Понятно что в 10 нет управляемых форм, все генерируются в процессе, но если форма выбора тех же "Свойств объектов" нормально создается, то форма выбора "Значений свойств объектов" создается с неактивными элементами... И что я только не пробовал - права на чтение, на просмотр и справочнику и ПлануВидовХарактеристик.СвойстваОбъектов... ничего не помогает. Куда рыть? Вариант сделать отдельную форму и все там прописать можно не предлагать, его я оставил на случай если причина так и не выяснится.

Ответ: Может доступность устанавливается в самой форме по какому-то условию?

Вопрос: При закрытии управляемой формы справочника пишу в регистр сведений,


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

&НаСервере
Процедура ПриЗакрытииНаСервере() Набор=РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); Набор.Отбор.Объект.Установить(тек_.Объект); Набор.Отбор.Тип.Установить(тек_.тип); Набор.Отбор.Вид.Установить(тек_.вид);

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

Вопрос: Структура элементов на управляемой форме. Как найти нужный элемент без перебора элементов?


Нужно найти табличное поле на управляемой форме. Делаю это перебором всех элементов формы. Может быть есть какой-то иной способ найти нужный элемент управляемой формы?
Пример поиска перебором:
//***** ФлНашлиТабличнуюЧасть = Ложь; Для Каждого Эл Из _ЭтаФорма.Элементы Цикл Если ТипЗнч(Эл) <> Тип("ТаблицаФормы") Тогда Продолжить; КонецЕсли; Если Эл.ПутьКДанным = "Объект." + _ИмяТабличнойЧасти Тогда ФлНашлиТабличнуюЧасть = Истина; Прервать; КонецЕсли; КонецЦикла; //*****

Вопрос: Записать() в управляемой форме


Ситуация следующая:

У меня ЗУП 3.0. Есть документ "Изменение штатного расписания". В организации штатные единицы могут вводиться временно. Для этого по кнопке из исходного документа по выбранным позициям создаётся документ на исключение позиций. Эту ссылку мне надо сохранить. Для этого я создал реквизит с типом "Изменение штатного расписания".
После того, как программно записал документ, ссылку пишу в этот реквизит. Вызываю метод записать из управляемой формы с параметрами.. . А он берет и режим записи ставит ПРОВЕДЕНИЕ. ессно исходный документ у меня проведенный! но мне нужно записать 1 реквизит и НЕ перепроводить исходный документ. Как будто не видел моего параметра. Код ниже. Вопрос что не так сделал?

ДокументРасформирования.Записать(РежимЗаписиДокумента.Запись);
Объект.итр_ДокументРасформирования = ДокументРасформирования.Ссылка; ПараметрыЗаписи = Новый Структура(); ПараметрыЗаписи.Вставить("РежимЗаписи",РежимЗаписиДокумента.Запись); ЭтаФорма.Записать(ПараметрыЗаписи);

Ответ: собственно нашел как сделать... так и быть поделюсь.

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

Awk 693 22.12.13 22:44 Сейчас в теме

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

Аналогия просто неуместна, по природе ООП. ООП - наследник процедурного, модульного программирования. Это все равно, что сравнивать отца и сына, при этом ставя в пример отцу сына.

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

Это связано с приведенным в статье примером. Там у метода есть директива компиляции, причем ключевое слово "экспорт", почему-то опущено.

Из того, что ему ни разу не приходилось чего-то делать, еще не следует, что это не актуально, или что этого не делают другие.

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

В обычном приложении они часто используются для решения чисто интерфейсных задач:

То-то и оно, что в обычном. Я не предрекаю его смерть (вполне хорошее и проверенное решение), но тенденции таковы, что 1С все дальше уходит в сторону распределенных вычислений, с явным выделением кода по местам его действия. Тут редко прокатывает (если прокатывает вообще): "Все на клиента, а там разберемся" или "Дернем сервер пару раз - гигабитка ведь у нас".

Я думаю было бы полезно расширить абстракцию, заложенную в понятие "ОбщийМодуль", и ввести в конфигурацию
сущности нового типа, скажем, "ИсполняемыйМодуль", аналогичные объектам Module из MS VBA.
"ОбщиеМодули" были бы частным случаем объектов "ИсполняемыйМодуль", находящимися примерно
в том же соотношении, что объекты "ОбщаяФорма" и просто "Форма"....

Для начала, неплохо было бы в 1С реализовать пространства имен и метаданные модулей, а не как сейчас (цитата из синтакс-помощника); "Неопределено - т.к. Не предполагается работа из встроенного языка"

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

В классическом веб программировании - это решается возможностью формы вкладывать в формы и асинхронными вызовами (AJAX), к сожалению это проигнорировано 1С. Так что остается три варианта:

1. Использовать разные формы
2. Передавать все необходимые данные на клиента
3. Дергать сервер.

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


Внеконтекстные вызовы сервера предназначены для уменьшения трафика при передачи данных от клиента на сервер. Только этим они отличаются от контекстных.

Пример 1: надо получить контрагента по документу основанию.

клиент сервер
1. форма выбора --> получение формы
2. При изменении <--
3. Получить контрагента --> ДокументОснование["Контрагент"]

В третьем шаге нет смысла тащить на сервер всю форму, со всеми реквизитами. Потому, целесообразно использовать НаСервереБезКонтекста.

В твоем варианте можно просто использовать:

Для методов модуля объекта:

&НаСервереБезКонтекста
Функция Что_то_с_чем_то(ОбъектОбработка, ТипОбработкиСтрока, Параметры)
Возврат ДанныеФормыВЗначение(ОбъектОбработка, Тип(ТипОбработкиСтрока)).НужнаяНамФункция(Параметры);
КонецФункции

Для методов модуля менеджера:

&НаСервереБезКонтекста
Функция Что_то_с_чем_то(Имя, Параметры)
Возврат Обработки[Имя].НужнаяНамФункция(Параметры);
КонецФункции

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

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

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

Теория

Обратимся к основам объектно-ориентированного программирования (ООП) и проведем аналогию с нашим примером. В ООП методы для объектов можно разделить на статические (static) и простые . Простые методы могут быть вызваны только для конкретного объекта, доступ к которому мы имеем в текущем контексте программного кода. Статические методы не имеют непосредственного доступа к данным объектов. Для обращения к объекту первоначально нужно создать его экзмемпляр. То же самое относится к платформе 1С:Предприятие 8.x.

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

От теории перейдем к практике.

Практика

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

Процедура печати в модуле объекта

В модуле объекта справочника добавим следующую функцию:

// В функцию передаем ссылку на элемент справочника Функция ПечатьВыбранныхТоваров(Ссылка) Экспорт ТабДок = Новый ТабличныйДокумент; Макет = Справочники. Товары. ПолучитьМакет(" Макет " ) ; Запрос = Новый Запрос; Запрос. Текст = " ВЫБРАТЬ | Товары. Представление КАК Товар, | Товары. ПометкаУдаления, | Товары. Артикул |ИЗ | Справочник. Товары КАК Товары |ГДЕ | Товары. Ссылка В(& МассивТоваров) " ; Запрос. УстановитьПараметр(" МассивТоваров " , Ссылка) ; //Ставим отбор по ссылке

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

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

& НаКлиенте Процедура Печать(Команда) // Обращаемся к серверной процедуре для получения сформированного табличного документа ТабДок = ПечатьСервер() ; // Показываем сформированный табличный документ ТабДок. Показать() ; КонецПроцедуры & НаСервере Функция ПечатьСервер() // Конвертируем объект формы в объект справочника "Товары" для вызова функции из модуля объекта ОбъектТовар = РеквизитФормыВЗначение(" Объект " ) ; // Вызываем процедуру модуля объекта, передав туда ссылку на текущий элемент справочника. Результат // возвращаем на клиентскую часть Возврат ОбъектТовар. ПечатьВыбранныхТоваров(Объект. Ссылка) ; КонецФункции

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

Процедура печати в модуле менеджера

В модуль менеджера справочника добавим следующую экспортную процедуру:

// Передаем массив ссылок на товары Функция ПечатьВыбранныхТоваров(МассивТоваров) Экспорт ТабДок = Новый ТабличныйДокумент; Макет = Справочники. Товары. ПолучитьМакет(" Макет " ) ; Запрос = Новый Запрос; Запрос. Текст = " ВЫБРАТЬ | Товары. Представление КАК Товар, | Товары. ПометкаУдаления, | Товары. Артикул |ИЗ | Справочник. Товары КАК Товары |ГДЕ | Товары. Ссылка В(& МассивТоваров) " ; Запрос. УстановитьПараметр(" МассивТоваров " , МассивТоваров) ; // Устанавливаем отбор по массиву Результат = Запрос. Выполнить () ; ОбластьЗаголовок = Макет. ПолучитьОбласть(" Заголовок " ) ; ОбластьПодвал = Макет. ПолучитьОбласть(" Подвал " ) ; ОбластьШапкаТаблицы = Макет. ПолучитьОбласть(" ШапкаТаблицы " ) ; ОбластьПодвалТаблицы = Макет. ПолучитьОбласть(" ПодвалТаблицы " ) ; ОбластьДетальныхЗаписей = Макет. ПолучитьОбласть(" Детали " ) ; ТабДок. Очистить() ; ТабДок. Вывести(ОбластьЗаголовок) ; ТабДок. Вывести(ОбластьШапкаТаблицы) ; ТабДок. НачатьАвтогруппировкуСтрок() ; ВыборкаДетальныеЗаписи = Результат. Выбрать() ; Пока ВыборкаДетальныеЗаписи. Следующий() Цикл ОбластьДетальныхЗаписей. Параметры. Заполнить(ВыборкаДетальныеЗаписи) ; ТабДок. Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи. Уровень() ) ; КонецЦикла ; ТабДок. ЗакончитьАвтогруппировкуСтрок() ; ТабДок. Вывести(ОбластьПодвалТаблицы) ; ТабДок. Вывести(ОбластьПодвал) ; Возврат ТабДок; КонецФункции

Главное отличие от функции в модуле объекта - это параметр функции. Теперь в качестве параметра передается массив с ссылками на товары, которые необходимо распечатать.

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

& НаКлиенте Процедура Печать(Команда) ТабДок = ПечатьСервер() ; ТабДок. Показать() ; КонецПроцедуры & НаСервере Функция ПечатьСервер() // Передаем массив ссылок выделенных товаров в списке справочника // в функцию модуля менеджера "ПечатьВыбранныхТоваров" Возврат Справочники. Товары. ПечатьВыбранныхТоваров(Элементы. Список. ВыделенныеСтроки) ; КонецФункции

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

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

Что же использовать?

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

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

Конфигурация с примерами из статьи.

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

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

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

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

Функция НоваяФункция () Экспорт

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



Пер= Объект. НоваяФункция() ;

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

Перем НоваяПеременная Экспорт

ЭлементСправочника= Справочники. Номенклатура. НайтиПоКоду("000000001" ) ;
Объект= ЭлементСправочника. ПолучитьОбъект() ;
Объект. НоваяПеременная= ) ;

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

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

Процедура НоваяПроцедура () Экспорт

ЭлементСправочника= Справочники. Номенклатура. НоваяПроцедура() ;

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

Перем НоваяПеременная Экспорт

ЭлементСправочника= Справочники. Номенклатура. НоваяПеременная;

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

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

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

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

&НаКлиенте
Процедура Печать(Команда)
ТабДок = ПечатьНаСервере() ;
ТабДок. Показать() ;
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере()
Док = РеквизитФормыВЗначение("Объект" ) ;
Возврат Док. ПечатьДокумента(Объект. Ссылка) ;
КонецФункции

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

С точки зрения производительности гораздо лучше использовать модуль менеджера, когда это возможно. В нашем примере решение задачи будет выглядеть следующим образом.
Функция ПечатьНаСервере()
Возврат Документы. НашДокумент. ПечатьДокумента(МассивСсылок) ;
КонецФункции

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

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

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

Статьи по теме: