Помощь - Поиск - Пользователи - Календарь
Полная версия: как получить значение реквизита формы из другого места
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
wertklop
подскажите, как получить значение реквизита формы(но не объекта) из другого места, что бы его можно было передать в ячейку отчёта, при этом не открывая саму форму искомого объекта?
lazy
Форма - это объект. Его можно создать, но не открывать (метод Открыть()). Реквизиты формы можно условно разделить на два типа - связанные с данными в конфигурации, и реквизиты самой формы. Про данные конфигурации все понятно. Проблема в том, что при создании формы - ее реквизиты ничем не заполнены. Их заполняет пользователь ручками, или код (например запускающийся из процедуры ПриОткрытии() ) Т.е. создать то форму не открывая можно, а данные в нее кто внесет?
wertklop
Цитата(lazy @ 30.7.2008, 13:10) *

Форма - это объект. Его можно создать, но не открывать (метод Открыть()). Реквизиты формы можно условно разделить на два типа - связанные с данными в конфигурации, и реквизиты самой формы. Про данные конфигурации все понятно. Проблема в том, что при создании формы - ее реквизиты ничем не заполнены. Их заполняет пользователь ручками, или код (например запускающийся из процедуры ПриОткрытии() ) Т.е. создать то форму не открывая можно, а данные в нее кто внесет?

суть проблемы не в записи данных при создании новой формы, а наоборот, в извлечении из формы уже созданного документа, необходимо извлеч из формы данные реквизитов формы.....
но как?
lazy
Понятно, хотите получить данные из формы открытого в данный момент документа. Посмотрите на метод ПолучитьФорму() в частности на третий параметр "КлючУникальности". Вот выдержка из Синтаксис помошника:

Цитата
ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)
ПолучитьФорму (GetForm)
Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <Ключ уникальности>)
Параметры:
<Форма> (необязательный)
Тип: Строка, ОбъектМетаданных. Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<Владелец> (необязательный)
Тип: Форма, Элемент управления. Объект, который будет являться владельцем открываемой формы.
<Ключ уникальности> (необязательный)
Тип: Произвольный. В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо новой формы будет возвращена она.
Если параметр не указан, сначала всегда будет искаться уже открытая форма.
Возвращаемое значение:
Тип: Форма.
Описание:
Получает форму документа.
Возможен обмен с сервером. Сериализуется. XML-сериализация.
Пример:
ВыбДокумент.ПолучитьФорму().Открыть();

И вот, что пишут про сам КлючУникальности:
Цитата
Форма.КлючУникальности (Form.UniqueKey)
Форма (Form)
КлючУникальности (UniqueKey)
Использование:
Чтение и запись.
Описание:
Тип: Произвольный. Пользовательский идентификатор формы. Может быть автоматически назначен, если задан соответствующий параметр методов ПолучитьФорму... Используется для идентификации и поиска открытых форм.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.


Сам я с данной штукой не работал, но по всей видимости рыть нужно в данном направлении - пробовать присвоить форме Ключ, а затем по этому ключу получить форму. И соответственно ее реквизиты...
wertklop
Цитата(lazy @ 30.7.2008, 17:54) *

Понятно, хотите получить данные из формы открытого в данный момент документа. Посмотрите на метод ПолучитьФорму() в частности на третий параметр "КлючУникальности". Вот выдержка из Синтаксис помошника:
И вот, что пишут про сам КлючУникальности:
Сам я с данной штукой не работал, но по всей видимости рыть нужно в данном направлении - пробовать присвоить форме Ключ, а затем по этому ключу получить форму. И соответственно ее реквизиты...

нет, не то я имею ввиду
необходимо получить данные реквизиты формы. эти данные запрашиваются из другого места, скажем из внешней обработки, никаких форм документа, из котой необходимо взять данные, открывать не надо
существует ли простой способ к доступу реквизитов формы?
solt
Цитата(wertklop @ 31.7.2008, 12:55) *

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


насколько я понимаю, пока форма не открыта ее данных просто нет, они формируются во время открытия на основе данных объекта формы или других данных в соответствии с логикой процедуры ПриОткрытии()
wertklop
короче!
есть база данных, в ней есть уже созданный документ, у него есть фома элемента, у которой имеется реквизит(он не является реквизитом объекта!). я обращаюсь к этому документу из внешней обработки и создаю отчёт на его основе. в одном месте в отчёте надо вставить значение этого реквизита.
открывать форму документа не надо!
надо просто обратиться к реквизиты формы и вставить его значение в таб док
lazy
Изначально при создании формы в ней ничего нету. Все реквизиты пусты, кром тех, которые связанны с данными документа. В прочих реквизитах формы данные реквизитов появляются не из воздуха, а расчитываются на основе данных базы - реквизитов документа, записей регистров, или введенных пользователем данных. При этом расчитываются каждый раз при открытии формы или задействовании кода изменяющего реквизит. Связанные с данными реквизиты формы заносятся сразу в документ. Не связанные либо исчезнут при закрытии формы, либо если есть соответствующий код - эти данные разложат по другим реквизитам.

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

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

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

для того чтобы получить данные реквизитов формы(!), необходимо проделать следующее:
выбрать элемент,обратиться к форме этого документа, открыть её и обратиться к реквизиту формы как к обычному реквизиту документа, затем следует закрыть форму.
OksM
А не будет ли проще всего для необходимых данных реквизита формы документа создать соответствующие данные документа, которые потом и использовать, обращаясь к нужному документу.
lazy
OksM тссс, изобретение велосипедов - важный этап в становлении любого 1Сника :)
AlexFF
Цитата(lazy @ 7.8.2008, 7:59) *

OksM тссс, изобретение велосипедов - важный этап в становлении любого 1Сника :)


biggrin.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.