|
8.2 Изменить программно ячейку табличной части | ☑ | ||
---|---|---|---|---|
0
artist
11.07.13
✎
02:36
|
Дано:
Документ, с табличной частью, с колонками "Количество" и "Цена" Хочу, что бы для строк, у которых Количество = 0 невозможно было изменить цену (что бы ячейка цена в строке с Количество = 0 было недоступно). Сразу приходит на ум процедура ПередНачаломИзменения, и она прекрасно работает, на уже существующих строках. Если добавить новую строку, указать Количество = 0 и нажать энтер - процедура ПередНачаломИзменения не срабатывает, и поле Цена становится доступным для редактирования. Что можно ещё предпринять? |
|||
1
artist
11.07.13
✎
02:44
|
Всё, разобрался, надо в КоличествоПриИзмении и в ПриАктивизацииСтроки добавить проверку на количество, и в зависимости результата устанавливать Элементы.Цена.ТолькоПросмотр...
Или это я через зад гланды оперирую? |
|||
2
kosts
11.07.13
✎
05:55
|
(0) Для установки отдельным ячейкам только просмотр хорошо использовать событие ПриПолученииДанных.
|
|||
3
Cube
11.07.13
✎
06:05
|
(2) Ты что-то прогнал - нельзя установить ТолькоПросмотр ячейке, можно установить только колонке...
Поэтому в ПриПолученииДанных не взлетит... |
|||
4
Cube
11.07.13
✎
06:07
|
(0) Рекомендации п.1.2: Тема должна отражать суть сообщения.
http://www.forum.mista.ru/rules.php |
|||
5
SeraFim
11.07.13
✎
06:09
|
(1) всё верно, именно так
|
|||
6
kosts
11.07.13
✎
06:10
|
(3)
ОформлениеЯчейки.ТолькоПросмотр (CellAppearance.ReadOnly) ОформлениеЯчейки (CellAppearance) ТолькоПросмотр (ReadOnly) Использование: Чтение и запись. Описание: Тип: Булево. Определяет возможность редактирования ячейки. |
|||
7
Cube
11.07.13
✎
06:17
|
(6) А слона-то я и не заметил :)
Беру свои слова обратно и плюсую за вариант (2). |
|||
8
Лодырь
11.07.13
✎
06:19
|
А формы то какие кстати?
|
|||
9
Лодырь
11.07.13
✎
06:23
|
Если управляемые, есть хороший вариант изменения всего через условное оформление формы.
|
|||
10
hhhh
11.07.13
✎
06:36
|
(7) вариант (2) тормозной получается. При активизации строки в 10 раз быстрее.
|
|||
11
kosts
11.07.13
✎
06:47
|
(10) Задержки тут будут микроскопические. Другое дело, что нужно проверить как это будет работать, когда количество будут изменять на ноль и наоборот с нуля на число.
|
|||
12
Cube
11.07.13
✎
06:51
|
(10) Что в 10 раз быстрее? Говори конкретно.
Пример: алгоритм вычисления доступности поля слишком сложен и занимает 1 секунду. На экране отображается 10 строк ТЧ. Вариант "ПриАктивизацииСтроки" затормозит открытие документа на 1 секунду и будет тормозить КАЖДЫЙ переход по строкам на 1 секунду. То есть, каждый клик мышкой будет стоить 1 секунду простоя. Вариант "ПриПолученииДанных" затормозит открытие документа на 10 секунд, но не будет тормозить при переходе по строкам. Каждый для себя выбирает сам, что ему предпочтительней... |
|||
13
hhhh
11.07.13
✎
07:00
|
(12) ну например, пользователь открыл документ просто посмотреть и не собирается никакие цены редактировать. А у него при этом во всех 20-ти ячейках только просмотр установится. Оно ему надо? А Вариант "ПриАктивизацииСтроки" запустится в любом случае. В обоих вариантах.
|
|||
14
Cube
11.07.13
✎
07:09
|
(13) Ну... Если так рассуждать: например, пользователю нужно посмотреть комментарий в счете на оплату. Приходится включать компьютер, открывать 1С, искать счет, открывать счет... Оно ему надо? :)
|
|||
15
hhhh
11.07.13
✎
07:16
|
(14) в твоем варианте он должет открыть 1000 счетов, в одном из них посмотреть комментарий. В остальных не смотреть, закрывать глаза ладошкой.
|
|||
16
artist
11.07.13
✎
07:58
|
(8)Забыл сказать - управляемая форма.
(9)Можно в этом месте поподробнее. ЗЫ Я так понимаю в УФ нет события при получении данных? Это только для обычных форм, или я не туда гляжу? |
|||
17
Лодырь
11.07.13
✎
08:03
|
(16) Пример установки доступности ячеек таблицы в зависимости от реквизита. Аналогично делается раскраска.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЭлементУО = УсловноеОформление.Элементы.Добавить(); ЭлементУО.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр",Истина); ЭлементУсловия =ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОшибок.Тип"); ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементУсловия.ПравоеЗначение = "К"; ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоОшибокПометка"); КонецПроцедуры |
|||
18
artist
11.07.13
✎
08:06
|
(17)Спасибищи, сейчас попробую.
Я так понимаю через это оформление можно и цветом недоступные ячейки подсветить? (или наоборот доступные, не принципиально) |
|||
19
artist
11.07.13
✎
08:17
|
(17)А как точно определить имя поля?
В одном случае у тебя через точку: "ДеревоОшибок.Тип" А в другом сплошняком: "ДеревоОшибокПометка" Так и задумано или это опечатка? |
|||
20
artist
11.07.13
✎
08:20
|
+(19)...в отладчике как-нибудь можно посмотреть - какие строки попали в условие?
|
|||
21
Feunoir
11.07.13
✎
08:25
|
(19) Попробуй всё это настроить прямо в конфигураторе. В свойствах формы. Там есть редактор условного оформления. Может оттуда будет проще.
http://i.imgur.com/T23Bkt6.png |
|||
22
artist
11.07.13
✎
08:32
|
(21)Так гораздо понятнее, спасибо!
Правильно ли я понимаю, что к реквизиту ТЧ через точку не обратишься в отборе? т.е. Объект.Товары.Номенклатура.НужныйРеквизит. |
|||
23
Лодырь
11.07.13
✎
08:35
|
(22) Обратишся. Смотри пример, там есть обращение
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОшибок.Тип"); Тут тип это реквизит дерева. Если же речь идет не о отборе а о оформляемых полях, то там обращение через точку недопустимо. |
|||
24
artist
11.07.13
✎
08:38
|
(23)Я так понимаю ДеревоОшибок - у тебя таблица, а Тип - это реквизит(колонка) таблицы, поэтому смело обращаешься.
А вот ДеревоОшибок.Тип.Код - уже нельзя сделать. |
|||
25
Лодырь
11.07.13
✎
08:41
|
(24) Угу нельзя. Хотя это еще спорно. Возможно тут могут выручить внешние функции, но не проверял.
|
|||
26
Feunoir
11.07.13
✎
08:42
|
(24) Это (тонко)клиентский контекст. Там нет реквизитов у ссылок. Можешь просто ради интереса в тонком клиенте посмотреть как выглядит значение любого ссылочного типа на клиенте. Много вопросов отпадет (или наоборот, возникнет :) )
|
|||
27
artist
11.07.13
✎
08:46
|
Ок. Итого.
Если надо делать доступность просто по реквизиту ТЧ - можно использовать УсловноеОформление. Если нужен отбор по реквизиту реквизита ТЧ - то только через ПриАктивизацииСтроки... :( |
|||
28
Лодырь
11.07.13
✎
08:48
|
(27) Используй динамические списки ) И вытащи реквизит наверх )
|
|||
29
Feunoir
11.07.13
✎
08:51
|
(27) ПриАктивизацииСтроки не сработает при редактировании ячейки. То есть вошли в строку - количество нулевое, цену менять нельзя. Поменяли количество на не нулевое, но событие не сработает, поэтому цену всё-равно менять нелья. Придется строку переступать. Я вытаскиваю эти реквизиты в скрытый служебный реквизит ТЧ. Надо только корректно его заполнять при чтении и создании документа.
(28) Динамический список по табличной части нового документа? Научи, плз. |
|||
30
Cube
11.07.13
✎
08:53
|
(27) И всё-таки ПриПолученииДанных лучше...
|
|||
31
Feunoir
11.07.13
✎
08:57
|
(30) Одна только проблема, в управляемых формах нет такого события :)
|
|||
32
Лодырь
11.07.13
✎
09:00
|
(29) Можно извратиться, добавить табличку в реквизиты формы, читать ее при открытии (для нового пустая),и записывать ее при записи.
|
|||
33
Feunoir
11.07.13
✎
09:08
|
(32) Ну уж нет. У меня есть пара объектов, в которых мне пришлось такую табличную часть делать. Нет ни малейшего желания повторять :)
А так вообще-то добавляется реквизит в ТЧ формы (!), этот реквизит заполняется в событиях при чтении объекта, после записи и в момент изменения реквизита, к которому эти поля относятся. Ну а потом по этому реквизиту уже делай что хочешь, хоть отбирай, хоть сортируй, хоть оформление накладывай. |
|||
34
Cube
11.07.13
✎
09:10
|
(31) Сегодня не мой день :)
|
|||
35
Лодырь
11.07.13
✎
09:14
|
(33) Не спорю. Встречалось и такое. Однако все описанные нами способы все же скорее относятся к "вырезанию аппендицита через задницу". )
|
|||
36
artist
11.07.13
✎
11:22
|
(29)А я ещё в КоличествоПриИзменении проверяю и устанавливаю ТолькоДоступность.
В итоге связка ПриАктивизацииСтроки + ПриИзменении работает идеально. Я просто думал что в 8.2 есть более красивое решение. Как вариант - (32) и делаем через УсловноеОформление, но ради такой маленькой задачи городить реквизит ТЧ не очень интересно... |
|||
37
Лодырь
11.07.13
✎
13:41
|
(36) Для относительно простых проверок решение вполне красивое. Для сложных - не очень ) Кстати, будь относительно сторожен с обвешиванием табличных частей сложными пересчетами и проверками, у меня почему то они кушают дохрена ресурсов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |