Программно установить отбор в СКД

14. Serge_ASB 28.06.14 15:54 Сейчас в теме
На форме отчета в Табличом поле (Отбор Компоновки данных) возможен отбор контрагентов и договоров.
Как можно при начале выбора из списка договоров сформировать этот список если выбран контрагент?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
16. AlexO 135 07.07.14 10:18 Сейчас в теме
(14) Serge_ASB,
Программно.
Вывести поле выбора Контрагента.
Вывести поле выбора (поле ввода), и обрабатывать его - установить "Связь по владельцу" с полем Контрагент. Есть контрагент - в список попадут только его договора. Нет - предложит выбор (если в поле тип данных будет - "ДоговораКонтрганета", из-за подчиненности справочника "ДоговораКонтрагентов - справочнику "Контрагенты").
(15) Serge_ASB,
Если Контрагент не выбран, то установить для поля Договор отбор по договорам с этим контрагентом.

Если Контрагент не выбран - какие же договора (кто это будет - "этот контрагент") попадут в отбор?
17. Serge_ASB 07.07.14 10:55 Сейчас в теме
(16) AlexO,
связь по владельцу пробовал установить (вкладка Наборы Данных). В форме не реагирует. Есть инфо, что срабатывает ожидаемо в управляемых формах. У меня - неуправляемые.
Думаю, что помог бы совет, как найти в параметрах отбора соответствующее левому "Контрагент" правое значение.
И это правое значение использовать для Поля Договор как Владелец.
А вот как это все реализовать?

Где в этих параметрах отбора СКД отловить "при начале выбора"?
18. AlexO 135 08.07.14 10:06 Сейчас в теме
(17) Serge_ASB,
связь по владельцу пробовал установить (вкладка Наборы Данных)

Надо делать свое поле на форме отчета, а не в НаборДанных. И привязывать его к программно же Параметрам из НаборДанных.
Есть инфо, что срабатывает ожидаемо в управляемых формах.

Не надейтесь )) Что за инфо? Там все также, как и здесь, по отношению к СКД - ничего не изменилось.
21. AlexO 135 08.07.14 16:40 Сейчас в теме
(17) Serge_ASB,
И это правое значение использовать для Поля Договор как Владелец.

Форма есть, добавляем новые поля (Договор и т.д.), обрабатываем их события программно с привязкой к Параметрам и Настройкам СКД (значения из поля - в СКД, установки из СКД - в поле).
У Договор - выставлен Владелец Контрагент.
Прикрепленные файлы:
ПОступлениеПоГТДЗаПериодНов_Договор.erf
Serge_ASB; +1 Ответить
22. Serge_ASB 09.07.14 08:39 Сейчас в теме
(21) AlexO,
Все равно пока понимание "как это сделать" приходит с трудом.
Разобрать "как это сделано" - тоже нелегко, но легче.
23. Serge_ASB 09.07.14 11:16 Сейчас в теме
(21) AlexO,
"вколхозил" таким вот образом.
3 поля: Организация, Контрагент, Договор".
Договор зависит от Контрагента.
В принципе, Контрагент (список значений) может определяться организацией...
Обрабатывается изменение состояния поля, боавляется (изменяется) отбор.
Вроде работает. Буду тестить "на кошках"
Прикрепленные файлы:
24. AlexO 135 11.07.14 13:16 Сейчас в теме
(23) Serge_ASB,
Вместо
Процедура ИзменитьОтбор(ЭлементСтруктуры, СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора,ИмяПоля,ЗначениеПоля) Экспорт

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

можно проще:
	// найдем в Настройках:
	ПараметрКонтрагент = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Контрагент"));
	ПараметрКонтрагент.Значение = Элемент.Значение;				// зададим значение из поля ввода Контрагент
	ПараметрКонтрагент.Использование = Истина;				//разрешим использование

	// внесем измененные настройки в схему компоновки:
	Настройки = КомпоновщикНастроек.Настройки;
25. Serge_ASB 11.07.14 13:41 Сейчас в теме
(24) AlexO,
здорово. Попробую.
Кстати. а как сделать, чтобы панель настроек, сдвинутая в правую часть отчета, по флажку отображалась/сворачивалась?
Вернее, чтобы поле табличного документа (Результат) выходило на ширину формы?
Не совсем понял про привязки: про привязки панели настроек - да, получается, а вот про "основную информационную часть" - пока нет.
Прикрепленные файлы:
15. Serge_ASB 02.07.14 14:54 Сейчас в теме
Скажите, как в неуправляемой форме отчета установить отбор по владельцу для поля Договор (владельцем является Контрагент, присутствующий в этой же форме)?
Если Контрагент не выбран, то установить для поля Договор отбор по договорам с этим контрагентом.
19. AlexO 135 08.07.14 10:07 Сейчас в теме
как найти в параметрах отбора соответствующее левому "Контрагент" правое значение.

Никак, в СКД нельзя непрограммно обрабатывать поля на вкладках отборов и прочего.
Где в этих параметрах отбора СКД отловить "при начале выбора"?

Нигде, у полей НаборДанных нет обрабатываемых событий; события обрабатываются только у отдельных (не Набор СКД, выведенный на форму, и прочее) полей на форме.
20. Serge_ASB 08.07.14 10:33 Сейчас в теме
(19) AlexO,
Ну, у меня и так таблица в форме отчета, связанная с набором данных , то есть с параметрами отбора СКД...
Подозреваю, что нужна еще какая-то мелочь, чтобы все работало, как задумано.
Но инфы нарыть пока не удалось.
Прикрепленные файлы:
26. Max8.3 2 22.04.16 09:53 Сейчас в теме
Может кому поможет. У меня была ситуация когда нужен был отбор со следующими значениями по умолчанию:
1.Вид сравнения в группе
2.Правое значение группа справочника

-Вид сравнения в группе установил в настройках скд (см. рисунок ВСписке.jpg)
-Правое значение установил программно в процедуре ПриСозданииНаСервере()

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



Прикрепленные файлы:
CMK0001; Yimaida; +2 Ответить
28. Chif13 1256 01.12.16 14:11 Сейчас в теме
(26) просто не утерпела
вот это: Справочники.Контрагенты.НайтиПоКоду("00-000784").Ссылка зачем???
Зачем разыменование ссылка? НайтиПоКоду уже возвращает ссылку, по хорошему ты пишешь Ссылка.Ссылка, что дает дополнительный запрос к базе, причем совершенно не нужный.
Seneka7608; vyak13; JinAir7460; +3 Ответить
27. Chif13 1256 01.12.16 14:06 Сейчас в теме
Я устанавливаю параметры так:

ПолеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
Если ПолеПараметра <> Неопределено Тогда	
	КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"), ?(КонецПериода = '00010101', Дата("39991001"), КонецДня(КонецПериода)));
КонецЕсли;
29. PsyTech 01.09.09 12:00 Сейчас в теме
Программно установить отбор в СКД на весь отчет можно вот так:
Код
НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлементОтбора.ЛевоеЗначение = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Организация")).Поле;
НовыйЭлементОтбора.ПравоеЗначение = Организация;
Показать полностью


А как установить отбор в конкретной группировке?
C0oLZ3r0; IrinaBelVlad; +2 Ответить
30. PsyTech 01.09.09 12:52 Сейчас в теме
Короче вот так:
Код
      НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Структура[0].Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      НовыйЭлементОтбора.ЛевоеЗначение = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Организация")).Поле;
      НовыйЭлементОтбора.ПравоеЗначение = Организация;
Показать полностью
VickWood; +1 Ответить
31. olegbushev 24.11.09 14:04 Сейчас в теме
а в конкретном поле как?
32. Трактор 1254 24.11.09 14:16 Сейчас в теме
У меня вот так
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("СкладНедокомплект").Значение = Константы.ОсновнойСкладКомплектующих.Получить();
	КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("СкладНедокомплект").Использование = Истина;


Что значит "отбор в группировке" или "отбор в поле" я не понял
Vida; sa6ne6k6; +2 Ответить
33. olegbushev 24.11.09 14:20 Сейчас в теме
ошибку вываливает :(


{Форма.ФормаОтчета(194)}: Значение не является значением объектного типа (Значение)
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Магазин").Значение = Константы.Магазин.Получить();
34. Трактор 1254 24.11.09 14:30 Сейчас в теме
(5) Дык я ж добавил поле отбора, недоступное пользователю. И при открытии его устанавливаю.
Можно его добавлять и программно, но зачем?
Прикрепленные файлы:
35. olegbushev 24.11.09 14:35 Сейчас в теме
у меня это поле не в параметрах, а на вкладке "Настройки" - "Отбор"
36. Трактор 1254 24.11.09 14:43 Сейчас в теме
(7) на вкладке "Настройки" - "Отбор" как раз и показываются параметры отбора. Я просто в СКД в конфигураторе добавил параметр отбора и поставил галочку чтобы элемент отбора не показывался на закаладке.
37. olegbushev 24.11.09 15:53 Сейчас в теме
не совсем так... я тут докопался и сделал половину дела
Настройки = КомпоновщикНастроек.Настройки;
ЭлементОтбора = Настройки.Отбор.Элементы.Получить(1);
ЭлементОтбора.ПравоеЗначение = Константы.Магазин.Получить();
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;


теперь бы мне запретить пользователю убирать галочку "Использование" или вообще запретить изменение данной строки
38. Трактор 1254 24.11.09 15:59 Сейчас в теме
(9) >> вообще запретить изменение данной строки
на картинке в 6 курсор стоит как раз на нужной тебе галке.
39. olegbushev 24.11.09 16:03 Сейчас в теме
да не там это - эта картинка параметров, а на вкладке "Отбор" такого нет
40. WiseSnake 1521 24.11.09 18:48 Сейчас в теме
(11) Зачем он тебе вообще в отборе если его менять нельзя? Просто запрети вывод в отбор.
Если ты все таки хочешь извращаться, то доступ можно запретить только на самих(ой) форме к этому элементу формы. Например при активизации строки запрещать доступ к ячейке со значением.
41. olegbushev 24.11.09 18:58 Сейчас в теме
нужно именно так потому что одному пользователю это можно смотреть, а другому нет, в общем я обошел проблему следующим образом
1. при открытии вставил код ()
2. пользователь может менять все, как захочет, но....волшебная кнопка "Сформировать" перед основной процедурой опять выполняет код (9)

тема для меня закрыта, спасибо, буду рад более оригинальным решениям
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот