Добавление в поле ввода нескольких значений |
Я |
25.06.19 — 15:21
Доброго времени суток! Возник вопрос, как в поле ввода добавить несколько значений? В созданном мною справочнике есть реквизит — ссылка на справочник номенклатур. Как несколько позиций из справочника Номенклатура добавить в реквизит другого справочника?
1 — 25.06.19 — 15:22
делай табличную часть
2 — 25.06.19 — 15:23
(1) а других вариантов быть не может?
3 — 25.06.19 — 15:23
(2) другие плохие
4 — 25.06.19 — 15:29
(2) может, тип ХранилищеЗначений, туда пихай что угодно. Но, оперировать такими данными не есть гуд.
5 — 25.06.19 — 15:32
Добавила табличную часть, а можно в нее как то не по одной добавлять а несколько сразу?
Нашла там в свойствах Множественный выбор, он мне как то поможет?
6 — 25.06.19 — 15:33
(5) подбор из справочника сделай
7 — 25.06.19 — 15:33
(5) нужно открыть форму для выбора нескольких значений и обрабатывать потом выбранные значения, глядеть, есть ли ужо такоее значение в ТЧ и ежели нема — добавить
8 — 25.06.19 — 15:38
(7) Просто при попытке добавить я могу выделить несколько, а вот при нажатии кнопки добавить добавляется одно, простите за тафтологию Тоесть мне помимо установки свойства нужно и процедуру обработки выбранных значений написать?
9 — 25.06.19 — 15:41
и если это так, не подскажите пример как это сделать? А то совсем уже запуталась
10 — 25.06.19 — 15:42
(8) уф/оф ?
11 — 25.06.19 — 15:42
так, если есть множественное выделение, нужно обрабатывать коллекцию ВыделенныеСтроки и .. их добавлять в тч
12 — 25.06.19 — 15:45
(10) уф
13 — 25.06.19 — 15:51
(11) а как это сделать?)
14 — 25.06.19 — 15:53
(12) ну вот, код для 2-х вариантов с Радченко
&НаКлиенте Процедура Подбор(Команда) //одиночный подбор //ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , Элементы.Материалы); //множественный подбор //ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Ложь); //ПараметрыФормы = Новый Структура("МножественныйВыбор", Истина); //множественный подбор с использованием множественного выбора ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Материалы); КонецПроцедуры &НаКлиенте Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) //одиночный подбор и множественный подбор //НоваяСтрока = Объект.Материалы.Добавить(); //НоваяСтрока.Материал = ВыбранноеЗначение; //подбор с множественным выбором Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл НоваяСтрока = Объект.Материалы.Добавить(); НоваяСтрока.Материал = ВыбранныйЭлемент; КонецЦикла; КонецПроцедуры
15 — 25.06.19 — 15:53
Создаешь кнопку и команду к ней.. далее переделываешь код на свои справочники и тч.
16 — 25.06.19 — 15:54
там 2 варианта, первый — просто множественный выбор в открываемой форме, второй (который расскоменчен) — множественный выбор с выделенными строками
JuixyJes
17 — 25.06.19 — 16:47
(16) если использовать добавленную на форму табличную часть — все замечательно работает, а вот если это табличная часть справочника те же самые махинации не получаются
Дополнительные реквизиты — замечательный инструмент, который позволяет значительно кастомизировать вашу 1С и адаптировать ее под потребности вашего бизнеса. И все это вы без доработки программы, в пользовательском режиме!
Жирный минус в том, что для конкретного доп. реквизита при заполнении, например, в номенклатурном справочнике, можно выбрать только одно значение для конкретной товарной карточки.
Данное расширение убирает это ограничение. Теперь у вас появится возможность указать произвольное количество значений доп. реквизита в номенклатуре.
Для начала создадим дополнительный реквизит. Для того, чтобы расширение распознало его как свойство с возможностью выбора нескольких значений, в комментарии нужно указать Множественный.
Создадим несколько возможных значений.
Теперь в товарной карточке этот реквизит выглядит как список значений.
В открывшемся списке выберем несколько значений, сохраним изменения.
Теперь при открытии карточки видим несколько сохраненных значений назначения.
Фильтры в списке номенклатуры и на форме подбора работают корректно — выбранная нами номенклатура удовлетворяет условиям отбора при выборе двух разных фильтров.
Для корректной работы расширения необходимо снять галку Безопасный режим.
Если у вас настроена интеграция с сайтом под управлением 1С-Битрикс, то множественные значения вы также сможете выгрузить. Для этого нужно сделать несколько изменений в модуле обмена, готов помочь вам в этом (услуга бесплатная).
21.10.2022
Множественный выбор в поле ввода
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Планируется в версии 8.3.23
Будет реализован новый интерфейс для последовательного ввода однотипных значений.
Часто перед разработчиками встает задача хранить для одного объекта несколько значений одного типа. Например:
-
Несколько адресов электронной почты для письма
-
Нескольких номеров телефонов для контрагента или контактного лица
-
Роли пользователя, принадлежность к группам доступа
Для хранения таких данных можно использовать, например, табличную часть. А для показа как правило используется табличное поле формы с одной колонкой. Пример из 1С:Документооборота, форма письма:
В версии 8.3.23 появится возможность отображать такие реквизиты более компактно, показывая их значения в одну строку:
Ввод в такие поля будет осуществляться привычным способом:
-
Ввод текста или автоподбор с клавиатуры
-
Выбор значений из выпадающего списка
-
Множественный выбор из формы выбора
-
В диалоге редактирования списка значений
При вводе множественных значений в выпадающем списке могут отображаются флажки:
Можно будет указать, разрешено ли вводить дублирующие значения и пустые значения.
Можно будет кастомизировать оформление множественных значений – задать цвет текста, цвет фона, шрифт, картинку, наличие гиперссылки и т.д.
Элемент Поле ввода будет расширен новыми свойствами и событиями для поддержки этой функциональности. Также во встроенном языке появятся новые объекты.
Новая функциональность позволит создавать более компактные интерфейсы и сделает работу пользователей удобнее.
Теги:
8.3.23
UI
Список значений на форме 1С для выбора пользователем значения можно расположить непосредственно на форме обработки/документа. Тогда пользователь сможет выбирать несколько значений из списка (зажав CTRL или SHIFT).
Список значений на форме 1С — в толстом клиенте просто размещаем на форме элемент списка, указываем название связанного реквизита формы.
Список значений на форме 1С — в тонком клиенте добавим реквизит формы, у которого выберем тип Список значений. При перетаскивании реквизита на форму, 1С спросит в каком виде мы хотели бы отображать его – чтобы он отображался аналогично толстому клиенту – выберите «Таблица».
В списке элементов формы появятся таблица, а у нее колонка. В свойствах таблицы можно установить запрет на редактирование списка (свойства Изменять состав/порядок строк или галочка Только просмотр).
Работа со списком значений на форме 1С из программного кода ведется по имени реквизита формы, который в толстом клиенте автоматически добавила система, а в тонком – вручную добавили мы самостоятельно. В примере (на картинках) имя реквизита формы – «ВыберитеЗначение».
В обработчике события формы ПриОткрытии() заполним значения списка, чтобы пользователю было из чего выбирать:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВыберитеЗначение.Добавить(0, "Создать документ"); //первый параметр – значение, второй параметр – представление значение, представление может отличаться от значения как угодно
ВыберитеЗначение.Добавить(1, "Редактировать документ");
ВыберитеЗначение.Добавить(2, "Удалить документ");
КонецПроцедуры
В обработчике нашего нужного события (например, кнопка выполнения действий) мы можем проверить, что там понавыбирал наш пользователь. Доступ к результату производится также по имени, но через элемент на форме, поэтому перед именем добавляем ЭлементыФормы (для толстого клиента) или Элемент (для тонкого клиента). Также – условие Если/Иначе уже не пойдет – так как могут быть выбраны несколько значений:
Проголосовать за этот пост:
Загрузка…
Posted in Язык 1С
Создание механизма множественного дополнительного реквизита для выгрузки в битрикс.
Здравствуйте, уважаемые читатели!
Хочу поделиться своей реализацией множественного выбора дополнительного реквизита в Управлении торговлей 11 (проверено на 11.4.1.261) для последующей выгрузки его в интернет-магазин под управлением 1С битрикс. Для чего это потребовалось? В определенный момент менеджер интернет-магазина мне сказал: хочу увидеть весь ассортимент выбранного товара (условно назовем его Товар№1) красного, синего и зеленого цветов, как?. Сразу оговорюсь, что по ряду внутренних причин характеристики мы не используем, возможно, с ними будет совсем другая история, но поскольку данный вопрос возникает периодически, я решил написать эту статью. Так вот, в УТ цвет это у нас дополнительный реквизит и соответственно он может принимать только одно значение. На сайте это выглядит как выбор из списка, а требуется чтобы можно было отмечать галочкой несколько значений.
з.ы. это моя первая публикация (не только на ИС, но и вообще), не судите строго 🙂
Итак, начнем. Весь процесс доработки можно разделить на 3 этапа:
- Доработка механизма создания и вывода на форму дополнительных реквизитов.
- Доработка xsd схемы.
- Доработка выгрузки на сайт.
1. Доработка механизма создания и вывода на форму дополнительных реквизитов.
Перед выводом доп. реквизитов на форму создается таблица значений содержащая нужные нам реквизиты и их значения (далее будем называть их свойствами, по скольку везде в коде они так и именуются). Но она содержит только уникальные свойства и каждое представлено одной строкой. Поэтому необходимо позаботиться о копировании нашего свойства.
Чтобы получать ссылку на нужный элемент ПВХ, я добавил функцию в модуль УправлениеСвойствамиСлужебный
Функция ПолучитьУИДМножественногоСвойства() Экспорт
Возврат "859484ef-7e0a-11e7-8111-3863bb43122b";
КонецФункции
возвращающую уникальный идентификатор. Затем, в этом же модуле, находим функцию ЗначенияСвойств, которая и формирует вышеописанную таблицу дополнительных реквизитов для вывода на форму. В самом ее конце есть цикл, который выглядит вот так:
Перед ним добавим следующий код:
лУИД = Новый УникальныйИдентификатор(ПолучитьУИДМножественногоСвойства());
МножественноеСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(лУИД);
ЭтоПервый = Истина;
А в теле цикла будем отлавливать наше свойство следующим образом:
Если Строка.Свойство = МножественноеСвойство Тогда
Если ЭтоПервый Тогда
ЭтоПервый = Ложь;
Иначе
фКэшОписания = ОписаниеСвойства;
ОписаниеСвойства = ОписаниеСвойств.Добавить();
ЗаполнитьЗначенияСвойств(ОписаниеСвойства, фКэшОписания);
КонецЕсли;
КонецЕсли;
В итоге должна получится следующая картина:
После этого переходим к созданию элементов на форме. Тут логика следующая, каждый дополнительный реквизит в своем наименовании имеет уникальный идентификатор и тем самым обеспечивается уникальность (простите за тавтологию) имен элементов формы. Поэтому нам необходимо пронумеровать наш реквизит в момент создания. За это отвечает процедура ЗаполнитьДополнительныеРеквизитыВФорме общего модуля УправлениеСвойствами.
Находим в ней строку
Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
Перед началом этого цикла вставим счетчик, например:
СчСвойств = 1;
А в теле цикла, после строки
ОписаниеСвойства.ИмяУникальнаяЧасть = ...
добавим наш код:
Если СтрНайти(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор()), УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) > 0 Тогда
ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть +"_"+ Строка(СчСвойств);
СчСвойств = СчСвойств + 1;
КонецЕсли;
Получается такая картина:
Дальше, чтобы не заморачиваться с формой при обновлении, добавляем ее в расширение. Добавляем событие ПриСозданииНаСервере с типом вызова «После», в нем создаем кнопку для копирования и заполним технические реквизиты. На форму потребуется добавить 2 реквизита:
1. МножВыборИмя — тип строка, хранит имя дополнительного реквизита без индекса
2. СчСвойств — тип число, хранит текущий индекс дополнительного реквизита.
Полный текст модуля формы в расширении
После этих действий у вас должно получиться что-то подобное:
Если нужно добавить кнопку удаления реквизитов, то, думаю, у вас не возникнет с этим больших проблем 🙂
2. Доработка xsd схемы.
Если вы не знакомы с этой темой, то в интернете полно информации с подробным описанием, расписывать детально тут не буду. Схема находится в плане обмена Б_ОбменССайтом в макете СхемаXSDОбмена. Сохраняем в файл, открываем и находим там строку
<xs:complexType name="ЗначенияСвойства">
после элемента «Значение» добавляем следующий код
<xs:element name="ЗначениеСвойства" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:sequence>
<xs:element name="Значение" type="tns:ЗначениеТип" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
В итоге должно получится следующее:
Далее обновляем макет в плане обмена и сохраняем конфигурацию. Все, xsd схема готова.
3. Доработка выгрузки на сайт.
Итак, мы на финишной прямой. Еще чуточку усилий и все будет готово!
Открываем общий модуль Б_ОбменССайтомСерверВыгрузкаДанных, находим в нем процедуру ВыгрузитьСвойстваXDTO,
в ней ищем строку:
XDTOСвойство.Наименование = Лев(ТекСвойство.Наименование, 250);
это в цикле по коллекции тзнСвойств. После нее добавляем проверку. Если это наше свойство, то делаем его множественным.
Если СтрНайти(XDTOСвойство.Ид, УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) Тогда
XDTOСвойство.Множественное = Истина;
КонецЕсли;
Далее нам нужно подкорректировать процедуру ВыгрузитьСвойстваНоменклатурыXDTO. Она не очень большая, поэтому приведу ее листинг с доработками.
Процедура ВыгрузитьСвойстваНоменклатурыXDTO
Вот и все, после этих манипуляций, xml код файла для битрикса должен выглядеть примерно так:
Битрикс такую структуру понимает и никаких действий со стороны сайта делать не требуется. Если вы все сделали правильно, то все должно работать.
p.s.
Хочу поблагодарить Сергея Главатских за его идею копирования дополнительных реквизитов, а так же парней из ветки https://dev.1c-bitrix.ru, без них у меня бы ничего не получилось.