Новая колонка в табличной части документа или справочника: от реквизита до отчёта
Содержание
Колонка в табличной части — это реквизит табличной части объекта метаданных. Добавляется он в Конфигураторе: Конфигурация → Документы (или Справочники) → ваш объект → Табличные части → ваша часть → Реквизиты → Добавить. Потом колонку нужно вывести на форму, и только после этого пользователь её увидит.
Сложность не в самом добавлении, а в трёх вещах: типовая конфигурация стоит на поддержке, старые строки в базе останутся пустыми, а в отчёты новая колонка сама не попадёт. Ниже каждый из этих случаев разобран отдельно. Все примеры — для платформы 8.3 с интерфейсом «Такси» и управляемыми формами.
Сначала решите: правим конфигурацию или делаем расширение
От этого зависит вся дальнейшая работа. Посмотрите, какая у вас конфигурация.
| Ситуация | Что делать |
|---|---|
| Самописная конфигурация, поддержки нет | Правите объект напрямую в Конфигураторе |
| Типовая (БП 3.0, ЗУП 3.1, УТ 11) на поддержке | Лучше расширение конфигурации; прямая правка — только после снятия объекта с поддержки |
| Файловая учебная или тестовая база | Правите напрямую, это безопасно |
Прямая правка типового объекта ведёт к тому, что при обновлении релиза появятся конфликты слияния: в одном месте вы поменяли объект, в другом поменял вендор. Расширение этой проблемы лишено. Оно умеет «заимствовать» объект из основной конфигурации и добавлять в него свои реквизиты, в том числе в табличные части. Расширения доступны начиная с платформы 8.3.6.
Менять структуру метаданных нужно в копии базы. Сначала выгрузите информационную базу в .dt (Администрирование → Выгрузить информационную базу в Конфигураторе), и только потом экспериментируйте. Это единственное место в статье, где нужна резервная копия, потому что дальше вы будете менять структуру хранения данных.
Что понадобится до начала:
- ✅ Права администратора и доступ в Конфигуратор;
- ✅ монопольный доступ к базе на момент обновления структуры (пользователи должны выйти);
- ✅ понимание, к какому объекту относится колонка: документ «Реализация», справочник «Номенклатура», обработка или регистр;
- ✅ решение о типе данных: число, строка, дата, ссылка на справочник, булево.
Как найти нужный объект
Откройте Конфигуратор: Конфигурация → Открыть конфигурацию. В дереве метаданных разверните ветку нужного вида объектов. Если не уверены, как называется табличная часть, откройте документ в обычном режиме, посмотрите на заголовок вкладки («Товары», «Услуги», «Начисления») и найдите то же слово в дереве. Имя вкладки в форме обычно совпадает с именем табличной части или является её синонимом.
Создание реквизита в табличной части
Это основной шаг. Порядок один и тот же для документов, справочников и других объектов с табличными частями.
- В дереве метаданных найдите объект и раскройте его.
- Раскройте группу
Табличные частии дважды щёлкните по нужной. - В окне табличной части откройте вкладку
Реквизиты(она может называться «Данные» в зависимости от режима отображения). - Нажмите зелёный плюс «Добавить».
- Введите
Имябез пробелов, напримерСкидкаПоставщика. Синоним заполнится сам: «Скидка поставщика». - В поле
Типвыберите тип данных (подробнее в следующем разделе). - Закройте окно и обновите конфигурацию базы данных:
Конфигурация → Обновить конфигурацию базы данных(клавишаF7).
Последний пункт часто забывают. Пока вы не обновили конфигурацию БД, колонка есть в метаданных, но не существует в таблице базы. Запуск в режиме 1С:Предприятие в такой момент либо предложит обновить структуру, либо выдаст ошибку.
Для колонки с подсказкой пользователю заполните поля Синоним и Подсказка. Синоним — это то, что видно в форме, имя — то, что видно в коде. Имя меняют редко, синоним — свободно.
Правила именования
- Имя латиницей писать не нужно, 1С поддерживает кириллицу. Но не начинайте с цифры и не используйте пробелы.
- Не называйте колонку так же, как реквизит шапки: в запросах и модулях путаница обеспечена.
- Для табличных частей автоматически есть служебная колонка «Номер строки» (
НомерСтроки). Дублировать её не нужно.
Тип данных и свойства колонки
Тип определяет, как значение хранится и что вводит пользователь. Меняется он болезненно: если в колонке уже есть данные, смена типа может их обнулить.
| Тип | Когда брать | На что смотреть |
|---|---|---|
Число | сумма, количество, процент | длина и точность, например 15 знаков и 2 после запятой |
Строка | комментарий, артикул | ограниченная длина или неограниченная |
Дата | срок поставки, дата отгрузки | состав: дата, время или обе части |
Булево | флаг «Подарок», «Услуга» | отображается как флажок |
СправочникСсылка.Имя | склад, контрагент, ставка | быстрый выбор и отбор доступны из коробки |
| Составной | значение может быть разных видов | усложняет запросы, используйте редко |
Пример выбора. Колонка «Скидка поставщика» хранит процент. Берём Число, длина 5, точность 2: этого хватит на 100,00. Колонка «Причина возврата» должна быть выбором из списка, поэтому создаём справочник ПричиныВозврата и берём тип СправочникСсылка.ПричиныВозврата. Свободная строка здесь хуже: через месяц у вас окажется десять написаний одного и того же слова, и по этой колонке нельзя будет сгруппировать отчёт.
Свойства, которые стоит выставить сразу
Проверка заполнения. «Выдавать ошибку» не даст провести документ с пустой колонкой. Включайте, если значение действительно обязательно.Режим пароля,Маска,Формат— для чисел и строк с особым видом. ФорматЧДЦ=2задаёт два знака после запятой.Связь по типуиПараметры выбора— когда список значений нужно ограничить. Например, показывать только склады текущей организации.Индексирование— для табличных частей почти не нужно, включать «ради порядка» не стоит.
Если колонка обязательна, а в базе уже тысячи документов с пустым значением, не включайте проверку заполнения сразу. Сначала заполните старые строки (см. раздел про программное заполнение), иначе ранее введённые документы не пройдут повторное проведение.
Вывод колонки на форму документа и списка
Добавили реквизит, запустили 1С, открыли документ, а колонки нет. Это нормально: в управляемых формах поля нужно добавить отдельно.
- В Конфигураторе откройте форму объекта:
Формы → ФормаДокумента(название зависит от конфигурации). - На закладке
Элементынайдите таблицу, в которую входит ваша табличная часть. Обычно у неё имя вродеТовары. - Справа нажмите на
Реквизиты, раскройте нужную табличную часть: в списке появится новая колонка. - Перетащите её мышью в группу элементов таблицы под нужный столбец.
- В свойствах элемента проверьте
Видимость,Только просмотр,Заголовок,Ширина. - Сохраните форму и запустите 1С:Предприятие с отладкой (
F5).
Если форма в типовой конфигурации не редактируется, а вы уже сделали расширение, открывайте форму через заимствование: в расширении добавьте форму из основной конфигурации, и она станет доступна для правки.
Колонка в списке документов и в печатной форме
Колонка табличной части не попадает в форму списка автоматически, ведь список строится по реквизитам шапки. Чтобы показать значение из табличной части в списке, нужна динамическая выборка: в форме списка включите свойство Произвольный запрос у основной таблицы динамического списка и допишите запрос с соединением к табличной части. Это уже задача для разработчика: проверьте, что результат не множит строки документа.
В печатной форме новая колонка тоже сама не появится. Откройте макет печатной формы, добавьте область или колонку, а в модуле формирования вывода допишите заполнение параметра. Если форма печатается через команду из типового набора, найдите в расширении собственный макет, чтобы не потерять правки при обновлении.
Сначала убедитесь, что значение вообще нужно показывать в печати. Колонка для внутреннего учёта (скидка поставщика, ответственный сотрудник) в акте чаще лишняя.
Колонка в отчётах и СКД
Новая колонка в отчётах не появится ни у вас, ни у пользователей. Отчёты на СКД строятся по схеме компоновки данных, и поля в ней определяются запросом.
Если отчёт ваш или в расширении, добавляйте так:
- В Конфигураторе откройте отчёт и его схему компоновки данных.
- На закладке
Набор данныхнайдите запрос по табличной части (например,ВЫБРАТЬ ... ИЗ Документ.РеализацияТоваровУслуг.Товары КАК ТЧ). - В тексте запроса добавьте выбор нового поля:
ТЧ.СкидкаПоставщика КАК СкидкаПоставщика. - Нажмите «Ок». Конструктор запроса сам добавит поле в список полей набора.
- Включите поле в нужные группы на закладке
Настройки: как колонку, группировку или отбор. - Для итогов добавьте ресурс: в закладке
Ресурсывыражение вродеСумма(СкидкаПоставщика)илиСреднее(...).
Если колонка текстовая или ссылочная, ресурсы для неё не нужны. Поле остаётся измерением, по нему удобно группировать и отбирать.
Пользовательские настройки
Чтобы пользователи сами выводили колонку в типовой отчёт, делать ничего в схеме не надо, если поле уже есть в наборе. Достаточно открыть отчёт, нажать «Настройки» и выбрать поле в блоке «Колонки» или «Отбор». Если в наборе поля нет, придётся доработать запрос — другого способа нет.
Типовые отчёты, например «Оборотно-сальдовая ведомость», строятся по регистрам. Регистры наполняются при проведении. Значит, если нужная вам информация должна попасть в такой отчёт, мало добавить колонку в документ: нужно ещё и записывать значение в регистр в модуле проведения. Это уже модификация типовой логики, и без разработчика с опытом лучше за неё не браться.
Программное заполнение колонки в существующих документах
После добавления реквизита все строки старых документов получат значение по умолчанию для типа: 0 для числа, пустую строку для строки, пустую дату, Ложь для булева. Часто это устраивает. Если нет, можно заполнить колонку одной обработкой.
Возьмём реальную задачу: у всех строк, где колонка СкидкаПоставщика пуста, нужно поставить 5 процентов.
Выборка = Документы.ПоступлениеТоваровУслуг.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Изменено = Ложь;
Для Каждого Строка Из Объект.Товары Цикл
Если Строка.СкидкаПоставщика = 0 Тогда
Строка.СкидкаПоставщика = 5;
Изменено = Истина;
КонецЕсли;
КонецЦикла;
Если Изменено Тогда
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Что здесь важно:
ПолучитьОбъект()возвращает изменяемый объект документа, у выборки самой записи нет.- Флаг
ОбменДанными.Загрузка = Истинаотключает обработчики записи и проверки. Нужен, чтобы массовая правка не запускала бизнес-логику и не ломалась на старых документах с нарушениями. - Перепроведения этот код не делает. Если значение влияет на движения по регистрам, их нужно пересчитать отдельно.
- Запись в цикле на сотни тысяч документов идёт медленно. Разбейте на периоды по датам и запускайте ночью.
Запускайте такой код сначала на копии базы. После записи изменённые документы в рабочей базе откатить можно только восстановлением из резервной копии.
Для небольших объёмов хватит групповой обработки из типовой конфигурации: в списке документов выделите нужные строки и вызовите изменение реквизитов. Она позволяет менять реквизиты шапки, а колонки табличной части правятся только кодом, поэтому для массовой правки колонок пригодится именно обработка.
Значение по умолчанию для новых строк
Чтобы в добавляемой строке колонка сразу получала значение, обработайте событие ПриНачалеРедактирования у таблицы формы. В нём проверяют НоваяСтрока и присваивают значение:
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
Элемент.ТекущиеДанные.СкидкаПоставщика = 5;
КонецЕсли;
КонецПроцедуры
Для вычисляемой колонки (например, сумма со скидкой) добавьте процедуру пересчёта и вызывайте её из ПриИзменении связанных полей: количества, цены, скидки.
Типичные ошибки при добавлении колонки
- 🔸 Колонка не видна после запуска. Забыли добавить поле на форму или не обновили конфигурацию БД. Проверьте оба шага.
- 🔸 Ошибка «Поле объекта не обнаружено». Код или запрос ссылается на имя, которого нет в метаданных, или опечатка в имени. Сравните написание побуквенно, в том числе русские и латинские буквы-двойники (
а,е,о,р,с). - 🔸 Правка слетела после обновления релиза. Вы меняли типовой объект напрямую. Вынесите доработку в расширение.
- 🔸 Колонка есть в документе, но не уходит в обмен. Правила обмена данными (РИБ, универсальный обмен) строятся по метаданным и не знают о новом реквизите. Обновите правила и повторите обмен.
- 🔸 Не хватает ширины. На экране с мелким разрешением таблица прокручивается вбок. Уберите лишние колонки у формы или сделайте их скрытыми по умолчанию, пользователи включат нужные в настройках формы.
- 🔸 Тип числа слишком мал. Если длина 5 знаков, значение 100000 не влезет и обрежется. Планируйте длину с запасом.