Как вывести новую колонку в таблице формы 1С: пользователю и разработчику
Содержание
Чаще всего «добавить колонку» путают с «создать реквизит». В списке документов нужной колонки нет, и кажется, что её надо программировать. Но если поле в объекте уже есть, колонка включается за минуту, без Конфигуратора и без прав разработчика. Программировать нужно, когда данных в таблице действительно нет.
Способ зависит от того, что вы хотите и кто вы. Пользователь включает колонку через Ещё → Изменить форму…. Разработчик добавляет колонку реквизита в Конфигураторе и перетаскивает её на форму. Если конфигурация типовая и на поддержке, правка идёт через расширение.
Какой способ вам нужен
Сначала определите, где лежат данные, которые вы хотите увидеть. От этого зависит весь дальнейший путь.
| Ситуация | Способ | Нужен Конфигуратор |
|---|---|---|
| Поле уже есть в документе или справочнике, но не показано в списке | Настройка формы в режиме 1С:Предприятие | Нет |
| В таблице документа нужна колонка из табличной части, которая скрыта | Настройка формы | Нет |
| Данных в таблице нет совсем, нужен новый реквизит | Конфигуратор: реквизит и колонка формы | Да |
| Конфигурация типовая, на поддержке | Расширение конфигурации | Да |
| Колонку надо создавать по условию во время работы формы | Код в модуле формы | Да |
Ещё → Изменить форму…. Конфигуратор не понадобится.Что такое табличное поле и откуда в нём колонки
В управляемых формах (8.3 с интерфейсом «Такси») на форме стоит элемент «Таблица». Он связан с данными: либо с табличной частью объекта, либо с динамическим списком, либо с реквизитом формы типа «Таблица значений». Колонки таблицы — это отдельные элементы формы, каждый привязан к полю данных через свойство «Путь к данным».
Отсюда главное правило. Колонка на форме и поле в данных — это две разные вещи. Можно иметь поле в базе и не показывать его на форме. Можно показать колонку, у которой нет поля в данных, но тогда она будет пустой.
Термин «Табличное поле» как объект относится к обычным формам: они работают в режиме толстого клиента и встречаются в старых конфигурациях и во внешних обработках. Там у табличного поля есть собственная коллекция колонок, и редактируется она в окне свойств элемента. В этой инструкции основной упор на управляемые формы, потому что в актуальных конфигурациях 8.3 они почти везде.
Колонка из режима 1С:Предприятие
Это самый короткий путь. Он не требует прав разработчика, хотя администратор мог закрыть возможность настройки формы для вашей роли.
Включить скрытую колонку
- Откройте нужную форму: список документов, справочника или сам документ с табличной частью.
- В командной панели формы нажмите
Ещёи выберитеИзменить форму…. - В открывшемся окне настройки найдите в дереве элементов вашу таблицу и раскройте её.
- Отметьте галочкой нужные колонки. Те, что скрыты, стоят без отметки.
- Нажмите
ОКи проверьте результат на форме.
Если нужного поля в дереве нет, посмотрите, нет ли в окне настройки кнопки добавления полей: там перечислены реквизиты, которые типовая форма не показывает. Кнопка может называться по-разному в зависимости от релиза.
Настройка сохраняется для вашего пользователя. У коллег форма останется прежней. Чтобы вернуть всё как было, в том же окне воспользуйтесь командой установки стандартных настроек.
Поменять порядок колонок
В том же окне порядок колонок меняется стрелками «вверх» и «вниз». Перетаскивание мышью тоже работает. Колонка, стоящая выше в дереве, на форме окажется левее.
Если нужного поля в списке нет, а кажется, что оно должно быть, проверьте, не отключена ли у списка какая-то часть. Для списков документов набор полей берёт динамический список: он отдаёт только те поля, которые есть в его запросе.
Колонка в Конфигураторе
Здесь два случая: данные уже есть, и данных нет. Начните с первого.
Данные уже есть: вывести поле на форму
- Откройте форму объекта или списка в Конфигураторе.
- Перейдите на вкладку
Элементыи выделите нужную таблицу. - Перетащите поле из вкладки
Реквизитына таблицу. Для табличной части раскройте её в дереве реквизитов и перетащите нужную колонку. - Колонка появится в таблице. В её свойствах
Путь к даннымуже будет заполнен.
Для динамического списка набор доступных полей определяется запросом списка, поэтому сначала нужно добавить поле туда. В свойствах реквизита Список откройте настройку списка, проверьте основную таблицу и поля запроса. Если вы пишете произвольный запрос, добавьте нужное поле в его ВЫБРАТЬ.
Данных нет: создать колонку реквизита
Такая ситуация у реквизита формы типа «Таблица значений».
- На вкладке
Реквизитывыделите реквизит с таблицей значений. - Вызовите контекстное меню и выберите
Добавить колонку реквизита. - Задайте имя колонки без пробелов, например
ОстатокНаСкладе, и тип. - Перетащите новую колонку на таблицу на вкладке
Элементы. - Заполните колонку данными в модуле формы, иначе она останется пустой.
Если речь о табличной части документа, а не о реквизите формы, колонкой становится новый реквизит табличной части в дереве объекта конфигурации. Он хранится в базе, поэтому после добавления потребуется обновить конфигурацию базы данных, а в рабочей базе это лучше делать при остановленной работе пользователей.
Обычная форма с табличным полем
В старых конфигурациях и внешних обработках встречаются обычные формы. Там табличное поле хранит колонки в собственной коллекции, и добавляются они в редакторе формы.
- Откройте форму в Конфигураторе и выделите табличное поле на макете.
- В палитре свойств найдите свойство
Колонкии откройте его редактор. - Добавьте колонку, задайте ей имя и заголовок.
- В свойстве колонки
Данныеукажите поле источника, например колонку табличной части. - Проверьте работу формы в режиме отладки.
Такие формы работают только в толстом клиенте. Если вы добавляете новую функциональность, лучше сразу делать управляемую форму: она открывается и в тонком клиенте, и в веб-клиенте.
Вычисляемые колонки и расширение конфигурации
Простая колонка показывает значение поля. Часто нужно другое: сумма, остаток, текст по условию. Хранить такое в базе незачем.
Вычисляемая колонка в списке
В динамическом списке проще всего посчитать значение в самом запросе: вернуть из запроса выражение с псевдонимом, а потом вывести этот псевдоним колонкой. Например, цена, умноженная на количество, или разница между двумя датами. Запрос выполняется на сервере, и сортировка по такой колонке работает.
Вычисляемая колонка в таблице значений
Для таблицы значений значение считается кодом, когда вы заполняете таблицу. Либо вы используете событие, которое срабатывает при выводе строк. Выбор простой: если расчёт один раз заполняет строку, считайте при заполнении. Если значение зависит от других строк и должно обновляться, ищите события таблицы.
Если конфигурация на поддержке
Менять типовую форму напрямую нельзя без снятия с поддержки. Расширение даёт другой путь.
- Создайте расширение конфигурации (поддерживается с платформы 8.3.6).
- Заимствуйте нужную форму в расширение.
- В заимствованной форме добавьте реквизит и колонку, расположите её на форме.
- Заполните колонку обработчиком события формы в расширении.
- Загрузите расширение в базу и отдельным шагом обновите конфигурацию базы данных.
Расширение подключают в рабочую базу после проверки на копии. Ошибка в расширении может сломать открытие формы у всех пользователей.
Колонка кодом: когда состав таблицы зависит от условий
Бывает, что набор колонок зависит от настроек или прав. Тогда колонку создают программно, прямо при открытии формы. Для таблицы значений последовательность такая: сначала добавляют реквизит, потом элемент формы.
&НаСервере
Процедура ДобавитьКолонкуСкидка()
// Новый реквизит: колонка таблицы значений ТаблицаТовары
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Скидка",
Новый ОписаниеТипов("Число"), "ТаблицаТовары", "Скидка, %"));
ИзменитьРеквизиты(НовыеРеквизиты);
// Элемент формы, привязанный к новому реквизиту
Колонка = Элементы.Добавить("ТаблицаТоварыСкидка",
Тип("ПолеФормы"), Элементы.ТаблицаТовары);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "ТаблицаТовары.Скидка";
КонецПроцедуры
Три замечания по этому примеру.
ИзменитьРеквизитыперестраивает форму и работает заметно дольше обычных операций. Вызывайте её один раз за открытие формы.- Реквизиты, добавленные программно, не сохраняются между открытиями формы. Колонку надо создавать каждый раз.
- Таким способом колонку нельзя добавить в динамический список: у него состав полей задаёт запрос.
Ширина, формат и вид колонки
Когда колонка уже появилась, её обычно приходится дорабатывать. Все настройки лежат в свойствах элемента колонки.
| Задача | Где настраивается |
|---|---|
| Заголовок колонки | Свойство Заголовок |
| Ширина в символах | Свойство Ширина |
| Растянуть по доступной ширине | Свойство Растягиваться по горизонтали |
| Формат числа или даты | Свойство Формат, например ЧДЦ=2 для двух знаков после запятой |
| Выравнивание | Горизонтальное положение в группе свойств колонки |
| Запретить правку | Свойство Только просмотр |
| Скрыть в зависимости от условия | Свойство Видимость, меняется кодом |
Пара практических моментов:
- 📏 Не задавайте ширину в пикселях «на глаз». Она задаётся в символах и зависит от шрифта. Для сумм достаточно 12–15 символов.
- 🔢 Для денежных колонок задайте
ЧДЦ=2, иначе копейки могут «потеряться». - 📅 Для даты хватит формата
ДФ=dd.MM.yyyy. - 👁 Если колонка нужна не всем, управляйте
Видимостьиз кода при открытии формы, а не создавайте две формы.
Колонка не появилась: что проверить
Типичные причины, из-за которых результат не совпал с ожиданием:
- Колонка добавлена, но пустая. Не заполнен
Путь к данным, либо поле есть в таблице значений, но код его не заполняет. Проверьте путь целиком, включая имя таблицы. - В окне «Изменить форму» нет нужного поля. Источник данных формы его не отдаёт. Для списка это значит, что его нет в запросе динамического списка.
- Колонка добавлена в Конфигураторе, но у пользователя не видна. У него осталась своя настройка формы, она перекрывает вашу. Пусть сбросит настройки формы стандартной командой.
- Колонка в списке есть, но по ней нельзя сортировать. Сортировка зависит от поля в запросе. Вычисляемое выражение запроса сортируется, вычисленное в форме значение — нет.
- Ошибка при открытии формы после доработки. Обычно в обработчике осталась ссылка на элемент, которого нет. Проверьте, что имя элемента совпадает и колонка создана до первого обращения к ней.
- Форма в расширении не обновилась. После загрузки расширения нужно обновить конфигурацию базы данных и перезапустить клиент .
Частые вопросы
Можно ли добавить колонку в список документов без программиста?
Ещё → Изменить форму… и включите колонку. Если поля нет, без доработки не обойтись.Почему у коллеги колонки нет, хотя я её добавил?
Нужно ли после добавления колонки в Конфигураторе обновлять базу?
Как поменять порядок колонок?
Элементы.