При разработке конфигураций на платформе 1С часто возникает задача передачи данных одного справочника в другой или отображения связи между ними в печатных формах. Поиск элементов по коду или наименованию часто приводит к ошибкам из-за дублей. Давайте разберем, как реализовать этот процесс профессионально и надежно.
Самый надежный способ связать два справочника — не искать элемент по строковым полям, а использовать тип данных СправочникСсылка. В 1С ссылка является уникальным указателем на объект в базе данных.
В конфигураторе создайте реквизит с типом СправочникСсылка.[ИмяВашегоСправочника]. Передача данных при этом осуществляется простым присваиванием:
// Присваиваем ссылку другому объекту
НовыйЭлемент.РеквизитСвязи = ВыбраннаяСсылка;
НовыйЭлемент.Записать();
Такой подход гарантирует, что система обратится именно к тому объекту, который был выбран, вне зависимости от его наименования или кода.
Если вам нужно получить ссылку, имея на руках только строковое представление идентификатора (например, при импорте данных из внешних систем), используйте УникальныйИдентификатор. Это исключит проблему неоднозначности поиска.
// Получение ссылки по строке GUID
СтрокаGUID = \"3b241334-a4b5-11e9-80bf-0050569e1f57\";
Идентификатор = Новый УникальныйИдентификатор(СтрокаGUID);
НайденнаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Идентификатор);
Методы типа НайтиПоНаименованию часто подводят, если в базе есть несколько элементов с одинаковыми именами. Чтобы избежать ошибок, используйте Запрос. Это позволит добавить дополнительные условия, например, проверку на владельца, ИНН или другие реквизиты.
Запрос = Новый Запрос;
Запрос.Текст = \"ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ Наименование = &Наименование И ИНН = &ИНН\";
Запрос.УстановитьПараметр(\"Наименование\", \"ООО Ромашка\");
Запрос.УстановитьПараметр(\"ИНН\", \"7701234567\");
Результат = Запрос.Выполнить();
Если ваша задача — вывести данные в печатную форму (табличный документ) так, чтобы пользователь мог кликнуть по тексту и перейти в карточку элемента, используйте механизм Расшифровка. Это стандартный способ связи ячейки отчета или печатной формы с объектом базы данных.
Расшифровка.
Область = Макет.ПолучитьОбласть(\"Строка\");
Область.Параметры.Контрагент = СсылкаНаКонтрагента;
// Установка расшифровки
Область.Параметры.Расшифровка = СсылкаНаКонтрагента;
ТабДок.Вывести(Область);
После этого, при нажатии на ячейку в 1С, платформа автоматически откроет форму соответствующего элемента. Это делает интерфейс программы интуитивно понятным и удобным для конечного пользователя.
Чтобы избежать проблем с поиском элементов:
СправочникСсылка), а не строковым данным.ОткрытьФорму() или через событие НачалоВыбора реквизита.Запрос с жесткими условиями фильтрации.Расшифровка, которое связывает визуальный текст с объектной моделью данных 1С.Применяя эти методы, вы обеспечите высокую точность работы вашей конфигурации и удобство для пользователей.