8.2 Изменить программно ячейку табличной части #672473


#0 by artist
Дано: Документ, с табличной частью, с колонками "Количество" и "Цена" Хочу, что бы для строк, у которых Количество = 0 невозможно было изменить цену (что бы ячейка цена в строке с Количество = 0 было недоступно). Сразу приходит на ум процедура ПередНачаломИзменения, и она прекрасно работает, на уже существующих строках. Если добавить новую строку, указать Количество = 0 и нажать энтер - процедура ПередНачаломИзменения не срабатывает, и поле Цена становится доступным для редактирования. Что можно ещё предпринять?
#1 by artist
Всё, разобрался, надо в КоличествоПриИзмении и в ПриАктивизацииСтроки добавить проверку на количество, и в зависимости результата устанавливать Элементы.Цена.ТолькоПросмотр... Или это я через зад гланды оперирую?
#2 by kosts
Для установки отдельным ячейкам только просмотр хорошо использовать событие ПриПолученииДанных.
#3 by Cube
Ты что-то прогнал - нельзя установить ТолькоПросмотр ячейке, можно установить только колонке... Поэтому в ПриПолученииДанных не взлетит...
#4 by Cube
Рекомендации п.1.2: Тема должна отражать суть сообщения.
#5 by SeraFim
всё верно, именно так
#6 by kosts
ОформлениеЯчейки.ТолькоПросмотр (CellAppearance.ReadOnly) ТолькоПросмотр (ReadOnly) Использование: Чтение и запись. Описание: Тип: Булево. Определяет возможность редактирования ячейки.
#7 by Cube
А слона-то я и не заметил :) Беру свои слова обратно и плюсую за вариант .
#8 by Лодырь
А формы то какие кстати?
#9 by Лодырь
Если управляемые, есть хороший вариант изменения всего через условное оформление формы.
#10 by hhhh
вариант тормозной получается. При активизации строки в 10 раз быстрее.
#11 by kosts
Задержки тут будут микроскопические. Другое дело, что нужно проверить как это будет работать, когда количество будут изменять на ноль и наоборот с нуля на число.
#12 by Cube
Что в 10 раз быстрее? Говори конкретно. Пример: алгоритм вычисления доступности поля слишком сложен и занимает 1 секунду. На экране отображается 10 строк ТЧ. Вариант "ПриАктивизацииСтроки" затормозит открытие документа на 1 секунду и будет тормозить КАЖДЫЙ переход по строкам на 1 секунду. То есть, каждый клик мышкой будет стоить 1 секунду простоя. Вариант "ПриПолученииДанных" затормозит открытие документа на 10 секунд, но не будет тормозить при переходе по строкам. Каждый для себя выбирает сам, что ему предпочтительней...
#13 by hhhh
ну например, пользователь открыл документ просто посмотреть и не собирается никакие цены редактировать. А у него при этом во всех 20-ти ячейках только просмотр установится. Оно ему надо? А Вариант "ПриАктивизацииСтроки" запустится в любом случае. В обоих вариантах.
#14 by Cube
Ну... Если так рассуждать: например, пользователю нужно посмотреть комментарий в счете на оплату. Приходится включать компьютер, открывать 1С, искать счет, открывать счет... Оно ему надо? :)
#15 by hhhh
в твоем варианте он должет открыть 1000 счетов, в одном из них посмотреть комментарий. В остальных не смотреть, закрывать глаза ладошкой.
#16 by artist
Забыл сказать - управляемая форма. Можно в этом месте поподробнее. ЗЫ Я так понимаю в УФ нет события при получении данных? Это только для обычных форм, или я не туда гляжу?
#17 by Лодырь
Пример установки доступности ячеек таблицы в зависимости от реквизита. Аналогично делается раскраска.
#18 by artist
Спасибищи, сейчас попробую. Я так понимаю через это оформление можно и цветом недоступные ячейки подсветить? (или наоборот доступные, не принципиально)
#19 by artist
А как точно определить имя поля? В одном случае у тебя через точку: "ДеревоОшибок.Тип" А в другом сплошняком: "ДеревоОшибокПометка" Так и задумано или это опечатка?
#20 by artist
+...в отладчике как-нибудь можно посмотреть - какие строки попали в условие?
#21 by Feunoir
Попробуй всё это настроить прямо в конфигураторе. В свойствах формы. Там есть редактор условного оформления. Может оттуда будет проще.
#22 by artist
Так гораздо понятнее, спасибо! Правильно ли я понимаю, что к реквизиту ТЧ через точку не обратишься в отборе? т.е. Объект.Товары.Номенклатура.НужныйРеквизит.
#23 by Лодырь
Обратишся. Смотри пример, там есть обращение ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОшибок.Тип"); Тут тип это реквизит дерева. Если же речь идет не о отборе а о оформляемых полях, то там обращение через точку недопустимо.
#24 by artist
Я так понимаю ДеревоОшибок - у тебя таблица, а Тип - это реквизит(колонка) таблицы, поэтому смело обращаешься. А вот ДеревоОшибок.Тип.Код - уже нельзя сделать.
#25 by Лодырь
Угу нельзя. Хотя это еще спорно. Возможно тут могут выручить внешние функции, но не проверял.
#26 by Feunoir
Это (тонко)клиентский контекст. Там нет реквизитов у ссылок. Можешь просто ради интереса в тонком клиенте посмотреть как выглядит значение любого ссылочного типа на клиенте. Много вопросов отпадет (или наоборот, возникнет :) )
#27 by artist
Ок. Итого. Если надо делать доступность просто по реквизиту ТЧ - можно использовать УсловноеОформление. Если нужен отбор по реквизиту реквизита ТЧ - то только через ПриАктивизацииСтроки... :(
#28 by Лодырь
Используй динамические списки ) И вытащи реквизит наверх )
#29 by Feunoir
ПриАктивизацииСтроки не сработает при редактировании ячейки. То есть вошли в строку - количество нулевое, цену менять нельзя. Поменяли количество на не нулевое, но событие не сработает, поэтому цену всё-равно менять нелья. Придется строку переступать. Я вытаскиваю эти реквизиты в скрытый служебный реквизит ТЧ. Надо только корректно его заполнять при чтении и создании документа. Динамический список по табличной части нового документа? Научи, плз.
#30 by Cube
И всё-таки ПриПолученииДанных лучше...
#31 by Feunoir
Одна только проблема, в управляемых формах нет такого события :)
#32 by Лодырь
Можно извратиться, добавить табличку в реквизиты формы, читать ее при открытии (для нового пустая),и записывать ее при записи.
#33 by Feunoir
Ну уж нет. У меня есть пара объектов, в которых мне пришлось такую табличную часть делать. Нет ни малейшего желания повторять :) А так вообще-то добавляется реквизит в ТЧ формы (!), этот реквизит заполняется в событиях при чтении объекта, после записи и в момент изменения реквизита, к которому эти поля относятся. Ну а потом по этому реквизиту уже делай что хочешь, хоть отбирай, хоть сортируй, хоть оформление накладывай.
#34 by Cube
Сегодня не мой день :)
#35 by Лодырь
Не спорю. Встречалось и такое. Однако все описанные нами способы все же скорее относятся к "вырезанию аппендицита через задницу". )
#36 by artist
А я ещё в КоличествоПриИзменении проверяю и устанавливаю ТолькоДоступность. В итоге связка ПриАктивизацииСтроки + ПриИзменении работает идеально. Я просто думал что в 8.2 есть более красивое решение. Как вариант - и делаем через УсловноеОформление, но ради такой маленькой задачи городить реквизит ТЧ не очень интересно...
#37 by Лодырь
Для относительно простых проверок решение вполне красивое. Для сложных - не очень ) Кстати, будь относительно сторожен с обвешиванием табличных частей сложными пересчетами и проверками, у меня почему то они кушают дохрена ресурсов.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С