Разработка и Конфигурация · 11 мин
Как установить значение реквизита по умолчанию в 1С
Как задать значение реквизита по умолчанию в 1С: свойство «Значение заполнения», подписки на события, процедура ОбработкаЗаполнения и настройки пользователя.
Значение реквизита по умолчанию в 1С — это данные, которые платформа подставляет автоматически при создании нового объекта: документа, элемента справочника или записи регистра. Правильно настроенные значения по умолчанию ускоряют ввод, снижают количество ошибок и избавляют пользователя от рутинного заполнения однотипных полей вроде организации, валюты, склада или ответственного.
Способов задать такое значение несколько: от простого свойства «Значение заполнения» в конфигураторе до программной логики в процедуре ОбработкаЗаполнения и подписок на события. Выбор зависит от того, является значение константой, зависит ли оно от текущего пользователя или вычисляется по данным других объектов.
Ниже разобраны основные механизмы с примерами кода, условиями выбора каждого варианта, типичными ошибками и способами проверить результат. Материал ориентирован на конфигурации с управляемым приложением (1С:Предприятие 8.3), но большинство приёмов работает и в обычных формах.
Способы задать значение по умолчанию: что выбрать
Платформа предлагает несколько уровней механизмов, и они не взаимозаменяемы полностью. Свойство «Значение заполнения» работает только с константными значениями и ссылками на предопределённые элементы. Процедура ОбработкаЗаполнения позволяет вычислять значение программно. Подписки на события дают централизованную логику сразу для группы объектов. Настройки пользователя вообще не требуют изменения конфигурации.
Ключевой критерий выбора — природа значения. Если оно одно и то же для всех пользователей и всех документов (например, вид операции или признак проведения), достаточно свойства в конфигураторе. Если значение зависит от того, кто вводит документ, или от данных основания, нужна программная логика.
Сравнение вариантов
Подходит для константных значений. Не требует кода, но не умеет вычислять значение по контексту.
Позволяет вычислить значение по пользователю, основанию или функциональной опции. Требует изменения модуля объекта.
Централизованная логика для нескольких видов объектов. Удобна для доработки типовых конфигураций без изменения типового кода.
Работают без доработки конфигурации, но доступны только там, где это предусмотрено типовым решением.
Значение по умолчанию через конфигуратор
Самый простой способ — свойство реквизита «Значение заполнения». Оно доступно у реквизитов справочников, документов, планов счетов и других объектов. Откройте конфигуратор, найдите нужный объект, перейдите на закладку «Данные», выделите реквизит и откройте палитру свойств.
В поле «Значение заполнения» можно указать конкретное значение, соответствующее типу реквизита: строку, число, дату, булево или ссылку на элемент справочника или перечисления. Например, для реквизита «Валюта» типа «СправочникСсылка.Валюты» можно выбрать конкретную валюту, и она будет подставляться в каждый новый документ.
Ограничение способа принципиальное: значение фиксировано на момент разработки. Платформа подставит его всем пользователям одинаково, независимо от их роли, подразделения или ранее введённых документов. Если хотя бы одному пользователю нужно другое значение, механизм уже не подходит.
- 1Откройте конфигуратор и найдите объект (справочник или документ) в дереве конфигурации.
- 2Перейдите на закладку «Данные» и выделите нужный реквизит.
- 3Откройте палитру свойств и найдите свойство «Значение заполнения».
- 4Укажите константное значение, соответствующее типу реквизита.
- 5Обновите конфигурацию базы данных и проверьте создание нового объекта в режиме предприятия.
Программная установка через ОбработкаЗаполнения
Когда значение нужно вычислить, используется событие ОбработкаЗаполнения в модуле объекта. Оно вызывается при создании нового объекта — как интерактивно, так и программно, в том числе при вводе на основании. Внутри процедуры доступен параметр ДанныеЗаполнения, через который приходит объект-основание.
Типовой пример — подстановка текущего пользователя в реквизит «Ответственный» и организации из настроек:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();
Если НЕ ЗначениеЗаполнено(Организация) Тогда
Организация = Справочники.Организации.НайтиПоНаименованию("Основная организация");
КонецЕсли;
КонецПроцедуры
Обратите внимание на проверку ЗначениеЗаполнено перед присваиванием. Если документ вводится на основании и реквизит уже заполнен из основания, перезаписывать его не нужно — иначе вы затрёте данные, которые пользователь ожидает увидеть из исходного документа.
В типовых конфигурациях на библиотеке стандартных подсистем (БСП) прямое изменение модуля объекта нежелательно: при обновлении правки могут конфликтовать с типовым кодом. Правильнее выносить логику в подписку на событие или в расширение конфигурации.
Подписки на события для централизованной логики
Подписка на событие «ОбработкаЗаполнения» позволяет задать значения по умолчанию сразу для нескольких видов документов или справочников, не редактируя их модули. Это основной способ доработки типовых конфигураций: типовой код остаётся нетронутым, и обновление проходит без конфликтов.
Чтобы создать подписку, добавьте в конфигураторе общий модуль с флагом «Сервер», затем создайте подписку на событие, укажите источник (например, «ДокументОбъект» или конкретные виды документов), событие «ОбработкаЗаполнения» и процедуру-обработчик из общего модуля.
Процедура УстановитьЗначенияПоУмолчанию(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
Если НЕ ЗначениеЗаполнено(Источник.Склад) Тогда
Источник.Склад = ПолучитьСкладПоУмолчанию();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
У подписок есть нюанс производительности: обработчик вызывается для каждого объекта из списка источников, поэтому внутри не должно быть тяжёлых запросов без необходимости. Значения, которые не меняются в течение сеанса (например, склад из константы), разумно кэшировать.
Значения по умолчанию без доработки конфигурации
Во многих типовых конфигурациях часть значений по умолчанию настраивается прикладными средствами. В «1С:Бухгалтерии», «1С:Управление торговлей» и других решениях есть персональные настройки пользователя: основная организация, основной склад, основное подразделение. Они задаются в разделе персональных настроек и автоматически подставляются в новые документы конкретного пользователя.
Дополнительно работает механизм запоминания последних значений: платформа и прикладной код часто подставляют в новый документ данные из предыдущего документа того же пользователя. Это не настраиваемое свойство, а встроенное поведение, которое стоит учитывать: если пользователь вводит разнородные документы, подставленное значение может оказаться не тем, что ожидалось.
Ещё один инструмент — функциональные опции и константы. Например, если в программе ведётся учёт по одной организации, константа с основной организацией может использоваться типовым кодом как источник значения по умолчанию. Прежде чем дорабатывать конфигурацию, проверьте, не закрывает ли задачу штатная настройка.
Как выбрать действие
Проверка результата и типичные ошибки
После настройки проверьте поведение в трёх сценариях: создание документа кнопкой «Создать», ввод на основании другого документа и копирование существующего. В каждом случае реквизит должен получить ожидаемое значение, а при вводе на основании — не перезаписать данные основания.
Также проверьте работу под разными пользователями, если значение персональное. Частая ситуация: разработчик проверяет под собой с полными правами, а у рядового пользователя настройка не срабатывает из-за ограничений доступа к справочнику, из которого читается значение.
Как проверить результат
Реквизит заполнен ожидаемым значением
Поле пустое или содержит устаревшее значение
Значение берётся из основания, умолчание не перезаписывает его
Данные основания затираются значением по умолчанию
Подставляется персональное значение или общее умолчание
Ошибка доступа или пустое поле
Реквизит копируется или осознанно сбрасывается
Непредсказуемое смешение старых и новых значений
Частые вопросы
Почему значение по умолчанию не подставляется, хотя свойство «Значение заполнения» задано?
Чаще всего конфигурация базы данных не обновлена после изменения, либо реквизит заполняется в типовом коде ОбработкаЗаполнения, который перекрывает значение. Также проверьте, не очищается ли поле в обработчике формы. Обновите конфигурацию БД и протестируйте заново.
Как задать значение по умолчанию разным пользователям по-разному?
Используйте программную логику: в ОбработкаЗаполнения или подписке определите текущего пользователя и подставьте связанное с ним значение — например, из регистра сведений с настройками пользователей или из реквизита элемента справочника «Пользователи». В типовых конфигурациях часть таких настроек уже доступна в персональных настройках.
Можно ли задать значение по умолчанию без доступа к конфигуратору?
Да, если типовая конфигурация это поддерживает: персональные настройки пользователя, константы, механизмы подстановки основной организации или склада. Если штатных средств нет, без доработки конфигурации или расширения обойтись не получится.
Чем расширение лучше изменения типового модуля?
Расширение не меняет типовой код, поэтому конфигурация остаётся на полной поддержке и обновляется штатно. Доработка через расширение накладывается поверх типовой логики и при обновлении требует лишь проверки совместимости, а не повторного сравнения модулей.
Как заполнить значениями по умолчанию уже созданные документы?
Механизмы заполнения работают только при создании объекта. Для существующих данных напишите сервисную обработку: выберите документы с пустым реквизитом, присвойте значение и запишите. Перед запуском сделайте резервную копию и сначала проверьте обработку на небольшой выборке.
Почему при копировании документа подставляется не то значение?
При копировании платформа переносит значения из исходного объекта, а затем вызывает ОбработкаЗаполнения. Если в коде нет проверки ЗначениеЗаполнено, умолчание перезапишет скопированное значение. Решите осознанно, что должно происходить при копировании, и закрепите это в логике обработчика.
Что важно запомнить
Для константных значений используйте свойство «Значение заполнения», для вычисляемых — ОбработкаЗаполнения или подписку на событие. Типовые конфигурации дорабатывайте через расширения, всегда проверяйте заполненность реквизита перед присваиванием и тестируйте создание, ввод на основании и копирование.