Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 03:44

Доспуп к элементам открытой формы и функция ПолучитьФорму()

Автор varaha, 29 ноя 2012, 21:24

0 Пользователей и 1 гость просматривают эту тему.

varaha

Такая простая задача. Открыта форма справочника. В списке выбран элемент. В отдельном окне открывается форма. Из ее модуля нужно получить значение текущей строки списка первой формы.

Использую ПолучитьФорму(), затем Элементы.Список.Текущаястрока. При первом обращении всё получается.
Но если в форме списка справочника поменять текущую строку, то вызов процедуры из второй формы выдает ту же строку, которая была выбрана первой.

Наверное это связано с кешированием данных.

Натолкните на мысль, как решить эту пролему. То есть, сделать так, чтобы ПолучитьФорму() выдавала обновленное состояние формы.

Или может быть есть более простой метод решения задачи?

mixqn

Цитата: varaha от 29 ноя 2012, 21:24Или может быть есть более простой метод решения задачи?
скорее всего. что все таки сделать то надо? много текста написано, но суть задачи я не уловил ))

varaha

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

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

Понимаю, что задача элементарная, но я программист в другой сфере, а сейчас потребовалось срочно написать конф. с нуля в 1С 8.2. Никак не могу привыкнуть в ее специфике. Я привык владеть ситуацией, а здесь готовые "кирпичики", и логика их поведения пока никак не доходит. Было бы время - с удовольствием покопался бы. А время есть только ночью...

mixqn

вы меня не поняли. под
Цитата: mixqn от 29 ноя 2012, 22:10что все таки сделать то надо?
я имел ввиду описание сути задачи, ее конечной цели в понятном виде. то есть цель конечная какая?

попробуем по шагам.
Цитата: varaha от 30 ноя 2012, 11:53Выбрана некоторая строка.
что значит выбрана? выделена (то есть отмечена как текущая - синим цветом)?
Цитата: varaha от 30 ноя 2012, 11:53В отдельном окне открывается форма другого справочника.
каким образом открывается? событие открытия связано как-то с формой предыдущего справочника, или абсолютно независимо (допустим просто из меню) открывается другой справочник?
Цитата: varaha от 30 ноя 2012, 11:53Понимаю, что задача элементарная, но я программист в другой сфере, а сейчас потребовалось срочно написать конф. с нуля в 1С 8.2. Никак не могу привыкнуть в ее специфике. Я привык владеть ситуацией, а здесь готовые "кирпичики", и логика их поведения пока никак не доходит. Было бы время - с удовольствием покопался бы. А время есть только ночью...
в том числе по этой причине я и просил описать конечную цель. пока она остается загадкой. вы описываете какие-то манипуляции с формами, а вот для чего все это надо - а черт его знает.

varaha

Могу подробнее. Но как бы не стало еще не понятней.

Все формы управляемые. Открыта форма списка справочника на рабочем столе. Назовем ее "форма №1".
Справочник иерархический. В последнем уровне иерархии выделен элемент (строка отмечена как текущая - синим цветом).

На форме есть команда-кнопка. В обработчике - вызов формы списка другого справочника.
Форма вызывается через ОткрытьФорму(). Назовем ее "форма №2".

В параметры этой формы передается отбор по одному из реквизитов, используя "Элементы.Список.ТекущаяСтрока" первой формы.
Нужные записи прекрасно отбираются.

У формы №2 есть подчиненный справочник.
Открываем "изменить" элемент формы №2.

Из этой формы открываем по ссылке форму списка подчиненного справочника. Назовем ее "форма №3".
Отрываем "изменить" элемент формы №3.

Открывается форма элемента справочника №3. У этого справочника есть подчиненный справочник №4.
Открываем форму списка подчиненного справочника. Назовем ее "форма №4".

Этот справочник (№4) имеет длину наименования=0 и единственный реквизит, который заполняется элементами справочника №2 (имеет тип ссылку на справочник №2).

Требуется, чтобы пользователь выбирал из списка, который имеет такой же отбор, как и в форме №2.
Здесь открываю форму №2 через ОткрытьФорму() в событии НачалоВыбора() поля элемента справочника №4.
В параметры отбора хочу передать выделенную строку формы №2.
Эту строку и нужно как-то получить. Например, через ПолучитьФорму() и последующим "Элементы.Список.Текущаястрока".
Может можно и по-другому.

Если не понятно, то ладно! Сам раскопаю потихоньку. Но думаю, что эта задача должна решаться довольно просто.

Dethmontt

Вместо получить форму попробуй например так:
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("КлючОтбора<Имя поля по которому буш отбирать>", Элементы.Список.ТекущиеДанные.Ссылка);
ОткрытьФорму("Справочник.ИмяСправочника.ИмяФормы",СтруктураОтбора,ЭтаФорма);
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

varaha

В общем случае кратко задача звучит так: получить текущую строку формы, поверх-которой открыты несколько модальных форм.
Решил ее элементарно. Объявил экспортную переменную в модуле управляемого приложения. В модуле формы обработчик события выбора строки:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
МояГлобальнаяПеременная=Элементы.Список.ТекущаяСтрока;
КонецПроцедуры


Теперь из любого клиентского контекста могу использовать эту ссылку.

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск