В предыдущей статье «Изучаем список значений 1С» я показал, каким образом можно программного работать со списком значений. Мы научились добавлять, вставлять и загружать нужные элементы в список. Но со списком значений можно работать на управляемой форме 1С, когда он используется в качестве реквизита этой формы. В этой статье мы разберем вопросы работы со списком значений на форме.
На управляемой форме 1С список значений можно разместить в качестве реквизита управляемой формы.
Мы уже знаем, что каждый элемент списка значений содержит значения типа Элемент списка значений, но можно задать тип данных, которые будут содержаться в этом элементе. Делается это при помощи свойства реквизита – тип значения. В этом случае, все элементы заданного списка значений будут одного типа.
Реквизит с типом список значений можно разместить на форме, где он отобразится или виде таблицы или в виде поля. Для размещения реквизита достаточно мышкой просто перенести его в элементы управляемой формы.
После начала размещения, будет предложено выбрать тип нового элемента. Можно выбрать или таблицу, или поле.
Если мы выберем тип Таблица, то будет размещен элемент с типом Таблица, где в качестве колонок можно размещать соответствующие свойства списка значений.
Теперь на форме можно работать с этим списком, выбирая нужные объекты, указанного типа.
С реквизитом формы мы можем работать как с обычным списком значений. Например, заполним созданный нами список всеми складами, которые можно использовать.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Склады.Ссылка КАК Ссылка, | Склады.Представление КАК Представление |ИЗ | Справочник.Склады КАК Склады |ГДЕ | НЕ Склады.НеИспользовать"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Список.Добавить(Выборка.Ссылка,Выборка.Представление); КонецЦикла; КонецПроцедуры
В этом случае, список заполнится сразу при открытии формы.
Более подробно о работе со списками значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
- Главная
- О сайте
- Главная
- Содержание
Категории
—>
рубрики: Работа с формами | Дата: 22 января, 2016
Скачать обработку с примерами из статьи: professia1c_ListValue.epf
Платформа: 8.3; Тип формы: управляемая.
Рассмотрим как разместить выпадающий список значений на форме. Практиковаться будем на платформе 1С:Предприятие 8.3 на управляемых формах. Предположим, что нам надо разместить на форме список значений как показано на рисунке.
Итак, создаем внешнюю обработку. Создаем для формы реквизит в котором будет содержаться выбранное из списка значение.
Назовем его к примеру – СписокВариантов. Выберем для него тип значения. В нашем случае это будет строка, хотя в зависимости от задачи это может быть и СправочникСсылка, ПеречислениеСсылка и т.д. Хочется только подчеркнуть, что тип не список значений, что на первый взгляд кажется логичным, а именно тот тип, значения которого будут в этом списке отображаться. Далее размещаем наш реквизит на форме как поле ввода.
А для работы со списком значений будем использовать свойство поля ввода – СписокВыбора.
Для этого в свойствах поля ввода включаем флажок РежимВыбораИзСписка
И программно заполняем СписокВыбора нужными нам значениями:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список = Новый СписокЗначений;
Список.Добавить("Вариант 1");
Список.Добавить("Вариант 2");
Список.Добавить("Вариант 3");
Элементы.СписокВариантов.СписокВыбора.ЗагрузитьЗначения(Список.ВыгрузитьЗначения());
СписокВариантов = Элементы.СписокВариантов.СписокВыбора[0].Значение;
КонецПроцедуры
Для обычной (не управляемой формы) принцип реализации точно такой же.
Реквизит типа «Список значений» |
Я |
03.08.17 — 17:52
Всем доброго времени суток.
Исходные данные: 1С 8.3, УФ.
Что хочу: разместить на форме список значений и подбирать в него элементы типа «Справочник.Должности».
Что делаю: в реквизиты объекта (не формы) добавляю реквизит типа «СписокЗначений».
В чем вопрос: как для этого списка указать тип значения, чтобы в дальнейшем выполнять подбор в форме?
P.S. если добавить реквизит не в объект, а в форму — все ок, тип назначить можно. но логика системы мне не понятно. знающие люди, подскажите плиз. Заранее спасибо.
1 — 03.08.17 — 17:55
(0) в форме и указывай какой тип будет внутри списка. больше никак
2 — 03.08.17 — 19:38
(0) Логика в том, что тип СписокЗначений не может быть сохранен в ИБ. Поэтому для реквизита объекта его назначить нельзя.
3 — 03.08.17 — 19:40
(2) реквизит отчета или обработки можно..
4 — 03.08.17 — 19:41
(0)
&НаКлиенте
Процедура СписокОрганизацийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Объект.СписокОрганизаций.ТипЗначения = Новый ОписаниеТипов(«СправочникСсылка.Организации»);
КонецПроцедуры
5 — 04.08.17 — 08:48
Всем спасибо за пояснения
6 — 04.08.17 — 09:24
Не делай как в (4), делай в ПриСОзданииНаСервере тип значений элемента управления, что отображает список значений
7 — 04.08.17 — 15:25
(6) я тоже так сделаю.. надо же я так тупанул
8 — 04.08.17 — 15:59
(6) я только что проверил.. работает.. если выбирать по кнопке Добавить.. но кнопка Подбор работает только, если перехватывать событие НачалоВыбора..
9 — 04.08.17 — 16:02
(6) (8) хотя нет.. работает Подбор.. не работает он только у тех справочников, для которых по умолчанию ставится Быстрый выбор..
для организаций не работает.. а для номенклатуры запросто..
10 — 04.08.17 — 21:12
Не понял, так все получилось или что-то не получилось?
11 — 04.08.17 — 21:24
Я бы сделал так:
Добавляешь реквизит формы, устанавливаешь тип — СписокЗначений. С свойствах реквизита формы, в самом низу, Объект — Тип значения — устанавливаешь нужный тип.
В объект добавляешь таб. часть и перед записью ее заполняешь из СпискаЗначений.
При открытии из таб.части заполняешь Список значений.
runoff_runoff
12 — 04.08.17 — 21:59
(10) всё работает.. супер..
Содержание:
- Использование палитры свойств реквизита формы типа «Список значений»
- Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»
При разработке интерфейсов 1С на платформе 1С:Предприятие 8 нередки ситуации, когда требуется ограничить допустимые для ввода списки значений для реквизита формы с типом «Список значений». Это можно выполнить несколькими способами.
1. Использование палитры свойств реквизита формы типа «Список значений»
Первый способ: установка допустимого типа в свойстве «Тип значения» в палитре свойств реквизита формы типа «Список значений».
Рис. 1 Редактирование типа значения в палитре свойств реквизита
В данном случае мы ограничили возможность добавления/изменения элементов списка реквизита «Список складов-получателей» типом «СправочникСсылка.Склады».
По умолчанию при создании основного реквизита формы с типом «Список значений» платформа 1С устанавливает данному свойству тип значения «Произвольный».
2. Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»
Второй способ: программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений».
Сделать это можно, например, в обработчике события 1С формы «ПриСозданииНаСервере»:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
В данном случае мы также ограничили возможность добавления/изменения элементов списка реквизита «Список складов-получателей» типом «СправочникСсылка.Склады».
Если же требуется разрешить выбирать несколько типов при добавлении или изменении элементов списка значений на форме, то просто следует добавить все необходимые типы в массив, передаваемый в качестве параметра конструктора описания типов, который используется при установке допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений», например:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.ПодразделенияОрганизаций»));
СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
Таким образом, во втором случае для реквизита «Список складов-получателей» к возможности добавления/изменения элементов списка с типом «СправочникСсылка.Склады» мы добавили аналогичную возможность для типа «СправочникСсылка.ПодразделенияОрганизаций».
Программную установку допустимого типа(ов) значения(ий) аналогичным образом можно использовать и для колонки с типом «Список значений» реквизита формы с типом «Таблица значений» или «Дерево значений». Единственный нюанс, на который нужно обратить внимание для получения требуемого результата – это то, что установка в таких случаях должна производиться в обработчике события «НачалоВыбора» элемента формы, связанного с соответствующей колонкой реквизита формы с типом «Таблица значений» или «Дерево значений», например:
&НаКлиенте
Процедура ТаблицаПолучателейМатериаловСпискокСкладовПолучателейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
Элементы.ТаблицаПолучателейМатериалов.ТекущиеДанные.СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
В данном случае для колонки «СпискокСкладовПолучателей» (с типом «Список значений») реквизита формы «ТаблицаПолучателейМатериалов» мы ограничили возможность добавления/изменения элементов списка значений типом «СправочникСсылка.Склады».
Специалист компании «Кодерлайн»
Аскер Жансуев
Задание типа значения для реквизита с типом СписокЗначений в управляемых формах
В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:
ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.
Другое дело, когда форма содержит таблицу значений, у которой имеется реквизит с типом СписокЗначений. В такой ситуации через обработчики событий формы к этому реквизиту не достучаться, поэтому нужно использовать обработчики событий элемента формы, связанного с данным реквизитом.
1. Реквизит ТЧ с типом СписокЗначений |
Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:
Процедура РеквизитыТаблицыСписокДоступныхЗначенийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
Элемент.Родитель.ТекущиеДанные.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
КонецПроцедуры
Что бы для типа значения задать составной тип, необходимо в конструктор объекта ОписаниеТипов передать первым параметром массив типов:
ТипыСписка = Массив;
ТипыСписка.Добавить(Тип("Строка"));
ТипыСписка.Добавить(Тип("Число"));
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Единственный минус составного типа в списке значений — это отсутствие множественного выбора (кнопки Подбор), придется добавлять по одному значению в список. а это просто печалит.
Как вывести Список Значений в Управляемую Форму
Автор Березин, 19 апр 2013, 13:41
0 Пользователей и 1 гость просматривают эту тему.
Таблица Значений в Управляемую Форму выводится «с лету» с помощью //ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>).
Нужно вывести Список Значений.
Делаю
ЗначениеВРеквизитФормы(СпЗн,»Реквизит1″); Где СпЗн типа Список Значений.
Получаю сообщение об ошибке в параметре 2.
У меня Реквизит1 имеет тип Список Значений. Я его создал как таковой и больше не трогал, только вывел на форму.
Или с ним еще что-то надо делать или какой-то другой создавать.
Не знаю в чем проблема?
а куда вы хотите вывести спиок значений, как я понял у вас реквизит на форме с типом список занчений
Цитата: Besart от 19 апр 2013, 15:23
а куда вы хотите вывести спиок значений, как я понял у вас реквизит на форме с типом список занчений
Подробно
На форме в области реквизитов создаю Реквизит1 типа список значений. Его перетаскиваю мышкой в область Элементы.
Все.
Кстати, в Конфигураторе в модуле этой формы, платформа не видит этот реквизит. То есть Сообщить(Реквизит1) дает пустую строку в окне сообщений. Что-то с этим Реквизит1. Не знаю что.
а вы заполнили этот список значений? что вообще пытаетесь сделать? зачем его перетаскивать на форму? вы что-то вроде, чтобы выбрать из списка можно было, хотите получить?
Добавлено: 19 апр 2013, 16:20
Может вот это вам поможет:
Элементы.Реквизит1.СписокВыбора.Добавить(«Форма»); // наименования полей, которые должны быть в списке
Элементы.Реквизит1.СписокВыбора.Добавить(«Форма настроек»);
Элементы.Реквизит1.СписокВыбора.Добавить(«Форма варианта»);
СпЗ я заполнл.
Я пытаюсь
ВЫВЕСТИ СписокЗначения на форму.
То есть уметь делать в 8,2, то что умел делать в 8,0.
Как это делать с Таблицей Значений я освоил.
Стал по аналогии делать со списком значений.
По идее метод ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>) универсален.
Не нужно список значений пихать через ЗначениеВРеквизитФормы()
Т.к. ваш Список значений на форме имеет тип СписокЗначений, а не тип данных формы!
А вот таблица значений не может быть отражена на клиенте как таблица значений поэтому через ЗначениеВРеквизитФормы() преобразуется в тип ДанныеФормыСтруктура
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Цитата: Dethmontt от 19 апр 2013, 16:45
Не нужно список значений пихать через ЗначениеВРеквизитФормы()
-Как его тогда отразить на Форме?
-Для каких типов данных наиболее ЗначениеВРеквизитФормы()?
-Откуда можно знать, для чего этот метод подходит, а куда нет?
создавайте реквизит формы с типом Список значений и перетащите его на форму
Цитата: Dethmontt от 19 апр 2013, 16:45
Не нужно список значений пихать через ЗначениеВРеквизитФормы()Т.к. ваш Список значений на форме имеет тип СписокЗначений, а не тип данных формы!
А вот таблица значений не может быть отражена на клиенте как таблица значений поэтому через ЗначениеВРеквизитФормы() преобразуется в тип ДанныеФормыСтруктура
Спасибо за раъяснение. Я в его суть не вьезжаю. На досуге подумаю.
Но на решение оно меня навело.
Я просто сделал:
В Модуле Формы:
Реквизит1 = СпЗн;
Что не работает с ТаблицейЗначений
В Модуле Формы:
РеквизитНаФормеТипаТаблицаЗначений = ПеременнаяТипаТаблицаЗначений.
То есть не нужно было левой рукой чесать правое ухо. Что пришлось делать с ТаблицейЗначений.
Еще раз спасибо!
Цитата: Березин от 19 апр 2013, 21:37Спасибо за раъяснение. Я в его суть не вьезжаю. На досуге подумаю.
Но на решение оно меня навело.
Я просто сделал:
В Модуле Формы:
Реквизит1 = СпЗн;
Что не работает с ТаблицейЗначений
В Модуле Формы:
РеквизитНаФормеТипаТаблицаЗначений = ПеременнаяТипаТаблицаЗначений.То есть не нужно было левой рукой чесать правое ухо. Что пришлось делать с ТаблицейЗначений.
Еще раз спасибо!
Браво! вы толковый ученик! Поняли что в 1С вам еще и ногой задницу придется научиться чесать…
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Список значений на форме 1С для выбора пользователем значения можно расположить непосредственно на форме обработки/документа. Тогда пользователь сможет выбирать несколько значений из списка (зажав CTRL или SHIFT).
Список значений на форме 1С — в толстом клиенте просто размещаем на форме элемент списка, указываем название связанного реквизита формы.
Список значений на форме 1С — в тонком клиенте добавим реквизит формы, у которого выберем тип Список значений. При перетаскивании реквизита на форму, 1С спросит в каком виде мы хотели бы отображать его – чтобы он отображался аналогично толстому клиенту – выберите «Таблица».
В списке элементов формы появятся таблица, а у нее колонка. В свойствах таблицы можно установить запрет на редактирование списка (свойства Изменять состав/порядок строк или галочка Только просмотр).
Работа со списком значений на форме 1С из программного кода ведется по имени реквизита формы, который в толстом клиенте автоматически добавила система, а в тонком – вручную добавили мы самостоятельно. В примере (на картинках) имя реквизита формы – «ВыберитеЗначение».
В обработчике события формы ПриОткрытии() заполним значения списка, чтобы пользователю было из чего выбирать:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВыберитеЗначение.Добавить(0, "Создать документ"); //первый параметр – значение, второй параметр – представление значение, представление может отличаться от значения как угодно
ВыберитеЗначение.Добавить(1, "Редактировать документ");
ВыберитеЗначение.Добавить(2, "Удалить документ");
КонецПроцедуры
В обработчике нашего нужного события (например, кнопка выполнения действий) мы можем проверить, что там понавыбирал наш пользователь. Доступ к результату производится также по имени, но через элемент на форме, поэтому перед именем добавляем ЭлементыФормы (для толстого клиента) или Элемент (для тонкого клиента). Также – условие Если/Иначе уже не пойдет – так как могут быть выбраны несколько значений:
Проголосовать за этот пост:
Загрузка…
Posted in Язык 1С