Здравствуйте форумчане. Возникла проблема.

Есть документ с табличной частью. В ней есть поле "Номенклатура" с типом СправочникСсылка. По умолчанию необходимо сделать так, чтобы при наборе в списке выбора высвечивалось не только название, но и штрихкод номенклатуры. Причем именно при наборе, а не в форме выбора. При этом представление элемента менять нельзя, это должно быть просто название.

В модуле менеджера справочника номенклатура я изменил данные выбора

```1c
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = ОбщийМодульСервер.ПолучитьДанныеВыбораДляНоменклатуры(Параметры.СтрокаПоиска)
    КонецПроцедуры
```

В параметр ДанныеВыбора попадает переменная с типом СписокЗначений, в которой каждый элемент это строка где наименование номенклатуры соединено со штрихкодом.

В модуле формы я добавил процедуру обработки выбора

```1c
    &НаКлиенте
    Процедура НоменклатураНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ШтрихкодИзПредставления = ПолучитьШтрихкодИзПредставления(ВыбранноеЗначение);
    Ссылка = ПолучитьНоменклатуруПоШтрихкодуБезКонтекста(ШтрихкодИзПредставления);
    Элемент = Ссылка;
    КонецПроцедуры
```

В отладчике в переменную Элемент попадает ссылка на нужный элемент справочника, при этом на форме при выборе элемента ничего не происходит, ссылка в поле не попадает. В чем может быть причина?
---
Решение найдено.

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

```1c
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = ПолучитьДанныеВыбораДляНоменклатуры(Параметры.СтрокаПоиска)
    КонецПроцедуры

    Функция ПолучитьДанныеВыбораДляНоменклатуры(Элемент)
    СписокНоменклатур = Новый СписокЗначений;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СправчникНоменклатура.Наименование + " (" + ШтрихкодыНоменклатуры.Штрихкод + ")" КАК Представление,
    | СправчникНоменклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК СправчникНоменклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    | ПО (ШтрихкодыНоменклатуры.Номенклатура = СправчникНоменклатура.Ссылка)
    |ГДЕ
    | СправчникНоменклатура.Наименование ПОДОБНО &Наименование";

    Запрос.УстановитьПараметр("Наименование", "%" + Элемент + "%");

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    СписокНоменклатур.Добавить(Выборка.Ссылка, Выборка.Представление)
    КонецЦикла;

    Возврат СписокНоменклатур
    КонецФункции
```
---
Добрый день! Вопрос - актуален ? Если "да", приложите, пожалуйста, скриншот формы , при выборе значения
---
актуален

Справа в скобках это штрихкоды
---
```1c
    Элемент = Ссылка;
```

Вы элементу формы присваиваете значение.
А надо колонке строки табличной части.
---
А СписокЗначений , как формируете ? Представление - это наименование номенклатуры, соединенное со штрихкодом ? А Значение - ссылка на номенклатуру ?
---
Список значений формируется через запрос с условием Где Подобно %НаименованиеНоменклатуры%, там я объединяю два поля в представление где имя номенклатуры и штрихкод идут уже вместе.

ВыбранноеЗначение это тоже самое, то есть тоже строка. Но затем я с помощью 2 функций (ПолучитьШтрихкодИзПредставления и ПолучитьНоменклатуруПоШтрихкодуБезКонтекста) получаю ссылку, которую передаю в Элемент.
---
ВыбранноеЗначение это тоже самое

Не ВыбранноеЗначение, а значение элемента СписокЗначений. Если значение = ссылка в номенклатуре, при выборе значения нет необходимости в 2-х функциях
---
Значение это строка. 2 функции нужны для следующего
1) Вытаскивает штрихкод из строки
2) Получает ссылку по штрихкоду

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

элемент.значение
или элемент.текст
еще куда не шло но элемент = ссылка это бред
---
Я в синтаксисе не увидел для чего используется Элемент. Но я точно знаю, что в данных выбора должны быть ссылки.
---
что такое данные выбора? есть элементы на форме у них определенный тип ПолеФормы никаких ссылок с типом СправочникСсылка на форме быть не может
---
Решение найдено.

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

```1c
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = ПолучитьДанныеВыбораДляНоменклатуры(Параметры.СтрокаПоиска)
    КонецПроцедуры

    Функция ПолучитьДанныеВыбораДляНоменклатуры(Элемент)
    СписокНоменклатур = Новый СписокЗначений;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СправчникНоменклатура.Наименование + " (" + ШтрихкодыНоменклатуры.Штрихкод + ")" КАК Представление,
    | СправчникНоменклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК СправчникНоменклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    | ПО (ШтрихкодыНоменклатуры.Номенклатура = СправчникНоменклатура.Ссылка)
    |ГДЕ
    | СправчникНоменклатура.Наименование ПОДОБНО &Наименование";

    Запрос.УстановитьПараметр("Наименование", "%" + Элемент + "%");

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    СписокНоменклатур.Добавить(Выборка.Ссылка, Выборка.Представление)
    КонецЦикла;

    Возврат СписокНоменклатур
    КонецФункции
```
---
ну или так)
---
Ну или так) Правда, не знаю, почему сразу этого не сделали, когда об этом спросили в 6 ответе
---
Вообще, на будущее, в таких случаях синтакс-помощник может помочь) В котором написано подобное:
---
Это конечно да. Мне вообще в голову не приходило, что суть в том, как задать СписокЗначений.
---
В этой процедуре

```1c
    &НаКлиенте
    Процедура НоменклатураНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ШтрихкодИзПредставления = ПолучитьШтрихкодИзПредставления(ВыбранноеЗначение);
    Ссылка = ПолучитьНоменклатуруПоШтрихкодуБезКонтекста(ШтрихкодИзПредставления);
    Элемент = Ссылка;
    КонецПроцедуры
```

Нужно сделать так:

```1c
    &НаКлиенте
    Процедура НоменклатураНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ШтрихкодИзПредставления = ПолучитьШтрихкодИзПредставления(ВыбранноеЗначение);
    Ссылка = ПолучитьНоменклатуруПоШтрихкодуБезКонтекста(ШтрихкодИзПредставления);
    ВыбранноеЗначение = Ссылка;
    КонецПроцедуры
```
---
Я понял свою ошибку. Спасибо за совет, но решение на сомом деле гораздо проще.