Имя: Пароль:
1C
 
Управляемая форма: Отбор в списке
0 le_
 
12.09.10
02:13
Имеется управляемая форма элемента справочника.
На этой форме размещено табличное поле со списком элементов подчиненного справочника.
При открытии этой формы в списке подчиненных элементов устанавливается отбор таким образом:

&НаКлиенте
Перем ОтборАдресов;

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

Всё работает, отбор при открытии устанавливается.

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

Делаю так:

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

Результат: после записи отбор сохраняется таким, как был до записи, т.е., там пустая ссылка.

Пробежался по процедуре ПослеЗаписи отладчиком - везде все заполняется, в том числе правое значение, НО в АдресаДоставки.Отбор.Элементы[0] всё остается неизменным. И не понятно почему...

Подскажите, плз, как и что сделать, чтобы получить нужное.
1 Defender aka LINN
 
12.09.10
10:17
(0) Молодец. А теперь открой отбор ручками и посчитай, сколько у тебя отборов установлено.
2 le_
 
12.09.10
13:20
(1) 1 установлен. Для этого в процедуре ПриЗаписи условие написано. АдресаДоставки.Отбор.Элементы[1] не существует.
3 le_
 
12.09.10
14:12
Нормального решения так и не нашел...

Пока сделал так:

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


и работает...