Имя: Пароль:
1C
 
Ограничить Форму Выбора документа определенной группой и ее подгруппами
0 DarknessLors
 
10.06.24
10:43
Добрый день всем, учусь 1с и мой преподаватель дал задание в документе "ДефектныйТранспорт" ограничить форму выбора нужной номенклатуры из группы (Дефектная техника) и ее подгруппах, прошу помочь с решением данной задачи, буду очень благодарен если пришлете пример кода, как это можно сделать.
1 KJlag
 
10.06.24
10:54
2 DarknessLors
 
10.06.24
12:12
(1) Продвижения есть, но проблема в том что все элементы пропадают, даже в нужной группе и подгруппах, вот код:

Процедура ПриОткрытииВместо(Отказ)
    
ЗначениеОтбора = Новый Структура("Родитель", "Дефектная техника");
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыВыбора);
    
КонецПроцедуры
3 takefive
 
10.06.24
12:29
Родитель - ссылка нужна...
4 Климов Сергей
 
10.06.24
12:31
Вот в этой строке

ЗначениеОтбора = Новый Структура("Родитель", "Дефектная техника");

второй параметр какой тип имеет? А передать в отбор какой тип надо?
5 DarknessLors
 
10.06.24
12:41
(4) "Дефектная техника" - название группы в номенклатуре
6 DarknessLors
 
10.06.24
12:47
(3) Можете пожалуйста пример указать?
7 youalex
 
10.06.24
12:49
(2) хорошая попытка, но Новый Структура("Отбор", ЗначениеОтбора); - работает только на на равенство (или в списке, если в значении собственно список)
А тебе нужно отбор "в Группе", смотри дальше примеры по ссылке из (1)
8 Мультук
 
10.06.24
12:51
(6)

Если преподаватель за такое получение ссылки будет тебя ругать -- он молодец.
Если он не только поругает, но и приведёт "по другому, как надо" -- вдвойне молодец

== Плохой пример, но для твоего случая "сойдёт" ===

ДефТехника = Справочники.Номенклатура.НайтиПоНаименованию("Дефектная техника");
9 youalex
 
10.06.24
12:55
(2) и у тебя тут ЗначениеОтбора = Новый Структура("Родитель", "Дефектная техника");
"Дефектная техника" - это строка, а нужна ссылка.
Ну и как говорил, тут отбор только по родителю, а тебе нужно по всей иерархии судя по "и ее подгруппах" из условия, а это отбор "В группе"
10 DarknessLors
 
10.06.24
13:10
(8) Такой способ не подойдет
11 DarknessLors
 
10.06.24
13:12
(7) взял второй метод из ссылки, пишет что "Переменная не определена (Список)", код:
&НаСервере
Процедура ПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка )
    
    
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Родитель");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    ЭлементОтбора.ПравоеЗначение = "Дефектная техника"";  
    
КонецПроцедуры
12 youalex
 
10.06.24
13:17
(11)
1) где ты это пишешь? это код для формы выбора справочника (список по умолчанию это основной реквизит формы, но не обязательно он именно так называется)
2)  ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; - нужен другой вид сравнения
3) ЭлементОтбора.ПравоеЗначение = "Дефектная техника"";   - снова строка, а тебе нужна ссылка
4) дальше в статье читай в этом пункте про "с этим отбором форма будет открываться всегда."
13 DarknessLors
 
10.06.24
13:44
А кроме способов по ссылке(1), есть способ ограничить форму выбора?
14 takefive
 
10.06.24
14:09
Для подгрупп отбор по родителю не сработает. См. (7)
15 DarknessLors
 
10.06.24
14:27
(14) Хорошо, тогда что использовать для ограничения формы выбора? сроки просто поджимают, и хотелось бы понять как все сделать
16 KJlag
 
10.06.24
14:44
17 takefive
 
10.06.24
16:08
&НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

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

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

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

    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
18 DarknessLors
 
10.06.24
17:25
(17)  Подскажите пожалуйста, нужно ли менять в этой строчке что нибудь, а то выдает ошибку:
Переменная не определена (Группа)
    Отбор.ПравоеЗначение = <<?>>Группа;
19 unbred
 
11.06.24
05:10
(18) тебеж в (17) даже прокомментировали, что такое Группа.
не пытайся копировать бездумно.
читай построчно.
20 takefive
 
11.06.24
10:04
добавь строчку перед...
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Дефектная техника");
21 DarknessLors
 
11.06.24
10:18
(20) Простите, вчера протупил вечером, я уже понял что нужно указать, просто при проверке модуля пишет что переменная не определена (Группа) и (Справочник)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший