Как при выборе контрагента автоматически заполнить реквизит на основании его региона?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки конфигураций на платформе 1С часто возникает задача автоматического заполнения полей документа или справочника при выборе другого значения. Рассмотрим ситуацию, когда необходимо при выборе Контрагента автоматически подставить определенное значение в реквизит До50 (или КоэффициентДо50), опираясь на его БизнесРегион.

Разбор архитектурной ошибки

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

Реализация через код (Первый этап)

Если задача стоит сделать быстро и прямо сейчас, то необходимо правильно работать с типами данных и ссылками. Рассмотрим пример, как правильно обратиться к реквизиту бизнес-региона при изменении контрагента:


&НаСервере
Процедура КлиентПриИзмененииНаСервере()
    // Получаем ссылку на регион из справочника БизнесРегионы
    РегионМосква = Справочники.БизнесРегионы.НайтиПоНаименованию("Москва", Истина);
    
    // Сравниваем реквизит контрагента с найденной ссылкой
    Если Объект.Клиент.БизнесРегион = РегионМосква Тогда
        Объект.КоэффициентДо50 = 100;
    Иначе
        Объект.КоэффициентДо50 = 0;
    КонецЕсли;
КонецПроцедуры

Важные замечания по реализации:

  1. Типизация данных: Если КоэффициентДо50 имеет тип Число, всегда присваивайте ему числовые значения без кавычек (например, 100, а не "100"). Это предотвратит ошибки при дальнейших расчетах.
  2. Поиск: Параметр Истина в методе НайтиПоНаименованию обеспечивает поиск по полному совпадению, что критически важно для корректной работы логики.
  3. Тип реквизита: Убедитесь, что реквизит БизнесРегион в справочнике Контрагенты имеет тип СправочникСсылка.БизнесРегионы, а не является простой строкой.

Рекомендуемый архитектурный подход: хранение данных в справочнике

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

  1. Добавьте новый реквизит (например, Коэффициент) в справочник БизнесРегионы.
  2. Заполните этот коэффициент для каждого элемента справочника непосредственно в пользовательском режиме (например, в режиме «1С:Предприятие»).
  3. При выборе контрагента вам больше не нужно проверять наименования регионов через код. Вы просто обращаетесь к значению через точку:

// Пример лаконичного и правильного кода:
Если ЗначениеЗаполнено(Объект.Клиент.БизнесРегион) Тогда
    Объект.КоэффициентДо50 = Объект.Клиент.БизнесРегион.Коэффициент;
Иначе
    // Если регион не задан, оставляем возможность ручного ввода
    Объект.КоэффициентДо50 = 0; 
КонецЕсли;

Как обеспечить возможность ручного ввода?

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

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

← На главную