|
СКД: Отбор в запросе по данным ТЗ | ☑ | ||
---|---|---|---|---|
0
Gill
14.12.16
✎
09:24
|
Всем привет!
Есть отчет на СКД. На форме перед формированием отчета есть ТЗ с необходимым отбором для дальнейшей подстановки в качестве параметра запроса.Вопрос:как это осуществить? |
|||
1
varvest
14.12.16
✎
09:41
|
Например так
<code> ГДЕ РеализацияТоваровУслуг.Ссылка В(&ТЗ) </code> |
|||
2
Defender aka LINN
14.12.16
✎
09:42
|
(1) Хорошая шутка, смешная.
(0) Нафига именно ТЗ? |
|||
3
Gill
14.12.16
✎
09:48
|
(2) Данные для отбора (список контрагентов) формирую в виде массива.Ничего другого как выгрузить все это в итоге в ТЗ на ум не приходит.Может подскажите другой вариант
|
|||
4
Defender aka LINN
14.12.16
✎
09:50
|
(3) ВидОтбораКомпоновкиДанных.ВСписке
|
|||
5
Gill
14.12.16
✎
10:01
|
(4) этот вариант не подходит (говорит начальник).Т.к. необходимо вводить явно очень большое кол-во контрагентов.Какие еще возможны способы решения этой задачи?
|
|||
6
Gill
14.12.16
✎
10:05
|
+(4) Вот так формируем отбор
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) // Вставить содержимое обработчика. МассивГоловнойКонтрагент = Новый Массив; МассивГоловнойКонтрагент.Добавить(Справочники.Контрагенты.НайтиПоКоду("____")); //1 МассивГоловнойКонтрагент.Добавить(Справочники.Контрагенты.НайтиПоКоду("____")); //2 МассивГоловнойКонтрагент.Добавить(Справочники.Контрагенты.НайтиПоКоду("____")); //3 МассивГоловнойКонтрагент.Добавить(Справочники.Контрагенты.НайтиПоКоду("____")); //4 Для каждого стрГоловнойКонтрагент из МассивГоловнойКонтрагент цикл МассивДочерних = Справочники.Контрагенты.ПолучитьДочерниеОрганизации(стрГоловнойКонтрагент); Для каждого стрПотомок из МассивДочерних цикл стр = Организации.Добавить(); стр.КонтрагентГоловной = стрГоловнойКонтрагент; стр.КонтрагентДочерний = стрПотомок; КонецЦикла; КонецЦикла; СписокОрганизаций=Организации.Выгрузить(,"КонтрагентДочерний"); ПараметрСписокОрганизаций = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СписокОрганизаций")); ПараметрСписокОрганизаций.Значение = СписокОрганизаций; ПараметрСписокОрганизаций.Использование = Истина; КонецПроцедуры |
|||
7
Defender aka LINN
14.12.16
✎
10:09
|
(5) Ну, раз "говорит начальник", то он пусть и предлагает варианты.
"необходимо вводить явно очень большое кол-во контрагентов" и чО? |
|||
8
varvest
14.12.16
✎
10:09
|
Чем не устраивает мой пример?
|
|||
9
Defender aka LINN
14.12.16
✎
10:10
|
(6) У вас там отбора нет
|
|||
10
Defender aka LINN
14.12.16
✎
10:10
|
(8) сделай, узнаешь.
|
|||
11
Gill
14.12.16
✎
10:11
|
(9) Отбором должен быть список дочерних контрагентов (их ооочень много)...
|
|||
12
Defender aka LINN
14.12.16
✎
10:14
|
(11) И?
|
|||
13
Мимохожий Однако
14.12.16
✎
10:17
|
Прикольный способ задания массива МассивГоловнойКонтрагент
Как только добавите еще одного контрагента в базу, опять позовёте программиста? Если за плюшки работает,то неплохо. |
|||
14
varvest
14.12.16
✎
10:22
|
Все-таки что не так с моим примером, объясните нубу)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.НаименованиеПолное ПОДОБНО ""%А%"""; РезультатЗапросаКонтрагент = Запрос.Выполнить().Выгрузить(); Запрос2 = Новый Запрос; Запрос2.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Контрагент |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Контрагент В(&Контрагент)"; Запрос2.УстановитьПараметр("Контрагент", РезультатЗапросаКонтрагент); все работает |
|||
15
Defender aka LINN
14.12.16
✎
10:25
|
(14) Это не СКД
|
|||
16
Gill
14.12.16
✎
10:26
|
Почему так не работает?
СписокОрганизаций=Организации.Выгрузить(,"КонтрагентДочерний"); ПараметрСписокОрганизаций = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СписокОрганизаций")); //ПараметрСписокОрганизаций.Значение = СписокОрганизаций; //ПараметрСписокОрганизаций.Использование = Истина; Для каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл Если ЭлементОтбора.ЛевоеЗначение =Новый ПолеКомпоновкиДанных("Организатор") Тогда ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.ПравоеЗначение=СписокОрганизаций; ЭлементОтбора.Использование=Истина; КонецЕсли; КонецЦикла; |
|||
17
Defender aka LINN
14.12.16
✎
10:27
|
(16) Попробуй СписокЗначений а не Массив
|
|||
18
Defender aka LINN
14.12.16
✎
10:27
|
(16) + Ну и отбор не помешает добавить
|
|||
19
Галахад
гуру
14.12.16
✎
10:33
|
//СписокОрганизаций=Организации.Выгрузить(,"КонтрагентДочерний");
СписокОрганизаций=ВыгрузитьКолонку("КонтрагентДочерний"); |
|||
20
Gill
14.12.16
✎
11:25
|
(17) со СпискомЗначений не отрабатывает...Почему вот так не работает?
В результат вываливается без фильтра.Ведь в запросе указано отбор по Организатору В (&СписокОрганизаций) СписокОрганизаций=Организации.ВыгрузитьКолонку("КонтрагентДочерний"); ПараметрСписокОрганизаций = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СписокОрганизаций")); ПараметрСписокОрганизаций.Значение = СписокОрганизаций; ПараметрСписокОрганизаций.Использование = Истина; |
|||
21
Мимохожий Однако
14.12.16
✎
11:26
|
Проверь отладчиком, что лежит в СписокОрганизаций
|
|||
22
Gill
14.12.16
✎
11:31
|
(21) массив
|
|||
23
Gill
14.12.16
✎
11:32
|
в функции ПолучитьДочерниеОрганизации используется массив
|
|||
24
Мимохожий Однако
14.12.16
✎
11:32
|
(22) Ты сделай СписокЗначений вместо Массив для начала
|
|||
25
Мимохожий Однако
14.12.16
✎
11:33
|
(23) ну и?
|
|||
26
Gill
14.12.16
✎
11:42
|
(23),(24) Со списком значений Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов. Контрагенты.ГоловнаяКомпания <<?>>= &ГоловнаяКомпания, а если использовать (В) вместо (=) не отрабатывает |
|||
27
Gill
14.12.16
✎
11:43
|
вот функция
Функция ПолучитьДочерниеОрганизации(Контрагент) экспорт Результат = Новый Массив; Результат.Добавить(Контрагент); Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ГоловнаяКомпания = &ГоловнаяКомпания"; Запрос.УстановитьПараметр("ГоловнаяКомпания", Контрагент); МассивДочек = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для каждого контр из МассивДочек цикл Если Результат.Найти(контр) = неопределено тогда Результат.Добавить(контр); КонецЕсли; МассивДочекДочки = ПолучитьДочерниеОрганизации(контр); Для каждого ДочкаДочки из МассивДочекДочки цикл Если Результат.Найти(ДочкаДочки) = неопределено тогда Результат.Добавить(ДочкаДочки); КонецЕсли; КонецЦикла; КонецЦикла; Возврат Результат; КонецФункции |
|||
28
Мимохожий Однако
14.12.16
✎
11:48
|
(27) я не про эту функцию говорил, а про СписокОрганизаций в (20). Сделай из полученного массива списокЗначений и проверь.
|
|||
29
Gill
14.12.16
✎
12:16
|
(28)работает... Всем спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |