Реквизит типа «Список значений» |
Я |
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. Можно сделать на форме реквизит типа СписокЗначений, а в справочнике реквизит типа строка, в который и заносить выбранное из списка значение
Можно, если использовать строку неограниченной или разумно-ограниченной длины и методы для списка ИзСтрокиСРазделителями и ВСтрокуСРазделителями
Лучше ЗначениеВСтрокуВнутр — меньше места занимает.
Но медленней работает ЗначениеВСтроку, ЗначениеИзСтроки — самое быстрое из штатных средств — для записи и извлечения СЗ из/в строку…
Что будет, если между записью и извлечением СЗ удалить элемент справочника, который входит в этот список?
Объясни подробней почему ЗначениеВСтроку быстрее ЗначениеВСтрокуВнутр. В subj не было ничего о целостности базы. И кто сказал что в этом списке храняться элементы справочника или документов.
Произойдет нарушение целостности… Ссылочной… Но товарищей камикадзе это не страшит…
Для ссылочной целостности лучше создать подчиненный справочник. А уже на форме его показывать как список значений.
Наврал я — если в СЗ элементы справочника — то ЗначениевСтрокуВнутр/ИзСтрокиВнутр — быстрее в полтора раза…. А значениеИЗСтроки — быстрее — для создания пустого СЗ, Либо пустой ТЗ (с колонками)
Будет — .опа… И большая клизма программисту… На полведра скипидара с патефонными иголками… Запасайтесь вазелином…
Я могу и ошибаться, но по моему я когда-то отказалась от такого реквизита типа список значений в документе, потому что подобные операции — типа ЗначениеИзСтроки при открытии — устанавливают признак модифицированности документа в истину, а значит даже если вы просто откроете документ для повторного просмотра, он будет перезаписан (время), а возможно и перепроведен (еще больше времени) — подумайте над этим…
Замечание правильное. Но проблема обходится, хотя и с извращениями.
Тэги:
Комментарии доступны только авторизированным пользователям
Содержание:
- Использование палитры свойств реквизита формы типа «Список значений»
- Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»
При разработке интерфейсов 1С на платформе 1С:Предприятие 8 нередки ситуации, когда требуется ограничить допустимые для ввода списки значений для реквизита формы с типом «Список значений». Это можно выполнить несколькими способами.
1. Использование палитры свойств реквизита формы типа «Список значений»
Первый способ: установка допустимого типа в свойстве «Тип значения» в палитре свойств реквизита формы типа «Список значений».
Рис. 1 Редактирование типа значения в палитре свойств реквизита
В данном случае мы ограничили возможность добавления/изменения элементов списка реквизита «Список складов-получателей» типом «СправочникСсылка.Склады».
По умолчанию при создании основного реквизита формы с типом «Список значений» платформа 1С устанавливает данному свойству тип значения «Произвольный».
2. Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»
Второй способ: программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений».
Сделать это можно, например, в обработчике события 1С формы «ПриСозданииНаСервере»:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
В данном случае мы также ограничили возможность добавления/изменения элементов списка реквизита «Список складов-получателей» типом «СправочникСсылка.Склады».
Если же требуется разрешить выбирать несколько типов при добавлении или изменении элементов списка значений на форме, то просто следует добавить все необходимые типы в массив, передаваемый в качестве параметра конструктора описания типов, который используется при установке допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений», например:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.ПодразделенияОрганизаций»));
СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
Таким образом, во втором случае для реквизита «Список складов-получателей» к возможности добавления/изменения элементов списка с типом «СправочникСсылка.Склады» мы добавили аналогичную возможность для типа «СправочникСсылка.ПодразделенияОрганизаций».
Программную установку допустимого типа(ов) значения(ий) аналогичным образом можно использовать и для колонки с типом «Список значений» реквизита формы с типом «Таблица значений» или «Дерево значений». Единственный нюанс, на который нужно обратить внимание для получения требуемого результата – это то, что установка в таких случаях должна производиться в обработчике события «НачалоВыбора» элемента формы, связанного с соответствующей колонкой реквизита формы с типом «Таблица значений» или «Дерево значений», например:
&НаКлиенте
Процедура ТаблицаПолучателейМатериаловСпискокСкладовПолучателейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;
МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));
Элементы.ТаблицаПолучателейМатериалов.ТекущиеДанные.СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);
КонецПроцедуры
В данном случае для колонки «СпискокСкладовПолучателей» (с типом «Список значений») реквизита формы «ТаблицаПолучателейМатериалов» мы ограничили возможность добавления/изменения элементов списка значений типом «СправочникСсылка.Склады».
Специалист компании «Кодерлайн»
Аскер Жансуев
В предыдущей статье «Изучаем список значений 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
24 / 24 / 1 Регистрация: 11.04.2008 Сообщений: 541 |
|
1 |
|
Реквизит документа с типом «СписокЗначений»17.10.2013, 14:23. Показов 19188. Ответов 11
В документе мне необходим реквизит «Поразделения» составного типа: справочник — Подразделения и Список значений, несколько подразделений, чтоб указать.
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
17.10.2013, 14:38 |
2 |
Используйте табличную часть документа. Каждой строке своё подразделение
0 |
24 / 24 / 1 Регистрация: 11.04.2008 Сообщений: 541 |
|
17.10.2013, 15:07 [ТС] |
3 |
не вариант, ТЧ заполняется по подразделениям или подразделению
0 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
17.10.2013, 15:12 |
4 |
не вариант Почему?
0 |
24 / 24 / 1 Регистрация: 11.04.2008 Сообщений: 541 |
|
17.10.2013, 15:14 [ТС] |
5 |
ТЧ заполняется по подразделениям или подразделению
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
17.10.2013, 15:23 |
6 |
Логику документа объясните тогда, что он делает?
0 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
17.10.2013, 15:38 |
7 |
Оленька, если я вас правильно понимаю, Вам нужно заполнять табличную часть документа, на основании данных о подразделениях. Это так? Если до то мы Вам и предлагаем создать отдельную ТЧ в которой будут хранится список подразделений.
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
17.10.2013, 15:44 |
8 |
А вдруг это 7.7?
0 |
24 / 24 / 1 Регистрация: 11.04.2008 Сообщений: 541 |
|
18.10.2013, 06:45 [ТС] |
9 |
1С 8.2
0 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
18.10.2013, 08:56 |
10 |
Если вы мне предлагаете перетащить подразделения в ТЧ Нет. Мы предлагаем создать дополнительную таб. часть «Подразделения». В ней можно будет указать как одно подразделение, так и несколько.
0 |
24 / 24 / 1 Регистрация: 11.04.2008 Сообщений: 541 |
|
18.10.2013, 09:08 [ТС] |
11 |
т.е. в шапке вместо поля подразделение делать ТЧ?
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
18.10.2013, 10:20 |
12 |
Можно запихнуть с помощью ЗначениеВСтрокуВнутр() ЗначениеИзСтрокиВнутр(), но вам надо самой будет делать интерфейс добавления и редактирования списка подразделений. Поэтому не страдайте фигнёй и сделайте ТЧ, это не сложно
т.е. в шапке вместо поля подразделение делать ТЧ? Да, именно так.
1 |
Задание типа значения для реквизита с типом СписокЗначений в управляемых формах
В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:
ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.
Другое дело, когда форма содержит таблицу значений, у которой имеется реквизит с типом СписокЗначений. В такой ситуации через обработчики событий формы к этому реквизиту не достучаться, поэтому нужно использовать обработчики событий элемента формы, связанного с данным реквизитом.
1. Реквизит ТЧ с типом СписокЗначений |
Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:
Процедура РеквизитыТаблицыСписокДоступныхЗначенийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
Элемент.Родитель.ТекущиеДанные.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
КонецПроцедуры
Что бы для типа значения задать составной тип, необходимо в конструктор объекта ОписаниеТипов передать первым параметром массив типов:
ТипыСписка = Массив;
ТипыСписка.Добавить(Тип("Строка"));
ТипыСписка.Добавить(Тип("Число"));
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Единственный минус составного типа в списке значений — это отсутствие множественного выбора (кнопки Подбор), придется добавлять по одному значению в список. а это просто печалит.
Создать на форме элементы типа СписокЗначений и заполнить их
Автор RagnarLodbrok, 02 окт 2017, 21:50
0 Пользователей и 1 гость просматривают эту тему.
Приветсвую всех форумчан!
Я недавно начал изучать 1с программирование и сейчас делаю следующее задание: необходимо в 1с создать тестирование пользователей(анкетирование). Мне необходимо, чтоб на форму последовательно выводились вопросы и варианты ответов из соответсвующих справочников. Для вывода теста программно создаю реквизиты типа СписокЗначений и добавляю на форму поля ввода. Но не могу понять как заполнить эти поля своими данными. Очень надеюсь на вашу помощь. Фрагмент кода прилагаю. Компилятор жалуется на: {Обработка.ПройтиТест.Форма.Форма.Форма(226)}: Значение не является значением объектного типа (Добавить)
РеквизитВО.Добавить(Выб.Ссылка,Выб.Ссылка.Наименование);
Я так понимаю, это потому что я в РеквизитВО передаю не объект, а строку. Как это правильно реализовать? Спасибо.
Счетчик = 1;
Пока Счетчик < 10 Цикл
//Выводим номер вопроса и его формулировку
Группа = Элементы.Добавить("ИмяГруппы" + Счетчик, Тип("ГруппаФормы"), ЭтаФорма);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НоваяНадпись = Элементы.Добавить("Надпись1" + Счетчик, Тип("ДекорацияФормы"), Группа);
НоваяНадпись.Заголовок = "Вопрос №" + Счетчик;
НоваяНадпись1 = Элементы.Добавить("Надпись2" + Счетчик, Тип("ДекорацияФормы"), Группа);
НоваяНадпись1.Заголовок = ВопросыОтветы[Счетчик].Вопрос.ТекстВопроса;
//Добавляем реквизит
РеквизитВО = "ВариантОтвета" + Счетчик;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы(РеквизитВО, Новый ОписаниеТипов("СписокЗначений"), ,"", Истина));
ИзменитьРеквизиты(МассивРеквизитов);
//Добавляем поле ввода
ОбластьОтветов = Элементы.Добавить("Таблица" + Счетчик, Тип("ТаблицаФормы"), Группа);
ОбластьОтветов.ПутьКДанным = РеквизитВО;
ОбластьОтветов.Отображение = ОтображениеТаблицы.Список;
ОтветЗначение = Элементы.Добавить("Поле" + Счетчик, Тип("ПолеФормы"), ОбластьОтветов);
ОтветЗначение.ПутьКДанным = РеквизитВО + ".Значение";
ОтветЗначение.Вид = ВидПоляФормы.ПолеНадписи;
ОтветПометка = Элементы.Добавить("Пометка" + Счетчик, Тип("ПолеФормы"), ОбластьОтветов);
ОтветПометка.ПутьКДанным = РеквизитВО + ".Пометка";
ОтветПометка.Вид = ВидПоляФормы.ПолеФлажка;
//Заполняем реквизит
Стр=ВопросыОтветы.Получить(Счетчик-1);
З=Новый Запрос;
З.Текст="
|ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Ответы
|ГДЕ Владелец=&Вопрос
|УПОРЯДОЧИТЬ ПО КОД";
З.УстановитьПараметр("Вопрос",Стр.Вопрос);
Выб=З.Выполнить().Выбрать();
Пока Выб.Следующий() Цикл
РеквизитВО.Добавить(Выб.Ссылка,Выб.Ссылка.Наименование);
КонецЦикла;
Если НЕ Стр.Ответ.Пустая() Тогда
Зн=РеквизитВО.НайтиПоЗначению(Стр.Ответ);
Зн.Пометка=Истина;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
РеквизитВО — это переменная, имеющая тип Строка. У таких переменных нет метода «Добавить()». Копайте в сторону
ЭтотОбъект.ВариантОтвета.Добавить()
Приведённый код не будет работать т.к. у вас не «ВариантОтвета», а «ВариантОтвета» + Счетчик. А, чуть не забыл. Странно, что ошибка не появилась ещё на этой строке
РеквизитВО = "ВариантОтвета" + Счетчик;
Тут не должно работать ни сложение, ни конкатенация. Сначала нужно преобразовать число к строке
РеквизитВО = "ВариантОтвета" + Строка(Счетчик)
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.
Спасибо за Сказать спасибо
Цитата: alex0402 от 04 окт 2017, 12:21не нужно — выполняется неявное преобразование.
Человек только начал заниматься 1С. Нужно, иначе однажды будет ломать голову что за ошибка преобразования к типу Число.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.