1с список выбора показать представление вместо значения

Обновлено: 06.07.2024

Если на форме есть элемент управления со списком выбора, в моем конкретном примере это Колонка Значение (Число (3,0)) с настроенным списком выбора. По умолчанию платформа отображает именно строковое значения, а не текст представления из списка выбора (когда как при выборе значения из списка показываются именно представления).

Решение

Для Управляемых форм необходимо настроить правила условного оформления, для обычных форм - оформление ячеек при выводе данных.

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Для Каждого Значение Из Элементы.ТабличнаяЧастьЗначение.СписокВыбора.ВыгрузитьЗначения() Цикл

ДобавитьУсловноеОформлениеТекстаДляСпискаВыбора(Элементы.ТабличнаяЧастьЗначение);

// Добавит правила условного оформления для всех значений списка выбора элемента

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

// для которого следует установить правила оформления на основании выбранного (установленного) значения

Процедура ДобавитьУсловноеОформлениеТекстаДляСпискаВыбора(Элемент, Отказ = Ложь)

Форма = ПолучитьФормуЧерезЭлементУправления(Элемент, Отказ);

Для Каждого ЭлементСпискаВыбора Из Элемент.СписокВыбора Цикл

ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();

ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра( "Текст" , ЭлементСпискаВыбора.Представление);

ЭлементУсловия = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип( "ЭлементОтбораКомпоновкиДанных" ));

ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элемент.ПутьКДанным);

ЭлементУсловия.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

ЭлементУсловия.ПравоеЗначение=ЭлементСпискаВыбора.Значение;

ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();

ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Элемент.Имя);

КонецПроцедуры // УстановитьУсловноеОформлениеДляСпискаВыбораЭлементаУправления()

// Вернет управляемую форму на которой размещен элемент управления

// Отказ - Булево - будет содержать признак отказа выполнения метода

Функция ПолучитьФормуЧерезЭлементУправления(Элемент, Отказ = Ложь)

Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

ОформлениеСтроки.Ячейки[ "Колонка1" ].Текст = ЭлементыФормы.ТабличнаяЧасть1.Колонки.Колонка1.ЭлементУправления.СписокВыбора.НайтиПоЗначению(ДанныеСтроки.Колонка1).Представление;

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Ярлыки

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Комментарии

СКД. Ориентация текста в заголовке (шапке отчета).

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Расширение конфигурации + Связанные документы (Режим совместимости 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) я впервые встречаю такую конструкцию в элемент процедуры выбора передать ссылку и что должно произойти? тип элемента = полеформы зачем туда пихать ссылку??

элемент.значение
или элемент.текст
еще куда не шло но элемент = ссылка это бред

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

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

(11) Ну или так) Правда, не знаю, почему сразу этого не сделали, когда об этом спросили в 6 ответе (11) Вообще, на будущее, в таких случаях синтакс-помощник может помочь) В котором написано подобное:

СписокЗначений (ValueList)
Добавить (Add)
Синтаксис:

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

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

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

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

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

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

1Сv8
Имеется поле ввода на форме, значение в котором выбирается из списка значений. Список значений формируется примерно так:
СЗ = Новый СписокЗначений;
СЗ.Добавить(1,"один");
СЗ.Добавить(2,"два");
.

Тип значения поля ввода - число. Можно ли сделать так, чтобы при выборе значения из списка выбора в поле отображалось не число, а его представление из списка выбора?

(0) Не вижу в чем проблема.
Формируешь список как надо,потом --

Нет, будет не так!

Пока я выбираю из списка - в списке стоят представления ("один","два". )
Как только я значение выбрал - в поле ввода стоит числовое значение 1,2.

А хочется, чтобы стояло строковое представление, но при этом чтобы при программном обращении к значению поля выдавалось число.

(3) Ну ты и захотел!:-)

Интересно как ты в число запихнешь строку? 1С конечно не так типизтрована как Сишка , но это уже беспредел:)

(0)Выход только сделать сам реквизит списком значений. Тогда видно будет представления, а по значению будешь получать число
+(6)Или если ты любетель гемороя, то сделай реквизи строкой, а его значение либо загони в соответсвие либо через если.

(4) Если рассуждать логически. При выборе из списка мы видим что? - строковые представления списка числовых значений. В процессе выбора значения пользователь не видит "реальные" значения, а видит только понятные ему представления. Но выбираем мы тем не менее из списка именно числовое значение.

Вопрос: почему бы не показать в поле ввода опять же не само числовое значение, а взять из списка его представление? Ведь предполагается, что диапазон возможных значений поля ограничен элементами списка значений, т.е. у каждого элемента есть соответствующее представление, которое мы явно указали при создании списка.

Прошу извинить за корявость изложения, просто башка уже болит от этого :)

(7) неужели только через . Хочется-то сохранить тип числовой, чтобы не использовать лишний поиск по строке

(8) Ты путаешь объект и его представление.
вот тебе пример.
Есть Объект-документ. У документа есть его текстовое представление.
Тебе же не придет в голову работать с представлением как с объектом-документом?
Как ты себе видишь например получить ссылку через представление?:)
Также и напрямую присваивать переменной, содержащей объект-документ глупо, потому что переменная тут же потеряет свой тип(как объект) и преобретет новый(как строка).
Но то что прокатывает с переменными в 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 справочника в значения из списка выбора не входит.

Заметим, что в данном примере в случае переноса инициализации списка выбора для поля выбора в любой из обработчиков событий открываемой формы в каждом из рассмотренных случаев поле выбора будет принимать значение Неопределено , поскольку на момент установки значения в него список выбора будет еще пустой.

Читайте также: