Запретить редактирование ячейки в табличной части документа

1. Lllypuk 27.09.21 10:51 Сейчас в теме
Всем привет! Подскажите, необходимо заблокировать в табличной части ячейку от редактирования. Если в строке в поле "Производитель" при изменении ставиться "Тест" тогда нужно в этой строке заблокировать ячейку "Есть". За ранее спасибо!
Пока только выходит заблокировать полностью столбец "Есть".
По теме из базы знаний
Найденные решения
38. DBV 28.09.21 10:36 Сейчас в теме
(36) у меня отрабатывает на этой обработке
Прикрепленные файлы:
ВнешняяОбработкаБлокировкаПоляВТЧ.epf
viktor3d; +1 Ответить
41. DBV 28.09.21 11:26 Сейчас в теме
(40)
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТабЧастьЕстьОтвет.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтветИмпорт.Имя);
22. soft_wind 27.09.21 15:12 Сейчас в теме
вот простенький пример выборочной доступности поля в ТЧ в зависимости от значения соседнего поля
Прикрепленные файлы:
ВнешняяОбработкаБлокировкаПоляВТЧ.epf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DBV 27.09.21 11:00 Сейчас в теме
(1) Через условное оформление можно, что то типа такого

Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТабличнаяЧастьЕсть.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть.Производитель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = "Тест"; 
		
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Показать
9. DBV 27.09.21 12:13 Сейчас в теме
(2)
Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтвет.Имя);
	
	МассивОтбора = Новый Массив;
	МассивОтбора.Добавить(Справочники.Производители.ПустаяСсылка);
	МассивОтбора.Добавить(Справочники.Производители.НайтиПоНаименованию("No name"));
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.этлПроизводитель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
	ОтборЭлемента.ПравоеЗначение = МассивОтбора;
		
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Показать
35. spacecraft 27.09.21 18:11 Сейчас в теме
(1) добавить колонку на форме, в которой хранить булев тип для ТолькоПросмотр.
При Изменении и выборе нужной ссылки, устанавливать в колонку ТолькоПросмотр Истина.
В УО использовать эту колонку для отбора.
3. soft_wind 27.09.21 11:03 Сейчас в теме
необходимо обрабатывать два события вашей ТЧ
1.ПередНачаломИзменения - проверяете поле Производитель и блокируете или нет поле Есть
2.ПриИзменении - поля Производитель по новому значению блокируете или нет поле Есть
(бред какой-то)
5. Lllypuk 27.09.21 11:15 Сейчас в теме
(3)Это понятно. Делаю я вот так:
Если НаименованиеПроизводителя = "No name" Тогда
	        Элементы.ТоварыЕстьОтвет.ТолькоПросмотр = Истина;
КонецЕсли;

Но так блокирует весь столбец, как мне заблочить ячейку?
6. Lllypuk 27.09.21 11:29 Сейчас в теме
(4)Я бы с радостью, но я пробовал , у меня поле "Производитель" это справочник, в нем элементы, а мне нужен один элемент из него и указать не получается (( он в условном оформлении пишет (Пустая ссылка) и все.
7. Lllypuk 27.09.21 11:34 Сейчас в теме
(6) Там ошибка в конце "@" поставил, вместо ", но оно и без " " не работает и с " " не работает
Прикрепленные файлы:
8. soft_wind 27.09.21 12:06 Сейчас в теме
(5)
так я же написал блокировать или не блокировать, надо так

Если НаименованиеПроизводителя = "No name" Тогда
            Элементы.ТоварыЕстьОтвет.ТолькоПросмотр = Истина;
Иначе
            Элементы.ТоварыЕстьОтвет.ТолькоПросмотр = Ложь;
КонецЕсли;

или так, одной командой

Элементы.ТоварыЕстьОтвет.ТолькоПросмотр = НаименованиеПроизводителя = "No name";

Показать
10. Lllypuk 27.09.21 13:39 Сейчас в теме
(8) Правильно, так же и я делаю, блокирует весь столбец!!! а надо ячейку в текущей строке
11. DBV 27.09.21 13:58 Сейчас в теме
(10) так а чем не устраивает Условное оформление?
12. Lllypuk 27.09.21 14:09 Сейчас в теме
(11) Я попробовал, на сервере, в событии "При изменении". Сперва ругалось на эту строчку "МассивОтбора.Добавить(Справочники.Производители.ПустаяСсылка);" , ее я удалил, все заработало, но ничего не выполняется
13. DBV 27.09.21 14:13 Сейчас в теме
(12) не надо при изменении, условное оформление добавляй в событии "ПриСозданииНаСервере"

Есть ещё вариант, добавить условное оформление интерактивно, но лучше сделать программно
14. DBV 27.09.21 14:14 Сейчас в теме
(13) а ещё неправильно написано

МассивОтбора.Добавить(Справочники.Производители.ПустаяСсылка());

Скобки забыл
15. Lllypuk 27.09.21 14:36 Сейчас в теме
(14)
МассивОтбора.Добавить(Справочники.Производители.ПустаяСсылка());


Сделал, работает. Но снова блокирует весь столбец. Даже если во второй строчке стоит не "No name"
Прикрепленные файлы:
16. DBV 27.09.21 14:43 Сейчас в теме
(15) Другие обработчики убрали? Изначально поле доступно?

С массивом оказывается не работает, надо изменить на список значений

Элемент = УсловноеОформление.Элементы.Добавить();

ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтвет.Имя);

СписокОтбора = Новый СписокЗначений;
СписокОтбора.Добавить(Справочники.Производители.ПустаяСсылка());
СписокОтбора.Добавить(Справочники.Производители.НайтиПоНаименованию("No name"));

ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.этлПроизводитель");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = СписокОтбора;

Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Показать
17. Lllypuk 27.09.21 14:48 Сейчас в теме
(16) Да, убрал. Поле доступно всегда
18. DBV 27.09.21 14:55 Сейчас в теме
(17) Закомментируйте код условного оформления, и проверьте, поле доступно?

Так то условное оформление должно работать,
мне кажется в другом месте где то блокируется поле
19. Lllypuk 27.09.21 15:00 Сейчас в теме
(18) Доступно. Снова блокирует весь столбец
20. DBV 27.09.21 15:02 Сейчас в теме
(19) В порядке бреда спрошу, какие значения в поле "Производитель"?
21. Lllypuk 27.09.21 15:09 Сейчас в теме
(20) В 1 = Artic, во 2 = Russia
Я меняю одно из них на No name и блокируется весь столбец
23. DBV 27.09.21 15:16 Сейчас в теме
(21) Если при удалении кода с условным оформлением поле доступно, а при добавлении столбец недоступен,
то даже не знаю, в чем причина.

У меня все отрабатывает как надо
22. soft_wind 27.09.21 15:12 Сейчас в теме
вот простенький пример выборочной доступности поля в ТЧ в зависимости от значения соседнего поля
Прикрепленные файлы:
ВнешняяОбработкаБлокировкаПоляВТЧ.epf
24. Lllypuk 27.09.21 16:06 Сейчас в теме
(22) Сделал у себя. У меня правда поле "Есть ответ" ЧекБокс, но работает! когда схожу с поля где "No name" то оно как бы становиться глазом видно что можно редактировать, но когда обратно хочешь поставить галочку то не ставит.
А когда стоишь на поле которое нельзя редактировать то и нижние показывает что нельзя, но когда перейдешь то становиться можно. Я хз как это поправить, но пойдёт. C фото думаю понятнее будет
Это и нужно было! Спасибо огромное!!!!
Прикрепленные файлы:
25. DBV 27.09.21 16:19 Сейчас в теме
(24) а теперь попробуйте удалить все строки в Тч, словите ошибку
26. soft_wind 27.09.21 16:24 Сейчас в теме
(25) блин, ну это же пример, всего две строчки! понятно в рабочем исполнении там там пяток проверок надо навтыкать!

экий вы формалист, или педант?
27. DBV 27.09.21 16:27 Сейчас в теме
(26) зачем делать через обработчики событий, если можно УО,
просто у автора изначально где то блокируется поле, поэтому не работает УО,

ваш код сработал, потому что он снимает ТолькоПросмотр

имхо, выглядит не очень с чек боксами, пользователи не поймут, я так понимаю, что блокируется весь столбец
28. Lllypuk 27.09.21 16:39 Сейчас в теме
(27) Давайте еще раз попробуем через УО, мне тоже интересно. Я вроде везде всё выключил
30. DBV 27.09.21 16:44 Сейчас в теме
(28) поиграйтесь с его обработкой, чтобы понять как работает УО. В данный момент не могу написать код
29. soft_wind 27.09.21 16:41 Сейчас в теме
31. Lllypuk 27.09.21 16:52 Сейчас в теме
(29) Да, в том и дело что поле Наименование это строка, и там есть пункт в условии "Содержит" , а у меню никчёмный "Справочник" и я там не могу указать "No name", там нету в условии "Содержит".
Вот что я могу:
Прикрепленные файлы:
32. soft_wind 27.09.21 17:13 Сейчас в теме
так справочник по плюсику разворачивается и выбираете его реквизит
Спр.Наименование Содержит "No name"
33. soft_wind 27.09.21 17:20 Сейчас в теме
34. soft_wind 27.09.21 17:30 Сейчас в теме
тогда программно установить правое значение
(вообще должны быть доступны предопределенные элементы справочника, если заданы)

вот пример с колонкой Валюта, у вас справочник Валюты есть? тогда должно сработать, ну или код смотрите
Прикрепленные файлы:
ВнешняяОбработкаБлокировкаПоляВТЧ.epf
36. Lllypuk 28.09.21 10:11 Сейчас в теме
(34)Вроде все сделал как у Вас, но не отрабатывает, так и открыт для редактирования

	лкЭлементУО = этаформа.УсловноеОформление.Элементы[0];
	лкОтбор = лкЭлементУО.Отбор.Элементы[0];
	лкОтбор.ПравоеЗначение = Справочники.Производители.НайтиПоНаименованию("No name");
Прикрепленные файлы:
38. DBV 28.09.21 10:36 Сейчас в теме
(36) у меня отрабатывает на этой обработке
Прикрепленные файлы:
ВнешняяОбработкаБлокировкаПоляВТЧ.epf
viktor3d; +1 Ответить
39. Lllypuk 28.09.21 11:00 Сейчас в теме
(38) Спасибо огромное) По вашему методу сделал, все пашет как часы из Швейцарии))!!!!
40. Lllypuk 28.09.21 11:24 Сейчас в теме
(38) Подскажите пожалуйста, а как еще одну ячейку добавить только для просмотра, начал делать так:

ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтвет.Имя);
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтветИмпорт.Имя);

но тогда и первая строчка не взлетает
41. DBV 28.09.21 11:26 Сейчас в теме
(40)
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТабЧастьЕстьОтвет.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЕстьОтветИмпорт.Имя);
42. Lllypuk 28.09.21 11:31 Сейчас в теме
(41) Спасибо огромное! работает!
43. DBV 28.09.21 11:36 Сейчас в теме
(42) полезно будет прочитать

Условное оформление на примере

там в принципе хорошо описано
37. soft_wind 28.09.21 10:33 Сейчас в теме
а сам пример работает?

а код в форме добавили?
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	//установка оформления
	лкЭлементУО = этаформа.УсловноеОформление.Элементы[0];
	лкОтбор = лкЭлементУО.Отбор.Элементы[0];
	лкОтбор.ПравоеЗначение = Справочники.Валюты.НайтиПоКоду("643");
	
КонецПроцедуры
Показать
44. polukaroff 3 05.04.24 17:47 Сейчас в теме
Че огород городить

&НаКлиенте
Процедура ТЧПриАктивизацииЯчейки(Элемент)
	Если Элемент.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
    Если Элемент.ТекущиеДанные.Контрагент.Пустая() Тогда    
         Элементы.ТЧСумма.ТолькоПросмотр = Ложь;
    Иначе
         Элементы.ТЧСумма.ТолькоПросмотр = Истина;
    КонецЕсли;

КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот