Новый реквизит в справочнике или документе 1С 8.3: от конфигуратора до отчёта
Содержание
Чтобы добавить поле в 1С, откройте конфигуратор, найдите нужный справочник или документ в дереве конфигурации и добавьте в ветку Реквизиты новый реквизит. Затем перетащите его на форму и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Для типовой конфигурации на поддержке надёжнее сделать то же самое в расширении, а если программиста нет — завести дополнительный реквизит прямо в пользовательском режиме.
Типичная ситуация: бухгалтер просит хранить в реализации номер договора поставки покупателя или в карточке контрагента — имя менеджера. Поля в документе нет, а данные нужны и на экране, и в отчёте. Путь у такого поля всегда один: объект → форма → обновление базы → запросы и отчёты. Пропуск любого звена — и поле либо не видно, либо пустое.
Подготовка конфигурации: выбор способа и резервная копия
Сначала решите, где будет жить новое поле. От этого зависит, как пройдут будущие обновления типовой конфигурации.
| Способ | Когда подходит | Цена решения |
|---|---|---|
| Реквизит в основной конфигурации | Самописная база или конфигурация уже снята с поддержки | Каждое обновление типовой — сравнение и объединение вручную |
| Реквизит в расширении | Типовая конфигурация на поддержке, нужна логика или запросы | Расширение надо проверять после каждого обновления |
| Дополнительный реквизит (БСП) | Нужно просто хранить значение, без кода | Хранится отдельно, в запросах его достают сложнее |
Перед любым из способов, кроме дополнительных реквизитов, сделайте копию базы
: Администрирование → Выгрузить информационную базу в конфигураторе. Получится файл .dt. Изменение структуры данных не отменить кнопкой «Назад» — откат только из копии.
Если решили менять саму типовую конфигурацию , включите возможность изменений:
Конфигурация → Открыть конфигурацию.Конфигурация → Поддержка → Настройка поддержки.- Кнопка «Включить возможность изменения», подтвердите.
- Для нужного объекта задайте правило «Объект поставщика редактируется с сохранением поддержки».
После этого объект перестаёт обновляться автоматически. При каждом обновлении релиза вам придётся объединять свои изменения с изменениями поставщика.
Как добавить реквизит в справочник или документ в конфигураторе
Основной путь одинаков для справочников, документов, регистров сведений и планов видов характеристик.
Поле в шапке объекта
- В дереве конфигурации раскройте
СправочникиилиДокументыи найдите объект, напримерРеализацияТоваровУслуг. - Раскройте его и выделите ветку
Реквизиты. - Нажмите Insert или кнопку «Добавить» на панели дерева.
- В палитре свойств задайте имя, синоним и тип.
То же можно сделать в окне редактирования объекта: двойной щелчок по объекту, вкладка «Данные», список «Реквизиты», кнопка «Добавить».
Поле в табличной части
Если значение нужно в каждой строке (например, срок поставки по каждой позиции товара), реквизит добавляют не в шапку, а в табличную часть:
- Раскройте объект →
Табличные части→ нужную часть (Товары,Услуги). - Внутри неё выделите
Реквизитыи добавьте новый.
Поле в табличной части не появится в шапке документа и наоборот. Перенести его потом между уровнями можно только пересозданием, с потерей уже введённых значений.
Поле в расширении конфигурации
Расширения появились в платформе 8.3.6, а добавлять реквизиты в заимствованные объекты можно в платформе с номером не ниже 8.3.11.
Конфигурация → Расширения конфигурации, кнопка «Добавить». Задайте имя и префикс, напримерРасш1_.- Откройте дерево расширения.
- В дереве основной конфигурации щёлкните правой кнопкой по документу и выберите «Добавить в расширение».
- В заимствованном объекте в расширении добавьте реквизит. Имя начните с префикса:
Расш1_НомерДоговораПоставки. - Обновите конфигурацию базы данных для расширения.
💡 Префикс страхует от конфликта имён: если поставщик в новом релизе добавит реквизит с таким же именем, расширение не сломается.
Свойства нового поля: тип, длина, проверка заполнения
Палитра свойств реквизита большая, но на практике хватает десятка параметров.
| Свойство | Что задаёт | Практический совет |
|---|---|---|
| Имя | Идентификатор в коде и запросах | Без пробелов, со смыслом: ДатаПоставки, а не Поле1 |
| Синоним | Подпись на форме | Пишите как увидит пользователь |
| Тип | Строка, Число, Дата, Булево, ссылка | Ссылочный тип даёт выбор из списка вместо ручного ввода |
| Длина / Точность | Размер строки или числа | Для суммы обычно 15 и 2 |
| Неотрицательное | Запрет отрицательных чисел | Для количеств и сумм |
| Проверка заполнения | «Выдавать ошибку» | Документ не запишется с пустым полем |
| Индексировать | Индекс в таблице базы | Только если по полю часто отбирают |
| Подсказка | Текст при наведении | Объясните, откуда брать значение |
Несколько тонкостей, о которых узнают обычно после первой ошибки:
- 🔹 Строка неограниченной длины (длина 0) не подходит для сравнений и группировок в запросах и не индексируется. Для номеров и кодов задавайте фиксированную длину, например 50.
- 🔹 Составной тип (галочка «Составной тип данных») позволяет хранить, например, и контрагента, и физлицо. Но запросы к такому полю медленнее и сложнее, без нужды его не ставьте.
- 🔹 Тип Дата по умолчанию хранит и время. Если нужна только дата, в свойстве «Квалификаторы даты» выберите «Дата».
- 🔹 Проверка заполнения на документе срабатывает при проведении и записи. Включите её после того, как заполните старые документы, иначе их нельзя будет перепровести.
- 🔹 Параметры выбора ограничивают список при выборе. Например, для ссылки на контрагента можно оставить только покупателей.
Как вывести поле на форму документа и справочника
Реквизит в объекте ещё не значит поле на экране. Если у объекта нет своих форм, платформа покажет его на автоматической форме сама. Но у типовых справочников и документов формы свои, и туда поле нужно разместить.
Форма элемента или документа
- Раскройте объект →
Формыи откройте основную форму, напримерФормаДокумента. - Справа вверху на вкладке «Реквизиты» раскройте
Объект: там уже есть новое поле. - Перетащите его мышью в дерево «Элементы» слева, в нужную группу.
- Проверьте внизу окна предварительный просмотр.
Для табличной части раскройте Объект → Товары и перетащите поле внутрь элемента-таблицы Товары на форме.
Форма списка
В списке колонки берутся из динамического списка. Если у динамического списка задана основная таблица, новое поле появится внутри реквизита Список, его так же перетаскивают в таблицу формы. Если список построен на произвольном запросе, сначала допишите поле в этот запрос.
Без конфигуратора
Если поле уже есть в объекте, но не выведено, пользователь может добавить его сам: Ещё → Изменить форму, затем кнопка «Добавить поля». Настройка сохранится только для этого пользователя.
В расширении форму тоже заимствуют: правой кнопкой по форме → «Добавить в расширение», затем перетаскивают реквизит так же, как в основной конфигурации.
Обновление конфигурации базы данных после добавления поля
Пока вы не обновили базу, новое поле существует только в редактируемой конфигурации. Пользователи его не увидят.
- Проверьте модули:
Конфигурация → Проверка модулейили Ctrl+F7. - Выполните
Конфигурация → Обновить конфигурацию базы данных(F7). - Конфигуратор покажет список изменений, в том числе таблицы, которые будут реструктуризированы. Примите их.
Добавление реквизита меняет структуру таблицы, поэтому платформе нужна реструктуризация. Если в базе работают пользователи, конфигуратор сообщит, что не может получить монопольный доступ, или предложит динамическое обновление. Делайте обновление вне рабочих часов или попросите всех выйти из базы: при принудительном завершении сеансов у людей пропадёт несохранённая работа.
После обновления у всех ранее созданных документов новое поле пустое (значение по умолчанию для типа: пустая строка, 0, пустая дата). Варианты заполнить старые данные:
- 🔧 обработка «Групповое изменение реквизитов» в типовых конфигурациях на БСП: отбираете документы и задаёте значение всем сразу;
- 🔧 своя обработка или код в модуле обработчика обновления, если значение вычисляется из других полей;
- 🔧 заполнение по умолчанию для новых документов: свойство «Значение заполнения» или код в обработчике
ОбработкаЗаполнениямодуля объекта.
Автозаполнение нового поля кодом
Если значение можно вычислить, проще заполнять его автоматически перед записью. Пример для модуля объекта документа: номер договора берётся из реквизита договора, если пользователь не ввёл его сам.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(НомерДоговораПоставки) И ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
НомерДоговораПоставки = ДоговорКонтрагента.Номер;
КонецЕсли;
КонецПроцедуры
Проверка ОбменДанными.Загрузка нужна, чтобы код не срабатывал при загрузке данных из обмена. В расширении тот же код пишут в заимствованном модуле объекта с аннотацией &После("ПередЗаписью").
Новое поле в запросах и отчётах
К обычному реквизиту обращаются в запросе так же, как к типовым полям.
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
Реализация.Контрагент КАК Контрагент,
Реализация.НомерДоговораПоставки КАК НомерДоговора
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
И Реализация.НомерДоговораПоставки <> ""
Для поля из расширения пишите полное имя с префиксом: Реализация.Расш1_НомерДоговораПоставки.
Для поля табличной части обращайтесь к табличной части как к отдельной таблице:
ВЫБРАТЬ
Товары.Ссылка КАК Документ,
Товары.Номенклатура КАК Номенклатура,
Товары.СрокПоставки КАК СрокПоставки
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
Как поле попадает в отчёт
- 📊 Отчёт на СКД с вашим запросом. Добавьте поле в запрос набора данных. На вкладке «Наборы данных» оно появится в списке полей, дальше выводите его в варианте отчёта.
- 📊 Отчёты, где выводится ссылка на документ или справочник. В настройках полей такую ссылку можно раскрыть плюсиком и выбрать её реквизит, включая новый. Правка запроса не нужна, но на больших выборках это медленнее: платформа делает дополнительное соединение.
- 📊 Печатная форма. Поле само в печать не попадает: нужно дописать его в запрос печати и в макет. Для типовых конфигураций это тоже делают в расширении или внешней печатной формой.
Дополнительные реквизиты: поле без конфигуратора
В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11 и других) поле можно добавить без программиста. Конфигурация при этом остаётся на поддержке.
Администрирование → Общие настройки, раздел «Дополнительные реквизиты и сведения», включите флажок.- По ссылке «Дополнительные реквизиты» откройте список наборов. Выберите набор нужного объекта, например «Документ Реализация (акт, накладная, УПД)».
- Создайте новый реквизит: наименование, тип значения, при необходимости — обязательность заполнения.
- Откройте любой документ этого вида: поле появится в группе «Дополнительные реквизиты».
Отличие от обычного реквизита — в хранении. Значения лежат в табличной части ДополнительныеРеквизиты самого объекта, а вид поля — в плане видов характеристик ДополнительныеРеквизитыИСведения. Поэтому в запросе их выбирают с отбором по свойству:
ВЫБРАТЬ
ДопРеквизиты.Ссылка КАК Документ,
ДопРеквизиты.Значение КАК НомерДоговора
ИЗ
Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
ГДЕ
ДопРеквизиты.Свойство = &Свойство
В параметр &Свойство передают ссылку на созданный реквизит. Во многих типовых отчётах дополнительные реквизиты доступны в настройках отборов и полей без доработок.
Есть ещё «Дополнительные сведения ». Внешне похожи, но хранятся в отдельном регистре и меняются без записи самого объекта. Их выбирают, когда менять значение должны люди без права редактировать документ.