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