Почему недоступна колонка в табличной части 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В практике разработки на платформе 1С:Предприятие часто возникает неприятная ситуация: вам необходимо сделать колонку или отдельную ячейку в табличной части документа доступной для редактирования, но стандартное изменение свойств не дает желаемого результата. Вы устанавливаете свойство Доступность в значение Истина в конфигураторе, дублируете эту настройку программно при открытии формы, но поле все равно остается заблокированным для ввода.

Давайте подробно разберем, почему так происходит, какие скрытые механизмы платформы влияют на поведение элементов формы и как по шагам диагностировать и решить эту проблему.

1. Проверяем свойство «Редактирование текста»

Это одна из самых неочевидных причин блокировки ввода, с которой как раз и столкнулся автор темы. Если для колонки табличной части (которая является полем ввода) отключен флаг «Редактирование текста», пользователь не сможет ввести туда данные с клавиатуры.

При этом ячейка визуально может выглядеть активной, а при двойном клике значение может открываться в отдельном маленьком окне (всплывающая подсказка или окно расшифровки). Чтобы исправить это, выполним следующие действия:

  1. Откроем форму документа в конфигураторе.
  2. Найдем нужную колонку в дереве элементов формы.
  3. Откроем палитру свойств этого элемента.
  4. В разделе «Реализация» или через поиск найдем свойство «Редактирование текста» и установим для него флаг (значение Истина).

2. Анализируем «Условное оформление» формы

Условное оформление — мощный инструмент управляемых форм, который часто переопределяет свойства элементов «на лету». Если в условном оформлении прописано правило, отключающее доступность или устанавливающее только просмотр для вашей колонки, то любые программные присвоения вида Элементы.ИмяКолонки.Доступность = Истина в процедуре ПриСозданииНаСервере или ПриОткрытии будут проигнорированы.

Проверим настройки условного оформления:

  1. В конфигураторе откроем форму и перейдем на вкладку «Условное оформление» (в правом нижнем углу или в свойствах самой формы).
  2. Проанализируем список правил. Ищем правила, в которых в колонке «Оформляемые поля» указана наша колонка табличной части, а в колонке «Оформление» заданы параметры Доступность = Ложь или ТолькоПросмотр = Истина.

Если оформление задается программно, найдем в модуле формы строки работы с коллекцией УсловноеОформление. Код инициализации такого правила обычно выглядит следующим образом:


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

// Отключение доступности через оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

Если такое правило найдено, отредактируем его условия или временно отключим для проверки.

3. Разграничиваем «Доступность» и «Только просмотр»

Разработчики часто путают или объединяют понятия доступности и режима просмотра. На самом деле это два разных свойства, которые накладываются друг на друга. Если у элемента Доступность = Истина, но при этом установлено ТолькоПросмотр = Истина, редактирование будет заблокировано.

Проверим три уровня установки свойства «Только просмотр»:

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


// Разрешаем редактирование таблицы и колонки, даже если форма "Только просмотр"
ЭтаФорма.ТолькоПросмотр = Ложь;
Элементы.ИмяТабличнойЧасти.ТолькоПросмотр = Ложь;
Элементы.ИмяКолонки.ТолькоПросмотр = Ложь;

// А для остальных элементов формы принудительно возвращаем "Только просмотр" при необходимости

4. Влияние прав доступа и ролей

Если у текущего пользователя в его наборе ролей нет права на «Редактирование» (или даже на «Просмотр») конкретного реквизита табличной части, платформа жестко блокирует этот элемент на форме. При этом любые попытки сделать элемент доступным из кода будут молча проигнорированы системой.

Чтобы проверить этот момент, выполним следующие шаги:

  1. В конфигураторе найдем наш документ, откроем свойства реквизита табличной части.
  2. Перейдем на вкладку «Права» и проверим, у каких ролей есть доступ к этому реквизиту.
  3. Убедимся, что у пользователя, под которым мы тестируем программу, активна роль с правом изменения данного реквизита.

5. Блокировка реквизитов механизмами БСП

В типовых конфигурациях (таких как УТ 11, ERP, КА, УНФ) активно используется Библиотека стандартных подсистем (БСП). В ней присутствует подсистема «Запрет редактирования реквизитов объектов». Она автоматически блокирует ключевые поля и табличные части в уже записанных или проведенных документах.

Если документ подключен к этой подсистеме, то при открытии формы БСП программно устанавливает элементам режим только чтения. Чтобы обойти это поведение:


Процедура ПриОпределенииНастроекБлокировкиРеквизитов(ПараметрыИсключения) Экспорт
    ПараметрыИсключения.РедактируемыеРеквизиты.Добавить("ИмяТабличнойЧасти.ИмяКолонки");
КонецПроцедуры

6. Наследование свойств родительских групп

Элементы формы организованы в виде иерархического дерева. Элемент вашей колонки может находиться внутри группы колонок, которая, в свою очередь, расположена на определенной странице панели.

Если у любой из родительских групп (родительских контейнеров) на форме установлено свойство Доступность = Ложь или ТолькоПросмотр = Истина, то это ограничение автоматически унаследуют все вложенные элементы, включая вашу колонку. Проанализируем дерево элементов формы и убедимся, что все родительские группы верхнего уровня доступны.

7. Динамические обработчики событий в коде

Иногда доступность колонки отключается динамически в процессе работы пользователя с таблицей. Стоит проанализировать события самой таблицы:

Применяя этот комплексный подход и последовательно исключая каждый из возможных факторов, мы гарантированно найдем причину блокировки элемента управления и сможем вернуть колонке табличной части долгожданную доступность.

← На главную