Добавление столбца в 1С Предприятие — одна из самых частых задач при настройке программы под бизнес-процессы компании.hether вы работаете с управляемыми формами в новой версии платформы или с обычными формами в 1С 8.2, принципы добавления полей остаются схожими, но имеют важные нюансы. Эта инструкция поможет разобраться, как правильно добавить столбец в справочник, документ, отчет или динамический список — без ошибок и потери данных.
Мы рассмотрим все актуальные способы: от ручного редактирования в конфигураторе до программного создания через встроенный язык. Особое внимание уделим типичным проблемам, которые возникают при добавлении столбцов в уже заполненные базы — например, как избежать ошибки "Поле не найдено" при обновлении конфигурации или почему новые столбцы могут не отображаться в отчетах. Для удобства каждый метод проиллюстрирован скриншотами (описаниями интерфейса) и примерами кода.
Если вы никогда не работали с конфигуратором 1С, начните с первого раздела — там объяснены базовые понятия. Опытные разработчики могут сразу перейти к программным методам или разделам про динамические списки и отчеты.
Подготовка: что нужно знать перед добавлением столбца
Прежде чем добавлять столбец, определитесь с тремя ключевыми параметрами:
- 📌 Тип объекта: справочник, документ, регистр сведений или отчет. От этого зависит, где и как будет храниться новый столбец.
- 📏 Тип данных: строка, число, дата, ссылка на другой объект. Например, для хранения цены нужен тип
Число(10,2), а для привязки к контрагенту —СправочникСсылка.Контрагенты. - 🔄 Необходимость хранения в базе: если столбец должен сохраняться между сеансами (например, комментарий к документу), его нужно добавлять в структуру объекта. Для временных данных (например, расчетных полей в отчете) хватит виртуального столбца.
Важно: если вы работаете с типовой конфигурацией (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11), перед изменением структуры обязательно сделайте резервную копию базы. Некоторые обновления от 1С могут перезаписывать измененные объекты, что приведет к потере ваших доработок. Для безопасной работы используйте расширения конфигурации или внешние обработки.
⚠️ Внимание: Если вы добавляете столбец в документ или справочник, который уже используется в бизнес-процессах (например, в печатных формах или обменах данными), после изменения структуры может потребоваться перепроведение документов или обновление правил обмена. Проверьте это заранее в тестовой базе.
Способ 1: Добавление столбца в справочник через конфигуратор
Это самый распространенный сценарий — когда нужно сохранить дополнительную информацию о элементах справочника (например, добавить поле "Дата последнего звонка" в справочник Контрагенты). Инструкция подходит для 1С 8.3 и 1С 8.2 (с учетом различий в интерфейсе).
Шаги:
- Откройте конфигуратор (через ярлык
1Cv8.cfgили из меню запуска 1С Предприятия). - В дереве объектов найдите нужный справочник (например,
Справочники → Контрагенты). - Откройте ветку
Реквизитыи нажмите правой кнопкой →Добавить. - Заполните свойства нового реквизита:
- 🔹 Имя: латиницей, без пробелов (например,
DateLastCall). - 🔹 Синоним: отображаемое имя (например, "Дата последнего звонка").
- 🔹 Тип: выберите из списка (например,
Дата). - 🔹 Длина: для строковых полей (например,
50символов).
- 🔹 Имя: латиницей, без пробелов (например,
- Сохраните конфигурацию (
Ctrl+S) и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных). - 🔧 Настройки видимости в форме (возможно, поле скрыто в
Управляемой формечерез свойствоВидимость). - 🔄 Права доступа пользователя (в
Роляхможет быть запрещено чтение/запись нового реквизита).
После обновления новый столбец появится в форме справочника. Если он не отображается, проверьте:
☑️ Проверка после добавления столбца
Способ 2: Добавление столбца в динамический список
Динамические списки используются для отображения данных в табличных частях документов, справочников или отчетах. Здесь столбцы можно добавлять без изменения структуры объекта — они будут виртуальными (не сохраняются в базе, а рассчитываются на лету).
Пример: добавим в список контрагентов столбец "Дней с последнего заказа".
Инструкция:
- Откройте форму, где отображается динамический список (например, форма списка справочника
Контрагенты). - Перейдите в режим редактирования формы (
Конфигуратор → Формы → [ИмяФормы]). - Найдите элемент
ДинамическийСписоки откройте его настройки. - В свойстве
Полядобавьте новый элемент:Новый ПолеДинамическогоСписка("ДнейСПоследнегоЗаказа", Тип("Число")),Выражение = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ДнейМежду(ТЕКУЩАЯДАТА(), МАКСИМУМ(Документ.ЗаказПокупателя.Дата)) ИЗ Документ.ЗаказПокупателя ГДЕ Ссылка = &Ссылка"
- Настройте отображение: добавьте колонку в таблицу формы и свяжите ее с новым полем.
| Параметр | Значение для виртуального столбца | Значение для физического столбца |
|---|---|---|
| Хранится в базе | ❌ Нет | ✅ Да |
| Требует обновления конфигурации | ❌ Нет | ✅ Да |
| Можно использовать в отчетах | ✅ Да (через вычисляемые поля) | ✅ Да |
| Влияет на производительность | ✅ Да (замедляет отображение) | ❌ Нет |
⚠️ Внимание: Виртуальные столбцы в динамических списках не поддерживают индексацию. Если вы добавляете столбец для фильтрации по большому объему данных (например, в справочнике с 100 000 записей), лучше создать физический реквизит и заполнять его через Регламентное задание.
Способ 3: Программное добавление столбца (встроенный язык)
Для автоматизации или массового добавления столбцов используйте встроенный язык 1С. Этот метод подходит, если нужно:
- 🔄 Добавить столбец в несколько справочников одновременно.
- 📊 Создать вычисляемое поле в отчете.
- 🔧 Настроить динамическое отображение столбцов в зависимости от прав пользователя.
Пример 1: Добавление реквизита в справочник Номенклатура:
Процедура ДобавитьРеквизитВНоменклатуру()
Метаданные = Метаданные();
СправочникОбъект = Метаданные.Справочники.Номенклатура;
// Создаем новый реквизит
НовыйРеквизит = СправочникОбъект.Реквизиты.Добавить();
НовыйРеквизит.Имя = "ДополнительныйКод";
НовыйРеквизит.Синоним = "Доп. код поставщика";
НовыйРеквизит.Тип = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(20));
// Сохраняем изменения
Метаданные.Записать();
КонецПроцедуры
Пример 2: Добавление колонки в табличную часть документа РеализацияТоваровУслуг:
Процедура ДобавитьКолонкуВТабличнуюЧасть()
Метаданные = Метаданные();
ДокументОбъект = Метаданные.Документы.РеализацияТоваровУслуг;
ТабличнаяЧасть = ДокументОбъект.ТабличныеЧасти.Товары;
// Добавляем новую колонку
НоваяКолонка = ТабличнаяЧасть.Колонки.Добавить();
НоваяКолонка.Имя = "ВесБрутто";
НоваяКолонка.Синоним = "Вес брутто (кг)";
НоваяКолонка.Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 3));
Метаданные.Записать();
КонецПроцедуры
Важно: Программное изменение метаданных требует монопольного режима работы с базой. Перед выполнением таких процедур закройте все сеансы пользователей или используйте НачатьТранзакцию() и ЗафиксироватьТранзакцию() для безопасного выполнения.
Если вам нужно добавить столбец только для отображения (без сохранения в базе), используйте метод ДинамическийСписок.Колонки.Добавить() с указанием выражения для вычисления значения. Это ускорит работу формы по сравнению с изменением метаданных.
Способ 4: Добавление столбца в отчет или обработку
В отчетах (например, Оборотно-сальдовая ведомость) и обработках столбцы добавляются через схему компоновки данных (СКД). Это гибкий инструмент, который позволяет:
- 📈 Добавлять вычисляемые поля (например, процент выполнения плана).
- 🔗 Связывать данные из разных источников (например, остатки товаров + цены поставщиков).
- 🎨 Настраивать условное оформление (цвет ячеек в зависимости от значения).
Пошаговая инструкция:
- Откройте отчет в конфигураторе (например,
Отчеты → ОборотноСальдоваяВедомость). - Перейдите на вкладку
Схема компоновки данных. - В разделе
Наборы данныхвыберите нужный набор (например,ОборотыИОстатки). - В разделе
РесурсыилиПолядобавьте новый элемент:- 🔹 Для простого поля: укажите имя и выражение (например,
ВыручкаНаЕдиницу = Выручка / Количество). - 🔹 Для группировки: создайте новый уровень группировки по полю (например, по
Контрагент.Регион).
- 🔹 Для простого поля: укажите имя и выражение (например,
- В разделе
Настройкинастройте отображение столбца: ширина, заголовок, формат. - Сохраните отчет и проверьте результат в режиме
1С:Предприятие. - 📤 В правилах выгрузки добавьте новое поле в соответствующий объект (например, в
ПравилаОбмена.Контрагенты). - 📥 В правилах загрузки настройте привязку нового поля к реквизиту в целевой базе.
- 🔄 Для существующих записей может потребоваться первоначальное заполнение нового столбца (например, через обработку).
- 🔄 Если столбец критичен для бизнес-процессов, настройте контроль заполнения (например, через
ПроверкаЗаполнения()). - 🔍 Запросы в отчетах: возможно, в них используется
ВЫБРАТЬ РАЗРЕШЕННЫЕ *, что приводит к ошибке при изменении структуры. - 🔍 Модули менеджеров: иногда логика работы зависит от наличия определенных полей (например, в процедуре
ПриСозданииНаСервере). - 🔍 Печатные формы: если столбец должен выводиться на печать, добавьте его в макет.
- 🔧 В управляемых формах можно добавлять виртуальные столбцы через настройку динамических списков (без изменения метаданных).
- 🔧 В отчетах можно создавать вычисляемые поля через
Схему компоновки данных. - ❌ Физические реквизиты (которые хранятся в базе) можно добавить только через конфигуратор или программно.
Пример выражения для вычисляемого поля в СКД:
ВЫБРАТЬ
РАЗРЕШЕННЫЕ
Товар,
СУММА(Количество) КАК Количество,
СУММА(Сумма) КАК Сумма,
СУММА(Сумма) / НУЛЬ(СУММА(Количество), 1) КАК СредняяЦена
ИЗ
Документ.РеализацияТоваровУслуг.Товары
ГДЕ
Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
Товар
⚠️ Внимание: Если вы изменяете стандартный отчет из типовой конфигурации, после обновления 1С ваши правки могут быть потеряны. Чтобы этого избежать, создайте копию отчета с другим именем или используйте расширение конфигурации.
Способ 5: Добавление столбца с учетом обмена данными
Если ваша база участвует в обменах данными (например, с 1С:Розница, 1С:ЗУП или внешними системами через REST API), добавление нового столбца требует дополнительных действий:
1. Обновление правил обмена:
2. Синхронизация данных:
Пример кода для добавления поля в правила обмена:
Процедура ОбновитьПравилаОбмена()
ПравилаОбмена = Метаданные.ПланыОбмена.ОсновнойОбмен.ПравилаОбмена;
// Находим правило для справочника Контрагенты
ПравилоКонтрагенты = ПравилаОбмена.НайтиПоИмени("Справочник.Контрагенты");
Если ПравилоКонтрагенты = Неопределено Тогда
Сообщить("Правило для Контрагентов не найдено!");
Возврат;
КонецЕсли;
// Добавляем новое поле в правило
НовоеПоле = ПравилоКонтрагенты.Поля.Добавить();
НовоеПоле.Имя = "ДатаПоследнегоЗвонка";
НовоеПоле.Источник = "ДатаПоследнегоЗвонка";
НовоеПоле.Назначение = "ДатаПоследнегоКонтакта"; // Имя поля в целевой базе
ПравилаОбмена.Записать();
КонецПроцедуры
Если обмен настроен через Универсальный формат обмена данными (УФ), добавьте поле в XDTO-пакет:
Процедура ДобавитьПолеВXDTO()
ФабрикаXDTO = Новый ФабрикаXDTO();
Пакет = ФабрикаXDTO.Пакеты.НайтиПоИмени("http://v8.1c.ru/data/enterprise/current-enterprise");
ТипОбъекта = Пакет.Типы.НайтиПоИмени("CatalogObject.Контрагенты");
// Добавляем новый атрибут
НовыйАтрибут = ТипОбъекта.Атрибуты.Добавить();
НовыйАтрибут.Имя = "ДатаПоследнегоЗвонка";
НовыйАтрибут.Тип = ФабрикаXDTO.Тип("date");
ФабрикаXDTO.Записать();
КонецПроцедуры
Что делать если после добавления столбца обмен данными падает с ошибкой?
Наиболее частая причина — несовпадение типов данных в источниках. Например, если в одной базе поле имеет тип Дата, а в другой — Строка. Проверьте:
1. Типы полей в правилах обмена (должны совпадать в обеих базах).
2. Наличие прав у пользователя, выполняющего обмен.
3. Логи обмена (Журнал регистрации) для точной диагностики.
Типичные ошибки и как их избежать
Даже опытные разработчики сталкиваются с проблемами при добавлении столбцов. Вот самые распространенные ошибки и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Поле не найдено (Field not found) |
Не обновлена конфигурация базы данных после добавления реквизита. | Выполните Конфигурация → Обновить конфигурацию базы данных. |
| Столбец не отображается в форме | Поле не добавлено в Управляемую форму или скрыто настройками видимости. |
Откройте форму в конфигураторе и добавьте элемент управления для нового реквизита. |
Ошибка при записи объекта |
Новое поле отмечено как Обязательное, но не заполнено для существующих записей. |
Снимите флаг Обязательное или заполните поле для всех записей через обработку. |
| Замедление работы формы | Виртуальный столбец в динамическом списке содержит сложный запрос. | Оптимизируйте запрос или замените виртуальный столбец на физический реквизит. |
| Данные не сохраняются | Новое поле не добавлено в модуль объекта (например, в процедуру ПередЗаписью). |
Проверьте обработчики событий объекта на наличие кода, сбрасывающего значение поля. |
Если после добавления столбца перестали работать отчеты или обработки, проверьте:
Перед добавлением столбца в рабочую базу всегда тестируйте изменения в тестовой копии. Особенно это критично для баз с историей данных (например, 1С:ЗУП), где ошибки могут привести к потере расчетов по сотрудникам.
Частые вопросы
Можно ли добавить столбец в 1С без конфигуратора?
Да, но с ограничениями:
Для добавления физических столбцов без конфигуратора используйте внешние обработки с правами изменения метаданных или расширения конфигурации.
Как добавить столбец в табличную часть документа, чтобы он автоматически заполнялся?
Используйте обработчик события ПриСозданииНаСервере или ПередЗаписью в модуле документа. Пример:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Для Каждого СтрокаТовары Из Товары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Количество) И ЗначениеЗаполнено(СтрокаТовары.Цена) Тогда
СтрокаТовары.Сумма = СтрокаТовары.Количество * СтрокаТовары.Цена;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для более сложной логики (например, подтягивания данных из справочников) используйте серверные функции.
Почему после добавления столбца в справочник он не отображается в форме выбора?
Это типичная проблема, связанная с кэшированием метаданных. Решения:
- Обновите кэш метаданных:
Конфигурация → Поддержка → Обновить кэш метаданных. - Проверьте, добавлено ли поле в форму выбора (открывается по кнопке
...в полях ввода). - Если используется управляемая форма, откройте ее в конфигураторе и добавьте колонку в таблицу.
Если проблема остается, проверьте права доступа — возможно, у пользователя нет прав на чтение нового реквизита.
Как добавить столбец в отчет "Анализ субконто"?
Отчет Анализ субконто использует универсальную схему компоновки, поэтому добавить столбец можно двумя способами:
Способ 1 (без изменения конфигурации):
- Откройте отчет в режиме
1С:Предприятие. - Нажмите
Настройки → Добавить поле. - Выберите нужное субконто или ресурс (например,
СуммаОборот).
Способ 2 (через конфигуратор):
- Откройте отчет в конфигураторе.
- В схеме компоновки добавьте новое поле в раздел
РесурсыилиПоля. - Настройте выражение для поля (например,
СуммаОборот / Количестводля расчета средней цены).
Если нужно добавить произвольное поле (не из регистров), создайте виртуальную таблицу в запросе отчета.
Можно ли удалить столбец после добавления, если он больше не нужен?
Да, но с осторожностью:
- ✅ Если столбец не используется в отчетах, обработках или обменах, его можно удалить через конфигуратор (правая кнопка →
Удалить). - ⚠️ Если столбец используется в данных (например, в документах или регистрах), после удаления может потребоваться перепроведение документов.
- 🔄 Для безопасного удаления:
- Сделайте резервную копию базы.
- Проверьте зависимости (кнопка
Показать зависимостив конфигураторе). - Удалите поле и обновите конфигурацию.
Если столбец был добавлен в типовую конфигурацию, его удаление может привести к ошибкам при будущих обновлениях. В этом случае лучше скрыть поле через настройки формы.