Вкладка с таблицей на управляемой форме 1С: от реквизита до итогов

· 9 мин

Содержание

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

Всё делается в конфигураторе на вкладке «Элементы» редактора управляемой формы. Ниже порядок действий для платформы 8.3 с интерфейсом «Такси», затем настройка колонок, видимость, код и итоги.

Какой источник данных выбрать для таблицы

Сначала решите, откуда таблица возьмёт строки. От этого зависит, как вы её добавите.

ИсточникКогда подходитЧто учесть
Табличная часть объектаСтроки должны сохраняться в документе или справочникеДобавляется в метаданных объекта, на форме появляется в реквизитах Объект
Реквизит формы типа ТаблицаЗначенийВременный расчёт, сверка, предварительный просмотрДанные живут, пока открыта форма; заполнять надо кодом
Реквизит формы типа ДинамическийСписокПоказ выборки из базы с отбором и сортировкойСтроки не редактируются напрямую, запрос задают в настройках списка

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

Подготовка: табличная часть или реквизит формы

Если таблица должна храниться в объекте:

  1. Откройте объект в дереве конфигурации и перейдите на вкладку «Данные».
  2. Правой кнопкой по «Табличные части» → «Добавить», задайте имя, например Товары.
  3. Внутри табличной части добавьте реквизиты: Номенклатура, Количество, Цена, Сумма с нужными типами.

Если нужен временный набор строк, откройте форму, перейдите на вкладку «Реквизиты», добавьте реквизит и в свойстве «Тип» выберите ТаблицаЗначений. Колонки добавляйте через контекстное меню реквизита, команда добавления колонки реквизита.

Табличную часть не придётся добавлять в форму руками: перетащите её из списка реквизитов объекта в дерево элементов, и конфигуратор создаст поле таблицы с колонками.

Страница для таблицы на форме

Теперь создайте саму вкладку. В управляемой форме вкладки называются страницами и лежат внутри группы.

  1. На вкладке «Элементы» нажмите «Добавить» и выберите группу «Страницы». Если группа уже есть, пропустите шаг.
  2. Выделите группу и добавьте в неё «Страницу». Назовите её СтраницаТаблица.
  3. В свойстве «Заголовок» впишите текст вкладки, например «Таблица».
  4. Перетащите табличную часть (или реквизит формы) на страницу.

Дальше проверьте форму в режиме предприятия: запустите 1С и откройте документ. Вкладка должна появиться, а таблица на ней принимать новые строки.

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

Если вкладка не появилась в запущенной базе, проверьте, что конфигурация базы данных обновлена (в конфигураторе клавиша F7 или запуск через F5). Открытую форму закройте и откройте заново.

Несколько вкладок рядом с таблицей

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

Если таблица на вкладке кажется тесной, дайте странице горизонтальное растягивание, а таблице включите «Растягивать по вертикали». Тогда она займёт всё свободное место окна, а не высоту по умолчанию.

Настройка колонок и отображаемых данных

Выделите поле таблицы и откройте палитру свойств. Основное, что стоит задать сразу:

  • 📌 «Путь к данным» у колонки: какой реквизит строки она показывает. При перетаскивании из реквизитов он ставится автоматически.
  • 📝 «Заголовок» колонки: подпись, которую увидит пользователь. Короткая и без служебных слов.
  • 📏 «Ширина» и «Растягивать по горизонтали»: чтобы последняя колонка не оставляла пустое поле.
  • ✏️ «Только просмотр»: для расчётных колонок вроде суммы.
  • 🔢 «Формат», «Формат редактирования»: знаки после запятой, разделители разрядов.

Порядок колонок меняется перетаскиванием в дереве элементов. Группировка колонок («Группа колонок») нужна, когда под одним заголовком лежат две близкие по смыслу, например «Цена» и «Валюта».

У самой таблицы есть свойства, которые часто забывают:

  • «Командная панель»: что показывать вверху (добавить, копировать, изменить, удалить). Для таблицы-справки её можно отключить целиком.
  • «Только просмотр» на уровне таблицы: запрещает любые правки.
  • «Изменение состава строк»: если снять флажок, пользователь сможет править ячейки, но не добавлять и не удалять строки.
  • «Выбор строк» и «Режим выделения»: влияют на то, можно ли выделять сразу несколько строк для копирования.

Видимость и доступность вкладки и таблицы

Часто вкладка нужна не всем и не всегда. Ограничения делают тремя способами.

Свойство «Видимость» и «Доступность» в палитре. Снимите флажок «Видимость» у страницы, и вкладка пропадёт с формы. Это статика, одинаковая для всех.

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

Из кода. Самый гибкий вариант: видимость зависит от данных. Пример ниже в следующем разделе.

Разница между «Видимость» и «Доступность» простая. Невидимый элемент не отображается совсем. Недоступный виден, но серый, и пользователь не может с ним работать.

Управление таблицей из модуля формы

Откройте модуль формы (кнопка «Модуль» в редакторе). Допустим, вкладка СтраницаТаблица должна показываться, только если в документе заполнен контрагент:

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    Элементы.СтраницаТаблица.Видимость = ЗначениеЗаполнено(Объект.Контрагент);
КонецПроцедуры

Чтобы при открытии формы сразу показать нужную вкладку, используйте свойство группы страниц:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаТаблица;
КонецПроцедуры

Если таблица построена на реквизите формы ТаблицаЗначений, ей нужен код заполнения. Он выполняется на сервере:

&НаСервере
Процедура ЗаполнитьТаблицуНаСервере()
    Таблица.Очистить();
    Для Сч = 1 По 3 Цикл
        НоваяСтрока = Таблица.Добавить();
        НоваяСтрока.Наименование = "Позиция " + Формат(Сч, "ЧГ=0");
        НоваяСтрока.Количество = Сч * 10;
        НоваяСтрока.Цена = 150;
        НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
    КонецЦикла;
КонецПроцедуры

Здесь Таблица — имя реквизита формы, а Наименование, Количество, Цена, Сумма — его колонки. Для первой строки сумма получится 10 × 150 = 1500, для третьей 30 × 150 = 4500.

Работа с выбранной строкой идёт через Элементы.Таблица.ТекущиеДанные. Результат может быть Неопределено, если курсор стоит не на строке, поэтому проверяйте его перед обращением к полям.

Реакция на правку в ячейке: событие «ПриОкончанииРедактирования» у таблицы или «ПриИзменении» у колонки. В нём пересчитывают сумму строки.

Когда колонки заранее неизвестны, таблицу строят динамически: реквизиты добавляют методом ИзменитьРеквизиты, а поля элементов создают методом Элементы.Добавить. Это решение для редких случаев, обычная вкладка в нём не нуждается.

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

Команды и оформление строк

Командная панель таблицы по умолчанию даёт «Добавить», «Копировать», «Изменить», «Удалить» и перемещение строк. Свою команду добавляют в два шага: создайте команду на вкладке «Команды» формы, затем перетащите её в командную панель таблицы. Обработчик команды пишется в модуле формы на клиенте.

Для подсветки используйте «Условное оформление» формы. Оно настраивается без кода: выберите оформляемое поле (колонку), условие отбора и вид оформления, например красный текст для строк, где количество равно нулю. Условие считается платформой на сервере, поэтому лишних вызовов из клиента не создаёт.

Пример типичной настройки для колонки Количество:

  1. На вкладке «Условное оформление» добавьте строку.
  2. В «Оформляемых полях» выберите колонку таблицы.
  3. В отборе задайте Количество «Равно» 0.
  4. В оформлении задайте цвет текста.

Если в строке не хватает данных для расчёта, лучше заблокировать колонку условным оформлением («Доступность»), чем ловить пустые значения в коде.

Итоги в подвале таблицы

Итоговая сумма внизу таблицы нужна почти всегда. Есть два пути.

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

Ручной подсчёт в коде. Подходит, когда итог нужен в поле над таблицей или в заголовке вкладки. У коллекции данных формы есть метод Итог:

&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
    Объект.СуммаДокумента = Объект.Товары.Итог("Сумма");
КонецПроцедуры

Для реквизита формы такой же вызов выглядит как Таблица.Итог("Сумма"). Для трёх строк из примера выше результат 1500 + 3000 + 4500 = 9000.

Если нужны группировки и среднее вместо суммы, метод Итог не подойдёт. Тогда выгрузите колонки в ТаблицаЗначений на сервере и считайте нужное запросом или методами таблицы значений.

Вкладка с таблицей-выборкой из базы

Когда на вкладке нужен не ввод строк, а просмотр данных из базы, например последние заказы контрагента, берут реквизит формы типа ДинамическийСписок.

  1. На вкладке «Реквизиты» добавьте реквизит и выберите тип ДинамическийСписок.
  2. В его свойствах включите «Произвольный запрос» и задайте текст запроса или выберите основную таблицу.
  3. Перетащите реквизит на страницу: получится поле таблицы с колонками из запроса.
  4. Отбор по текущему контрагенту выставьте кодом через Список.Отбор.Элементы либо параметром запроса.

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

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

Частые ошибки и скорость работы таблицы

Типичные причины, почему вкладка или таблица ведёт себя не так, как ожидалось:

  • ❌ Таблица пустая, хотя данные есть. Колонки не связаны с реквизитами: проверьте «Путь к данным» у каждой.
  • ❌ Колонка не редактируется. Стоит «Только просмотр» на таблице или колонке либо недоступна сама страница.
  • ❌ Ошибка «Поле объекта не обнаружено» при заполнении. В коде название колонки не совпадает с именем реквизита; сверьте написание, особенно буквы «е» и «ё».
  • ❌ Вкладка исчезает после смены условия. Код выставил Видимость = Ложь, а возврат не предусмотрен.

По скорости работы. Большие таблицы тормозят не из-за вкладки, а из-за обращений к серверу из событий строки. Не вызывайте серверную процедуру в «ПриАктивизацииСтроки» без необходимости: она срабатывает при каждом перемещении курсора. Заполняйте таблицу одним серверным вызовом, а не построчно с клиента. Для выбора из справочника в колонке пользуйтесь быстрым выбором, а не запросом на каждую строку.

Проверка после добавления вкладки
Выполнено: 0 / 5

Частые вопросы

Чем страница отличается от группы страниц?
Группа страниц — контейнер с закладками, страница — одна закладка внутри неё. Таблицу кладут на страницу.
Можно ли поставить на вкладку несколько таблиц?
Да. На одной странице можно разместить любое число полей таблиц, например две табличные части друг под другом.
Как сделать вкладку видимой только администратору?
Через свойство «Просмотр» элемента с отметкой нужных ролей либо проверкой в коде, например через РольДоступна, при открытии формы.
Почему изменения формы не видны пользователям?
Конфигурацию нужно сохранить в хранилище или базу и обновить конфигурацию базы данных. Пользователи при следующем входе получат форму.
Можно ли добавить вкладку в типовую конфигурацию?
Технически да, но тогда придётся при каждом обновлении объединять изменения. Надёжнее делать это через расширение конфигурации, оно появилось в платформе 8.3.6.