Имя: Пароль:
1C
1С v8
Выбор из списка. Управляемая форма
0 Varlant1n
 
09.12.20
15:35
Здравствуйте, дорогие форумчане! Передо мной стоит задача. Сделать ФормуСписка документа РеализацияТоваровУслуг для планшета. В этой форме будет информация только о контрагенте, дает и складе, на котором на находится товар контрагента. То есть открывая данную форму на планшете передо мной открывается список элементов документа РеализацияТоваровУслуг. Мне нужно сверху поставить поле ввода для наименования контрагента который, при вводе и выборе определенного контрагента оставит на форме элементы документа только выбранного контрагента. То есть своего рода упрощенный отбор. Надеюсь смог объяснить. Что я пробовал сделать:

1) Создал реквизит в форме Контрагент с типом СправочникСсылка.Контрагенты.
2) Перекинул его на форму. Путь к данным оставил тот же, то есть Контрагент.
3) Полю Контрагент на форме поставил галку Режим выбора из списка.
4) В событии НачалоВыбораИзСписка написал следующий код:
Элементы.Контрагент.СписокВыбора.Добавить(Контрагент);

Пробовал и другой код:
ЭтаФорма.Элементы.Контрагент.СписокВыбора.Добавить(Контрагент);

Пробовал и другие события, а именно : ПриИзменении, НачалоВыбора, но ничего не получается((((( Можете помочь решить данную проблему?( Я буду безумно вам благодарен и + к карме)
1 vicof
 
09.12.20
15:40
В отбор динамического списка своего контрагента пихай
2 Varlant1n
 
09.12.20
15:44
(1) Можно, пожалуйста, по подробнее?( Спасибо огромное заранее!
3 vicof
 
09.12.20
15:44
СписокВыбора не для этих целей нужен
4 vicof
 
09.12.20
15:45
5 Varlant1n
 
09.12.20
15:45
(3) Я пробовал и табличное поле связать с табличной частью, для открытия доступа к ОтборСтрок и написал следующий код:
ЭлементыФормы.ТабличноеПоле.ОтборСтрок.Контрагент.Установить(ВыбранныйКонтрагент);

Но и это не сработало
6 Varlant1n
 
09.12.20
15:47
(4) Такой метод не самый подходящий для планшета. Как я для себя это вижу, что нужно минимум нажатий по экрану для того, чтобы оставить список только с определенным контрагентом
7 Varlant1n
 
09.12.20
15:50
Пару часов уже сижу над данной задачей и вот ну никаких идей( Хочется просто сделать удобный интерфейс для того, кто будет работать на планшете.
8 vicof
 
09.12.20
15:51
(6) Ты до конца читал?
9 Varlant1n
 
09.12.20
15:56
(8) Да, прочитал. Но как я понял, что там всё идет как раз таки через отбор.
10 vicof
 
09.12.20
15:59
Тебе и нужен отбор.
11 vicof
 
09.12.20
16:00
Хоть для планшета, хоть для компа.
12 Varlant1n
 
09.12.20
16:02
(10) Да, всё именно так. Но в статье, которую вы скинули. Отбор работает таким образом, что он просто покажет предопределенные в коде элементы. То есть варианта написать своё - нет. Вот в этом и вся суть
13 vicof
 
09.12.20
16:09
(13) Нет, отбор работает не таким образом. Ты можешь в правое значение отбора передать своего контрагента, которого ты определил в форме, устанавливая этот отбор программно при изменении значения в поле ввода контрагента.
14 Varlant1n
 
09.12.20
16:11
(13) Хорошо, я попробую написать что-то по этой статье. Извините, что не так понял всё. Спасибо заранее.
15 Varlant1n
 
10.12.20
09:49
(13) Здравствуйте еще раз. Сделал по статье, которую Вы скинули. Добавил на форму поле "Контрагент", путь к данным у которого к реквизиту "Контрагент" с типом Справочники.Контрагенты. Также добавил кнопку на форме "Отфильтровать", чтобы убирать по нажатию отбор и прописал следующий код:

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


Но при написании в строку какого-то контрагента, программа просто лезет в справочник и показывает мне этого контрагента. Никакого отбора нет. Помогите(((
16 Fedor-1971
 
10.12.20
10:05
(15) Давай уточнимся:
1. на форме есть поле Контрагент
2. на форме есть динамический список документов реализация

Тебе нужно при выборе Контрагента отфильтровать реализации в динамическом списке по нему?
17 Fedor-1971
 
10.12.20
10:29
(15) по коду:
ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе - Элементы группы объединяются по "И" и отрицаются, простыми словами: "Показать все элементы не относящиеся к твоему контрагенту"
Если очень припёрло использовать группу, то, как минимум, ГруппаИ, если планируешь добавить список контрагентов, то ГруппаИЛИ

Тупо добавь в отбор списка своего контрагента, не надо использовать группы в данном случае, т.к. контрагент только один:

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

И отладчиком проверь, что в Контрагент точно лежит то, что ты выбрал
18 Varlant1n
 
10.12.20
10:29
(16) Да на форме есть динамический список документа "Реализация товаров и услуг", и есть добавленный мною реквизит "Контрагент". И мне нужно, чтобы на поле была строка ввода, куда будет вводиться наименование контрагента и после выбора определенного контрагента из выпадающего списка, чтобы на форме оставался только список документов, где участвует выбранные контрагент.
П.С. Мне нужно, чтобы изначально был открыт весь список документов, а только после ввода оставался список только с этим контрагентом, а не формирование списка только с одним выбранным контрагентом. Надеюсь, что смог объяснить)))
19 Kassern
 
10.12.20
10:33
Через пользовательские настройки выведи отбор динамического списка на форму по контрагенту и все.
20 Varlant1n
 
10.12.20
10:34
(17) Сделал как Вы сказали в отладчике, вроде бы все правильно. Но всё равно не происходит отбор. Строка ввода находит данного контрагента, но при выборе список становится пустым
21 Fedor-1971
 
10.12.20
10:35
(20) Показывай код как сделал
22 Varlant1n
 
10.12.20
10:39
(21) Процедура Отфильтровать(Команда)
    
    Для Каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
        Если ЭлементОтбора.Представление = "Программный отбор" Тогда
            Список.Отбор.Элементы.Удалить(ЭлементОтбора);
        КонецЕсли;
    КонецЦикла;
    
    Если НЕ Контрагент.Пустая() Тогда
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.ПравоеЗначение = Контрагент;
        ЭлементОтбора.Представление = "Программный отбор";
    КонецЕсли;

КонецПроцедуры
23 Fedor-1971
 
10.12.20
10:43
(22) Выбери контрагента и в Настроить список посмотри как вписался отбор
24 Fedor-1971
 
10.12.20
10:44
23+ и Контрагент у динамического списка есть?
25 Varlant1n
 
10.12.20
10:45
(24) Да, есть
26 Fedor-1971
 
10.12.20
10:48
(25) ПолеКомпоновкиДанных("Контрагент"); - вот именно так называется поле в ДС, может "Получатель" или как по другому

В настройку списка с выбранным Контрагентом смотрел, там что?
27 Varlant1n
 
10.12.20
10:49
(23) У контрагента нет Настройки списка, ведь это реквизит с типом Справочник.Контрагнеты. Он не из динамического списка, а отдельно добавленный реквизит, а в дальнейшем поле на форме
28 Varlant1n
 
10.12.20
10:50
(26) Так и называется в ДС, Контрагент
29 Fedor-1971
 
10.12.20
10:52
(27) Забудь про поле Контрагент, ты настраиваешь Список, в его свойствах и ищи как прописалось условие отбора
30 Varlant1n
 
10.12.20
10:55
(29) Я настраивал Список. Но когда я ставлю там условие отбора Контрагент Равно, то опять ничего не происходит. Форма просто открывается пустой
31 Fedor-1971
 
10.12.20
10:57
(30) Погоди, что за "Форма просто открывается пустой" - ты же на ОДНОЙ форме поместил и ДС и поле Контрагент?
32 Varlant1n
 
10.12.20
10:59
(31) Да, именно так. Но, когда я ставлю условие отбора в ДС, то список становится пустым
33 Fedor-1971
 
10.12.20
11:02
(32) настройки списка посмотрел с установленным отбором?
34 Varlant1n
 
10.12.20
11:03
(33) Да, там пусто
35 Varlant1n
 
10.12.20
11:04
(34) Точнее ничего не меняется
36 Fedor-1971
 
10.12.20
11:05
(34) что значит пусто? в настройках на вкладке отбора должен быть добавленный тобой отбор
37 Fedor-1971
 
10.12.20
11:10
Ещё - Настроить список - Первая вкладка Отбор, что там есть? должна быть тобой добавленная строка, типа Контрагент Равно Твой контрагент
38 Varlant1n
 
10.12.20
11:14
(37) Там есть левое значение Контрагент, а правого нет
39 Fedor-1971
 
10.12.20
11:57
(38) так может у тебя в ДС не Контрагент, а Партнёр?
Попробуй выбрать руками и посмотри что получится
40 Varlant1n
 
10.12.20
12:04
(39) Все также. В ДС так и называется контрагент. Я его выбираю для левого значения. А в правом у меня остается пусто. Так как я не могу там выбрать что-то не из ДС. Иначе получается же чушь
КОнтрагент = контрагенты и оба этих поля из дс, одно и то же поле)
41 Varlant1n
 
10.12.20
12:04
(40) Контрагент = Контрагент*
42 Fedor-1971
 
10.12.20
12:12
(40)  в правом значении выбери конкретного Контрагента, через кнопку выбора
43 Fedor-1971
 
10.12.20
12:13
42+ Всё, отбор добавлен, теперь надо выяснить, почему не заполняется Правое значение
44 Varlant1n
 
10.12.20
13:49
(43) Вот и я не могу этого понять(
Основная теорема систематики: Новые системы плодят новые проблемы.