Новый реквизит в справочнике или документе 1С 8.3: от конфигуратора до отчёта

· 9 мин

Содержание

Чтобы добавить поле в 1С, откройте конфигуратор, найдите нужный справочник или документ в дереве конфигурации и добавьте в ветку Реквизиты новый реквизит. Затем перетащите его на форму и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Для типовой конфигурации на поддержке надёжнее сделать то же самое в расширении, а если программиста нет — завести дополнительный реквизит прямо в пользовательском режиме.

Типичная ситуация: бухгалтер просит хранить в реализации номер договора поставки покупателя или в карточке контрагента — имя менеджера. Поля в документе нет, а данные нужны и на экране, и в отчёте. Путь у такого поля всегда один: объект → форма → обновление базы → запросы и отчёты. Пропуск любого звена — и поле либо не видно, либо пустое.

Подготовка конфигурации: выбор способа и резервная копия

Сначала решите, где будет жить новое поле. От этого зависит, как пройдут будущие обновления типовой конфигурации.

СпособКогда подходитЦена решения
Реквизит в основной конфигурацииСамописная база или конфигурация уже снята с поддержкиКаждое обновление типовой — сравнение и объединение вручную
Реквизит в расширенииТиповая конфигурация на поддержке, нужна логика или запросыРасширение надо проверять после каждого обновления
Дополнительный реквизит (БСП)Нужно просто хранить значение, без кодаХранится отдельно, в запросах его достают сложнее
Какой способ добавить поле подходит вам?

Перед любым из способов, кроме дополнительных реквизитов, сделайте копию базы : Администрирование → Выгрузить информационную базу в конфигураторе. Получится файл .dt. Изменение структуры данных не отменить кнопкой «Назад» — откат только из копии.

Если решили менять саму типовую конфигурацию , включите возможность изменений:

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

После этого объект перестаёт обновляться автоматически. При каждом обновлении релиза вам придётся объединять свои изменения с изменениями поставщика.

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

Основной путь одинаков для справочников, документов, регистров сведений и планов видов характеристик.

Поле в шапке объекта

  1. В дереве конфигурации раскройте Справочники или Документы и найдите объект, например РеализацияТоваровУслуг.
  2. Раскройте его и выделите ветку Реквизиты.
  3. Нажмите Insert или кнопку «Добавить» на панели дерева.
  4. В палитре свойств задайте имя, синоним и тип.

То же можно сделать в окне редактирования объекта: двойной щелчок по объекту, вкладка «Данные», список «Реквизиты», кнопка «Добавить».

Поле в табличной части

Если значение нужно в каждой строке (например, срок поставки по каждой позиции товара), реквизит добавляют не в шапку, а в табличную часть:

  1. Раскройте объект → Табличные части → нужную часть (Товары, Услуги).
  2. Внутри неё выделите Реквизиты и добавьте новый.

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

Поле в расширении конфигурации

Расширения появились в платформе 8.3.6, а добавлять реквизиты в заимствованные объекты можно в платформе с номером не ниже 8.3.11.

  1. Конфигурация → Расширения конфигурации, кнопка «Добавить». Задайте имя и префикс, например Расш1_.
  2. Откройте дерево расширения.
  3. В дереве основной конфигурации щёлкните правой кнопкой по документу и выберите «Добавить в расширение».
  4. В заимствованном объекте в расширении добавьте реквизит. Имя начните с префикса: Расш1_НомерДоговораПоставки.
  5. Обновите конфигурацию базы данных для расширения.

💡 Префикс страхует от конфликта имён: если поставщик в новом релизе добавит реквизит с таким же именем, расширение не сломается.

Свойства нового поля: тип, длина, проверка заполнения

Палитра свойств реквизита большая, но на практике хватает десятка параметров.

СвойствоЧто задаётПрактический совет
ИмяИдентификатор в коде и запросахБез пробелов, со смыслом: ДатаПоставки, а не Поле1
СинонимПодпись на формеПишите как увидит пользователь
ТипСтрока, Число, Дата, Булево, ссылкаСсылочный тип даёт выбор из списка вместо ручного ввода
Длина / ТочностьРазмер строки или числаДля суммы обычно 15 и 2
НеотрицательноеЗапрет отрицательных чиселДля количеств и сумм
Проверка заполнения«Выдавать ошибку»Документ не запишется с пустым полем
ИндексироватьИндекс в таблице базыТолько если по полю часто отбирают
ПодсказкаТекст при наведенииОбъясните, откуда брать значение

Несколько тонкостей, о которых узнают обычно после первой ошибки:

  • 🔹 Строка неограниченной длины (длина 0) не подходит для сравнений и группировок в запросах и не индексируется. Для номеров и кодов задавайте фиксированную длину, например 50.
  • 🔹 Составной тип (галочка «Составной тип данных») позволяет хранить, например, и контрагента, и физлицо. Но запросы к такому полю медленнее и сложнее, без нужды его не ставьте.
  • 🔹 Тип Дата по умолчанию хранит и время. Если нужна только дата, в свойстве «Квалификаторы даты» выберите «Дата».
  • 🔹 Проверка заполнения на документе срабатывает при проведении и записи. Включите её после того, как заполните старые документы, иначе их нельзя будет перепровести.
  • 🔹 Параметры выбора ограничивают список при выборе. Например, для ссылки на контрагента можно оставить только покупателей.

Как вывести поле на форму документа и справочника

Реквизит в объекте ещё не значит поле на экране. Если у объекта нет своих форм, платформа покажет его на автоматической форме сама. Но у типовых справочников и документов формы свои, и туда поле нужно разместить.

Форма элемента или документа

  1. Раскройте объект → Формы и откройте основную форму, например ФормаДокумента.
  2. Справа вверху на вкладке «Реквизиты» раскройте Объект: там уже есть новое поле.
  3. Перетащите его мышью в дерево «Элементы» слева, в нужную группу.
  4. Проверьте внизу окна предварительный просмотр.

Для табличной части раскройте Объект → Товары и перетащите поле внутрь элемента-таблицы Товары на форме.

Форма списка

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

Без конфигуратора

Если поле уже есть в объекте, но не выведено, пользователь может добавить его сам: Ещё → Изменить форму, затем кнопка «Добавить поля». Настройка сохранится только для этого пользователя.

В расширении форму тоже заимствуют: правой кнопкой по форме → «Добавить в расширение», затем перетаскивают реквизит так же, как в основной конфигурации.

Обновление конфигурации базы данных после добавления поля

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

  1. Проверьте модули: Конфигурация → Проверка модулей или Ctrl+F7.
  2. Выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  3. Конфигуратор покажет список изменений, в том числе таблицы, которые будут реструктуризированы. Примите их.

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

После обновления у всех ранее созданных документов новое поле пустое (значение по умолчанию для типа: пустая строка, 0, пустая дата). Варианты заполнить старые данные:

  • 🔧 обработка «Групповое изменение реквизитов» в типовых конфигурациях на БСП: отбираете документы и задаёте значение всем сразу;
  • 🔧 своя обработка или код в модуле обработчика обновления, если значение вычисляется из других полей;
  • 🔧 заполнение по умолчанию для новых документов: свойство «Значение заполнения» или код в обработчике ОбработкаЗаполнения модуля объекта.

Автозаполнение нового поля кодом

Если значение можно вычислить, проще заполнять его автоматически перед записью. Пример для модуля объекта документа: номер договора берётся из реквизита договора, если пользователь не ввёл его сам.

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если ПустаяСтрока(НомерДоговораПоставки) И ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
		НомерДоговораПоставки = ДоговорКонтрагента.Номер;
	КонецЕсли;

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

Проверка ОбменДанными.Загрузка нужна, чтобы код не срабатывал при загрузке данных из обмена. В расширении тот же код пишут в заимствованном модуле объекта с аннотацией &После("ПередЗаписью").

Новое поле в запросах и отчётах

К обычному реквизиту обращаются в запросе так же, как к типовым полям.

ВЫБРАТЬ
	Реализация.Ссылка КАК Документ,
	Реализация.Контрагент КАК Контрагент,
	Реализация.НомерДоговораПоставки КАК НомерДоговора
ИЗ
	Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
	Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	И Реализация.НомерДоговораПоставки <> ""

Для поля из расширения пишите полное имя с префиксом: Реализация.Расш1_НомерДоговораПоставки.

Для поля табличной части обращайтесь к табличной части как к отдельной таблице:

ВЫБРАТЬ
	Товары.Ссылка КАК Документ,
	Товары.Номенклатура КАК Номенклатура,
	Товары.СрокПоставки КАК СрокПоставки
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК Товары

Как поле попадает в отчёт

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

Дополнительные реквизиты: поле без конфигуратора

В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11 и других) поле можно добавить без программиста. Конфигурация при этом остаётся на поддержке.

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

Отличие от обычного реквизита — в хранении. Значения лежат в табличной части ДополнительныеРеквизиты самого объекта, а вид поля — в плане видов характеристик ДополнительныеРеквизитыИСведения. Поэтому в запросе их выбирают с отбором по свойству:

ВЫБРАТЬ
	ДопРеквизиты.Ссылка КАК Документ,
	ДопРеквизиты.Значение КАК НомерДоговора
ИЗ
	Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
ГДЕ
	ДопРеквизиты.Свойство = &Свойство

В параметр &Свойство передают ссылку на созданный реквизит. Во многих типовых отчётах дополнительные реквизиты доступны в настройках отборов и полей без доработок.

Есть ещё «Дополнительные сведения ». Внешне похожи, но хранятся в отдельном регистре и меняются без записи самого объекта. Их выбирают, когда менять значение должны люди без права редактировать документ.

Частые вопросы о добавлении поля в 1С

Можно ли удалить добавленный реквизит, если он больше не нужен?
Да. Удалите его из объекта и с форм, затем обновите конфигурацию базы данных. Значения, которые хранились в поле, пропадут, поэтому перед удалением сделайте выгрузку.
Почему новое поле не видно пользователям после обновления?
Чаще всего его не вынесли на собственную форму объекта или у роли нет права на чтение. Проверьте форму и роли: если в роли снят флажок «Устанавливать права для реквизитов и табличных частей по умолчанию», право на новое поле нужно выдать вручную.
Как переименовать реквизит без потери данных?
Измените свойство «Имя» в конфигураторе и обновите базу: данные сохранятся, потому что платформа связывает поле по внутреннему идентификатору. Но все упоминания в коде, запросах и макетах придётся поправить вручную через глобальный поиск Ctrl+Shift+F.
Заменят ли обновления типовой конфигурации мой реквизит в расширении?
Нет, расширение хранится отдельно. После обновления проверьте, что оно применилось без ошибок: если поставщик удалил или переименовал заимствованный объект, расширение отключится.
Можно ли добавить поле в регистр накопления так же, как в документ?
Да, но в регистре это реквизит, измерение или ресурс, и роль разная. Значение в регистр попадёт только если дописать его в обработчик проведения документа.