Как добавить реквизит в табличную часть документа через расширение конфигурации

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

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

Разберем причину ошибки: режим совместимости и версия платформы

Первым делом выясним, почему система может блокировать добавление реквизита. Основная причина кроется в версии платформы и установленном режиме совместимости. Исторически расширения создавались для изменения логики (кода) и форм, но не могли менять структуру базы данных (SQL-таблицы). Полноценная поддержка добавления собственных реквизитов в заимствованные табличные части появилась начиная с версии платформы 8.3.11.

Рассмотрим важные условия, которые должны быть соблюдены:

  1. Версия платформы должна быть не ниже 8.3.12 (рекомендуется более актуальная, например 8.3.13 и выше, как упоминается в обсуждении для конфигураций УНФ).
  2. Режим совместимости основной конфигурации должен быть установлен в значение не ниже «Версия 8.3.11».
  3. Режим совместимости самого расширения должен строго соответствовать режиму совместимости основной конфигурации или быть равен ему.

Если в вашей конфигурации (например, в старых редакциях ЗУП или УНФ) стоит режим совместимости «Версия 8.3.10», то добавление реквизитов, меняющих структуру данных, будет технически невозможно. В этом случае система выдаст ошибку при попытке обновления конфигурации базы данных.

Пошаговая инструкция по добавлению реквизита в табличную часть

Предположим, нам необходимо добавить реквизит Префикс_ДополнительнаяИнформация в табличную часть Запасы документа ЗаказПокупателя. Проанализируем правильный алгоритм действий.

Шаг 1. Подготовка объекта в расширении

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

Важный нюанс: системе необходимо обеспечить уникальность имен. Крайне рекомендуется использовать уникальные префиксы для ваших реквизитов (например, Мой_Вес вместо Вес). Это предотвратит конфликты при будущих обновлениях типовой конфигурации от фирмы 1С.

Шаг 2. Настройка хранения данных в SQL

Когда мы добавляем реквизит через расширение, платформа не меняет основную таблицу документа в базе данных. Вместо этого создается вспомогательная таблица с суффиксом _ExtX. Рассмотрим, как это работает: платформа связывает основную запись и дополнительную по уникальному идентификатору. Это позволяет обновлять основную конфигурацию без риска потери данных расширения. Однако помните, что на очень больших объемах данных (миллионы строк) обращение к таким полям может быть чуть медленнее из-за необходимости соединения (JOIN) таблиц на уровне СУБД.

Шаг 3. Заимствование и настройка формы

После добавления реквизита в метаданные расширения, он не появится на форме автоматически. Проанализируем, как вывести его в интерфейс:

  1. Добавьте форму документа в расширение.
  2. В редакторе формы перейдите на закладку «Реквизиты».
  3. Найдите основной реквизит формы (обычно это Объект). Нажмите на него правой кнопкой мыши и выберите «Добавить в расширение». Это критически важный шаг, который позволяет форме «увидеть» изменения в структуре объекта.
  4. Раскройте структуру объекта в реквизитах формы, найдите вашу табличную часть и новый реквизит.
  5. Перетащите этот реквизит в дерево «Элементы» формы, в то место внутри таблицы, где он должен отображаться.

Программная работа с добавленными реквизитами

Посмотрим на пример ситуации, когда нам нужно программно заполнить новый реквизит табличной части при изменении другого поля. Код в расширении пишется так же, как и в основной конфигурации. Мы можем использовать обработчики событий, перехваченные через механизм &После или &Вместо.

Рассмотрим пример кода для обработки изменения цены, где мы записываем дополнительные данные в наш новый реквизит Префикс_Заметка:


&НаКлиенте
Процедура Префикс_ЗапасыЦенаПриИзмененииПосле(Элемент)
    ТекущаяСтрока = Элементы.Запасы.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        // Обращаемся к реквизиту, созданному в расширении
        ТекущаяСтрока.Префикс_Заметка = "Цена изменена пользователем: " + ТекущаяДата();
    КонецЕсли;
КонецПроцедуры

Обратите внимание, что DataPath (путь к данным) для колонки формы должен выглядеть как Объект.Запасы.Префикс_Заметка. Если вы добавили реквизит программно, убедитесь, что тип данных в колонке формы соответствует типу реквизита в метаданных.

Особенности работы в облачных сервисах (1С:Фреш)

Проанализируем ситуацию использования расширений в модели сервиса. Если ваша база данных развернута в 1С:Фреш, любое расширение, которое добавляет реквизиты в табличные части (то есть меняет структуру базы данных), должно проходить обязательный аудит безопасности. Это связано с тем, что такие изменения требуют реструктуризации таблиц на сервере, что может повлиять на работу других арендаторов облака. При разработке для Фреша старайтесь минимизировать количество новых полей или заранее закладывайте время на прохождение проверки.

Полезные советы и ограничения

Выясним, какие еще ограничения существуют при работе с расширенными табличными частями:

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

← На главную