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

Доступность реквизита

Автор Mro, 24 авг 2016, 15:01

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

Mro

Цитата: SGIRG от 24 авг 2016, 16:31
Процедура МатериалыИспользованиеПриИзменении(Элемент)
    Элементы.МатериалыМатериал.Доступность = Элементы.Материалы.ТекущиеДанные.Использование;
КонецПроцедуры


Так работает, большое спасибо!

Только теперь такой момент. Если я поставил галочку в поле "Использование",поле "Материал" стало доступно, выбрал материал. Потом вдруг гипотетически понял, что не хочу использовать материал - убираю галочку, поле "Материал" становится недоступно для ввода, но сохраняет значение. Как сделать так, чтобы при снятии галочки в поле "Использование" очищалось значение поля "Материал"?

SGIRG


Процедура МатериалыИспользованиеПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
    Элементы.МатериалыМатериал.Доступность = ТекущиеДанные.Использование;
    Если НЕ ТекущиеДанные.Использование Тогда
        ТекущиеДанные.Материал = ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка");
    КонецЕсли;
КонецПроцедуры

Немного откорректировал процедуру

Нажимайте "Спасибо", так приятнее))
Ничего не знаю, но иногда могу произнести праведную чушь)

Mro

Цитата: SGIRG от 24 авг 2016, 16:50

Процедура МатериалыИспользованиеПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
    Элементы.МатериалыМатериал.Доступность = ТекущиеДанные.Использование;
    Если НЕ ТекущиеДанные.Использование Тогда
        ТекущиеДанные.Материал = ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка");
    КонецЕсли;
КонецПроцедуры

Немного откорректировал процедуру

Нажимайте "Спасибо", так приятнее))

И нажал и напишу - спасибо.)

А вот такой вопрос - если у меня в форме документа будет несколько таких пар полей - необходимо прописывать такую процедуру для каждого поля с галочкой, или можно как-то массово это сделать для всех элементов?
Добавлено: 24 авг 2016, 18:16


Например, есть табличная часть "Материалы" документа с Реквизитами "Использование" (булево), "Материал"(СправочникСсылка), "Окраска" (булево), "Цвет"(СправочникСсылка)

Можно как-то объединить те-же самые действия в одной процедуре, или необходимо прописывать процедуру ПриИзменении для каждого булево?


SGIRG

В данном случае, лучше для каждого действия написать свою процедуру.
Ничего не знаю, но иногда могу произнести праведную чушь)

Mro

Цитата: SGIRG от 25 авг 2016, 15:21
В данном случае, лучше для каждого действия написать свою процедуру.

а если у меня таких пар, например, штук 20?)




SGIRG

Попробуйте так:
&НаКлиенте
Процедура МатериалыРеквизитТЧПриИзменении(Элемент, ИмяБлокируемогоРеквизита)
ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
Пометка = ТекущиеДанные[Прав(Элемент.Имя, СтрДлина(Элемент.Имя)-9)];
Элементы["Материалы"+ИмяБлокируемогоРеквизита].Доступность = Пометка;
Если НЕ Пометка Тогда
    ТекущиеДанные[ИмяБлокируемогоРеквизита] = Неопределено;
КонецЕсли;
КонецПроцедуры


Естественно потребуется для каждой колонки объявить событие "ПриИзменении" и внутри обработчиков событий обращаться к универсальной процедуре:
МатериалыРеквизитТЧПриИзменении(Элемент, "Здесь пишите имя реквизита который блокируется при изменении пометки");
но этот код будет работать только при условии совпадения имен реквизитов ТЧ и Элементов формы
Ничего не знаю, но иногда могу произнести праведную чушь)

Mro

с точки зрения ресурсоемкости будет разница, если я пропишу 20 раз процедуру ПриИзменении для каждого поля, или буду обращаться к универсальной?

SGIRG

Разница от универсального кода лишь в сокращении количества однотипных процедур и как следствие экономия в целых "пары десятков" килобайт кода
Ничего не знаю, но иногда могу произнести праведную чушь)

Mro

Цитата: Mro от 24 авг 2016, 17:04Процедура МатериалыИспользованиеПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
    Элементы.МатериалыМатериал.Доступность = ТекущиеДанные.Использование;
    Если НЕ ТекущиеДанные.Использование Тогда
        ТекущиеДанные.Материал = ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка");
    КонецЕсли;
КонецПроцедуры

Немного запутался - а если мне нужно сделать такое-же ограничение, но не для реквизитов табличной части формы, а для реквизитов формы без табличной части?

Например есть форма документа "ФормаЭлемента", в которой нет табличной части, но есть реквизиты "НеобходимостьЦвета" (булево) и "Цвет" (СправочникСсылка). Соответственно наличие галочки в "НеобходимостьЦвета" управляет доступностью "Цвет"

Добавлено: 29 авг 2016, 13:56


Я так понимаю, что основная соль в том, что теперь это не поля табличной части,а поля формы.

SGIRG

Цитата: Mro от 29 авг 2016, 13:25
Я так понимаю, что основная соль в том, что теперь это не поля табличной части,а поля формы.
заполнять информацию нужно не в поля формы а в документ, либо реквизит формы (не знаю как у Вас там организовано)
В свойствах элемента формы, где прописан путь к данным, туда и запихивайте значения.
Ничего не знаю, но иногда могу произнести праведную чушь)

Теги:

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

Рейтинг@Mail.ru

Поиск