Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как изменить доступность реквизита в Управляемой Форме

Как изменить доступность реквизита в Управляемой Форме
Я
   Saari
 
21.07.20 - 09:32
Есть форма документа, в которой среди прочих есть два реквизита: ФИО (ссылка на справочник) и реквизит чекбокс (галка).
Нужно сделать так, что если в реквизите ФИО указано значение из справочника, то чекбокс доступен. Если реквизит ФИО пустой (пустая ссылка), то чекбокс недоступен.
Сделал так:
В процедуре ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) реквизита ФИО написал:
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Элементы.РеквизитЧекБокс.Доступность = Истина;
Иначе
Элементы.РеквизитЧекБокс.Доступность = Ложь;
КонецЕсли;
ЭтаФорма.ОбновитьОтображениеДанных();

Не работает, доступность реквизита чекбокс не изменяется.
Подскажите, пожалуйста.
   acht
 
1 - 21.07.20 - 09:34
перенеси в ПриИзменении
   Saari
 
2 - 21.07.20 - 09:37
(1) Пробовал. Но там не получается проверить заполненность элемента формы.
Подскажете как?
   acht
 
3 - 21.07.20 - 09:46
(2) >  не получается проверить заполненность элемента формы
Значение реквизита уже установлено в результат изменения.
   Saari
 
4 - 21.07.20 - 09:51
(3) При открытии документа реквизит ФИО пустой. Я выбираю значение на форме. Попадаю в процедуру "ПриИзменении()". И в ней значение ЗначениеЗаполнено(ФИО) ложь. Т.е. реквизит документа не заполнен, а заполнен реквизит формы.
Как проверить на заполненность реквизита формы?
   acht
 
5 - 21.07.20 - 09:53
(4) Показывай код, скриншоты, всетакое
   acht
 
6 - 21.07.20 - 09:54
Если у тебя два реквизита с одним именем - формы и документа, то ты ССЗБ
   Saari
 
7 - 21.07.20 - 10:01
(5)  В процедуре "ПриИзменении()"
Если ЗначениеЗаполнено(ФИО) Тогда
 Элементы.РеквизитЧекБокс.Доступность = Истина;
Иначе
 Элементы.РеквизитЧекБокс.Доступность = Ложь;
КонецЕсли;
В этом случае ЗначениеЗаполнено(ФИО) всегда Ложь

Если так:
Если ЗначениеЗаполнено(Элементы.ФИО) Тогда
 Элементы.РеквизитЧекБокс.Доступность = Истина;
Иначе
 Элементы.РеквизитЧекБокс.Доступность = Ложь;
КонецЕсли;
то выдает ошибку: Проверка мутабельных значений на заполненность не поддерживается
   Saari
 
8 - 21.07.20 - 10:02
(6) имя одно (у реквизита формы и документа), но обращение к ним индивидуальное.
   acht
 
9 - 21.07.20 - 10:28
Что такое "ФИО" - отдельный ревизит формы или реквизит шапки документа? Если второе, то к нему надо обращатся через основной рекивизит формы, который у тебя скорей всего называется "Объект".
   Saari
 
10 - 21.07.20 - 10:39
(9) УРА! Заработало!
В процедуре ПриИзменении() написал так:
Если ЗначениеЗаполнено(Объект.ФИО) Тогда
 Элементы.РеквизитЧекБокс.Доступность = Истина;
Иначе
 Элементы.РеквизитЧекБокс.Доступность = Ложь;
КонецЕсли;

acht, СПАСИБО огромное!
   D_E_S_131
 
11 - 21.07.20 - 10:49
(10) По правильному:

&НаКлиенте
Процедура ПриОткрытии()

   НастроитьДоступКГалке();

КонецПроцедуры

&НаКлиенте
Процедура ФИОПриИзменении()

   НастроитьДоступКГалке();

КонецПроцедуры

&НаКлиенте
Процедура НастроитьДоступКГалке()

  // твой код


КонецПроцедуры
   Saari
 
12 - 21.07.20 - 10:54
(11) Спасибо!
   acht
 
13 - 21.07.20 - 10:55
(11) Если совсем, по правильному, то:

&НаСервере
Процедура ПриСозданииНаСервере()

    УстановитьДоступностьРеквизитов(ЭтотОбъект);

КонецПроцедуры

&НаКлиенте
Процедура ФИОПриИзменении()

    УстановитьДоступностьРеквизитов(ЭтотОбъект);

КонецПроцедуры

&НаКлиентеНеСервереБезКонтекста
Процедура УстановитьДоступностьРеквизитов(Форма)

    Форма.Элементы.РеквизитЧекБокс.Доступность = ЗначениеЗаполнено(Форма.ЗначениеЗаполнено(Объект.ФИО) )

КонецПроцедуры

Минус один вызов сервера при открытии.
   acht
 
14 - 21.07.20 - 10:58
^Форма.Элементы.РеквизитЧекБокс.Доступность = ЗначениеЗаполнено(Форма.Объект.ФИО);

ессно
   SadrArt
 
15 - 21.07.20 - 11:22
(0) О_О с таким стажем, и такой вопрос??!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.