Имя: Пароль:
1C
1С v8
Открыть форму выбора справочника с отбором (обработчик программно добавленого элемента
0 Юзер123
 
naïve
23.09.20
08:49
Добрый день.
Открыть форму выбора справочника с отбором  (обработчик программно добавленого элемента + расширение)

Сабф собственно.  

На форму списка добавляю элемент . Добавляю обработчик начало выбора.  В модуле формы на клиенте вызываю свой обработчик "МоеНачалоВыбора"  как сделать так , чтобы форма открывающаяся из моего элемента открывалась с определенным отбором?
1 Юзер123
 
naïve
23.09.20
13:45
При добавлении элемента пишу

    НовыйЭлемент.УстановитьДействие("НачалоВыбора","ОтборДоходныйДоговорНачалоВыбора");    
    НовыйЭлемент.УстановитьДействие("ПриИзменении","ОтборДоходныйДоговорПриИзменении");    


В модуле формы следующий код

&НаКлиенте

Процедура ОтборДоходныйДоговорНачалоВыбора()
    
     ПараметрТекстЗаголовка = НСтр("ru = 'Договоры с контрагентами';
                                    |en = 'Contracts with counterparty'");
    
    
    ПараметрыОтбора = ПолучитьЗначенияОтбораНаСервере();
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", Новый Структура("ТипДоговора", ПараметрыОтбора));
    ПараметрыФормы.Вставить("Заголовок", ПараметрТекстЗаголовка);
    
    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Формавыбора",
                 ПараметрыФормы);
    
    
КонецПроцедуры



ПараметрыОтбора =  список значений с ТипамиДоговоров.  Отбор не срабатывает.
2 karnet
 
23.09.20
13:53
(1) "ПараметрыОтбора = ПолучитьЗначенияОтбораНаСервере();" - там какие данные содержатся ?
3 karnet
 
23.09.20
13:58
(1) Попробуй так:

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

  ПараметрыВыбора = Новый Структура("ФиксированныеНастройки", НастройкиКомпоновки);
        
  ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Формавыбора", ПараметрыВыбора);
4 Юзер123
 
naïve
23.09.20
14:43
(3) Все прекрасно, только открывается 2 формы выбора.  

Как передать СтандартнаяОбработка =  Ложэь;
5 uzerp2
 
23.09.20
14:46
попробуй так например
ПараметрыФормы.Вставить("Отбор123", Новый Структура("ТипДоговора", ПараметрыОтбора));
если просто "Отбор" платформа сама может отработать
6 Юзер123
 
naïve
23.09.20
14:49
(5)  3 - работает.

Но открывается 2 формы  выбора.  Одна с отбором вторая нет
7 karnet
 
23.09.20
14:53
(6) А если вызвать процедуру с параметрами: Процедура ОтборДоходныйДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка), где
СтандартнаяОбработка = Ложь;
8 Юзер123
 
naïve
23.09.20
14:56
Так же 2окна
9 uzerp2
 
23.09.20
15:08
ну ты в МоеНачалоВыбора
добавь СтандартнаяОбработка = Ложь;
10 uzerp2
 
23.09.20
15:12
если не отключишь, то у тебя
будет 2-е формы открываться
одна стандартный выбор
и вторая выбор который ты программно открываешь
11 Юзер123
 
naïve
23.09.20
15:14
(10)  так как это реализвовать
12 uzerp2
 
23.09.20
15:16
код обработчика МоеНачалоВыбора скинь сюда
13 Юзер123
 
naïve
23.09.20
15:17
(9) Вот это и хочу сделать)
14 Юзер123
 
naïve
23.09.20
15:18
Процедура ОтборДоходныйДоговорНачалоВыбора()
    
     СтандартнаяОбработка = Ложь;
     ПараметрТекстЗаголовка = НСтр("ru = 'Договоры с контрагентами';
     |en = 'Contracts with counterparty'");
    
    
    
     НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
    
     Отбор = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
     Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипДоговора");
     Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
     Отбор.ПравоеЗначение = ПолучитьЗначенияОтбораНаСервере();
     Отбор.Использование = Истина;    
    
    
     ПараметрыФормы = Новый Структура;
     ПараметрыФормы.Вставить("Заголовок", ПараметрТекстЗаголовка);
     ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
    
    
     ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Формавыбора",
     ПараметрыФормы);
    
    
КонецПроцедуры
15 uzerp2
 
23.09.20
15:19
ты не то скидываешь
должно быть что то вроде:

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


ключевое в этом коде
СтандартнаяОбработка

!!!
16 uzerp2
 
23.09.20
15:21
попробуй удали (закомментируй этот обработчик ОтборДоходныйДоговорНачалоВыбора() )
и добавь его средствами платформы
17 Юзер123
 
naïve
23.09.20
15:41
(16) Не могу.  Элемент на форму программно добавлен.
18 Юзер123
 
naïve
23.09.20
15:41
в первом посте код добавления приведен
19 Юзер123
 
naïve
23.09.20
15:43
Процедура ОтборДоходныйДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
     СтандартнаяОбработка = Ложь;
     ПараметрТекстЗаголовка = НСтр("ru = 'Договоры с контрагентами';
     |en = 'Contracts with counterparty'");
    
    
    
     НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
    
     Отбор = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
     Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипДоговора");
     Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
     Отбор.ПравоеЗначение = ПолучитьЗначенияОтбораНаСервере();
     Отбор.Использование = Истина;    
    
    
     ПараметрыФормы = Новый Структура;
     ПараметрыФормы.Вставить("Заголовок", ПараметрТекстЗаголовка);
     ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
    
    
     ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Формавыбора",
     ПараметрыФормы);
    
    
КонецПроцедуры



так работает. Спасибо
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший