1. MikhailDr 07.11.19 11:55 Сейчас в теме

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

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

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

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

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


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

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

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


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

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

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

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

Справа в скобках это штрихкоды
Прикрепленные файлы:
10. Sashares 18 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 Сейчас в теме
Решение найдено.

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

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

Функция ПолучитьДанныеВыбораДляНоменклатуры(Элемент)
	СписокНоменклатур = Новый СписокЗначений;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СправчникНоменклатура.Наименование + "" ("" + ШтрихкодыНоменклатуры.Штрихкод + "")"" КАК Представление,
		|	СправчникНоменклатура.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК СправчникНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		|		ПО (ШтрихкодыНоменклатуры.Номенклатура = СправчникНоменклатура.Ссылка)
		|ГДЕ
		|	СправчникНоменклатура.Наименование ПОДОБНО &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", "%" + Элемент + "%");
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СписокНоменклатур.Добавить(Выборка.Ссылка, Выборка.Представление)
	КонецЦикла;
	
	Возврат СписокНоменклатур
КонецФункции
Показать
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С
Екатеринбург
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день

Программист 1С
Рязань
зарплата от 90 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день