К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как установить значение реквизита по умолчанию в 1С

Как задать значение реквизита по умолчанию в 1С: свойство «Значение заполнения», подписки на события, процедура ОбработкаЗаполнения и настройки пользователя.

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

Способов задать такое значение несколько: от простого свойства «Значение заполнения» в конфигураторе до программной логики в процедуре ОбработкаЗаполнения и подписок на события. Выбор зависит от того, является значение константой, зависит ли оно от текущего пользователя или вычисляется по данным других объектов.

Ниже разобраны основные механизмы с примерами кода, условиями выбора каждого варианта, типичными ошибками и способами проверить результат. Материал ориентирован на конфигурации с управляемым приложением (1С:Предприятие 8.3), но большинство приёмов работает и в обычных формах.

Способы задать значение по умолчанию: что выбрать

Платформа предлагает несколько уровней механизмов, и они не взаимозаменяемы полностью. Свойство «Значение заполнения» работает только с константными значениями и ссылками на предопределённые элементы. Процедура ОбработкаЗаполнения позволяет вычислять значение программно. Подписки на события дают централизованную логику сразу для группы объектов. Настройки пользователя вообще не требуют изменения конфигурации.

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

Сравнение вариантов

Свойство «Значение заполнения»

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

Процедура ОбработкаЗаполнения

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

Подписка на событие

Централизованная логика для нескольких видов объектов. Удобна для доработки типовых конфигураций без изменения типового кода.

Настройки пользователя

Работают без доработки конфигурации, но доступны только там, где это предусмотрено типовым решением.

Значение по умолчанию через конфигуратор

Самый простой способ — свойство реквизита «Значение заполнения». Оно доступно у реквизитов справочников, документов, планов счетов и других объектов. Откройте конфигуратор, найдите нужный объект, перейдите на закладку «Данные», выделите реквизит и откройте палитру свойств.

В поле «Значение заполнения» можно указать конкретное значение, соответствующее типу реквизита: строку, число, дату, булево или ссылку на элемент справочника или перечисления. Например, для реквизита «Валюта» типа «СправочникСсылка.Валюты» можно выбрать конкретную валюту, и она будет подставляться в каждый новый документ.

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

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

Программная установка через ОбработкаЗаполнения

Когда значение нужно вычислить, используется событие ОбработкаЗаполнения в модуле объекта. Оно вызывается при создании нового объекта — как интерактивно, так и программно, в том числе при вводе на основании. Внутри процедуры доступен параметр ДанныеЗаполнения, через который приходит объект-основание.

Типовой пример — подстановка текущего пользователя в реквизит «Ответственный» и организации из настроек:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();

Если НЕ ЗначениеЗаполнено(Организация) Тогда

Организация = Справочники.Организации.НайтиПоНаименованию("Основная организация");

КонецЕсли;

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

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

В типовых конфигурациях на библиотеке стандартных подсистем (БСП) прямое изменение модуля объекта нежелательно: при обновлении правки могут конфликтовать с типовым кодом. Правильнее выносить логику в подписку на событие или в расширение конфигурации.

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

Подписка на событие «ОбработкаЗаполнения» позволяет задать значения по умолчанию сразу для нескольких видов документов или справочников, не редактируя их модули. Это основной способ доработки типовых конфигураций: типовой код остаётся нетронутым, и обновление проходит без конфликтов.

Чтобы создать подписку, добавьте в конфигураторе общий модуль с флагом «Сервер», затем создайте подписку на событие, укажите источник (например, «ДокументОбъект» или конкретные виды документов), событие «ОбработкаЗаполнения» и процедуру-обработчик из общего модуля.

Процедура УстановитьЗначенияПоУмолчанию(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт

Если ТипЗнч(Источник) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда

Если НЕ ЗначениеЗаполнено(Источник.Склад) Тогда

Источник.Склад = ПолучитьСкладПоУмолчанию();

КонецЕсли;

КонецЕсли;

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

У подписок есть нюанс производительности: обработчик вызывается для каждого объекта из списка источников, поэтому внутри не должно быть тяжёлых запросов без необходимости. Значения, которые не меняются в течение сеанса (например, склад из константы), разумно кэшировать.

Значения по умолчанию без доработки конфигурации

Во многих типовых конфигурациях часть значений по умолчанию настраивается прикладными средствами. В «1С:Бухгалтерии», «1С:Управление торговлей» и других решениях есть персональные настройки пользователя: основная организация, основной склад, основное подразделение. Они задаются в разделе персональных настроек и автоматически подставляются в новые документы конкретного пользователя.

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

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

Маршрут решения

Как выбрать действие

Значение одно для всех пользователей и не меняетсяИспользуйте свойство «Значение заполнения» в конфигураторе
Значение зависит от пользователя или контекстаРеализуйте логику в ОбработкаЗаполнения или подписке на событие
Конфигурация типовая и на поддержкеПрименяйте расширение или подписку, не меняя типовые модули
Доработка невозможнаПроверьте персональные настройки пользователя и константы в режиме предприятия

Проверка результата и типичные ошибки

После настройки проверьте поведение в трёх сценариях: создание документа кнопкой «Создать», ввод на основании другого документа и копирование существующего. В каждом случае реквизит должен получить ожидаемое значение, а при вводе на основании — не перезаписать данные основания.

Также проверьте работу под разными пользователями, если значение персональное. Частая ситуация: разработчик проверяет под собой с полными правами, а у рядового пользователя настройка не срабатывает из-за ограничений доступа к справочнику, из которого читается значение.

Типичные ошибки
01
Присваивание значения без проверки ЗначениеЗаполнено — данные основания затираются при вводе на основании.
02
Поиск элемента справочника по наименованию вместо предопределённого элемента или константы — при переименовании элемента логика ломается.
03
Размещение кода в обработчике формы ПриСозданииНаСервере вместо модуля объекта — при программном создании объекта значение не заполняется.
04
Изменение типового модуля без расширения — конфликты при обновлении конфигурации.
05
Тяжёлые запросы в обработчике заполнения — замедление создания каждого нового объекта.
Контрольные точки

Как проверить результат

Создание нового документа
Норма

Реквизит заполнен ожидаемым значением

Тревожный признак

Поле пустое или содержит устаревшее значение

Ввод на основании
Норма

Значение берётся из основания, умолчание не перезаписывает его

Тревожный признак

Данные основания затираются значением по умолчанию

Работа под другим пользователем
Норма

Подставляется персональное значение или общее умолчание

Тревожный признак

Ошибка доступа или пустое поле

Копирование документа
Норма

Реквизит копируется или осознанно сбрасывается

Тревожный признак

Непредсказуемое смешение старых и новых значений

Частые вопросы

Почему значение по умолчанию не подставляется, хотя свойство «Значение заполнения» задано?

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

Как задать значение по умолчанию разным пользователям по-разному?

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

Можно ли задать значение по умолчанию без доступа к конфигуратору?

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

Чем расширение лучше изменения типового модуля?

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

Как заполнить значениями по умолчанию уже созданные документы?

Механизмы заполнения работают только при создании объекта. Для существующих данных напишите сервисную обработку: выберите документы с пустым реквизитом, присвойте значение и запишите. Перед запуском сделайте резервную копию и сначала проверьте обработку на небольшой выборке.

Почему при копировании документа подставляется не то значение?

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

Итог

Что важно запомнить

Для константных значений используйте свойство «Значение заполнения», для вычисляемых — ОбработкаЗаполнения или подписку на событие. Типовые конфигурации дорабатывайте через расширения, всегда проверяйте заполненность реквизита перед присваиванием и тестируйте создание, ввод на основании и копирование.