В процессе разработки на платформе 1С:Предприятие часто возникают ситуации, когда имя реквизита заранее неизвестно и содержится в строковой переменной. Это типичная задача для универсальных механизмов, отчетов или обработок. Рассмотрим, как эффективно и правильно реализовать доступ к данным в управляемых формах.
Самый простой и быстрый способ получить значение реквизита, когда имя реквизита хранится в переменной строкового типа, — это использовать синтаксис квадратных скобок. Платформа 1С позволяет обращаться к полям объекта так же, как к элементам коллекции.
Допустим, у нас есть переменная ИмяРеквизита, содержащая строку «ИНН», и переменная Спр, которая является ссылкой или объектом справочника. Реализуем получение значения следующим образом:
ИмяРеквизита = \"ИНН\";
// Получаем объект из ссылки, если у нас только ссылка
ОбъектСправочника = Спр.ПолучитьОбъект();
// Обращаемся к реквизиту динамически
Значение = ОбъектСправочника[ИмяРеквизита];
Сообщить(Значение);
Этот метод удобен тем, что он короткий и не требует дополнительных вызовов функций. Однако помните, что при обращении к несуществующему реквизиту платформа может вызвать ошибку времени выполнения, поэтому желательно предварительно проверять структуру объекта.
Если вы работаете в конфигурации, где подключена Библиотека Стандартных Подсистем (БСП), рекомендуется использовать типовой метод ОбщегоНазначения.ЗначениеРеквизитаОбъекта. Это «более правильный» подход, так как он стандартизирует получение данных и часто включает в себя дополнительные проверки и механизмы оптимизации.
Разберем, как его использовать:
// Передаем ссылку на объект и имя реквизита в виде строки
ИмяРеквизита = \"Срок\";
Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Спр, ИмяРеквизита);
Сообщить(Значение);
Преимущество данного подхода заключается в том, что функция ОбщегоНазначения.ЗначениеРеквизитаОбъекта корректно работает со ссылками, выполняя обращение к базе данных максимально эффективно. Это позволяет не тратить ресурсы на получение полноценного объекта методом ПолучитьОбъект(), если вам нужно только прочитать одно или несколько значений.
При выполнении подобных задач важно учитывать несколько технических нюансов:
СправочникСсылка. Если необходимо изменить значение реквизита и записать его, обязательно используйте СправочникОбъект, полученный методом ПолучитьОбъект().СоздатьОбъект(\"Справочник...\") и метод ПолучитьАтрибут(). Эти команды относились к устаревшей версии 7.7. В платформе 8.3 для создания элементов используйте менеджеры справочников, например: Справочники.ДоговорыКонтрагентов.СоздатьЭлемент().Метаданные для проверки наличия реквизита у объекта перед обращением к нему. Это поможет избежать критических ошибок при выполнении кода.Подводя итог, можно сказать, что выбор способа зависит от вашей задачи: если нужно быстро прочитать значение, используйте квадратные скобки Спр[ИмяРеквизита], а если вы стремитесь к стандартизированному коду в рамках типовой конфигурации — используйте методы БСП.