Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обращение к элементам диалога в цикле
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Игорь К
Ув. коллеги,

у меня есть форма обработки. На ней в цикле создаются закладки. На всех этих закладках одинаковые элементы диалога. Мне нужо в цикле пробежаться по этим закладкам и прочитать или задать значение каждого из аналогичных элементов диалога. Закладок от 20 до 50. Если для каждого элемента писать:

<ИмяЭлементаДиалога1> = ...
<ИмяЭлементаДиалога2> = ...
....
<ИмяЭлементаДиалога50> = ...

ИЛИ

Форма.<ИмяЭлементаДиалога1>.Заголовок(...)
Форма.<ИмяЭлементаДиалога2>.Заголовок(...)
....
Форма.<ИмяЭлементаДиалога50>.Заголовок(...)


то придется писать 50 строк. А если таких элементов на закладке несколько 3-5? А если закладок не 50 а 70-100?

ВОПРОС - как можно обратиться к свойству или методу элемента диалога не указывая имя этого элемента диалога явно, а задавать его имя в виде какой то переменной или как-то еще.

ЗАРАНЕЕ БЛАГОДАРЕН ВСЕМ ЗА СОВЕТЫ ИЛИ ИДЕИ.
Vofka
ПолучитьАтрибут(<?>);

Синтаксис:
Форма.ПолучитьАтрибут(ИмяРеквизита)
Назначение:
Возвращает ссылку на элемент формы.
Параметры:
ИмяРеквизита - строковое выражение, содержащее идентифика-тор элемента формы, как он задан в Конфигураторе.
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Игорь К
Цитата(Vofka @ 18.10.10, 9:25) необходимо зарегистрироваться для просмотра ссылки
ПолучитьАтрибут(<?>);

Синтаксис:
Форма.ПолучитьАтрибут(ИмяРеквизита)
Назначение:
Возвращает ссылку на элемент формы.
Параметры:
ИмяРеквизита - строковое выражение, содержащее идентифика-тор элемента формы, как он задан в Конфигураторе.
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.



Ув. VOFKA,


похоже что это сработает! Только не пойму как получив ссылку на данный элемент, изменить его параметры - Видимость, Доступность, Значение...
Черкните пару строк примера.

ЗАРАНЕЕ БЛАГОДАРЕН!
Vofka
Наверное как-то так (не проверял):

Рекв = "Контрагенты";
РеквКонтрагенты = Форма.ПолучитьАтрибут(Рекв);
РеквКонтрагент.Видимость(0);
Игорь К
VOFKA - спасибо! Проверю и отпишусь...
Игорь К
Цитата(Игорь К @ 18.10.10, 11:45) необходимо зарегистрироваться для просмотра ссылки
VOFKA - спасибо! Проверю и отпишусь...



Ув. VOFKA,
попробовал вот такой код

ПолеНомерВарианта = Форма.ПолучитьАтрибут(ИмяПоля);
НомерВарианта = ПолеНомерВарианта.ПорядковыйНомер();

Но к сожаления ссылка на элемент диалога не генерируется - элемент диалога не обнаруживается :-(

Помогите разобраться почему.
Vofka
Что говорит отладчик по поводу:
Форма.ПолучитьАтрибут("ИмяРеквизита")

?
Игорь К
Цитата(Vofka @ 18.10.10, 18:48) необходимо зарегистрироваться для просмотра ссылки
Что говорит отладчик по поводу:
Форма.ПолучитьАтрибут("ИмяРеквизита")

?



Я написал:

ИмяПоля = "НомерВариантаДляБронирВFS"+Строка(НомерСлоя);
Форма.ПолучитьАтрибут(ИмяПоля);


Ответ отладчика

Форма.ПолучитьАтрибут(ИмяПоля) = НеизвестныйОбъект
Vofka
Ну а если просто напрямую:
Форма.ПолучитьАтрибут("НомерВариантаДляБронирВFS1")

?

И точно есть атрибут с именем "НомерВариантаДляБронирВFS"+Строка(НомерСлоя) ?
Игорь К
Цитата(Vofka @ 18.10.10, 19:29) необходимо зарегистрироваться для просмотра ссылки
Ну а если просто напрямую:
Форма.ПолучитьАтрибут("НомерВариантаДляБронирВFS1")

?

И точно есть атрибут с именем "НомерВариантаДляБронирВFS"+Строка(НомерСлоя) ?



Поменяля имя реквизита.

Форма.ПолучитьАтрибут("ПолеВводаПеречисл");

Результат тот-же Неизвестный объект

Может со свойствами что-то не так - посмотрите картинки в аттачменте (извинте пока немогу приаттачить их сюда)


Кстати реквизит диалога с которым работаем имеет тип ПЕРЕЧИСЛЕНИЕ. Это что-то меняет?
Vofka
А так:
Рекв = "Контрагенты";
РеквКонтрагенты = ПолучитьАтрибут(Рекв);
РеквКонтрагент.Видимость(0);

?

Картинку непосредственно сюда приаттачить нельзя. Можно её куда-то залить, а здесь в специальных тегах разместить ссылку wink.gif
Игорь К
Цитата(Vofka @ 18.10.10, 20:19) необходимо зарегистрироваться для просмотра ссылки
А так:
Рекв = "Контрагенты";
РеквКонтрагенты = ПолучитьАтрибут(Рекв);
РеквКонтрагент.Видимость(0);

?

Картинку непосредственно сюда приаттачить нельзя. Можно её куда-то залить, а здесь в специальных тегах разместить ссылку wink.gif



В таком варианте ругается не отладчик а синтаксис-контроль - говорит

Функция не обнаружена (ПолучитьАтрибут)
alex1c
ДокМД = Метаданные.Документ(ТекущийДокумент().Вид());
Для Ин = 2 По ДокМД.РеквизитТабличнойЧасти() Цикл
ИдРекв = ДокМД.РеквизитТабличнойЧасти(Ин).Идентификатор;
Форма.ПолучитьАтрибут(ИдРекв).Видимость(0);
КонецЦикла;

Этот вариант работает точно.
Обращаю внимание Форма.ПолучитьАтрибут(ИдРекв).Видимость(0);
Игорь К
Цитата(alex1c @ 18.10.10, 20:56) необходимо зарегистрироваться для просмотра ссылки
ДокМД = Метаданные.Документ(ТекущийДокумент().Вид());
Для Ин = 2 По ДокМД.РеквизитТабличнойЧасти() Цикл
ИдРекв = ДокМД.РеквизитТабличнойЧасти(Ин).Идентификатор;
Форма.ПолучитьАтрибут(ИдРекв).Видимость(0);
КонецЦикла;

Этот вариант работает точно.
Обращаю внимание Форма.ПолучитьАтрибут(ИдРекв).Видимость(0);



Так я работаю с реквизитаим диалога на форме обоработки. Или я по молодости чего-то не понял?
Vofka
Пробовал только что:
Форма.ПолучитьАтрибут("Контрагент").Видимость(0);

все ок.
Vofka
необходимо зарегистрироваться для просмотра ссылки пример
Игорь К
Цитата(Vofka @ 18.10.10, 21:30) необходимо зарегистрироваться для просмотра ссылки
Пробовал только что:
Форма.ПолучитьАтрибут("Контрагент").Видимость(0);

все ок.


Я проверил - у меня тоже работает.
Возможно я некорректно сформулировал вопрос в начале.

Моя задача прочитать выбранное в этом реквизите значение.
Vofka
Форма.ПолучитьАтрибут("ДатаОплПодпись").Заголовок()
Игорь К
Цитата(Vofka @ 18.10.10, 21:51) необходимо зарегистрироваться для просмотра ссылки
Форма.ПолучитьАтрибут("ДатаОплПодпись").Заголовок()


Я вас уже наверное задолбал :-)
Я работаю с реквизитом диалога, тип которого ПЕРЕЧИСЛЕНИЕ. И мне нужно получить .ПорядковыйНомер()

Строка
НомерВариантаДляБронирВFS1.ПорядковыйНомер();
Дает нормальный результат

На строку
Форма.ПолучитьАтрибут("НомерВариантаДляБронирВFS1").ПорядковыйНомер();
выдает ошибку:
Поле агрегатного объекта не обнаружено (ПорядковыйНомер)
Ardi
подозреваю что нужен какой-нибудь formex.dll
"Методы для последовательного перебора и перебора по условию всех реквизитов формы "
необходимо зарегистрироваться для просмотра ссылки
Игорь К
Цитата(Ardi @ 18.10.10, 23:31) необходимо зарегистрироваться для просмотра ссылки
подозреваю что нужен какой-нибудь formex.dll
"Методы для последовательного перебора и перебора по условию всех реквизитов формы "
необходимо зарегистрироваться для просмотра ссылки


Похоже вы правы. А примерчик какой нибудь можно?


ЗАРАНЕЕ БЛАГОДАРЕН!
dmiter
ПолучитьАтрибут - используется не для редактирования значения атрибута, а для управление контролом, в котором находится данный реквизит. Если необходимо получить значение по текстовому представлению реквизита, то необходимо использовать какой-либо парсер. Одним из примеров такихпарсеров может быть функция Шаблон, хотя 1С и не советует использовать данную функцию в режиме вычисления значения.

Что-то типа Шаблон("НомерВариантаДляБронирВFS1.ПорядковыйНомер()")
alex1c
Метод ПорядковыйНомер() используется для: субконто, перечислений и плана счетов. У вас какой тип значения элемента?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.