![]() |
|
Запретить изменение строки в табличной части | ☑ | ||
---|---|---|---|---|
0
kolts23381
06.05.25
✎
13:48
|
Добрый день. Нужно в заказе клиента в УТ 11, для определенных строк(в зависимости от варианта обеспечения), запретить изменение. Не знаю как правильно сделать - через условное оформление или может добавить вторую таблицу и разделить отображение данных через отбор строк - не уверен что будет отрабатывать как надо. Там еще есть в командной панели кнопки. Кто-то делал подобное?
|
|||
1
Мультук
гуру
06.05.25
✎
14:01
|
(0)
>>Там еще есть в командной панели кнопки И там их много. А есть еще доп.обработки таб.частей, которым внезапно может быть абсолютно пофиг на ваши запреты. Хотите запретить трогать строки с "Отгружено" ?. Благое дело (с) Вариант 1 Софткор С помощью УО и событий запрещаем удалять и менять строки с неким "Вариант обеспечения" Проблема: Против волшебных кнопочек типовых и не очень -- не поможет. Вариант 2 Хардкор Перед записью пишем запрос и сравниваем тч. "Товары" из "Объект.Товары", с "ссылка.Товары" Проблема: если в документе 500 строк, пользователь поменял 200, а "неправильных" из них всего 5 может вызвать негативную реакцию. Нюансы Кнопка "Закрыть заказ" должна всё же закрывать заказ Пользователь (например с полными правами) должен всё же редактировать заказ игнорируя запреты |
|||
2
kolts23381
06.05.25
✎
14:09
|
Насчет "отгружено" вы правы - то что нужно. Тоже думал перед записью проверять, но тоже есть нюансы. Наверное придется посчитать хэш строк по всем данным(чтоб не сломалось при изменении набора колонок в тч) у нужных строк у записанных данных. И у измененных данных тоже посчитать хеши у этих строк. В записываемых данных набор хешей должен быть не меньше чем у записанных. Как такой вариант?
|
|||
3
Мультук
гуру
06.05.25
✎
14:53
|
(2)
Ну какие хэши строк ? {лень} |
|||
4
Волшебник
06.05.25
✎
15:35
|
(3) Такие хэши, которые можно сравнивать на больше/меньше. Волшебные
|
|||
5
kolts23381
06.05.25
✎
16:24
|
Создаёшь массив, туда вставляешь данные каждой колонки ТЧ в качестве элемента. Далее сериализуешь массив, через значениевстрокувнутр. Далее получаешь хеш этой строки
|
|||
6
kolts23381
06.05.25
✎
17:25
|
Набросал такую функцию
Процедура ПолучитьХэши(КоллекцияСтрок,КоллекцияКолонок,массивХешей) Для Каждого ТекСтрока Из КоллекцияСтрок Цикл массивДанных = Новый массив; Для каждого ТекКолонка Из КоллекцияКолонок Цикл Если ТекКолонка.Имя = "Ссылка" Тогда Продолжить; КонецЕсли; массивДанных.Добавить(ТекСтрока[ТекКолонка.Имя]); КонецЦикла; хеширование = новый ХешированиеДанных(ХешФункция.SHA1); хеширование.Добавить(ЗначениеВСтрокуВнутр(массивДанных)); массивХешей.Добавить(хеширование.ХешСумма); КонецЦикла; КонецПроцедуры Перед записью объекта получаю массив хешей нужных строк для записанного объекта(если объект не новый) и текущего объекта. Затем проверяю что все элементы массива хешей для записанного объекта присутствуют в массиве для текущего объекта. |
|||
7
Волшебник
06.05.25
✎
17:26
|
(6) чушь собачья
|
|||
8
crasler
06.05.25
✎
18:35
|
(0) проще сделать подписку перед записью и восстанавливать нужные строки
|
|||
9
lucky_
06.05.25
✎
18:45
|
(1) "Вариант 2 Хардкор"
хардкодить надо так: Проц ТЧПриИзменении() СтандартнаяОбработко = ложь; Если ТекСтрока.ТекущиеДанные.Закрыт Тогда Сообщить("Уходите, я вас не знаю.") Возврат; КонецЕсли; КонецПроц; |
|||
10
olegves
06.05.25
✎
19:49
|
при записи проверять на неудаление нужных строк (я так понял, это по какому-то условию).
Если условие не выполнено, ругаться на удаляемую строку и отказать записать |
|||
11
Волшебник
модератор
06.05.25
✎
20:53
|
(9) Соблюдайте лесенку программного кода!
|
|||
12
Maniac
08.05.25
✎
05:00
|
(9) только это не при изменение а при начале редактирования
|
|||
13
Maniac
08.05.25
✎
05:00
|
или перед началом изменения
|
|||
14
Сти
08.05.25
✎
06:35
|
(12) а вот с "а есть еще доп.обработки таб.частей, которым внезапно может быть абсолютно пофиг на ваши запреты." из (1) как?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |