как передать реквизит формы в модуль объекта

Как из модуля формы передать значение в модуль объекта

Когда такое может понадобиться

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

как передать реквизит формы в модуль объекта. Смотреть фото как передать реквизит формы в модуль объекта. Смотреть картинку как передать реквизит формы в модуль объекта. Картинка про как передать реквизит формы в модуль объекта. Фото как передать реквизит формы в модуль объекта

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

Реализация

Через табличную часть обработки

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

как передать реквизит формы в модуль объекта. Смотреть фото как передать реквизит формы в модуль объекта. Смотреть картинку как передать реквизит формы в модуль объекта. Картинка про как передать реквизит формы в модуль объекта. Фото как передать реквизит формы в модуль объекта

Так будет выглядеть обработчик компоновки результата:

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

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

Через временное хранилище

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

как передать реквизит формы в модуль объекта. Смотреть фото как передать реквизит формы в модуль объекта. Смотреть картинку как передать реквизит формы в модуль объекта. Картинка про как передать реквизит формы в модуль объекта. Фото как передать реквизит формы в модуль объекта

В модуле объекта для события «ПриКомпоновкеРезультата» сделаем небольшое изменение:

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

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

Вместо выводов

Абсолютно правильного рецепта для решения подобной задачи нет. Все зависит от конкретной задачи.

Источник

Передача значения из формы документа в модуль объекта

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

В модуле формы в какой-либо процедуре:
———————
ЗначениеПеременной = Истина;
УстановитьГлобальноеЗначениеПеременнойВОбъекте(ЗначениеПеременной);

Перем мПеременная;
Функция УстановитьГлобальноеЗначениеПеременнойВОбъекте(Переменная) Экспорт
мПеременная = Переменная;
КонецФункции

Не работает, подскажите ошибку.
Зараннее спасибо.

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

вот пример аналогичного вопроса:

В модуле объекта справочника объявляю переменную:
Перем м_Перем Экспорт;

В этом же модуле инициализирую переменную значением:
м_Перем = «1»;

Далее, в обработчике ОбработкаЗаполнения() или ПриКопировании() этой переменной присваивается другое значение:
м_Перем = «2»;

Вопрос: почему в модуле формы в процедурах ПриСозданииНаСервере() или ПриЧтенииНаСервере() значение выражения РеквизитФормыВЗначение(«Объект»).м_Перем равно «1», а не «2»? Естественно, либо ОбработкаЗаполнения(), либо ПриКопировании() обрабатывается. Кто мне может объяснить это поведение? Как нужно менять значение экспортируемой переменной модуля объекта, чтобы её изменённое значение было доступно в форме?

почитайте про видимость экспортных переменных в 8.2

(5) может и так.. не пробовал из формы менять

Источник

Реквизит формы в модуле менеджера

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

И про какие объекты вообще идет речь а то сложно общаться настолько абстрактно, речь идет про форму объекта например элемента справочника? Тогда откуда вы знаете что этот элемент справочника и соответственно его форма не открыты в пяти экземплярах?

Если допустить что у вас форма всегда гарантировано открыта в одном экземпляре и вы можете отслеживать программно каждое изменение флажка, то можно пойти экстремальным путем, при каждом изменении флажка
ПоместитьВоВременноеХранилище(ЗначениеФлажка, «АдресФлажкаИзЗаКоторогоМнеЛеньПравильноПерестроитьПрограмму ­»);
а в модуле менеджера считать значение флажка из хранилища
ЗначениеФлажка=ПолучитьИзВременногоХранилища(«АдресФлажкаИзЗаКоторогоМнеЛеньПравильноПерестроитьПрограмму ­»);
но это из серии «Мсье знает толк в извращениях»

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

Поэтому вас и стали расспрашивать каким образом связаны этот самый модуль менеджера и общий модуль? Почему процедурам в общем модуле понадобились процедуры из модуля менеджера а тем в свою очередь флажок из формы? Идет какой-то перебор объектов? Или вся цепочка событий всё таки запускается из самой формы?

Источник

Как передать реквизит формы в модуль объекта

как передать реквизит формы в модуль объекта. Смотреть фото как передать реквизит формы в модуль объекта. Смотреть картинку как передать реквизит формы в модуль объекта. Картинка про как передать реквизит формы в модуль объекта. Фото как передать реквизит формы в модуль объекта

v8: Передача данных из одной формы в другую

Автор статьи: Волшебник | Редакторы: vvv29, Гений 1С
Последняя редакция №6 от 17.04.06 | История
URL: http://kb.mista.ru/article.php?id=52

Ключевые слова: передать значение, значение в форму, передать параметр, передать параметр в форму, параметр в форму, передать праметр в форму

Как из одной формы открыть другую, передав параметры, и получить обратно результат?

1. ОткрытьМодально, параметр закрытия, метод Закрыть

2. Реквизиты формы (или свойства расширения формы)

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

3. Через ЭлементыФормы (не очень красиво)

5. Экспортные переменные модулей форм

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

6. Экспортные переменные модуля объекта, если он является основным реквизитом формы

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

7. Глобальные переменные (экспортные переменные модуля приложения)

9. СохранитьЗначение, ВосстановитьЗначение

10. Параметры сеанса

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

11. Объекты базы данных (справочники, константы, регистры сведений и т.д.)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *