В процессе разработки конфигураций на платформе 1С часто возникает задача автоматического заполнения полей документа или справочника при выборе другого значения. Рассмотрим ситуацию, когда необходимо при выборе Контрагента автоматически подставить определенное значение в реквизит До50 (или КоэффициентДо50), опираясь на его БизнесРегион.
Часто на начальном этапе разработчики пытаются реализовать логику через жестко прописанные условия в коде, например, используя конструкцию Если... Иначе Если. Хотя этот способ кажется простым, он является тупиковым для масштабируемых систем. Если у вас появится новый регион или изменится коэффициент, вам придется каждый раз вносить правки в программный код модуля, что неудобно и ненадежно.
Если задача стоит сделать быстро и прямо сейчас, то необходимо правильно работать с типами данных и ссылками. Рассмотрим пример, как правильно обратиться к реквизиту бизнес-региона при изменении контрагента:
&НаСервере
Процедура КлиентПриИзмененииНаСервере()
// Получаем ссылку на регион из справочника БизнесРегионы
РегионМосква = Справочники.БизнесРегионы.НайтиПоНаименованию("Москва", Истина);
// Сравниваем реквизит контрагента с найденной ссылкой
Если Объект.Клиент.БизнесРегион = РегионМосква Тогда
Объект.КоэффициентДо50 = 100;
Иначе
Объект.КоэффициентДо50 = 0;
КонецЕсли;
КонецПроцедуры
Важные замечания по реализации:
КоэффициентДо50 имеет тип Число, всегда присваивайте ему числовые значения без кавычек (например, 100, а не "100"). Это предотвратит ошибки при дальнейших расчетах.Истина в методе НайтиПоНаименованию обеспечивает поиск по полному совпадению, что критически важно для корректной работы логики.БизнесРегион в справочнике Контрагенты имеет тип СправочникСсылка.БизнесРегионы, а не является простой строкой.Чтобы избежать написания множества условий для каждого региона, лучшим решением будет вынос коэффициентов непосредственно в справочник БизнесРегионы. Давайте разберем, почему это наиболее эффективный путь:
Коэффициент) в справочник БизнесРегионы.
// Пример лаконичного и правильного кода:
Если ЗначениеЗаполнено(Объект.Клиент.БизнесРегион) Тогда
Объект.КоэффициентДо50 = Объект.Клиент.БизнесРегион.Коэффициент;
Иначе
// Если регион не задан, оставляем возможность ручного ввода
Объект.КоэффициентДо50 = 0;
КонецЕсли;
Часто пользователи хотят иметь возможность изменить значение коэффициента вручную, если автоматическая подстановка им не подходит. Чтобы реализовать гибкость, выполним следующие шаги:
БизнесРегион (условие ЗначениеЗаполнено возвращает Ложь), система не должна принудительно устанавливать значение. В этом случае поле остается пустым или доступным для ввода пользователем.ЗначениеЗаполнено перед обращением к реквизитам. Это поможет избежать ошибок обращения к неопределенным значениям.Клиент система перезаписывает коэффициент, а при необходимости сохранения ручного ввода — добавьте флаг-признак ручной корректировки.Применяя данные рекомендации, вы получите чистый, легко поддерживаемый код, который не требует переписывания при появлении новых бизнес-регионов. Пользователи смогут самостоятельно настраивать коэффициенты через справочник, а работа системы станет стабильнее и быстрее за счет отказа от лишних методов поиска в базе данных.