Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 04:57

Отбор по реквизитам ТАБЛИЧНОЙ ЧАСТИ

Автор matroskin_yanao, 08 мар 2015, 18:35

0 Пользователей и 1 гость просматривают эту тему.

matroskin_yanao

Всем доброго времени суток.
Столкнулся с такой задачкой: необходимо сделать отбор по реквизитам ТАБЛИЧНОЙ ЧАСТИ справочника.
В двух словах.
1) Есть справочник "Договоры".
2) Есть справочник "ОПО" (опасные производственные объекты). Владельцем для него является справочник "Договоры".
3) В справочнике "ОПО" есть табличная часть "Экспертиза" с реквизитом "Договор" типа СправочникСсылка.Договоры

Необходимо чтобы из формы элемента справочника "Договоры" открывалась форма списка справочника "ОПО" с отобранными элементами, у которых в табличной части присутствует этот договор.

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

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

Или может есть какие-то другие способы?
Заранее спасибо!

matroskin_yanao

Использовал КриторийОтбора.
Но результат выводится просто списком, а хотелось бы полной формой списка "ОПО".
Добавлено: 08 мар 2015, 20:17


Попробовал по аналогии:
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=550579
ЦитироватьДобрый день! Подскажите, пожалуйста, в чем проблема?

Есть справочник Контрагенты. В нем табличная часть Организации (Использование: Для группы и элемента) с реквизитом Организация.
Также в Общие - Критерии отбора создал отбор по данному реквизиту КонтрагентыПоОрганизации.
В форме списка справочника добавил элемент формы Организация с привязанным к нему событием при изменении - ОрганизацияПриИзменении

Процедура ОрганизацияПриИзменении(Элемент)
Отбор.КонтрагентыПоОрганизации.Использование = Истина;
Отбор.КонтрагентыПоОрганизации.Установить(Элемент.Значение);
КонецПроцедуры

Что такое в данном случае "Отбор"?

temrmal

Цитата: matroskin_yanao от 08 мар 2015, 18:35
Всем доброго времени суток.
Столкнулся с такой задачкой: необходимо сделать отбор по реквизитам ТАБЛИЧНОЙ ЧАСТИ справочника.
В двух словах.
1) Есть справочник "Договоры".
2) Есть справочник "ОПО" (опасные производственные объекты). Владельцем для него является справочник "Договоры".
3) В справочнике "ОПО" есть табличная часть "Экспертиза" с реквизитом "Договор" типа СправочникСсылка.Договоры

Необходимо чтобы из формы элемента справочника "Договоры" открывалась форма списка справочника "ОПО" с отобранными элементами, у которых в табличной части присутствует этот договор.

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

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

Или может есть какие-то другие способы?
Заранее спасибо!

УсловиеОтбора.ПравоеЗначение = Объект.Наименование;   - вот это что???? у тебя равно должно быть ссылке

matroskin_yanao

В данном случае это код на форме элемента справочника "Договоры".
Объект.Наименование - это ссылка на реквизит "Наименование" справочника "Договоры". Или я ошибаюсь?


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


Причем в Настройке списка формы отображается не ПолеКомпоновкиДанных("Экспертиза.Договор"), а ПолеКомпоновкиДанных("Владелец");

temrmal

Договор у вас в экспертизе тип имеет ССЫЛОЧНЫЙ!!! А приравниваете к строке!!!

vitasw

Цитата: matroskin_yanao от 08 мар 2015, 18:351) Есть справочник "Договоры".
2) Есть справочник "ОПО" (опасные производственные объекты). Владельцем для него является справочник "Договоры".
У вас уже однозначно определена связь договор<->ООП. Зачем еще тулить в ООП табличную часть и там выбирать этот же договор - тайна за семью печатями.


matroskin_yanao

Цитата: vitasw от 10 мар 2015, 10:53
Цитата: matroskin_yanao от 08 мар 2015, 18:351) Есть справочник "Договоры".
2) Есть справочник "ОПО" (опасные производственные объекты). Владельцем для него является справочник "Договоры".
У вас уже однозначно определена связь договор<->ООП. Зачем еще тулить в ООП табличную часть и там выбирать этот же договор - тайна за семью печатями.
К примеру. У меня есть объект экспертизы. Тот же самый стреловой кран. Раз в три года он проходит экспертизу промышленной безопасности. Каждый раз по новым договорам. Все данные по экспертизам сведены в табличную часть по годам соответственно.

vitasw

Цитата: matroskin_yanao от 10 мар 2015, 19:45
Цитата: vitasw от 10 мар 2015, 10:53
Цитата: matroskin_yanao от 08 мар 2015, 18:351) Есть справочник "Договоры".
2) Есть справочник "ОПО" (опасные производственные объекты). Владельцем для него является справочник "Договоры".
У вас уже однозначно определена связь договор<->ООП. Зачем еще тулить в ООП табличную часть и там выбирать этот же договор - тайна за семью печатями.
К примеру. У меня есть объект экспертизы. Тот же самый стреловой кран. Раз в три года он проходит экспертизу промышленной безопасности. Каждый раз по новым договорам. Все данные по экспертизам сведены в табличную часть по годам соответственно.
Вы однозначно пишите, что ООП подчинен Договору,Один объект имеет только одного владельца.
Цитата: matroskin_yanao от 10 мар 2015, 19:45Каждый раз по новым договорам.
Сколько объектов ООП? Вы что каждый раз меняете подчинение? или не очень понимает что такое "Владелец".


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск