Имя: Пароль:
1C
1С v8
Связь значений реквизитов объекта
0 veolent
 
28.05.12
14:48
Есть документ, у которого имеются два реквизита «Контрагент», «Проект». При выборе контрагента, во втором реквизите «Проект», должен формироваться список проектов связанных с выбранным контрагентом. Контрагент и проект связаны непериодическим регистром сведений, т.е. регистр сведений выступает в качестве ассоциативной сущности (для связи многие ко многим). Подскажите, как грамотно решить данную задачу.
1 butterbean
 
28.05.12
14:49
передавай в форму выбора контрагента, а там уже отбор делай по ссылкам
2 golden-pack
 
28.05.12
14:50
(0) Проект - начало выбора - стандартная обработка = ложь + список ссылок отбором в форму выбора
3 veolent
 
28.05.12
14:52
Ок, спасибо. Буду пробовать
4 veolent
 
28.05.12
16:48
Сделал так:
&НаКлиенте
Процедура ПроектНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   ПараметрыФормы = ПолучениеСпискаПроектов(Объект.Контрагент);    
   Форма = ПолучитьФорму("Справочник.Проект.ФормаВыбора", ПараметрыФормы);
   Форма.Открыть();
   СтандартнаяОбработка = Ложь;    
КонецПроцедуры

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

   ПараметрыФормы = Новый Структура;
   ПараметрыФормы.Вставить("Отбор", ОтборДляПараметров);
   Возврат ПараметрыФормы
КонецФункции
5 МишКа
 
28.05.12
16:51
(4) А зачем отдельную форму открывать? Есть же свойство "список выбора".
6 veolent
 
28.05.12
17:04
А как с использованием свойства «Список выбора»?
7 veolent
 
28.05.12
21:37
Воспользовался свойством «ДанныеВыбора», да так будет лучше. А то с отбором колупаться (блокируя параметры фильтрации…)

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

&НаСервере
Функция ПолучениеСпискаПроектов (ВыбранныйКонтрагент)
   ОтборПроектов = Новый Структура("Контрагент");
   ОтборПроектов.Контрагент = ВыбранныйКонтрагент;
   ВыборкаПроектов = РегистрыСведений.АссоциацияПроектКонтрагент.Выбрать(ОтборПроектов);
   СписокПроектов = Новый СписокЗначений;
   Пока ВыборкаПроектов.Следующий() Цикл
       СписокПроектов.Добавить(ВыборкаПроектов.Проект);            
   КонецЦикла;
   Возврат СписокПроектов
КонецФункции
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший