Передача настроек СКД в отчет на СКД

1. ong1990 3 16.08.17 10:26 Сейчас в теме
Есть документ в котором присутствует КомпоновщикНастроекКомпоновкиДанных, в нем делаются отборы по номенклатуре. Из этого документа можно сформировать отчет, который сделан на СКД. Вопрос: как передать отборы из документа в этот отчет?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BackinSoda 16.08.17 10:29 Сейчас в теме
(1) Покажите каким кодом вызывается тот отчет на скд
3. ong1990 3 16.08.17 10:36 Сейчас в теме
&НаКлиенте
Процедура СформироватьПрайсЛист(Команда)
	
	ИмяОтчета = "ПрайсЛист";
	
	Настройки = НасткройкиСКД();
		
	ПараметрыОткрытия = Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки",Истина);
        ПараметрыОткрытия.ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиОтчета();
    
       УстановитьЗначениеПользовательскойНастройки(ПараметрыОткрытия.ПользовательскиеНастройки,"ДатаОтчета",Объект.Дата);
	
	Форма = ПолучитьФорму("Отчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, ЭтаФорма);
	Форма.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
	Форма.Открыть();

КонецПроцедуры


&Насервере
Функция  НасткройкиСКД()
	
	Настройки = Отбор.ПолучитьНастройки();
		  
	Возврат Настройки;
	
КонецФункции

&НаСервере
Функция ПолучитьПользовательскиеНастройкиОтчета()
    Возврат Отчеты.ПрайсЛист.Создать().КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции


&НаСервере
Процедура УстановитьЗначениеПользовательскойНастройки(Настройки, Имя, Значение)
    Для Каждого элемент Из Настройки.Элементы Цикл
        Если ТипЗнч(элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
            Если Строка(элемент.Параметр) = Имя Тогда
                элемент.Значение = Значение;
                элемент.Использование = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Показать
4. BackinSoda 16.08.17 11:06 Сейчас в теме
(3) попробуйте передать отбор (структуру) как один из параметров формы в "ПараметрыОткрытия"
5. ong1990 3 16.08.17 11:18 Сейчас в теме
(4) может я не так делаю? Ничего не поменялось
ПараметрыОткрытия = Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки, Отбор",Истина,,Настройки);
           ПараметрыОткрытия.ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиОтчета();
    
         УстановитьЗначениеПользовательскойНастройки(ПараметрыОткрытия.ПользовательскиеНастройки,"ДатаОтчета",Объект.Дата);
	
	Форма = ПолучитьФорму("Отчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, ЭтаФорма);
        Форма.Открыть();
6. BackinSoda 16.08.17 11:27 Сейчас в теме
(5) В отбор вроде структура передается, для теста что-то одно передайте
ПараметрыОтбора = Новый Структура("Контрагент", Список); 
Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки, Отбор",Истина,,ПараметрыОтбора ); 
7. ong1990 3 16.08.17 11:34 Сейчас в теме
(6)
ПараметрыОтбора

Мне нужно передать все отбор который сделан в СКД и имеет тип "НастройкиКомпоновкиДанных"
8. ong1990 3 16.08.17 11:58 Сейчас в теме
(6) Если делаю вот так вот :
ПараметрыОтбора = Новый Структура("Номенклатура", Номенклатура); 
Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки, Отбор",Истина,,ПараметрыОтбора ); 

то все нормально формируется .
Но хотелось бы открыть отчет с вот такими вот отборами, которые задаются в документе
Прикрепленные файлы:
9. BackinSoda 16.08.17 12:32 Сейчас в теме
(8) попробуйте передать тогда как ФиксированныеНастройки , а не через "Отбор"
Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки, ФиксированныеНастройки",Истина,,Настройки); 
10. ong1990 3 16.08.17 13:22 Сейчас в теме
(9)Тогда ошибка выходит: Невозможно применить фиксированные настройки. Пересекаются элементы отбора
11. soda 16.08.17 13:26 Сейчас в теме
Добавьте перебором настроек отбора, если пересекаются
			Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
				Если ЭлементОтбора.ЛевоеЗначение = ПолеОтбора Тогда
12. ong1990 3 16.08.17 14:41 Сейчас в теме
(11)
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = ПолеОтбора Тогда
+

Если честно, не совсем понятно, что Вы имеете ввиду
13. soda 16.08.17 14:49 Сейчас в теме
(12) Не просто структурой передавать, а перебрать настройки отбора и изменить уже существующие либо добавить новые
КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек. Не загрузить настройки, а перебрать.
14. ong1990 3 16.08.17 15:09 Сейчас в теме
(13)
Не просто структурой передавать, а перебрать настройки отбора и изменить уже существующие либо добавить новые

У вас есть пример кода?
15. ong1990 3 17.08.17 10:11 Сейчас в теме
16. soda 17.08.17 15:00 Сейчас в теме
		УстановленОтбор = Ложь;
		ПолеОтбора = Новый ПолеКомпоновкиДанных("Контрагент"); 
		Если КомпоновщикНастроек.Настройки.Отбор.Элементы.Количество() <> 0 Тогда
			Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
				Попытка
					Если ЭлементОтбора.ЛевоеЗначение = ПолеОтбора Тогда
						ЭлементОтбора.Использование = Истина;
						ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
						ЭлементОтбора.ПравоеЗначение = ДоступныеКонтрагенты;
						УстановленОтбор = Истина;
						Прервать;
					КонецЕсли;
				Исключение
					Продолжить;
				КонецПопытки;
			КонецЦикла;
		КонецЕсли;
		Если НЕ УстановленОтбор Тогда
			ЕлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
			ЕлементОтбора.ЛевоеЗначение = ПолеОтбора;
			ЕлементОтбора.Использование = Истина;
			ЕлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
			ЕлементОтбора.ПравоеЗначение = ПолучитьПапкуДоступаКонрагентовПользователя(ПараметрыСеанса.ТекущийПользователь); 
		КонецЕсли;
Показать

В этом куске кода в настройках ищется параметр "Контрагент" и если он найден, меняется фильтр, если не найден добавляется новый параметр фильтра
17. ong1990 3 18.08.17 12:11 Сейчас в теме
(16) удалось заполнить "отбор" , но теперь отчет вообще странно работает:
формируется пустой отчет, без отборов, но если нажать кнопку "Стандартные настройки", то сразу же формируется отчет с отбором который передавал из документа. И еще один момент, меняется вариант отчета. вот код:
&НаКлиенте
Процедура СформироватьПрайсЛист(Команда)
	
	ПараметрыОткрытия = Новый Структура("СформироватьПриОткрытии",Истина);

    ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиОтчета();
	
	НастройкиОтбора = НасткройкиСКД();	
	
	УстановитьЗначениеПользовательскойНастройки(ПользовательскиеНастройки,"ДатаОтчета",Объект.Дата);
		
	Форма = ПолучитьФорму("Отчет.ПрайсЛист.Форма", ПараметрыОткрытия, ЭтаФорма);
	
	УстановитьНастройки(Форма.Отчет.КомпоновщикНастроек, НастройкиОтбора);

	Форма.Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройки);
	
	Форма.Открыть();
	
КонецПроцедуры

&НаСервере
Функция ПолучитьПользовательскиеНастройкиОтчета()
    Возврат Отчеты.ПрайсЛист.Создать().КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции


&Насервере
Функция  НасткройкиСКД()
	
  Возврат Отбор.ПолучитьНастройки();// Отбор в данном случае это элемент формы с типом "КомпоновщикНастроекКомпоновкиДанных"
	 
КонецФункции


&НаСервере
Процедура УстановитьЗначениеПользовательскойНастройки(Настройки, Имя, Значение)
	
	Для Каждого элемент Из Настройки.Элементы Цикл
        Если ТипЗнч(элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
            Если Строка(элемент.Параметр) = Имя Тогда
                элемент.Значение      = Значение;
                элемент.Использование = Истина;
            КонецЕсли;
        КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры


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

Показать



Что делаю не так?
18. jmi 2 22.03.18 22:43 Сейчас в теме
&НаСервере
Функция ПолучитьПользовательскиеНастройки()
	Возврат НовыйОтбор.ПолучитьНастройки() //  НовыйОтбор.Настройки.Отбор
КонецФункции // ()

&НаКлиенте
Процедура ОткрытьОтчетПродажи(Команда)
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);    //Пользовательские
	ПараметрыФормы.Вставить("ФиксированныеНастройки", ПолучитьПользовательскиеНастройки());

	ОткрытьФорму("Отчет.bp_ПродажиСотрудников.Форма", ПараметрыФормы, ЭтаФорма)
КонецПроцедуры


Показать
Оставьте свое сообщение

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