1с как поместить в реквизит несколько значений

Добавление в поле ввода нескольких значений

Я
   JuixyJes

25.06.19 — 15:21

Доброго времени суток! Возник вопрос, как в поле ввода добавить несколько значений? В созданном мною справочнике есть реквизит — ссылка на справочник номенклатур. Как несколько позиций из справочника Номенклатура добавить в реквизит другого  справочника?

  

Партнерская программа EFSOL Oblako

   butterbean

1 — 25.06.19 — 15:22

делай табличную часть

   JuixyJes

2 — 25.06.19 — 15:23

(1) а других вариантов быть не может?

   butterbean

3 — 25.06.19 — 15:23

(2) другие плохие

   Ёпрст

4 — 25.06.19 — 15:29

(2) может, тип ХранилищеЗначений, туда пихай что угодно. Но, оперировать такими  данными не есть гуд.

   JuixyJes

5 — 25.06.19 — 15:32

Добавила табличную часть, а можно в нее как то не по одной добавлять а несколько сразу?

Нашла там в свойствах Множественный выбор, он мне как то поможет?

   FIXXXL

6 — 25.06.19 — 15:33

(5) подбор из справочника сделай

   Ёпрст

7 — 25.06.19 — 15:33

(5) нужно открыть форму для выбора нескольких значений и обрабатывать потом выбранные значения, глядеть, есть ли ужо такоее значение в ТЧ и ежели нема — добавить

   JuixyJes

8 — 25.06.19 — 15:38

(7) Просто при попытке добавить я могу выделить несколько, а вот при нажатии кнопки добавить добавляется одно, простите за тафтологию :D Тоесть мне помимо установки свойства нужно и процедуру обработки выбранных значений написать?

   JuixyJes

9 — 25.06.19 — 15:41

и если это так, не подскажите пример как это сделать? А то совсем уже запуталась

   Ёпрст

10 — 25.06.19 — 15:42

(8) уф/оф ?

   Ёпрст

11 — 25.06.19 — 15:42

так, если есть множественное выделение, нужно обрабатывать коллекцию ВыделенныеСтроки и .. их добавлять в тч

   JuixyJes

12 — 25.06.19 — 15:45

(10) уф

   JuixyJes

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С:Документооборота, форма письма:

img-01.png

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

img-02.png

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

  • Ввод текста или автоподбор с клавиатуры

  • Выбор значений из выпадающего списка

  • Множественный выбор из формы выбора

  • В диалоге редактирования списка значений

При вводе множественных значений в выпадающем списке могут отображаются флажки:

img-03.png
Можно будет указать, разрешено ли вводить дублирующие значения и пустые значения.
img-04.png

Можно будет кастомизировать оформление множественных значений – задать цвет текста, цвет фона, шрифт, картинку, наличие гиперссылки и т.д.
img-05.png
Элемент Поле ввода будет расширен новыми свойствами и событиями для поддержки этой функциональности. Также во встроенном языке появятся новые объекты.

Новая функциональность позволит создавать более компактные интерфейсы и сделает работу пользователей удобнее.

Теги:
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 этапа:

  1. Доработка механизма создания и вывода на форму дополнительных реквизитов.
  2. Доработка xsd схемы.
  3. Доработка выгрузки на сайт.

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, без них у меня бы ничего не получилось.

Понравилась статья? Поделить с друзьями:
  • Deutsche bank trust company americas реквизиты
  • 1с как проверить документ на наличие реквизита
  • 1с как проверить наличие реквизита в структуре
  • 1с как программно изменить тип реквизита формы
  • 1с как программно получить реквизит справочник