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