helpf.pro
Регистрация

v8.2 УП: Отбор в отчете СКД: открывать только одну папку справочника

Name1
07.10.2011 11:15Прочитано: 8195
Помогите, пожалуйста, с отбором.
Есть отчет на СКД. На форме - ТабличноеПолеОтбор. Надо, чтобы пользователь при задании отбора видел не весь справочник, а только одну папку со всем содержимым (лучше только элементы).
Один из вариантов (не работает, открывается весь список справочника "Номенклатура"):
НовыйЭлементОтбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных ("Номенклатура.Родитель");
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
НовыйЭлементОтбора.ПравоеЗначение = Справочники.Номенклатура.НайтиПоНаименованию("Продукция");
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
07.10.2011 12:13Ответ № 1
нужно при начеле выбора выбрать запросом список необходимых элементов и дать пользователю выбрать из них
Name1
07.10.2011 13:34Ответ № 2
Создаю такой запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Номенклатура.Родитель
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель = &ГруппаНоменклатуры
|";
Запрос.УстановитьПараметр("ГруппаНоменклатуры", Справочники.Номенклатура.НайтиПоНаименованию("Продукция"));
Результат = Запрос.Выполнить();
ВыборкаДанных = Результат.Выбрать();
Параметр не присваивается. ??
E_Migachev
07.10.2011 16:59Ответ № 3
ну ты только получил список элементов, теперь дай пользователю выбрать из них нужный
добавь например их в список выбора
Name1
10.10.2011 11:05Ответ № 4
Вообще-то целиком у меня так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Номенклатура.Наименование,
|Номенклатура.Родитель
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель В Иерархии(&ГруппаНоменклатуры)
| И Номенклатура.ЭтоГруппа = ЛОЖЬ
|";
Запрос.УстановитьПараметр("ГруппаНоменклатуры", Справочники.Номенклатура.НайтиПоНаименованию("Продукция"));
Результат = Запрос.Выполнить();
ВыборкаДанных = Результат.Выбрать();

НовыйЭлементОтбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных ("Номенклатура");
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
НовыйЭлементОтбора.ПравоеЗначение = Справочники.Номенклатура.Выбрать(ВыборкаДанных);
Но:
Ошибка при вызове метода контекста (Выбрать)
по причине:
Несоответствие типов (параметр номер '1')
Очень нужна поиощь. Что не так?
E_Migachev
10.10.2011 11:26Ответ № 5
(4) Name1, ты не можешь так устанавливать!
добавь на форму отдельное поле выбор номенклатуры, для него в событии начало выбора опиши свой запрос, далее в событие при изменении уже пиши свой отбор и присваивай правому значению выбранное пользователем
Name1
10.10.2011 12:58Ответ № 6
У меня на форме есть ТабличноеПолеОтбор. У него много событий, я могу использовать их, например, Выбор? Или его надо удалить и вставлять свое Поле выбора, Флажок и все описывать?
E_Migachev
10.10.2011 13:31Ответ № 7
можешь использовать табличное поле отбор, просто описать немного посложнее будет
Name1
10.10.2011 13:57Ответ № 8
Спасибо, а нельзя подробнее?
E_Migachev
10.10.2011 14:00Ответ № 9
опиши событие для ячейки табличного поля - НачалоВыбора
Name1
10.10.2011 14:00Ответ № 10
Где-то был совет про метод ВыбратьИзСписка. Тогда будет проще?
E_Migachev
10.10.2011 14:09Ответ № 11
(10) Name1, если список маленький - то проще
Name1
10.10.2011 14:40Ответ № 12
Около 70 элементов.
На сейчас так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Номенклатура.Наименование,
|Номенклатура.Родитель
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель В Иерархии(&ГруппаНоменклатуры)
| И Номенклатура.ЭтоГруппа = ЛОЖЬ
|";
Запрос.УстановитьПараметр("ГруппаНоменклатуры", Справочники.Номенклатура.НайтиПоНаименованию("Продукция"));
СЗ = Новый СписокЗначений;
СЗ = Запрос.Выполнить().Выгрузить();
НовыйЭлементОтбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных ("Номенклатура");
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйЭлементОтбора.ПравоеЗначение = Справочники.Номенклатура.Выбрать(СЗ);

Все равно "Ошибка при вызове метода контекста (Выбрать)...
Несоответствие типов (параметр номер '1')"
Как это исправить?
E_Migachev
10.10.2011 16:14Ответ № 13
да не будет так работать, нельзя так задавать отбор, для отбора задается только значение
которое должен выбрать пользователь из твоего СЗ
Name1
11.10.2011 13:35Ответ № 14
А нельзя ли пару строчек кода?
E_Migachev
12.10.2011 10:39Ответ № 15
(14) Name1, смотри Как для Выбора Покупателя Открыть Справочник контрагенты с открытой группой "Покупатели"?
Name1
12.10.2011 15:52Ответ № 16
Спасибо за ответ. Подобный вопрос для документа был, но уже решен. Остался вопрос для отбора в отчете.
E_Migachev
13.10.2011 10:13Ответ № 17
(16) Name1, так это тоже и используй
Name1
14.10.2011 15:35Ответ № 18
Я не знаю, как в отбор передать СЗ, сформированный запросом. Перепробовано уже все!
E_Migachev
14.10.2011 17:07Ответ № 19
(18) Name1, да не надо ничего ни куда передавать, просто открывай пользователю справоник установив иерархический отбор и текущего радителя как в примере выше
Изменено 14.10.11 17:08:06
Name1
17.10.2011 15:20Ответ № 20
Простите за долгие переговоры. Но задача по-прежнему не решена. Я хочу открывать форму списка рядом с кнопкой. Вот код (не работает), что надо изменить:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Номенклатура.Наименование,
|Номенклатура.Родитель
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Родитель В Иерархии(&ГруппаНоменклатуры)
| И Номенклатура.ЭтоГруппа = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
|Номенклатура.Наименование
|";
Запрос.УстановитьПараметр("ГруппаНоменклатуры", Справочники.Номенклатура.НайтиПоНаименованию("Продукция"));
СЗ = Новый СписокЗначений;
СЗ.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование"));
ВыбранныйЭлемент = ВыбратьИзСписка(СЗ);

ЭлементОтбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных ("Номенклатура");
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ЭлементОтбора.ПравоеЗначение = ВыбранныйЭлемент;
E_Migachev
17.10.2011 15:59Ответ № 21
(20) Name1, удалить этот код целиком, и настроить выбор из справочника как в ссылке выше
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.