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

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

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

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

Различие между элементом формы и реквизитом данных

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

В нашем случае на форме есть два разных объекта:

  1. Элемент формы — это визуальное «окно» (виджет), которое отвечает за то, где и как на экране будет показана таблица. У него есть свойства Ширина, Высота, Заголовок и др.
  2. Реквизит формы — это объект в памяти (контейнер), который хранит саму структуру табличного документа (ячейки, шрифты, линии, параметры печати). Именно этот объект имеет тип ТабличныйДокумент.

Рассмотрим причину проблемы: когда мы пытаемся кликать по таблице в редакторе формы, мы взаимодействуем с Элементом формы. Но элемент — это лишь «рамка». Чтобы редактировать содержимое, нам нужно получить доступ к самому Реквизиту.

Пошаговое решение: доступ к редактированию через свойства реквизита

Выясним, как добраться до редактирования ячеек. Выполним следующие действия:

  1. Откроем редактор управляемой формы обработки.
  2. Обратим внимание на правую верхнюю часть окна редактора, где расположен список Реквизитов.
  3. Найдем в списке реквизит, который связан с нашим полем на форме (он будет иметь тип ТабличныйДокумент).
  4. Выделим этот реквизит мышкой и перейдем в его палитру свойств (нажмем F4).
  5. В списке свойств найдем пункт Настройка. Рядом с ним вы увидите гиперссылку «Открыть».
  6. Нажмем на эту ссылку.

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

Использование программного формирования документа

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

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

Посмотрим на пример кода, который выполняет такую задачу:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем макет, созданный в дереве метаданных обработки
    МакетОбъекта = Отчеты.МойОтчет.ПолучитьМакет("ОсновнойМакет");
    
    // Получаем область из макета
    ОбластьШапка = МакетОбъекта.ПолучитьОбласть("Шапка");
    
    // Заполняем параметры, если они есть
    ОбластьШапка.Параметры.ДатаОтчета = ТекущаяДата();
    
    // Выводим область в реквизит формы (тип ТабличныйДокумент)
    // РеквизитФормыТаблица - это имя вашего реквизита
    РеквизитФормыТаблица.Очистить();
    РеквизитФормыТаблица.Вывести(ОбластьШапка);
    
КонецПроцедуры

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

Проверка дополнительных ограничений

Если даже после перехода по ссылке «Открыть» в реквизитах вы не можете редактировать ячейки, проанализируем дополнительные факторы, которые могут блокировать доступ:

  1. Свойство «Только просмотр»: У самого объекта ТабличныйДокумент в палитре свойств реквизита проверьте флаг ТолькоПросмотр. Если он установлен в значение Истина, интерактивное редактирование будет ограничено.
  2. Защита табличного документа: Проверьте свойство Защита. Если она включена, то редактирование ячеек невозможно, пока защита не будет снята программно или в свойствах.
  3. Работа в расширении: Если вы создаете форму в расширении конфигурации, убедитесь, что реквизит типа ТабличныйДокумент также добавлен в расширение. В противном случае платформа может блокировать изменение его структуры.

Рекомендации по работе с элементами формы

Разберем еще один важный момент. Иногда разработчики путают Поле табличного документа и Таблицу формы (которая отображает списки или части объектов). Если ваша задача — показать статический отчет или форму для заполнения, используйте именно Поле табличного документа.

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


// Пример управления визуальным состоянием элемента
Элементы.РеквизитФормыТаблица.ОтображатьСетку = Ложь;
Элементы.РеквизитФормыТаблица.ОтображатьЗаголовки = Ложь;

А для управления данными — обращение напрямую к реквизиту:


// Пример управления данными (содержимым)
РеквизитФормыТаблица.ФиксацияСверху = 2;
РеквизитФормыТаблица.Область("R1C1:R1C5").ЦветФона = WebЦвета.Золотистый;

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

← На главную