Связи параметров выбора
Содержание[Убрать]
-
- Введение
- Связи параметров выбора
- Пример: Фильтр по контрагенту
- Пример: Фильтр по Пометке удаления
- Пример: 2 условия связи
- Параметры выбора
- Пример: Отбор по контрагенту
- Связи параметров выбора
- Введение
Связи параметров выбора и параметры выбора 1с.
Данное описание предназначено для использования в управляемых формах, в обычных формах этот метод работать не будет.
Если кратко то, Связи параметров выбора настраивают отбор в открываемой форме на основе реквизитов текущего объекта, а Параметры выбора — настраивают отбор на основе жестко установленных значениях
Введение
Итак, начиная с платформы 8.2 у реквизитов появились свойства Связи параметров выбора и параметры выбора. Они предназначены для настройки формы выбора без использования кода. Например, когда мы открываем список договоров в документе, то конечно было бы удобно чтобы список был ограничен лишь теми которые подчинены уже выбранному в документе контрагенту. Для этого и созданы указанные свойства.
Для примера будет использована кофигурация со следующими объектами:
Справочник.Контрагенты
Справочник.Договоры
Документ.Приходная
Реквизит: Контрагент
Реквизит: Договор
Список контрагентов
Для контрагентов созданы следующие договоры
Все дальнейшие настройки будут происходить со свойствами реквизита Договор документа Приходная. Заметьте свойства не элемента формы, а реквизита в дереве конфигурации.
Связи параметров выбора
Свойство помогает настроить связь между текущим объектом, в данном случае документом, и формой выбора.
Пример: Фильтр по контрагенту
Для этого нужно сделать следующую настройку
Мы указали, что в открываемой форме Владелец элементов будет значение указанное в нашем объекте(документе) в реквизите Контрагент. Режим изменения = Очищать, означает, что при очистке реквизита Контрагент очиститься и реквизит Договор, т.е. реквизит свойства которого мы настраиваем
И при выбранном Контрагенте «Контрагент 1» откроется следующая форма
Я не зря пояснял, что наш объект это документ, а не выбранное значение Контрагент, и это хорошо видно на следующем примере
Пример: Фильтр по Пометке удаления
Сделаем следующую настройку
И тогда при значении «Контрагент 1» у нас откроется следующая форма
С первого взгляда может показаться, что фильтр отсутствует, но если приглядетсья, то видно, что в списке нет элемента «Договор 2-2», который помечен на удаление. Программа взяла значение пометки удаления документа и отфильтровала по ней список, а т.к. документ не помечен на удаление, то здесь показаны все элементы не помеченные на удаление.
Теперь давайте пометим документ на удаление и заново откроем список.
Для выбора доступен только помеченный на удаление элемент.
Конечно можно указывать несколько свзяией выбора и тогда они будут складываться, т.е. в списке будут элементы которые удовлетворяют всем условиям одновременно.
Пример: 2 условия связи
Сделаем следующую настройку
Отменим удаление документа, выберем контрагента «Контрагент 2» и откроем форму выбора договоров
В форме доступен только один договор «Договор 2-1».
Параметры выбора
Предназначены для указания конкретных значений отбора
Пример: Отбор по контрагенту
Т.к. настройка приосходит в конфигураторе, то доступны только предопределенные элементы, в нашем случае это «Контрагент 3»
Выбираем тип значения
и выбираем само значение
теперь независимо от выбранного в документе Контрагента, будут доступны к выбору только договоры Контрагента 3.
Это свойство удобно применять когда нужно выбирать не помеченные на удаление элементы, для этого нужно сделать настройку
И конечно же можно использовать свойства Связи параметров выбора и Параметры выбора одновременно
И тогда при выборе договора для контрагента «Контрагент 2», откроется форма
Как видим открылся список подчиненных договоров и не помеченных на удаление.
Недостаточно прав для комментирования
|
|||
fantomrik
27.04.13 — 16:50 |
Добрый день! http://s1.ipicture.ru/uploads/20130427/ZNgmIZFK.jpg http://s1.ipicture.ru/uploads/20130427/4MjX2Eqe.jpg |
||
fantomrik
1 — 27.04.13 — 23:15 |
ап |
||
fantomrik
2 — 28.04.13 — 11:06 |
апну |
||
Фокусник
3 — 28.04.13 — 12:58 |
(0) Если я правильно понял вопрос, нужно подменить стандартный выбор значения на свой и программно наполнить список возможных выбираемых значений |
||
fantomrik
4 — 28.04.13 — 13:38 |
Нашел решение, возможно кому то пригодится. |
||
fantomrik 5 — 28.04.13 — 13:39 |
(3) Да наверно и так можно было, но (4) более простой способ получается. |
Программист всегда исправляет последнюю ошибку.
Отбор по владельцу в 1с : Предприятие 8
Отбор по владельцу является классической “плюшкой” в 1с : Предприятии 8. Применение подобного отбора предполагают многие задания в 1с. Следует учитывать, что наличие такого отбора оценивается при решении задач на 1с специалист по платформе. Приведем механизм организации такого механизма без использования программирования.
Использование отбора рассмотрим на примере двух Справочников:
- Справочник Контрагенты
- Справочник Контактные Лица Контрагентов
Не трудно догадаться, что справочник Контрагенты будет владельцем справочника Контактные Лица Контрагентов.
Дальнейшую настройку произведем в документе. Создадим такой документ, в котом имеются ссылки на наши справочники и эти ссылки располагаются в табличной части.
Во-первых выберем на форме документа столбец содержащий ссылку на Справочник Контактные Лица Контрагентов.
Во-вторых настроим связи параметров выбора.
Мы настроили отбор по владельцу в 1с:Предприятии 8 без строчки кода на 1с.
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить — сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ
НаСервере
П
10060 (0x0000274C): Попытка установить соединение была безуспешной 22
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools — это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
COM-соединение не обнаружило свободной лицензии / ключ защиты 0
Иногда при подключении к 1С возникает ошибка:
COM-соединение не обнаружило свободной лицензии!
COM-соединение не обнаружило ключ защиты программы!
https://helpf.pro/uploads/img/_1-UsuyAg6E2P.jpg
В таких случаях, иногда, может помочь следующий с
Посмотреть все результаты поиска похожих
Раньше как-то делал, после перерыва в практике забыл начисто. Потыкался наугад, не помогло.
Есть два справочника: Контрагенты (владелец) и ДоговорыКонтрагентов(подчиненный) и документ ПоступлениеОплатыПоДоговору.
На форме документа соответственно: Контрагент, ДоговорКонтрагента.
Вопрос: как сделать так чтобы в выпадающем списке отображались только те договоры, которые относятся к выбранному контрагенту, что на форме?
Помню что где-то в настройках то ли объекта документа, то ли в настройках элемента управления формы.
Что где выставить надо?
И еще сопутствующий вопрос. В 8.3 по умолчанию, когда открываешь выпадающий список выпадают не значения, а список последних выбранных значений и кнопки «добавить» и «показать всех». Как сделать так чтобы отображались сразу значения из источника данных? В 8.2 такого не было.
Подчиненные владельцу реквизиты — элементы справочников, которые должны выбираться пользователем в контексте элемента-владельца. В тестовом примере у нас будут справочники «Контрагенты», «Договора» и документ «ПриходнаяНакладная» с реквизитами «Контрагент» и «Договор».
Cправочник «Договора» подчинен справочнику «Контрагенты»:
Для документа «ПриходнаяНакладная» в свойствах реквизита «Договор» выставляем «Связи параметров выбора: Отбор.Владелец(Контрагент)»
Для этого по нажатию […] выбираем в списке «Связи параметров выбора» реквизит «Контрагент»:
В таблице Имя-Реквизит-Режим изменения должно стоять: Отбор.Владелец — Контрагент — Очищать
Если в поле «Имя» стоит что-то другое, нужный вариант можно выбрать из выпадающего списка:
Поиск:
1С:Предприятие • Владелец • Отбор • Параметр • Управляемая форма
Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара. У документа имеются следующие реквизиты (см. рисунок 1):
- ПоставщикОтбор (тип СправочникСсылка.Поставщики);
- ТоварОтбор (тип СправочникСсылка.Товары);
- ОтветственныйОтбор (тип СправочникСсылка.Ответственный);
- ПриемТовара (тип ДокументСсылка.ПриемТовара).
Рисунок 1. Структура документа ДокументОтборПриемаТовара |
Выбирать будем документ ПриемТовара, а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор.
Документ ПриемТовара имеет реквизиты (см. рисунок 2):
- Поставщик (тип СправочникСсылка.Поставщики);
- Ответственный (тип СправочникСсылка.Ответственный);
- Комментарий (Тип Строка).
А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число).
Рисунок 2. Структура документа ПриемТовара |
1. Установка отбора в свойствах реквизита объекта метаданных
Самый простой вариант отбора. Нужно всего лишь в свойствах реквизита «Связи параметров выбора» и «Параметры выбора» задать параметры выбора. Допустим, при выборе документа ПриемТовара, нужно в форме выбора показывать документы отобранные по поставщику и только проведенные. Для этого в связях параметров выбора задаем отбор по поставщику, а в параметрах выбора отбор только проведенных документов (см. рисунок 3).
Рисунок 3. Отбор в свойствах реквизита объекта метаданных |
Больше ничего делать не нужно, платформа сама завернет указанные параметры выбора в структуру (см. рисунок 4) и поместит её в параметр Отбор формы выбора, далее, анализируя данный параметр формы, платформа устанавливает отборы для динамического списка.
Рисунок 6. Значение параметра формы выбора Отбор |
2. Установка отбора в свойствах элемента формы
Такой же простой вариант как и первый, только те же самые свойства задаются для элемента формы (см. рисунок 5).
Рисунок 5. Отбор в свойствах элемента формы |
Свойства элемента формы имеют приоритет над свойствами реквизита объекта.
3. Установка собственного отбора при создании формы выбора на сервере
Усложним задачу и будем производить отбор документов по табличной части, а конкретно по товару в ней. Для этого в связях параметров выбора зададим связь, где параметр будет Товар (прям ручками пишем), а реквизит ТоварОтбор (см. рисунок 6).
Рисунок 6. Связь параметра Товар с реквизитом ТоварОтбор |
Именно такую задаем связь, так как более одной точки(.) в колонке Имя при написании параметра мы не можем использовать (платформенное ограничение), то есть написать «Отбор.Товары.Товар» мы не сможем.
Так как имя параметра мы задали вручную, то платформа его не поместит в параметр Отбор формы выбора, поэтому в форме выбора документа ПриемТовара в обработчике события ПриСозданииНаСервере напишем программный код, который будет обрабатывать наш параметр Товар и устанавливать отбор по реквизиту табличной части:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Товар = Неопределено;
ЭтотОбъект.Параметры.Свойство("Товар", Товар);
Если Товар <> Неопределено Тогда
ФиксОтбор = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
ЭлементОтбора = ФиксОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Товар");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Товар;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
4. Программная установка параметров выбора
Так как у элемента формы есть свойства СвязиПараметровВыбора и ПараметрыВыбора, и они доступны не только для чтения, но и на запись, то все что описано выше можно выполнить с помощью программного кода. Для этого в форме документа ДокументОтборПриемаТовара в событии ПриСозданииНаСервере напишем код, который будет формировать массив связей параметров и параметров выбора, и устанавливать их в соответствующие свойства элемента формы ПриемТовара, который связан с реквизитом объекта ПриемТовара:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем связи параметров выбора.
МассивСвязей = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Поставщик", "Объект.ПоставщикОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ответственный", "Объект.ОтветственныйОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Товар", "Объект.ТоварОтбор");
МассивСвязей.Добавить(НоваяСвязь);
// Создаем параметры выбора.
МассивПараметров = Новый Массив;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
// Устанавливаем связи параметров и параметры выбора для элемента формы.
Элементы.ПриемТовара.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязей);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.
5. Установка параметров выбора в момент начала выбора
Этот вариант позволяет «на лету» устанавливать параметры выбора. Усложним задачу и будем устанавливать отбор только по заполненным реквизитам отбора.
В модуле формы документа ДокументОтборПриемаТовара в событии НачалоВыбора для элемента ПриемТовара, который связан с реквизитом объекта ПриемТовара, напишем код, который будет устанавливать параметры выбора в зависимости от заполненности реквизитов отбора:
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивПараметров = Новый Массив;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Поставщик", Объект.ПоставщикОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Ответственный", Объект.ОтветственныйОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Товар", Объект.ТоварОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.
6. Открытие формы выбора с установленным параметром формы Отбор в момент начала выбора
Данный способ отличается от предыдущего тем, что мы отменяем стандартную обработку события НачалоВыбора, сами формируем параметр формы Отбор, передаем его в открываемую форму выбора с указанием владельца формы, то есть все делаем за платформу. Обратите внимание, что в данном случае нам не нужно обходить ограничение платформы (больше одной точки в имени параметра), что бы установить отбор по товару в табличной части, достаточно указать параметр отбора Товары типа Структура, в котором ключом будет имя колонки «Товар», а значение ссылка на товар.
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Отбор = Новый Структура;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
Отбор.Вставить("Поставщик", Объект.ПоставщикОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
Отбор.Вставить("Ответственный", Объект.ОтветственныйОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
Отбор.Вставить("Товары", Новый Структура("Товар", Объект.ТоварОтбор));
КонецЕсли;
Отбор.Вставить("Проведен", Истина);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Документ.ПриемТовара.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Отборы на динамический список платформа наложит сама, писать дополнительно код больше не нужно, как в варианте №3.
А что будет, если отбор в связях параметров выбора и параметры выбора пересекаются?
Как показал мой эксперимент, страшного ничего не случится, платформа установит отбор по связям параметров выбора.