Добавление столбца в 1С Предприятие — одна из самых частых задач при настройке программы под бизнес-процессы компании.hether вы работаете с управляемыми формами в новой версии платформы или с обычными формами в 1С 8.2, принципы добавления полей остаются схожими, но имеют важные нюансы. Эта инструкция поможет разобраться, как правильно добавить столбец в справочник, документ, отчет или динамический список — без ошибок и потери данных.

Мы рассмотрим все актуальные способы: от ручного редактирования в конфигураторе до программного создания через встроенный язык. Особое внимание уделим типичным проблемам, которые возникают при добавлении столбцов в уже заполненные базы — например, как избежать ошибки "Поле не найдено" при обновлении конфигурации или почему новые столбцы могут не отображаться в отчетах. Для удобства каждый метод проиллюстрирован скриншотами (описаниями интерфейса) и примерами кода.

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

Подготовка: что нужно знать перед добавлением столбца

Прежде чем добавлять столбец, определитесь с тремя ключевыми параметрами:

  • 📌 Тип объекта: справочник, документ, регистр сведений или отчет. От этого зависит, где и как будет храниться новый столбец.
  • 📏 Тип данных: строка, число, дата, ссылка на другой объект. Например, для хранения цены нужен тип Число(10,2), а для привязки к контрагенту — СправочникСсылка.Контрагенты.
  • 🔄 Необходимость хранения в базе: если столбец должен сохраняться между сеансами (например, комментарий к документу), его нужно добавлять в структуру объекта. Для временных данных (например, расчетных полей в отчете) хватит виртуального столбца.

Важно: если вы работаете с типовой конфигурацией (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11), перед изменением структуры обязательно сделайте резервную копию базы. Некоторые обновления от 1С могут перезаписывать измененные объекты, что приведет к потере ваших доработок. Для безопасной работы используйте расширения конфигурации или внешние обработки.

📊 С какой целью вы добавляете столбец в 1С?
Для хранения дополнительных данных
Для отображения в отчете
Для интеграции с другим ПО
Другое
⚠️ Внимание: Если вы добавляете столбец в документ или справочник, который уже используется в бизнес-процессах (например, в печатных формах или обменах данными), после изменения структуры может потребоваться перепроведение документов или обновление правил обмена. Проверьте это заранее в тестовой базе.

Способ 1: Добавление столбца в справочник через конфигуратор

Это самый распространенный сценарий — когда нужно сохранить дополнительную информацию о элементах справочника (например, добавить поле "Дата последнего звонка" в справочник Контрагенты). Инструкция подходит для 1С 8.3 и 1С 8.2 (с учетом различий в интерфейсе).

Шаги:

  1. Откройте конфигуратор (через ярлык 1Cv8.cfg или из меню запуска 1С Предприятия).
  2. В дереве объектов найдите нужный справочник (например, Справочники → Контрагенты).
  3. Откройте ветку Реквизиты и нажмите правой кнопкой → Добавить.
  4. Заполните свойства нового реквизита:
    • 🔹 Имя: латиницей, без пробелов (например, DateLastCall).
    • 🔹 Синоним: отображаемое имя (например, "Дата последнего звонка").
    • 🔹 Тип: выберите из списка (например, Дата).
    • 🔹 Длина: для строковых полей (например, 50 символов).
  5. Сохраните конфигурацию (Ctrl+S) и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных).
  6. После обновления новый столбец появится в форме справочника. Если он не отображается, проверьте:

    • 🔧 Настройки видимости в форме (возможно, поле скрыто в Управляемой форме через свойство Видимость).
    • 🔄 Права доступа пользователя (в Ролях может быть запрещено чтение/запись нового реквизита).

☑️ Проверка после добавления столбца

Выполнено: 0 / 4

Способ 2: Добавление столбца в динамический список

Динамические списки используются для отображения данных в табличных частях документов, справочников или отчетах. Здесь столбцы можно добавлять без изменения структуры объекта — они будут виртуальными (не сохраняются в базе, а рассчитываются на лету).

Пример: добавим в список контрагентов столбец "Дней с последнего заказа".

Инструкция:

  1. Откройте форму, где отображается динамический список (например, форма списка справочника Контрагенты).
  2. Перейдите в режим редактирования формы (Конфигуратор → Формы → [ИмяФормы]).
  3. Найдите элемент ДинамическийСписок и откройте его настройки.
  4. В свойстве Поля добавьте новый элемент:
    Новый ПолеДинамическогоСписка("ДнейСПоследнегоЗаказа", Тип("Число")),
    

    Выражение = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ДнейМежду(ТЕКУЩАЯДАТА(), МАКСИМУМ(Документ.ЗаказПокупателя.Дата)) ИЗ Документ.ЗаказПокупателя ГДЕ Ссылка = &Ссылка"

  5. Настройте отображение: добавьте колонку в таблицу формы и свяжите ее с новым полем.
Параметр Значение для виртуального столбца Значение для физического столбца
Хранится в базе ❌ Нет ✅ Да
Требует обновления конфигурации ❌ Нет ✅ Да
Можно использовать в отчетах ✅ Да (через вычисляемые поля) ✅ Да
Влияет на производительность ✅ Да (замедляет отображение) ❌ Нет
⚠️ Внимание: Виртуальные столбцы в динамических списках не поддерживают индексацию. Если вы добавляете столбец для фильтрации по большому объему данных (например, в справочнике с 100 000 записей), лучше создать физический реквизит и заполнять его через Регламентное задание.

Способ 3: Программное добавление столбца (встроенный язык)

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

  • 🔄 Добавить столбец в несколько справочников одновременно.
  • 📊 Создать вычисляемое поле в отчете.
  • 🔧 Настроить динамическое отображение столбцов в зависимости от прав пользователя.

Пример 1: Добавление реквизита в справочник Номенклатура:

Процедура ДобавитьРеквизитВНоменклатуру()

Метаданные = Метаданные();

СправочникОбъект = Метаданные.Справочники.Номенклатура;

// Создаем новый реквизит

НовыйРеквизит = СправочникОбъект.Реквизиты.Добавить();

НовыйРеквизит.Имя = "ДополнительныйКод";

НовыйРеквизит.Синоним = "Доп. код поставщика";

НовыйРеквизит.Тип = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(20));

// Сохраняем изменения

Метаданные.Записать();

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

Пример 2: Добавление колонки в табличную часть документа РеализацияТоваровУслуг:

Процедура ДобавитьКолонкуВТабличнуюЧасть()

Метаданные = Метаданные();

ДокументОбъект = Метаданные.Документы.РеализацияТоваровУслуг;

ТабличнаяЧасть = ДокументОбъект.ТабличныеЧасти.Товары;

// Добавляем новую колонку

НоваяКолонка = ТабличнаяЧасть.Колонки.Добавить();

НоваяКолонка.Имя = "ВесБрутто";

НоваяКолонка.Синоним = "Вес брутто (кг)";

НоваяКолонка.Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 3));

Метаданные.Записать();

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

Важно: Программное изменение метаданных требует монопольного режима работы с базой. Перед выполнением таких процедур закройте все сеансы пользователей или используйте НачатьТранзакцию() и ЗафиксироватьТранзакцию() для безопасного выполнения.

💡

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

Способ 4: Добавление столбца в отчет или обработку

В отчетах (например, Оборотно-сальдовая ведомость) и обработках столбцы добавляются через схему компоновки данных (СКД). Это гибкий инструмент, который позволяет:

  • 📈 Добавлять вычисляемые поля (например, процент выполнения плана).
  • 🔗 Связывать данные из разных источников (например, остатки товаров + цены поставщиков).
  • 🎨 Настраивать условное оформление (цвет ячеек в зависимости от значения).

Пошаговая инструкция:

  1. Откройте отчет в конфигураторе (например, Отчеты → ОборотноСальдоваяВедомость).
  2. Перейдите на вкладку Схема компоновки данных.
  3. В разделе Наборы данных выберите нужный набор (например, ОборотыИОстатки).
  4. В разделе Ресурсы или Поля добавьте новый элемент:
    • 🔹 Для простого поля: укажите имя и выражение (например, ВыручкаНаЕдиницу = Выручка / Количество).
    • 🔹 Для группировки: создайте новый уровень группировки по полю (например, по Контрагент.Регион).
  5. В разделе Настройки настройте отображение столбца: ширина, заголовок, формат.
  6. Сохраните отчет и проверьте результат в режиме 1С:Предприятие.
  7. Пример выражения для вычисляемого поля в СКД:

    ВЫБРАТЬ
    

    РАЗРЕШЕННЫЕ

    Товар,

    СУММА(Количество) КАК Количество,

    СУММА(Сумма) КАК Сумма,

    СУММА(Сумма) / НУЛЬ(СУММА(Количество), 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. Обновите кэш метаданных: Конфигурация → Поддержка → Обновить кэш метаданных.
  2. Проверьте, добавлено ли поле в форму выбора (открывается по кнопке ... в полях ввода).
  3. Если используется управляемая форма, откройте ее в конфигураторе и добавьте колонку в таблицу.

Если проблема остается, проверьте права доступа — возможно, у пользователя нет прав на чтение нового реквизита.

Как добавить столбец в отчет "Анализ субконто"?

Отчет Анализ субконто использует универсальную схему компоновки, поэтому добавить столбец можно двумя способами:

Способ 1 (без изменения конфигурации):

  1. Откройте отчет в режиме 1С:Предприятие.
  2. Нажмите Настройки → Добавить поле.
  3. Выберите нужное субконто или ресурс (например, СуммаОборот).

Способ 2 (через конфигуратор):

  1. Откройте отчет в конфигураторе.
  2. В схеме компоновки добавьте новое поле в раздел Ресурсы или Поля.
  3. Настройте выражение для поля (например, СуммаОборот / Количество для расчета средней цены).

Если нужно добавить произвольное поле (не из регистров), создайте виртуальную таблицу в запросе отчета.

Можно ли удалить столбец после добавления, если он больше не нужен?

Да, но с осторожностью:

  • ✅ Если столбец не используется в отчетах, обработках или обменах, его можно удалить через конфигуратор (правая кнопка → Удалить).
  • ⚠️ Если столбец используется в данных (например, в документах или регистрах), после удаления может потребоваться перепроведение документов.
  • 🔄 Для безопасного удаления:
    1. Сделайте резервную копию базы.
    2. Проверьте зависимости (кнопка Показать зависимости в конфигураторе).
    3. Удалите поле и обновите конфигурацию.

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