Часто при разработке или доработке обработок и отчетов в среде 1С:Предприятие 8.3 на управляемых формах разработчики сталкиваются с неочевидным поведением интерфейса конфигуратора. Ситуация выглядит следующим образом: на форме визуально присутствует Поле табличного документа, в свойствах этого элемента установлены флаги Видимость и Доступность, однако при попытке кликнуть по ячейкам таблицы в окне редактора формы ничего не происходит. Мы видим сетку, но не можем ни ввести текст, ни объединить ячейки, ни изменить оформление.
Давайте разберем эту ситуацию подробно, выясним причину такого поведения платформы и изучим правильные методики работы с табличными документами в режиме управляемого приложения.
Проанализируем архитектуру управляемой формы. В отличие от обычных форм (версии 8.1 и 8.2), где элементы управления были жестко связаны с данными и часто позволяли прямое редактирование «на месте», управляемые формы реализуют строгую концепцию разделения данных и их визуального представления.
В нашем случае на форме есть два разных объекта:
Ширина, Высота, Заголовок и др.ТабличныйДокумент.Рассмотрим причину проблемы: когда мы пытаемся кликать по таблице в редакторе формы, мы взаимодействуем с Элементом формы. Но элемент — это лишь «рамка». Чтобы редактировать содержимое, нам нужно получить доступ к самому Реквизиту.
Выясним, как добраться до редактирования ячеек. Выполним следующие действия:
ТабличныйДокумент).После этого платформа откроет полноценное отдельное окно редактора табличного документа. Именно здесь мы можем свободно рисовать макет, объединять области, задавать имена ячеек и форматировать текст. Все изменения, внесенные в этом окне, будут сохранены внутри реквизита формы.
Рассмотрим альтернативный, более гибкий подход, который часто используют профессиональные разработчики. Вместо того чтобы хранить макет прямо внутри реквизита формы, мы можем использовать объект Макет самой обработки.
Проанализируем ситуацию: если мы зашиваем структуру таблицы в реквизит формы, нам сложно использовать этот же макет в других формах или процедурах. Правильнее создать макет в дереве метаданных обработки и программно выводить его в поле на форме при открытии.
Посмотрим на пример кода, который выполняет такую задачу:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем макет, созданный в дереве метаданных обработки
МакетОбъекта = Отчеты.МойОтчет.ПолучитьМакет("ОсновнойМакет");
// Получаем область из макета
ОбластьШапка = МакетОбъекта.ПолучитьОбласть("Шапка");
// Заполняем параметры, если они есть
ОбластьШапка.Параметры.ДатаОтчета = ТекущаяДата();
// Выводим область в реквизит формы (тип ТабличныйДокумент)
// РеквизитФормыТаблица - это имя вашего реквизита
РеквизитФормыТаблица.Очистить();
РеквизитФормыТаблица.Вывести(ОбластьШапка);
КонецПроцедуры
Используя этот метод, мы разделяем визуальное представление и логику заполнения данных, что является хорошим тоном в разработке на платформе 1С.
Если даже после перехода по ссылке «Открыть» в реквизитах вы не можете редактировать ячейки, проанализируем дополнительные факторы, которые могут блокировать доступ:
ТабличныйДокумент в палитре свойств реквизита проверьте флаг ТолькоПросмотр. Если он установлен в значение Истина, интерактивное редактирование будет ограничено.Защита. Если она включена, то редактирование ячеек невозможно, пока защита не будет снята программно или в свойствах.ТабличныйДокумент также добавлен в расширение. В противном случае платформа может блокировать изменение его структуры.Разберем еще один важный момент. Иногда разработчики путают Поле табличного документа и Таблицу формы (которая отображает списки или части объектов). Если ваша задача — показать статический отчет или форму для заполнения, используйте именно Поле табличного документа.
Для управления поведением этого поля в коде, используйте обращение к элементу формы для визуальных настроек:
// Пример управления визуальным состоянием элемента
Элементы.РеквизитФормыТаблица.ОтображатьСетку = Ложь;
Элементы.РеквизитФормыТаблица.ОтображатьЗаголовки = Ложь;
А для управления данными — обращение напрямую к реквизиту:
// Пример управления данными (содержимым)
РеквизитФормыТаблица.ФиксацияСверху = 2;
РеквизитФормыТаблица.Область("R1C1:R1C5").ЦветФона = WebЦвета.Золотистый;
Подведем итог: Недоступность редактирования ячеек в окне редактора управляемой формы — это не баг, а особенность проектирования интерфейсов в 1С. Основная работа с макетом должна происходить либо через гиперссылку «Открыть» в свойствах реквизита, либо путем загрузки внешнего макета из метаданных обработки. Применяя эти знания, мы сможем эффективно создавать сложные интерфейсы с использованием табличных документов.