Как вывести новую колонку в таблице формы 1С: пользователю и разработчику

· 9 мин

Содержание

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

Способ зависит от того, что вы хотите и кто вы. Пользователь включает колонку через Ещё → Изменить форму…. Разработчик добавляет колонку реквизита в Конфигураторе и перетаскивает её на форму. Если конфигурация типовая и на поддержке, правка идёт через расширение.

Какой способ вам нужен

Сначала определите, где лежат данные, которые вы хотите увидеть. От этого зависит весь дальнейший путь.

СитуацияСпособНужен Конфигуратор
Поле уже есть в документе или справочнике, но не показано в спискеНастройка формы в режиме 1С:ПредприятиеНет
В таблице документа нужна колонка из табличной части, которая скрытаНастройка формыНет
Данных в таблице нет совсем, нужен новый реквизитКонфигуратор: реквизит и колонка формыДа
Конфигурация типовая, на поддержкеРасширение конфигурацииДа
Колонку надо создавать по условию во время работы формыКод в модуле формыДа
Что у вас сейчас?

Что такое табличное поле и откуда в нём колонки

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

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

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

Колонка из режима 1С:Предприятие

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

Включить скрытую колонку

  1. Откройте нужную форму: список документов, справочника или сам документ с табличной частью.
  2. В командной панели формы нажмите Ещё и выберите Изменить форму….
  3. В открывшемся окне настройки найдите в дереве элементов вашу таблицу и раскройте её.
  4. Отметьте галочкой нужные колонки. Те, что скрыты, стоят без отметки.
  5. Нажмите ОК и проверьте результат на форме.

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

Настройка сохраняется для вашего пользователя. У коллег форма останется прежней. Чтобы вернуть всё как было, в том же окне воспользуйтесь командой установки стандартных настроек.

Поменять порядок колонок

В том же окне порядок колонок меняется стрелками «вверх» и «вниз». Перетаскивание мышью тоже работает. Колонка, стоящая выше в дереве, на форме окажется левее.

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

Колонка в Конфигураторе

Здесь два случая: данные уже есть, и данных нет. Начните с первого.

Данные уже есть: вывести поле на форму

  1. Откройте форму объекта или списка в Конфигураторе.
  2. Перейдите на вкладку Элементы и выделите нужную таблицу.
  3. Перетащите поле из вкладки Реквизиты на таблицу. Для табличной части раскройте её в дереве реквизитов и перетащите нужную колонку.
  4. Колонка появится в таблице. В её свойствах Путь к данным уже будет заполнен.

Для динамического списка набор доступных полей определяется запросом списка, поэтому сначала нужно добавить поле туда. В свойствах реквизита Список откройте настройку списка, проверьте основную таблицу и поля запроса. Если вы пишете произвольный запрос, добавьте нужное поле в его ВЫБРАТЬ.

Данных нет: создать колонку реквизита

Такая ситуация у реквизита формы типа «Таблица значений».

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

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

Обычная форма с табличным полем

В старых конфигурациях и внешних обработках встречаются обычные формы. Там табличное поле хранит колонки в собственной коллекции, и добавляются они в редакторе формы.

  1. Откройте форму в Конфигураторе и выделите табличное поле на макете.
  2. В палитре свойств найдите свойство Колонки и откройте его редактор.
  3. Добавьте колонку, задайте ей имя и заголовок.
  4. В свойстве колонки Данные укажите поле источника, например колонку табличной части.
  5. Проверьте работу формы в режиме отладки.

Такие формы работают только в толстом клиенте. Если вы добавляете новую функциональность, лучше сразу делать управляемую форму: она открывается и в тонком клиенте, и в веб-клиенте.

Вычисляемые колонки и расширение конфигурации

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

Вычисляемая колонка в списке

В динамическом списке проще всего посчитать значение в самом запросе: вернуть из запроса выражение с псевдонимом, а потом вывести этот псевдоним колонкой. Например, цена, умноженная на количество, или разница между двумя датами. Запрос выполняется на сервере, и сортировка по такой колонке работает.

Вычисляемая колонка в таблице значений

Для таблицы значений значение считается кодом, когда вы заполняете таблицу. Либо вы используете событие, которое срабатывает при выводе строк. Выбор простой: если расчёт один раз заполняет строку, считайте при заполнении. Если значение зависит от других строк и должно обновляться, ищите события таблицы.

Если конфигурация на поддержке

Менять типовую форму напрямую нельзя без снятия с поддержки. Расширение даёт другой путь.

  1. Создайте расширение конфигурации (поддерживается с платформы 8.3.6).
  2. Заимствуйте нужную форму в расширение.
  3. В заимствованной форме добавьте реквизит и колонку, расположите её на форме.
  4. Заполните колонку обработчиком события формы в расширении.
  5. Загрузите расширение в базу и отдельным шагом обновите конфигурацию базы данных.

Расширение подключают в рабочую базу после проверки на копии. Ошибка в расширении может сломать открытие формы у всех пользователей.

Колонка кодом: когда состав таблицы зависит от условий

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

&НаСервере
Процедура ДобавитьКолонкуСкидка()

	// Новый реквизит: колонка таблицы значений ТаблицаТовары
	НовыеРеквизиты = Новый Массив;
	НовыеРеквизиты.Добавить(Новый РеквизитФормы("Скидка",
		Новый ОписаниеТипов("Число"), "ТаблицаТовары", "Скидка, %"));
	ИзменитьРеквизиты(НовыеРеквизиты);

	// Элемент формы, привязанный к новому реквизиту
	Колонка = Элементы.Добавить("ТаблицаТоварыСкидка",
		Тип("ПолеФормы"), Элементы.ТаблицаТовары);
	Колонка.Вид = ВидПоляФормы.ПолеВвода;
	Колонка.ПутьКДанным = "ТаблицаТовары.Скидка";

КонецПроцедуры

Три замечания по этому примеру.

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

Ширина, формат и вид колонки

Когда колонка уже появилась, её обычно приходится дорабатывать. Все настройки лежат в свойствах элемента колонки.

ЗадачаГде настраивается
Заголовок колонкиСвойство Заголовок
Ширина в символахСвойство Ширина
Растянуть по доступной ширинеСвойство Растягиваться по горизонтали
Формат числа или датыСвойство Формат, например ЧДЦ=2 для двух знаков после запятой
ВыравниваниеГоризонтальное положение в группе свойств колонки
Запретить правкуСвойство Только просмотр
Скрыть в зависимости от условияСвойство Видимость, меняется кодом

Пара практических моментов:

  • 📏 Не задавайте ширину в пикселях «на глаз». Она задаётся в символах и зависит от шрифта. Для сумм достаточно 12–15 символов.
  • 🔢 Для денежных колонок задайте ЧДЦ=2, иначе копейки могут «потеряться».
  • 📅 Для даты хватит формата ДФ=dd.MM.yyyy.
  • 👁 Если колонка нужна не всем, управляйте Видимость из кода при открытии формы, а не создавайте две формы.

Колонка не появилась: что проверить

Типичные причины, из-за которых результат не совпал с ожиданием:

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

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

Можно ли добавить колонку в список документов без программиста?
Да, если нужное поле уже есть в данных списка. Откройте Ещё → Изменить форму… и включите колонку. Если поля нет, без доработки не обойтись.
Почему у коллеги колонки нет, хотя я её добавил?
Настройка формы через режим 1С:Предприятие сохраняется только для вашего пользователя. Остальным нужно включить колонку так же либо доработать форму в Конфигураторе.
Нужно ли после добавления колонки в Конфигураторе обновлять базу?
Если вы добавили только элемент на форму, достаточно перезапустить базу. Если создали новый реквизит табличной части, потребуется обновить конфигурацию базы данных.
Как поменять порядок колонок?
В окне настройки формы переставьте колонки стрелками, в Конфигураторе перетащите элемент на вкладке Элементы.
Можно ли добавить колонку в стандартную типовую форму?
Напрямую можно, но конфигурация снимется с поддержки. Правильный путь — расширение, оно не мешает обновлениям.
Чем табличное поле отличается от таблицы формы?
Табличное поле — элемент обычных форм. В управляемых формах его роль выполняет элемент «Таблица» с колонками-полями.