1с список выбора показать представление вместо значения
Обновлено: 06.07.2024
Если на форме есть элемент управления со списком выбора, в моем конкретном примере это Колонка Значение (Число (3,0)) с настроенным списком выбора. По умолчанию платформа отображает именно строковое значения, а не текст представления из списка выбора (когда как при выборе значения из списка показываются именно представления).
Решение
Для Управляемых форм необходимо настроить правила условного оформления, для обычных форм - оформление ячеек при выводе данных.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Каждого Значение Из Элементы.ТабличнаяЧастьЗначение.СписокВыбора.ВыгрузитьЗначения() Цикл
ДобавитьУсловноеОформлениеТекстаДляСпискаВыбора(Элементы.ТабличнаяЧастьЗначение);
// Добавит правила условного оформления для всех значений списка выбора элемента
// для отображения вместо значений текст из представления из списка выбора элемента
// для которого следует установить правила оформления на основании выбранного (установленного) значения
Процедура ДобавитьУсловноеОформлениеТекстаДляСпискаВыбора(Элемент, Отказ = Ложь)
Форма = ПолучитьФормуЧерезЭлементУправления(Элемент, Отказ);
Для Каждого ЭлементСпискаВыбора Из Элемент.СписокВыбора Цикл
ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра( "Текст" , ЭлементСпискаВыбора.Представление);
ЭлементУсловия = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип( "ЭлементОтбораКомпоновкиДанных" ));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элемент.ПутьКДанным);
ЭлементУсловия.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
ЭлементУсловия.ПравоеЗначение=ЭлементСпискаВыбора.Значение;
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Элемент.Имя);
КонецПроцедуры // УстановитьУсловноеОформлениеДляСпискаВыбораЭлементаУправления()
// Вернет управляемую форму на которой размещен элемент управления
// Отказ - Булево - будет содержать признак отказа выполнения метода
Функция ПолучитьФормуЧерезЭлементУправления(Элемент, Отказ = Ложь)
Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки[ "Колонка1" ].Текст = ЭлементыФормы.ТабличнаяЧасть1.Колонки.Колонка1.ЭлементУправления.СписокВыбора.НайтиПоЗначению(ДанныеСтроки.Колонка1).Представление;
- Получить ссылку
- Электронная почта
- Другие приложения
Ярлыки
- Получить ссылку
- Электронная почта
- Другие приложения
Комментарии
СКД. Ориентация текста в заголовке (шапке отчета).
- Получить ссылку
- Электронная почта
- Другие приложения
Расширение конфигурации + Связанные документы (Режим совместимости 8.3.12)
Вводная: реализовать ввод Заказа поставщику на основании Заказа на Ремонт. решить через расширения конфигурации. Хочу обратить ваше внимание, не нужно добавлять в расширение критерий отбора, для 8.3.12 нам не доступно добавление\изменение состава критерия. Более того может зависать конфигуратор (столкнулся с последней версией 8.3.14 + ERP) Разработку рекомендую вести с применением хранилища и для расширения. Иначе устанете потом выгребать чего лишнего включили в расширение при добавлении таких или схожих обектов с составными типами и подобное. Все текущие типовые решения сейчас идут в режиме совместимости 8.3.12, в прочем и для 8.3.14 (и даже 8.3.15 ничего не поменялось). Что нам нужно было бы сделать при отказе от поддержки: 1) добавить наш документ в Критерий отбора (состав, реквизиты); 2) в раздел Ввод на основании целевого документа. И что с целью сохранения поддержки. Как сделать это же для расширения: 1) Добавить реквизит расширения Документы.ЗаказПоставщику._За
Есть документ с табличной частью. В ней есть поле "Номенклатура" с типом СправочникСсылка. По умолчанию необходимо сделать так, чтобы при наборе в списке выбора высвечивалось не только название, но и штрихкод номенклатуры. Причем именно при наборе, а не в форме выбора. При этом представление элемента менять нельзя, это должно быть просто название.
В модуле менеджера справочника номенклатура я изменил данные выбора
В параметр ДанныеВыбора попадает переменная с типом СписокЗначений, в которой каждый элемент это строка где наименование номенклатуры соединено со штрихкодом.
В модуле формы я добавил процедуру обработки выбора
В отладчике в переменную Элемент попадает ссылка на нужный элемент справочника, при этом на форме при выборе элемента ничего не происходит, ссылка в поле не попадает. В чем может быть причина?
Все очень просто. В список значений надо передавать не строку, а ссылку. А для того чтобы изменить представление ссылки в этом списке надо задать параметр, он так и называется "Представление" и никаких событий формы не надо, все идет в рамках модуля менеджера.
(1) Добрый день! Вопрос - актуален ? Если "да", приложите, пожалуйста, скриншот формы , при выборе значенияСправа в скобках это штрихкоды
Вы элементу формы присваиваете значение.
А надо колонке строки табличной части. А СписокЗначений , как формируете ? Представление - это наименование номенклатуры, соединенное со штрихкодом ? А Значение - ссылка на номенклатуру ?
(4) Список значений формируется через запрос с условием Где Подобно %НаименованиеНоменклатуры%, там я объединяю два поля в представление где имя номенклатуры и штрихкод идут уже вместе.
ВыбранноеЗначение это тоже самое, то есть тоже строка. Но затем я с помощью 2 функций (ПолучитьШтрихкодИзПредставления и ПолучитьНоменклатуруПоШтрихкодуБезКонтекста) получаю ссылку, которую передаю в Элемент.
Не ВыбранноеЗначение, а значение элемента СписокЗначений. Если значение = ссылка в номенклатуре, при выборе значения нет необходимости в 2-х функциях
(6) Значение это строка. 2 функции нужны для следующего
1) Вытаскивает штрихкод из строки
2) Получает ссылку по штрихкоду
В принципе это можно сделать в рамках одной функции, но я просто привык все делить на логические блоки, не люблю большие функции
(5) я впервые встречаю такую конструкцию в элемент процедуры выбора передать ссылку и что должно произойти? тип элемента = полеформы зачем туда пихать ссылку??
элемент.значение
или элемент.текст
еще куда не шло но элемент = ссылка это бред
Все очень просто. В список значений надо передавать не строку, а ссылку. А для того чтобы изменить представление ссылки в этом списке надо задать параметр, он так и называется "Представление" и никаких событий формы не надо, все идет в рамках модуля менеджера.
(11) Ну или так) Правда, не знаю, почему сразу этого не сделали, когда об этом спросили в 6 ответе (11) Вообще, на будущее, в таких случаях синтакс-помощник может помочь) В котором написано подобное:СписокЗначений (ValueList)
Добавить (Add)
Синтаксис:
Добавить(<Значение>, <Представление>, <Пометка>, <Картинка>)
Параметры:
Тип: Произвольный.
Значение, которое необходимо добавить.
<Представление> (необязательный)
Тип: Строка; ФорматированнаяСтрока.
Строковое выражение, содержащее представление добавляемого значения.
Значение по умолчанию: Пустая строка.
<Пометка> (необязательный)
Тип: Булево.
Определяет, создавать новое значение с установленной пометкой или без пометки.
Значение по умолчанию: Ложь.
<Картинка> (необязательный)
Тип: Картинка.
Визуальное представление значения.
Значение по умолчанию: Пустая картинка.
Возвращаемое значение:
Добавляет новый элемент в конец списка значений.
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
1Сv8
Имеется поле ввода на форме, значение в котором выбирается из списка значений. Список значений формируется примерно так:
СЗ = Новый СписокЗначений;
СЗ.Добавить(1,"один");
СЗ.Добавить(2,"два");
.
Тип значения поля ввода - число. Можно ли сделать так, чтобы при выборе значения из списка выбора в поле отображалось не число, а его представление из списка выбора?
(0) Не вижу в чем проблема.Формируешь список как надо,потом --
Нет, будет не так!
Пока я выбираю из списка - в списке стоят представления ("один","два". )
Как только я значение выбрал - в поле ввода стоит числовое значение 1,2.
А хочется, чтобы стояло строковое представление, но при этом чтобы при программном обращении к значению поля выдавалось число.
(3) Ну ты и захотел!:-)
Интересно как ты в число запихнешь строку? 1С конечно не так типизтрована как Сишка , но это уже беспредел:)
+(6)Или если ты любетель гемороя, то сделай реквизи строкой, а его значение либо загони в соответсвие либо через если.
(4) Если рассуждать логически. При выборе из списка мы видим что? - строковые представления списка числовых значений. В процессе выбора значения пользователь не видит "реальные" значения, а видит только понятные ему представления. Но выбираем мы тем не менее из списка именно числовое значение.
Вопрос: почему бы не показать в поле ввода опять же не само числовое значение, а взять из списка его представление? Ведь предполагается, что диапазон возможных значений поля ограничен элементами списка значений, т.е. у каждого элемента есть соответствующее представление, которое мы явно указали при создании списка.
Прошу извинить за корявость изложения, просто башка уже болит от этого :)
(7) неужели только через . Хочется-то сохранить тип числовой, чтобы не использовать лишний поиск по строке
вот тебе пример.
Есть Объект-документ. У документа есть его текстовое представление.
Тебе же не придет в голову работать с представлением как с объектом-документом?
Как ты себе видишь например получить ссылку через представление?:)
Также и напрямую присваивать переменной, содержащей объект-документ глупо, потому что переменная тут же потеряет свой тип(как объект) и преобретет новый(как строка).
Но то что прокатывает с переменными в 1с , не прокатит с реквизитом.У него может быть составной тип но если это просто число, то хранить одновресенно и число и строку он не может
Как говорится, произошла типичная подена понятий. :)
> Как ты себе видишь например получить ссылку через представление?:)
В том-то и дело, что мне нужно наоборот. Если у нас реквизит типа "ссылка на документ", то при выборе значения мы видим представление этого документа.
Хочется получить тот же эффект, когда значения реквизита выбираются из списка значений, т.е. выбрали значение, а увидели его представление.
Работа с полем выбора
Элемент управления "Поле выбора" предназначен для хранения и быстрого выбора одного из значений, входящих в его список выбора. Список выбора для поля выбора есть список значений. Значением поля выбора является одно единственное значение, а не весь список выбора.
Установка значения в поле выбора
В Поле выбора можно установить любое значение. В процессе установки значения будет выполнен его поиск среди значений, входящих в список выбора. Если устанавливаемое значение найдено в списке выбора, оно будет сохранено в поле выбора, иначе в поле выбора будет установлено значение "Неопределено". Исключение составляет значение "Неопределено", которое можно установить в поле выбора в любом случае, независимо от того, какие значения при этом хранятся в списке выбора.
Например, если список выбора имеет значениями числа 1, 2 и 3, тогда в поле выбора удастся установить любое из этих значений. При установке других значений, хотя ошибки времени выполнения и не произойдет, они сохранены не будут.
Представление значения, хранящегося в поле выбора
В качестве представления значения, хранящегося в поле выбора, используется представление элемента списка выбора, значение которого эквивалентного значению поля выбора. Если у элемента списка выбора представление не указано, оно формируется в виде текстового представления самого значения. В ситуациях, когда в списке выбора есть несколько одинаковых значений с разными представлениями, будет использоваться первое найденное из этих значений. Представление значения при этом будет сформировано на его основе, как описывалось выше.
Поиск значения в поле выбора по введенному тексту
Поиск значений по тексту осуществляется на основе представлений для элементов списка выбора. Для тех из элементов, в которых представление значения не указано, используется представление самого значения, хранящегося в нем.
Связь поля выбора с данными
Поле выбора можно связывать по данным с выбираемым значением, а не со списком значений. Например, если мы хотим, чтобы в поле выбора можно было выбирать число, и оно было связано по данным со значением некоторого реквизита, типом данных для реквизита должно быть число, а не список значений.
Особенности инициализации и использования списка выбора
Для правильного отображения в поле выбора данных, с которыми он связан, список выбора должен формироваться в теле модуля формы. Формировать список выбора для поля выбора в обработчике любого из событий формы – поздно. Это приведет к тому, что в поле выбора будет установлено значение "Неопределено", хотя в реквизите при этом может быть любое значение.
Такая ситуация возникает из-за того, что данные устанавливаются в элементы управления формы, связанные с ними, в процессе создания формы. А обработчики событий ПередОткрытием(), ПриОткрытии() вызываются после создания самой формы, в процессе инициализации ее визуальной части. Получается, что при создании формы полю выбора поставили некоторое значение в момент, когда его список выбора пустой. При этом, поскольку список выбора пустой, вместо устанавливаемого значения в поле выбора будет сохранено значение "Неопределено".
При смене типа значения (свойство "ТипЗначения") для списка выбора, у которого есть элементы, будет выполнено преобразование их значений к новому типу. Может быть следующая ситуация: после смены типа значения для списка выбора некоторое значение, которое раньше удавалось успешно установить в поле выбора, после смены типа значения установить не получается. Причина такой ситуации в том, что в процессе установки типа значения для списка выбора, успешно устанавливаемое ранее значение было конвертировано в другое значение (в соответствии с новым типом значения). Соответственно, устанавливаемое значение в списке выбора больше найдено не будет.
Использование поля выбора: пример 1
Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: число, длина = 10, точность = 0). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:
Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:
1. В начальном состоянии поле выбора - пустое, поле ввода содержит значение 0.
2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение 1. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно 1. Оно и отобразилось в поле ввода.
3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается значение 2.
Перейдем в поле ввода и попробуем редактировать значения в нем:
1. Введем в поле ввода значение 3 и сойдем с поля ввода. В поле выбора запишется значение 3 и установится значение из соответствующей строки списка выбора поля выбора ("Три").
2. Вернемся в поле ввода и введем в нем значение 4. Перейдем с поля ввода к следующему элементу управления. В поле ввода будет сохранено введенное значение "4", а поле выбора станет пустым. В данном случае введенное в поле ввода значение 4 будет сохранено в связанных с полем ввода данных, после чего выставлено из них в поле выбора. Поскольку поле выбора в списке выбора значения 4 не имеет, оно установлено в поле выбора не будет.
Использование поля выбора: пример 2
Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: СправочникСсылка.Номенклатура). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:
Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:
1. В начальном состоянии поле выбора и поле ввода - пустые:
2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно ссылке на на элемент справочника Справочники.Номенклатура.Элемент1. Оно и отобразилось в поле ввода.
3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается ссылка на элемент справочника Справочники.Номенклатура.Элемент2:
Перейдем в поле ввода и попробуем редактировать значения в нем:
1. Выберем в поле ввода значение Справочники.Номенклатура.Элемент1. В поле выбора запишется значение Справочники.Номенклатура.Элемент1 и установится значение из соответствующей строки списка выбора поля выбора ("Один").
2. Выберем в поле ввода значение Справочники.Номенклатура.Элемент2. В поле выбора запишется значение Справочники.Номенклатура.Элемент2 и установится значение из соответствующей строки списка выбора поля выбора ("Два").
3. Выберем в поле ввода значение Справочники.Номенклатура.Элемент3. В поле выбора значение Справочники.Номенклатура.Элемент3 записано не будет, поскольку оно не было добавлено в список выбора. Значением в поле ввода будет "Неопределено":
Использование поля выбора: пример 3
Пусть есть внешняя обработка, в которой создан реквизит Реквизит1 типа СправочникСсылка.Номенклатура. Во внешней обработке есть две формы: в первой устанавливается значение реквизита и по нажатию на кнопку открывается вторая форма.
В левой колонке - внешний вид первой формы внешней обработки. По нажатию на кнопку "Открыть форму" из поля ввода берется значение и сохраняется в реквизите внешней обработки, после чего открывается вторая форма:
В правой колонке - внешний вид второй формы внешней обработки. В ней размещены поле выбора и поле ввода; они оба связаны с реквизитом внешней обработки Реквизит1 по данным. Приведем текст модуля формы:
Мы видим,. что в модуле формы инициализируется список выбора для поля выбора: поле выбора может принимать значения Справочники.Номенклатура.Элемент1, Справочники.Номенклатура.Элемент2, Неопределено. При этом для двух первых значений явно указаны их представления - "Один" и "Два".
Посмотрим, как будет выглядеть вторая форма в зависимости от того, какое значение сохранено предварительно в реквизите внешней обработки Реквизит1.
Значение реквизита - пустая ссылка:
В данном случае в поле ввода значением будет пустая ссылка на элемент справочника, а в поле выбора - Неопределено . Поскольку в списке выбора для поля выбора пустая ссылка на элемент справочника в значения не входит, ее установить нельзя - при установке значения в виде пустой ссылки поле выбора примет значение Неопределено .
Значение реквизита - одно из значений, имеющихся в списке выбора для поля выбора:
В данном случае и в поле ввода, и в поле выбора значением будет ссылка на Элемент1 справочника. При этом для представления значения поле выбора воспользуется представлением установленного значения из списка выбора - строкой "Один".
Значение реквизита в списке выбора для поля выбора отсутствует:
В данном случае в открываемой форме в поле выбора и поле ввода будет произведена попытка установить в качестве значения ссылку на Элемент3 справочника. В поле ввода такое значение будет нормально установлено, а вот в поле выбора после его установки сохранится значение Неопределено , поскольку ссылка на Элемент3 справочника в значения из списка выбора не входит.
Заметим, что в данном примере в случае переноса инициализации списка выбора для поля выбора в любой из обработчиков событий открываемой формы в каждом из рассмотренных случаев поле выбора будет принимать значение Неопределено , поскольку на момент установки значения в него список выбора будет еще пустой.
Читайте также: