Представление в списке выбора поля формы

1. MikhailDr 07.11.19 11:55 Сейчас в теме
Здравствуйте форумчане. Возникла проблема.

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

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

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


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

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

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


В отладчике в переменную Элемент попадает ссылка на нужный элемент справочника, при этом на форме при выборе элемента ничего не происходит, ссылка в поле не попадает. В чем может быть причина?
По теме из базы знаний
Найденные решения
11. MikhailDr 07.11.19 13:47 Сейчас в теме
Решение найдено.

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

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

Функция ПолучитьДанныеВыбораДляНоменклатуры(Элемент)
	СписокНоменклатур = Новый СписокЗначений;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СправчникНоменклатура.Наименование + "" ("" + ШтрихкодыНоменклатуры.Штрихкод + "")"" КАК Представление,
		|	СправчникНоменклатура.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК СправчникНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		|		ПО (ШтрихкодыНоменклатуры.Номенклатура = СправчникНоменклатура.Ссылка)
		|ГДЕ
		|	СправчникНоменклатура.Наименование ПОДОБНО &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", "%" + Элемент + "%");
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СписокНоменклатур.Добавить(Выборка.Ссылка, Выборка.Представление)
	КонецЦикла;
	
	Возврат СписокНоменклатур
КонецФункции
Показать
idjumatov; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. uk09 07.11.19 13:08 Сейчас в теме
(1) Добрый день! Вопрос - актуален ? Если "да", приложите, пожалуйста, скриншот формы , при выборе значения
3. MikhailDr 07.11.19 13:13 Сейчас в теме
(2) актуален

Справа в скобках это штрихкоды
Прикрепленные файлы:
10. Sashares 34 07.11.19 13:45 Сейчас в теме
(1)
 Элемент = Ссылка;

Вы элементу формы присваиваете значение.
А надо колонке строки табличной части.
4. uk09 07.11.19 13:26 Сейчас в теме
А СписокЗначений , как формируете ? Представление - это наименование номенклатуры, соединенное со штрихкодом ? А Значение - ссылка на номенклатуру ?
5. MikhailDr 07.11.19 13:31 Сейчас в теме
(4) Список значений формируется через запрос с условием Где Подобно %НаименованиеНоменклатуры%, там я объединяю два поля в представление где имя номенклатуры и штрихкод идут уже вместе.

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


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

В принципе это можно сделать в рамках одной функции, но я просто привык все делить на логические блоки, не люблю большие функции
7. user623969_dusa 07.11.19 13:38 Сейчас в теме
(5) я впервые встречаю такую конструкцию в элемент процедуры выбора передать ссылку и что должно произойти? тип элемента = полеформы зачем туда пихать ссылку??

элемент.значение
или элемент.текст
еще куда не шло но элемент = ссылка это бред
9. MikhailDr 07.11.19 13:44 Сейчас в теме
(7) Я в синтаксисе не увидел для чего используется Элемент. Но я точно знаю, что в данных выбора должны быть ссылки.
13. user623969_dusa 07.11.19 13:48 Сейчас в теме
(9) что такое данные выбора? есть элементы на форме у них определенный тип ПолеФормы никаких ссылок с типом СправочникСсылка на форме быть не может
11. MikhailDr 07.11.19 13:47 Сейчас в теме
Решение найдено.

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

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

Функция ПолучитьДанныеВыбораДляНоменклатуры(Элемент)
	СписокНоменклатур = Новый СписокЗначений;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СправчникНоменклатура.Наименование + "" ("" + ШтрихкодыНоменклатуры.Штрихкод + "")"" КАК Представление,
		|	СправчникНоменклатура.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК СправчникНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		|		ПО (ШтрихкодыНоменклатуры.Номенклатура = СправчникНоменклатура.Ссылка)
		|ГДЕ
		|	СправчникНоменклатура.Наименование ПОДОБНО &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", "%" + Элемент + "%");
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СписокНоменклатур.Добавить(Выборка.Ссылка, Выборка.Представление)
	КонецЦикла;
	
	Возврат СписокНоменклатур
КонецФункции
Показать
idjumatov; +1 Ответить
14. user623969_dusa 07.11.19 13:49 Сейчас в теме
16. Kovekh 07.11.19 13:49 Сейчас в теме
(11) Ну или так) Правда, не знаю, почему сразу этого не сделали, когда об этом спросили в 6 ответе
17. Kovekh 07.11.19 13:58 Сейчас в теме
(11) Вообще, на будущее, в таких случаях синтакс-помощник может помочь) В котором написано подобное:
СписокЗначений (ValueList)
Добавить (Add)
Синтаксис:

Добавить(<Значение>, <Представление>, <Пометка>, <Картинка>)
Параметры:

<Значение> (необязательный)

Тип: Произвольный.
Значение, которое необходимо добавить.
<Представление> (необязательный)

Тип: Строка; ФорматированнаяСтрока.
Строковое выражение, содержащее представление добавляемого значения.
Значение по умолчанию: Пустая строка.
<Пометка> (необязательный)

Тип: Булево.
Определяет, создавать новое значение с установленной пометкой или без пометки.
Значение по умолчанию: Ложь.
<Картинка> (необязательный)

Тип: Картинка.
Визуальное представление значения.
Значение по умолчанию: Пустая картинка.
Возвращаемое значение:

Тип: ЭлементСпискаЗначений.

Описание:

Добавляет новый элемент в конец списка значений.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Показать
18. MikhailDr 07.11.19 14:06 Сейчас в теме
(17) Это конечно да. Мне вообще в голову не приходило, что суть в том, как задать СписокЗначений.
12. Kovekh 07.11.19 13:48 Сейчас в теме
В этой процедуре
&НаКлиенте
Процедура НоменклатураНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ШтрихкодИзПредставления = ПолучитьШтрихкодИзПредставления(ВыбранноеЗначение);
    Ссылка = ПолучитьНоменклатуруПоШтрихкодуБезКонтекста(ШтрихкодИзПредставления);
    Элемент = Ссылка;
КонецПроцедуры


Нужно сделать так:
&НаКлиенте
Процедура НоменклатураНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ШтрихкодИзПредставления = ПолучитьШтрихкодИзПредставления(ВыбранноеЗначение);
    Ссылка = ПолучитьНоменклатуруПоШтрихкодуБезКонтекста(ШтрихкодИзПредставления);
    ВыбранноеЗначение = Ссылка;
КонецПроцедуры
15. MikhailDr 07.11.19 13:49 Сейчас в теме
(12) Я понял свою ошибку. Спасибо за совет, но решение на сомом деле гораздо проще.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день