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