Почему поле флажка в табличной части обработки становится недоступным после встраивания в конфигурацию 1С?

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

При разработке внешних обработок в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда решение идеально работает как внешний файл (через меню «Файл» — «Открыть»), но после интеграции в состав конфигурации (в дерево метаданных) или при регистрации в справочнике «Дополнительные отчеты и обработки» интерфейс начинает вести себя иначе. Одна из самых типичных проблем — блокировка колонок табличной части (особенно булевских флажков «Отметка») и появление ошибок при программном изменении данных.

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

Причина 1: Разграничение прав доступа на уровне отдельных реквизитов

Первым делом проанализируем ситуацию с правами доступа. В системе 1С права (роли) имеют иерархическую и гранулярную структуру. Когда мы даем пользователю роль для работы с новой обработкой, часто мы ограничиваемся флажками «Просмотр» и «Использование» для самого объекта Обработка. Однако этого недостаточно для полноценной интерактивной работы с данными внутри неё.

Рассмотрим подробнее механизм работы прав:

  1. Право «Просмотр» на уровне объекта: позволяет пользователю увидеть обработку в интерфейсе и открыть её форму.
  2. Право «Редактирование» на уровне реквизитов: это критически важный момент. Для каждого реквизита табличной части (например, Отметка) в конфигураторе в окне настройки роли должен быть установлен флаг «Редактирование».
  3. Автоматическая блокировка: Если у роли стоит «Просмотр», но снято «Редактирование» на уровне конкретного поля метаданных, платформа 1С автоматически делает соответствующий элемент на форме (колонку) недоступным для изменения. При этом в свойствах самого элемента формы (в конфигураторе) флаг ТолькоПросмотр может быть выключен, но системное ограничение прав окажется приоритетнее.

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

Причина 2: Ошибки в программном коде при обходе строк

Разберем ситуацию, когда при попытке программно «проставить все флажки» возникает ошибка Поле объекта недоступно для записи (Отметка). Часто это происходит из-за некорректного использования методов работы с таблицей формы. Посмотрим на типичный ошибочный код:


&НаКлиенте
Процедура ОтметитьСтрокиНаКлиенте(ЗначениеОтметки)
    Для Каждого ТекСтрока Из Объект.ТаблицаДокументов Цикл
        ИдентификаторТекущейСтроки = ТекСтрока.ПолучитьИдентификатор();
        // Ошибка: метод ПроверитьСтроку ожидает саму строку или её индекс (в зависимости от контекста), 
        // но здесь часто путают типы данных
        Если Элементы.ТаблицаДокументов.ПроверитьСтроку(ИдентификаторТекущейСтроки) = Истина Тогда
            ТекСтрока.Отметка = ЗначениеОтметки;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

В данном примере, если у пользователя нет прав на редактирование реквизита Отметка, любая попытка присвоить ему значение (даже программно на клиенте) вызовет исключение. Однако здесь кроется и техническая ошибка использования метода ПроверитьСтроку.

Проанализируем правильный подход. Метод ПроверитьСтроку у элемента формы Таблица используется для определения того, попадает ли строка под текущие установленные пользователем фильтры (отборы) в интерфейсе. В этот метод нужно передавать именно объект строки коллекции данных формы.

Рассмотрим исправленный и оптимизированный пример кода:


&НаКлиенте
Процедура ОтметитьСтрокиПравильно(ЗначениеОтметки)
    
    // Перебираем коллекцию данных формы
    Для Каждого СтрТЧ Из Объект.ТаблицаДокументов Цикл
        
        // Проверяем, видна ли строка пользователю в данный момент (с учетом фильтров)
        // Метод возвращает Истина, если строка удовлетворяет условиям отбора
        Если Элементы.ТаблицаДокументов.ПроверитьСтроку(СтрТЧ) Тогда
            
            // Если права настроены верно, запись будет успешной
            Попытка
                СтрТЧ.Отметка = ЗначениеОтметки;
            Исключение
                Сообщить("Не удалось изменить строку: " + ОписаниеОшибки());
            КонецПопытки;
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Почему во внешнем файле «всё работало»?

Многих смущает тот факт, что запуск обработки через Файл - Открыть не вызывал проблем. Выясним причину этого различия. Когда обработка открывается как внешний файл, она работает в особом контексте. Часто (в зависимости от настроек безопасности) внешние файлы запускаются с более лояльными проверками прав метаданных, так как они не являются частью основной конфигурации. Как только вы добавляете объект в дерево метаданных (в состав конфигурации), он становится полноправным участником системы безопасности, и 1С начинает жестко проверять права на каждую ветку: Обработка -> Табличная часть -> Реквизит.

В конфигурациях на базе УТ 11.5 (ERP, КА) также стоит учитывать влияние Библиотеки стандартных подсистем (БСП). Если вы регистрируете обработку через «Дополнительные отчеты и обработки», обратите внимание на следующие моменты:

Диагностика проблемы: пошаговый план

Если вы столкнулись с недоступностью поля, пройдите по следующим шагам вместе с нами:

  1. Проверка прав через код: Чтобы окончательно убедиться, что дело в правах, выполните в отладчике или через консоль кода следующую команду под проблемным пользователем:

    ПравоДоступа("Редактирование", Метаданные.Обработки.ИмяВашейОбработки.ТабличныеЧасти.ИмяТЧ.Реквизиты.Отметка)

    Если возвращается Ложь — проблема в конфигураторе, в настройках роли.
  2. Проверка свойств элемента формы: Убедитесь, что у самой таблицы на форме не стоит флаг ТолькоПросмотр и у колонки Отметка свойство Доступность установлено в значение Истина, а ТолькоПросмотр — в Ложь.
  3. Условное оформление: Проверьте вкладку «Условное оформление» в свойствах формы. Иногда там создаются правила, которые блокируют доступ к полям при определенных условиях (например, если заполнено какое-то другое поле).
  4. Связь с функциональными опциями: Если ваш реквизит или вся обработка зависят от функциональной опции (ФО), которая отключена, поле также будет недоступно. Проверьте свойство Состав функциональных опций в метаданных.

Резюме: В большинстве случаев проблема «некликабельного» флажка во встроенной обработке решается простым включением права «Редактирование» для реквизитов табличной части в используемой роли. Всегда проверяйте права на самом нижнем уровне метаданных — уровне реквизитов.

← На главную