Форма выбора справочника с отбором по реквизиту

Как установить отбор в открываемой форме

Содержание[Убрать]

    • Установка отбора в форме при открытии
      • Установка отбора в 8.1 обычное приложение
      • Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)
        • Фильтр по одному элементу
        • Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?
        • Ещё один вариант открытия формы с отбором в списке для 8.3

Как программно установить отбор в открываемой форме?

Установка отбора в форме при открытии

Установка отбора в 8.1 обычное приложение

Для установки отбора используется свойство «Отбор» у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:

ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();

В данном случае мы применили вид сравнения «Равно«, но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.

Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу «Группа Покупатели» в которой находится договор:


ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;

ГруппаПокупатели = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Группа Покупатели");
ФормаВыбора.Отбор.Родитель.ВидСравнения = ВидСравнения.ВИерархии;
ФормаВыбора.Отбор.Родитель.Значение = ГруппаПокупатели;
ФормаВыбора.Отбор.Родитель.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();

Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)

Фильтр по одному элементу

&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    ЗначениеОтбора = Новый Структура("Владелец", Элементы.Список.ТекущиеДанные.Контрагент);
    ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);

    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",ПараметрыВыбора, Элемент); // здесь передан Элемент, чтобы выбранное значение попало в поле

КонецПроцедуры

Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?

&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    МассивДоговоров = ПолучитьДоговорыНаСервере();
    СЗДоговоров = Новый СписокЗначений;
    СЗДоговоров.ЗагрузитьЗначения(МассивДоговоров);

    НастройкиКомп = Новый НастройкиКомпоновкиДанных;
	
    ОтборСписка = НастройкиКомп.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСписка.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ОтборСписка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборСписка.ПравоеЗначение = СЗДоговоров;
    ОтборСписка.Использование = Истина;
	
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомп);
    ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); // Здесь устанавливается возможность выбора не только элементов, но групп
	
    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбора", ПараметрыФормы, Элемент);

КонецПроцедуры

Ещё один вариант открытия формы с отбором в списке для 8.3

Ниже текст процедуры открытия формы для команды объекта 

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СписокПокупателей = ПолучитьСписокПокупателей(); 
Отбор = Новый Структура;
Отбор.Вставить("Ссылка", СписокПокупателей );
ПараметрыФормы.Вставить("Отбор", Отбор);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

Недостаточно прав для комментирования

Ermak
14.05.2013 09:15 Прочитано: 38665

Документ Допуски
Создан Реквизит Должность, тип Справочник Должность
Создана ТЧ с реквизитом Описание, тип Строка
Справочник Должность
Реквизит Наименование, Тип Строка
Справочник Описание
Реквизит Должность, тип Справочник Должность
Реквизит Описание, тип Строка.

Нужно когда в документе Допуски выбираю в реквизите Должность значение например Слесарь, в ТЧ при выборе Описания открывался справочник Описания в выбором только Слесарь.
Написал такой вариант, подскажите как сделать отбор по должности

Код 1C v 8.х

 Процедура ДопускиОписаниеНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

ЗначениеОтбора = Новый Структура("Должность", ЭтотОбъект.Должность);
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
ОткрытьФорму("Справочник.УМЦ_Допуски.ФормаВыбора", ПараметрыВыбора, Элемент);

КонецПроцедуры


Изменено 14.05.13 11:36:17

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
14.05.2013 11:16 Ответ № 1

(0) Ermak, посмотри v8.x: Как установить отбор в форме списка справочника? там все есть и описано

Ermak
14.05.2013 11:36 Ответ № 2

(1) E_Migachev, Я сделал по первому варианту но почему то у меня не работает отбор по реквизиту Должность.

Mokey
14.05.2013 11:56 Ответ № 3

(0) Ermak, где-то я это уже видел, только запросом)))

Ermak
14.05.2013 12:10 Ответ № 4

(3) Mokey, запрос я напишу он не сложный
Код 1C v 8.х

  Запрос = Новый Запрос (
"ВЫБРАТЬ
| УМЦ_Допуски.Должность
|ИЗ
| Справочник.УМЦ_Допуски КАК УМЦ_Допуски
|ГДЕ
| УМЦ_Допуски.Должность = &Должность");
Запрос.Параметры.Вставить("Должность", ЭлементыФормы.Должность.Значение);

А как дальше прописать чтобы открылся справочник и сделал отбор по реквизиту Должность

Mokey
14.05.2013 14:41 Ответ № 5

(4) Ermak, так запрос заработал или не заработал?
https://help1c.com/help/view/11138.html


Изменено 14.05.13 14:45:26

Ermak
14.05.2013 14:53 Ответ № 6

нет , я так и не понял почему когда ставлю отбор по Должности он у меня не выгружает.

Ermak
14.05.2013 14:55 Ответ № 7

Мне нужно чтобы человек заходил в сам справочник с отбором по должности

Mokey
14.05.2013 17:38 Ответ № 8

(6) Ermak, значит, нет такой должности

Ermak
14.05.2013 23:12 Ответ № 9

(8) Mokey, ну как нет, если справочник один и значение одинаковое

Mokey
15.05.2013 10:01 Ответ № 10

(9) Ermak, если вот так не работает,
Код 1C v 8.х

  Запрос = Новый Запрос (
"ВЫБРАТЬ
| УМЦ_Допуски.Должность
|ИЗ
| Справочник.УМЦ_Допуски КАК УМЦ_Допуски
|ГДЕ
| УМЦ_Допуски.Должность = &Должность");
Запрос.Параметры.Вставить("Должность", ЭлементыФормы.Должность.Значение);

а вот так работает:

Код 1C v 8.х

  Запрос = Новый Запрос (
"ВЫБРАТЬ
| УМЦ_Допуски.Должность
|ИЗ
| Справочник.УМЦ_Допуски КАК УМЦ_Допуски
|");

то однозначно либо нет такой должности, либо в ЭлементыФормы.Должность.Значение хранится не то значение. Других вариантов просто нет.


Изменено 15.05.13 10:02:22

Ermak
15.05.2013 10:55 Ответ № 11

Без Параметров работает, как можно проверить какой значение попадает ЭлементыФормы.Должность.Значение

Ermak
15.05.2013 11:00 Ответ № 12

я проверил вот так Код 1C v 8.х

    Список = Элемент.СписокВыбора;	
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УМЦ_Допуски.Описание КАК Описание
|ИЗ
| Справочник.УМЦ_Допуски КАК УМЦ_Допуски
|ГДЕ
| УМЦ_Допуски.Должность = &Должность";

Запрос.Параметры.Вставить("Должность", ЭлементыФормы.Должность.Значение);
Список.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Описание"));
Сообщить(ЭлементыФормы.Должность.Значение);

Значение выдала правильное, такое как в реквизите Должность в форме документа. Как проверить какое значение выдает в справочнике реквизит Должность

Ermak
15.05.2013 12:26 Ответ № 13

Вообще не понимаю, что можно еще сделать подскажите. Я сделал внешнюю обработку чтобы проверить выгрузкуКод 1C v 8.х

 Процедура ДолжностьПриИзменении(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =

"ВЫБРАТЬ
| УМЦ_Допуски.Описание
|ИЗ
| Справочник.УМЦ_Допуски КАК УМЦ_Допуски
|ГДЕ
| УМЦ_Допуски.Должность = &Должность";

Запрос.Параметры.Вставить("Должность", ЭлементыФормы.Должность.Значение);
Результат = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТабличноеПоле1.Значение = Результат;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

КонецПроцедуры

Все работает как надо. Аналогично сделал в своем документе, не работает. Че такое *15

Ermak
15.05.2013 12:29 Ответ № 14

Создал новый документ все работает, что за бред так и не понял

Ermak
15.05.2013 12:35 Ответ № 15

А как мне теперь сделать Форму выбора справочника с отбором по реквизиту

Ermak
15.05.2013 16:55 Ответ № 16

Все разобрался, сделал вот так
Код 1C v 8.х

 Процедура ТабличноеПоле1Колонка1НачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.УМЦ_Допуски.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ФормаВыбора.Открыть();
КонецПроцедуры

Подскажите почему после выбора значение, в ячейки появляется <>

Mokey
16.05.2013 09:57 Ответ № 17

(16) Ermak, если представление справочника по наименованию, а нименование не заполнено, то будет выдавать <>

Ermak
16.05.2013 12:55 Ответ № 18

(17) Mokey, У меня стоит представление справочника по наименованию, но наименование я не заполняю потому что длина текста маленькая. Я создал реквизит Описание и сделал длину не ограниченную, т.е на форме у меня стоит и заполняется только реквизит Описание, а наименование я отключил чтобы не ругалась. А как мне тогда быть в моей ситуации?

Mokey
16.05.2013 17:03 Ответ № 19

(18) Ermak, вот и ответ на ваш вопрос

Ermak
16.05.2013 17:13 Ответ № 20

(19) Mokey, да я понял почему, но как мне быть если мне нужно чтобы была большая длина. Как тогда сделать чтобы попадала значение Описание а не Наименование?

Mokey
16.05.2013 17:27 Ответ № 21

(20) Ermak, никак, если только скрыть реквизит, а на форму выводить Описание, ну и кнопочка подбора должна быть описана вручную


Изменено 16.05.13 17:27:54

Ermak
16.05.2013 19:29 Ответ № 22

(21) Mokey, а как на примере прописать кнопку подбора?

Mokey
17.05.2013 12:18 Ответ № 23

(22) Ermak, Откоываете модально форму выбора требуемого справочника. Эта форма вернёт выбранный элемент или неопределено, если нажали ESC (отказались от выбора). Вот этот выбранный элемент и заносите в реквизит, а на форму выводите надпись, например, Реквизит.Описание.

Ermak
17.05.2013 13:35 Ответ № 24

покажите программно

Bell
17.05.2013 14:25 Ответ № 25

http://novichok1c.ru/otbor-po-znacheniyu-rekvizita-tablichnoy-chasti-v-spiske-dokumentov

Bell
17.05.2013 14:29 Ответ № 26

Вот у себя сдела вот так отбор по подчинению и валюте
Код 1C v 8.х

 Процедура ПодборТЧ_Договора(Кнопка)

ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе",Ложь);
Подбор = ПолучитьФорму("Справочник.Контрагенты_Договора.Форма.ФормаВыбораОтборы",ПараметрыПодбора,ЭлементыФормы.Договора);
Подбор.Валюта = Валюта;
Подбор.ПараметрОтборПоВладельцу = Контрагент;
Подбор.ОткрытьМодально();

КонецПроцедуры


Изменено 17.05.13 14:29:35

Ermak
17.05.2013 15:10 Ответ № 27

У меня сейчас на выборе стоит такой отбор Код 1C v 8.х

 Процедура ДопускиОписаниеНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.УМЦ_ДопДопуски1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ФормаВыбора.Открыть();
КонецПроцедуры

Как мне совместить вместе это дело?

Mokey
17.05.2013 15:29 Ответ № 28

(27) Ermak, вставляете на форму Надпись и Кнопку.
На кнопку вешаем процедуру
Код 1C v 8.х

  Процедура Кнопка1ПриНажатии(Элемент)
ФормаВыбора = Справочники.УМЦ_ДопДопуски1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ВыбранныйЭлемент = ФормаВыбора.ОткрытьМодально();
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
УМЦ_ДопДопуски = ВыбранныйЭлемент; //это реквизит нашего объекта
Надпись.Заголовок = ВыбранныйЭлемент.Описание;
КонецЕсли;
КонецПроцедуры
Ermak
17.05.2013 15:47 Ответ № 29

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

Mokey
17.05.2013 16:32 Ответ № 30

(29) Ermak, в ТЧ? проще простого, добавьте колонку без элемента управления и при выводе строки устанавливайте текст вроде такого:
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ТекущиеДанные.УМЦ_ДопДопуски.Описание). Но колонка с <> останется, потому что Вам надо выбирать каким-то образом. Есть варианты, но они довольно хитрые (например, спраятать колонку УМЦ_ДопДопуски, а выбор производить по комбинации клавиш или как-то ещё).
Успехов.


Изменено 17.05.13 16:33:19

Mokey
17.05.2013 16:40 Ответ № 31

а можно попробовать при выводе строки непосредственно в эту ячейку устанавливать текст, правда, перед выбором всё равно текст будет теряться, но не надолго))


Изменено 17.05.13 16:42:28

Ermak
17.05.2013 17:16 Ответ № 32

(31) Mokey, Покажите пожалуйста на примере

Mokey
17.05.2013 17:35 Ответ № 33

я же написал уже всё

Mokey
20.05.2013 10:48 Ответ № 34

Код 1C v 8.х

 Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Колонка1.УстановитьТекст(ДанныеСтроки.Колонка1.Описание);
КонецПроцедуры

Подразумеваем, что Колонка1 — это и есть поле, в которое Вы подбираете элемент из справочника

Ermak
21.05.2013 15:26 Ответ № 35

Сделал так Код 1C v 8.х

 Процедура ДопускиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ДанныеСтроки.Описание.Описание);
КонецПроцедуры

Описание это имя колонки или поле
выдает ошибку

{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Значение не является значением объектного типа (Описание)
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ДанныеСтроки.Описание.Описание);

Ermak
23.05.2013 12:40 Ответ № 36

???

Mokey
24.05.2013 10:18 Ответ № 37

Добрый день. А что есть ДанныеСтроки.Описание в Вашем случае? Сдаётся мне, что там точно не объект, а просто строка, текст.
А, ну правильно. У Вас же поле называется Допуски!
Код 1C v 8.х

  Процедура ДопускиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Допуски.УстановитьТекст(ДанныеСтроки.Допуски.Описание);
КонецПроцедуры

Изменено 24.05.13 10:19:41

Ermak
30.05.2013 10:52 Ответ № 38

Выводит ошибку {Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски)
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ДанныеСтроки.Допуски.Описание);

Хотя ТП называется Допуски

Mokey
31.05.2013 16:19 Ответ № 39

Неправильно списываете

Ermak
03.06.2013 14:24 Ответ № 40

все равно выдает ошибку

{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски)
ОформлениеСтроки.Ячейки.Допуски.УстановитьТекст(ДанныеСтроки.Допуски.Описание);

Mokey
03.06.2013 14:59 Ответ № 41

хм… может, стоит тщательней присмотреться к своим данным и реквизитам на форме? что да как называется?

Ermak
03.06.2013 16:28 Ответ № 42

Вот
title

Реквизит «Описание» тип Строка

Mokey
03.06.2013 16:46 Ответ № 43

{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски)
ОформлениеСтроки.Ячейки.Допуски.УстановитьТекст(ДанныеСтроки.Допуски.Описани

судя по скину, это утверждение правильное. «скомпонуйте» у себя оба сообщения об ошибке, которые последними сюда выкладывали, и найдёте решение

во-первых: ДанныеСтроки.Допуски — такого у Вас действительно нет
во-вторых: если Описание — строка, то где Вы выбираете Допуски?


Изменено 03.06.13 16:53:54

Ermak
03.06.2013 17:20 Ответ № 44

В свойствах Описание я использую кнопку Выбора и прописано такое События Код 1C v 8.х

 Процедура ДопускиОписаниеНачалоВыбора(Элемент, СтандартнаяОбработка)
ФормаВыбора = Справочники.УМЦ_ДопДопуски1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ВыбранныйЭлемент = ФормаВыбора.ОткрытьМодально();
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
УМЦ_ДопДопуски1 = ВыбранныйЭлемент; //это реквизит нашего объекта
ЭлементыФормы.Надпись1.Заголовок = ВыбранныйЭлемент.Описание;
КонецЕсли;
КонецПроцедуры
Ermak
03.06.2013 17:24 Ответ № 45

а до этого была так прописано Код 1C v 8.х

 Процедура ДопускиОписаниеНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.УМЦ_ДопДопуски1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ФормаВыбора.Открыть();
КонецПроцедуры
Mokey
03.06.2013 17:37 Ответ № 46

так если Описание — это строка, то зачем огород такой городить?
Код 1C v 8.х

  Процедура ДопускиОписаниеНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.УМЦ_ДопДопуски1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.РежимВыбора = Истина;
ФормаВыбора.Отбор.Должность.Установить (Должность, Истина);
ВыбранныйЭлемент = ФормаВыбора.ОткрытьМодально();
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
УМЦ_ДопДопуски1 = ВыбранныйЭлемент; //это реквизит нашего объекта
ЭлементыФормы.Надпись1.Заголовок = ВыбранныйЭлемент.Описание;
Элемент.ТекущаяСтрока.Описание = ВыбранныйЭлемент.Описание; //Элемент - должен быть ТабличноеПоле
КонецЕсли;
КонецПроцедуры

Изменено 03.06.13 17:37:38

E_Migachev
03.06.2013 17:41 Ответ № 47

я правильно понимаю!? ты в списке документов УМЦ результат хочешь вывести Описание из ТЧ Допуски?

Ermak
03.06.2013 17:49 Ответ № 48

да

Ermak
05.06.2013 09:04 Ответ № 49

????

Ermak
06.06.2013 08:48 Ответ № 50

(47) E_Migachev, подскажите как сделать?

Mokey
06.06.2013 09:37 Ответ № 51

(50) Ermak, (46) Mokey,

Ermak
06.06.2013 14:57 Ответ № 52

(46) Mokey, выдает ошибку

{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(41)}: Поле объекта не обнаружено (ТекущаяСтрока)
Элемент.ТекущаяСтрока.Описание = ВыбранныйЭлемент.Описание; //Элемент — должен быть ТабличноеПоле

Ermak
07.06.2013 12:30 Ответ № 53

?

Mokey
07.06.2013 14:30 Ответ № 54

(53) Ermak, а Вы попробуйте дпилить кусочек кода под свои нужды, я же не вижу, что у Вас там на форме и как расположено! Дело 5-и минут на самом деле.

Mokey
07.06.2013 14:36 Ответ № 55

ЭлементыФормы.ИМЯ_ВАШЕЙ_ТЧ.ТекущаяСтрока.Описание = ВыбранныйЭлемент.Описание;

Ermak
10.06.2013 09:39 Ответ № 56

Спасибо большое получилось!
Подскажите еще, у меня этот столбец Описания стоит неограниченный, поставлена галочка Многострочный режим, но почему то не весь текст пишет в столбец.

Mokey
10.06.2013 12:08 Ответ № 57

Регулируйте высоту строки табличной части

Ermak
10.06.2013 12:41 Ответ № 58

только вижу высоту таб. части, а где строки?

Mokey
10.06.2013 14:50 Ответ № 59

Да, со строками я погорячился, выдал желаемое за действительное. Как вариант, можно добавить в ТЧ формы ещё два столбца, расположить их друг под другом (новая колонка), выставить минимальную ширину, запретить менять ширину… ну и т.д. В итоге колонка Описания будет занимать уже две строчки))

Ermak
10.06.2013 15:06 Ответ № 60

понял спасибо

Ermak
10.06.2013 15:06 Ответ № 61

Вопрос закрыт!

Подсказка: Для редактирования своего ответа щелкните по значку (справа)

В данной статье рассмотрены несколько способов программного открытия формы с установленным отбором.
У начинающих разработчиков достаточно часто возникает вопрос – как при открытии формы установить в ней отбор? Чаще всего речь идет о форме списка или форме выбора. Но в общем случае – описанные в статье механизмы можно применять к любым формам, в которых используется динамический список. Ниже – видео версия этой статьи, для тех кому больше нравится видео формат.

Итак, что же это за способы, и чем они отличаются?
Забегая вперед, скажу – с точки зрения пользователей, разные технические решения могут выглядеть и вести себя одинаково. И разница будет только в коде и используемых механизмах платформы. В разных случаях могут понадобиться разные варианты, поэтому ниже я привожу 6 самых распространенных.

Содержание

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

Один из распространенных приемов – создать глобальную параметризуемую команду, и параметр этой команды передать в качестве отбора. В свойствах команды нужно указать тип параметра команды. Можно указать группу “Панель навигации формы”, тогда команда автоматически будет добавляться в командный интерфейс при открытии формы соответствующего объекта.

Параметризованная команда для открытия формы с отбором

Текст команды будет следующий:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ОтборПоКонтрагенту = Новый Структура("Контрагент", ПараметрКоманды);
	ПараметрыФормы = Новый Структура("Отбор", ОтборПоКонтрагенту);
	ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
		ПараметрыФормы,
		ПараметрыВыполненияКоманды.Источник,
		ПараметрыВыполненияКоманды.Уникальность,
		ПараметрыВыполненияКоманды.Окно,
		ПараметрыВыполненияКоманды.НавигационнаяСсылка);
	
КонецПроцедуры

Ключевой момент здесь – правильно упаковать параметры. Нужно поместить параметр команды в структуру, где ключ структуры будет соответствовать одному из полей отбора динамического списка. В нашем случае – Контрагент. А значение – сам параметр.
И уже эту структуру поместить в структуру ПараметрыФормы (это стандартное название, которое платформа генерирует при добавлении команды, но вы можете использовать любое другое).

Трюк в том, что у формы с основным реквизитом – динамическим списком платформа добавляет параметр Отбор, и на основании содержимого этого параметра, при открытии формы накладывает отбор динамического списка. Поэтому никакого кода дополнительно писать не надо – платформа все сделает за нас.

Параметризуемая команда и передача параметра

Второй вариант – передать параметр команды не в свойство “Отбор”, а в качестве параметра формы. В этом случае платформа не сможет сгенерировать отбор автоматически, и придется добавить немного кода.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ПараметрыФормы= Новый Структура("Контрагент", ПараметрКоманды);
	ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
		ПараметрыФормы,
		ПараметрыВыполненияКоманды.Источник,
		ПараметрыВыполненияКоманды.Уникальность,
		ПараметрыВыполненияКоманды.Окно,
		ПараметрыВыполненияКоманды.НавигационнаяСсылка);
	
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Список.Отбор.Элементы.Очистить();
	ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ПравоеЗначение = Параметры.Контрагент;
	
КонецПроцедуры

Здесь нюанс в том, что не обязательно создавать параметр в открываемой форме в конфигураторе. Даже если мы его не добавим на закладке Параметры в редакторе формы, он все равно будет доступен, т.к. мы явным образом его передали в методе ОткрытьФорму.

Получение ссылки через параметры выполнения команды

Бывают ситуации, когда глобальная команда не имеет параметра. Но в некоторых случаях все равно можно получить ссылку. Для этого можно воспользоваться параметрами выполнения команды. Если команда размещена в форме элемента, мы сможем получить ссылку этого элемента через свойство ПараметрыВыполненияКоманды.Источник.Объект.Ссылка

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ОтборПоКонтрагенту = Новый Структура("Контрагент", ПараметрыВыполненияКоманды.Источник.Объект.Ссылка);
	ПараметрыФормы = Новый Структура("Отбор", ОтборПоКонтрагенту);
	ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
	ПараметрыФормы,
	ПараметрыВыполненияКоманды.Источник,
	ПараметрыВыполненияКоманды.Уникальность,
	ПараметрыВыполненияКоманды.Окно,
	ПараметрыВыполненияКоманды.НавигационнаяСсылка);
	
КонецПроцедуры

Открытие формы с отбором при помощи команды формы

Суть все та же – получаем ссылку, которую хотим использовать в качестве отбора, и передаем в открываемую форму. Как рассмотрено выше, можно поместить либо в отдельный параметр формы, либо в параметр Отбор.

&НаКлиенте
Процедура ВыбратьДокумент(Команда)
	
	ПараметрыФормы = Новый Структура("Контрагент", Объект.Ссылка);
	ОткрытьФорму("Документ.ПоступленияТоваров.Форма.ФормаВыбораПоКнопке", ПараметрыФормы, ЭтотОбъект);
	
КонецПроцедуры

Следует понимать, что мы можем передать в свойство “Отбор” структуру с несколькими ключами, на пример, мы хотим отфильтровать документы не только по контрагенту, но и по организации. И важно учитывать, что платформа стыкует передаваемые параметры и поля отбора по именам ключей. Если переданные ключи не будут соответствовать доступным полям отбора, то автоматически платформа фильтр наложить не сможет.

И еще один момент, о котором стоит упомянуть. Нам никто не запрещает передать больше одного параметра при открытии формы. Например, мы хотим отфильтровать документы по контрагенту и по организации, или реализовать какие-то более сложные фильтры.

Отбор при помощи связи параметров выбора

Кроме использования команд, есть и другие способы открыть форму с установленным отбором. Рассмотрим абстрактный пример. В форме контрагента у нас есть реквизит с типом Документ.ПоступлениеТоваров. И мы хотим при подборе документа в это поле, чтобы фильтровались только документы нужного контрагента.

Использование свойства СвязиПараметровВыбора

В свойствах элемента управления (либо в свойствах реквизита объекта, если мы хотим это сделать для всех форм, где доступен этот реквизит) находим СвязиПараметровВыбора, и настраиваем для отбора по текущей ссылке:

Суть работы этого механизма – точно такая же как с использованием параметризованной команды: мы в свойство Отбор.Контрагент помещаем нужную ссылку. Только в одном случае мы это делали через передачу структуры параметров, а в другом – с помощью настроек в конфигураторе.

Отбор при помощи программной установки параметров выбора

Ну и последний способ, которым можно воспользоваться – он более редкий, и его применяют не так часто. Речь пойдет о свойстве ПараметрыВыбора. Это свойство по своему использованию близко к СвязиПараметровВыбора, но цель у него другая. Связи параметров позволяют использовать данные текущей формы – например, текущую ссылку, или какой-то другой реквизит, который в разных формах будет иметь разные значения.
А вот параметры выбора изначально задаются в конфигураторе некоторыми фиксированными значениями. Например, значением предопределенных элементов справочника, значениями перечислений, и т.д. То есть, подразумевается, что они всегда будут одни и те же. Но, разумеется, мы можем их переопределить программно.

Делать это можно в обработчике НачалоВыбора. Например, так:

&НаКлиенте
Процедура ОсновнойДокумент2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.Контрагент", Объект.Ссылка);
	НовыйМассив = Новый Массив();
	НовыйМассив.Добавить(НовыйПараметр);
	НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
	Элементы.ОсновнойДокумент2.ПараметрыВыбора = НовыеПараметры;
	
КонецПроцедуры

Обратите внимание, что нам необходимо упаковать ссылку в фиксированный массив, и уже этот фиксированный массив присвоить свойству ПараметрыВыбора. В результате этих манипуляций, при открытии формы выбора точно также будет наложен нужный отбор.

Итак, мы рассмотрели шесть вариантов открытия формы с отбором в 1С 8. Какие-то проще, какие-то сложнее, но все находят свое применение. Пользуйтесь теми, какие удобнее!

Для открытия формы выбора (справочника, документа и т.п.) необходимо воспользоваться параметрами открываемой формы.

Обязательным условием является наличие в открываемой форме динамического списка, который назначен основным реквизитом формы. В качестве полей отбора можно воспользоваться любым полем, настроенным в динамическом списке.

Давайте рассмотрим работу механизма на примере: в документе «Поступление товаров» при выборе контрагента необходимо выбирать только поставщиков (отбор будем производить по реквизиту Поставщик типа Булево справочника «Контрагенты»).

Для начала, проверим наличие поля отбора «Поставщик» в настройках отбора динамического списка. Для этого откроем форму выбора справочника «Контрагенты» и перейдем к настройкам динамического списка:Настройка отбора в форме выбора

Мы видим, что поле Поставщик есть среди полей отбора. Значит, наш отбор работать будет (на самом деле, мы можем добавить дополнительные поля в динамический список и использовать их для отбора):

Теперь нам осталось написать только код процедуры, который будет вызывать форму выбора:

ПараметрыОтбора = Новый Структура("Поставщик", Истина);
ПараметрыФормы = Новый Структура("Отбор", ПараметрыОтбора);
ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы);

Как видите, ничего сложного нет: мы создаем структуру, имитирующую отбор (ключ структуры — имя поля отбора, а значение — значение отбора), и включаем его в параметры открываемой формы.

Читайте также:

  1. Функция ОткрытьФорму()
  2. Как открыть форму отчета с отбором?

Поделиться страницей в соц.сетях

в форме выбора справочника отбор по реквизиту документа из которого он выбирается

Я
   elsakovm

28.07.20 — 12:22

Здравствуйте. Как сделать в форме выбора справочника отбор по реквизиту документа из которого он выбирается?

  

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

   Ц_У

1 — 28.07.20 — 12:24

   elsakovm

2 — 28.07.20 — 15:32

&НаКлиенте

Процедура ТранспортноеСредствоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    
    ПараметрыФормы = Новый Структура;

    
    Отборы = Новый Структура;

    Отборы.Вставить(«Контрагент», Объект.Контрагент);

    //Отборы.Вставить(«Контрагент», Объект.Контрагент);

    
    ПараметрыФормы.Вставить(«Отбор», Отборы);

    
    ОткрытьФорму(«Справочник.ТранспортныеСредства.ФормаВыбора»,ПараметрыФормы,);

КонецПроцедуры

Отбор работает, но выбрать не могу ни одно из значений. Что не правильно?

   Ёпрст

3 — 28.07.20 — 16:06

(2) форме нужно сказать что она открыта для выбора + ловить событие в обработкаВыбора

   Ц_У

4 — 28.07.20 — 16:16

   elsakovm

5 — 28.07.20 — 17:18

(3) (4)        

        
        СтандартнаяОбработка = Ложь;    

    ПараметрыФормы = Новый Структура;

    
    Отборы = Новый Структура;

    Отборы.Вставить(«Контрагент», Объект.Контрагент);

    
    ПараметрыФормы.Вставить(«Отбор», Отборы);

    ПараметрыФормы.Вставить(«РежимВыбора», Истина);

        ПараметрыФормы.Вставить(«ЗакрыватьПриВыборе», Истина);

    
    ОткрытьФорму(«Справочник.ТранспортныеСредства.ФормаВыбора»,ПараметрыФормы,ЭтаФорма);

(3) ловить событие в обработкаВыбора — а что там конкретно ловить? РежимВыбора стоит истина

   Kondarat

6 — 28.07.20 — 17:26

(5) И что не получается? Отбор не устанавливается?

   elsakovm

7 — 28.07.20 — 17:36

(6) отбор устанавливается. С этим все хорошо. Но когда я пытаюсь «выбрать» (двойной щелчок мыши или кнопка выбрать) оно не выбирается. Это значение не подставляется в документ, остается старое.

   acht

8 — 28.07.20 — 17:40

(7) Пушо в открытие формы надо владельца передавать

   elsakovm

9 — 28.07.20 — 17:50

(8) точно! спасибо! заработало!

   elsakovm

10 — 28.07.20 — 21:56

отбор работает в форме выбора, а если начать вводить наименование справочника сразу в поле выбора, не открывая форму выбора, то понятно дает выбрать минуя отбор. Как это можно обойти?

   Uzyf

11 — 29.07.20 — 06:52

используй параметры выбора, а не этот колхоз

   Uzyf

12 — 29.07.20 — 06:52

НовыйМассив = Новый Массив();

НовыйМассив.Добавить(ПлынСчетов.Хозрасчетный.НайтиПоКоду(«10.08»));

НовыйМассив.Добавить(ПлынСчетов.Хозрасчетный.НайтиПоКоду(«10.09»));

НовыеЗначения = Новый ФиксированныйМассив(НовыйМассив);

НовыйПараметр = Новый ПараметрВыбора(«Отбор.Ссылка», НовыеЗначения);

НовыйМассив = Новый Массив();

НовыйМассив.Добавить(НовыйПараметр);

НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);

Элементы.СчетУчета.ПараметрыВыбора = НовыеПараметры;

   Uzyf

13 — 29.07.20 — 06:55

Вместо НовыйПараметр = Новый ПараметрВыбора(«Отбор.Ссылка», НовыеЗначения);

надо

НовыйПараметр = Новый ПараметрВыбора(«Отбор.НужныйРеквизит», Объект.НужныйРеквизит);

   elsakovm

14 — 29.07.20 — 08:44

(11) так не работает

    НовыйПараметр = Новый ПараметрВыбора(«Контрагент», Объект.Контрагент);

    
    НовыйМассив = Новый Массив();

    НовыйМассив.Добавить(НовыйПараметр);

    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);

    Элементы.ТранспортноеСредство.ПараметрыВыбора = НовыеПараметры;

   Ц_У

15 — 29.07.20 — 08:49

НовыйПараметр = Новый ПараметрВыбора(«Контрагент», Объект.Контрагент);

«Отбор.Контрагент» не?

   Ц_У

16 — 29.07.20 — 08:50

или из (13) «отбор.Ссылка»

   Uzyf

17 — 29.07.20 — 08:51

открой параметры выбора в свойствах элемента формы и посмотри доступные поля и как они заносятся в параметры

  

Uzyf

18 — 29.07.20 — 08:53

Форма выбора открывается при нажатии на кнопку выбора у элемента формы. Если требуется наложить отборы на выбираемые значения или открыть другую форму, то необходимо использовать событие элемента формы НачалоВыбора.

Процедура для обычного приложения

Процедура СобытиеНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

ФормаВыбора

= Документы.Документ1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.Отбор.Реквизит1.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.Реквизит1.Значение = "Значение";
ФормаВыбора.Отбор.Реквизит1.Использование = Истина;//Чтобы этот отбор был доступен для изменения
ФормаВыбора.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Реквизит1.Доступность = Истина;

ФормаВыбора

.Открыть();КонецПроцедуры

Процедуры для управляемого приложения

Настройка отборов с использованием объекта НастройкиКомпоновкиДанных. Есть возможность задать вид сравнения, доступность элементов отбора для редактирования и т.д.

&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

Настройки

= Новый НастройкиКомпоновкиДанных;

Элемент

= Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.Использование = Истина;
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Реквизит1");
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = "Значение";
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;

ПараметрыФормы

= Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);

ОткрытьФорму

("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры

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

&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

ПараметрыФормы

= Новый Структура;

Отборы

= Новый Структура;
Отборы.Вставить("Реквизит1", "Значение");
Отборы.Вставить("Реквизит2", "Значение");
Отборы.Вставить("Реквизит3", "Значение");

ПараметрыФормы

.Вставить("Отбор", Отборы);

ОткрытьФорму

("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры

&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)СтандартнаяОбработка = Ложь;НастройкКД = Новый НастройкиКомпоновкиДанных;Отбор = НастройкКД.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
   
Отбор.ЛевоеЗначение    = Новый ПолеКомпоновкиДанных(«Ссылка»);
   
Отбор.ВидСравнения     = ВидСравненияКомпоновкиДанных.ВСписке;
   
Отбор.ПравоеЗначение   = ПолучитьСписокЗначенийНаСервере(Элементы.ИмяТаблЧасти.ТекущиеДанные.Реквизит1);
   
Отбор.Использование    = Истина;
   
Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;ПарФормы = Новый Структура;
   
ПарФормы.Вставить(«ФиксированныеНастройки», НастройкКД);ОткрытьФорму(«Справочник.Контрагенты.ФормаВыбора», ПарФормы, Элемент);

КонецПроцедуры

&НаСервере
Функция ПолучитьСписокЗначенийНаСервере(РеквизитТЧ)// Пишем нужный запрос с отбором по реквизиту табличной части
   
СписокОтбора = Новый СписокЗначений;Запрос = Новый Запрос;
   
Запрос.Текст = «ВЫБРАТЬ
    |   Страны.Ссылка
    |ИЗ
    |   Справочник.Страны КАК Страны
    |ГДЕ
    |   Страны.ЧастьСвета = &Европа»
;
   
Запрос.УстановитьПараметр(«Европа», РеквизитТЧ);Выборка = Запрос.Выполнить().Выбрать();
    Пока
Выборка.Следующий() Цикл
       
СписокОтбора.Добавить(Выборка.Ссылка);
    КонецЦикла;

    Возврат

СписокОтбора;

КонецФункции

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии