Смена схемы компоновки данных в УФ

1. Александр Медведев (anig99) 2553 06.10.15 13:19 Сейчас в теме
Пробую сделать как написано в некоторых источниках:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОтчетО = РеквизитФормыВЗначение("Отчет");
	Схема = ОтчетО.ПолучитьМакет("Макет");
	ОтчетО.СхемаКомпоновкиДанных = Схема;
	АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);
	ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
	ОтчетО.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
	ОтчетО.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
	ЗначениеВРеквизитФормы(ОтчетО, "Отчет");
КонецПроцедуры
...Показать Скрыть


Не помогает. В приложении отчет. Как сделать правильно?
Прикрепленные файлы:
ТестСменыСхемы.erf
Вознаграждение за ответ
Показать полностью
Найденные решения
22. 12e3 1sd (mymyka) 06.10.15 15:12 Сейчас в теме
Сколько ни пробовал, во внешнем отчете на УФ подменяй схему не подменяй, при нажатии ИзменитьВариант или ВыбратьВариант открывается схема по умолчанию.
Единственный способ - рисовать интерфейс настроек вручную и собирать потом схему программно, впрочем, как и сделаны все отчеты в Бух 3.0.
anig99; spezc; +2 Ответить
Остальные ответы
2. 12e3 1sd (mymyka) 06.10.15 13:54 Сейчас в теме
ОтчетО = РеквизитФормыВЗначение("Отчет");
	//Получаем схему из макета
	Схема = ОтчетО.ПолучитьМакет("Макет");
	//Из схемы возьмем настройки по умолчанию
	//Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
	Настройки = ОтчетО.КомпоновщикНастроек.Настройки;
	
	//установим нужные параметры
	//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Граница1",Период.ДатаНачала);
	//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ГраницаПрошл",КонецДня(Период.ДатаОкончания));
	
	//Помещаем в переменную данные о расшифровке данных
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
	//Формируем макет, с помощью компоновщика макета
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	//Передаем в макет компоновки схему, настройки и данные расшифровки
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,
	Настройки, ДанныеРасшифровки);
	
	//Выполним компоновку с помощью процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
	ДанныеРасшифровки);
	
	//Очищаем поле табличного документа
	Результат.Очистить();
	
	//Выводим результат в табличный документ
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	//Левак
	//ОтчетО.СхемаКомпоновкиДанных = Схема;
	//АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);
	//ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
	//ОтчетО.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
	//ОтчетО.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
	//ЗначениеВРеквизитФормы(ОтчетО, "Отчет");
...Показать Скрыть

З.Ы. Гугл выдает миллиард верных ответов по запросу "Программное формирование СКД", если что.
kostyaomsk; +1 Ответить 1
3. Александр Медведев (anig99) 2553 06.10.15 13:56 Сейчас в теме
(2) mymyka, это программное выполнение отчета. Мне нужно сменить схему для отчета, чтобы можно было дальше настраивать его пользователю штатными средствами платформы перед формированием.
4. 12e3 1sd (mymyka) 06.10.15 14:01 Сейчас в теме
(3)Тогда просто измените
АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
на
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
5. Александр Медведев (anig99) 2553 06.10.15 14:14 Сейчас в теме
6. Ildar Gabdrakhmanov (spezc) 308 06.10.15 14:16 Сейчас в теме
&НаСервере
Процедура СохранитьСхемуСКДНаСервере(СхемаСКД)
	
	ОбъектФормы = РеквизитФормыВЗначение("Объект");
	
	ОбъектФормы.УстановитьСхему(СхемаСКД);
	
	ЗначениеВРеквизитФормы(ОбъектФормы, "Объект");	
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьСхему(Команда)
	
	СхемаСКД = ВосстановитьСхемуСКДНаСервере();
	Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаСКД);
	Конструктор.Редактировать(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ТипЗнч(ИсточникВыбора) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда
		
        СхемаСКД = ИсточникВыбора.ПолучитьСхему();
        СохранитьСхемуСКДНаСервере(СхемаСКД);
		Модифицированность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры
...Показать Скрыть
7. Ildar Gabdrakhmanov (spezc) 308 06.10.15 14:17 Сейчас в теме
Функция ПолучитьСхему() Экспорт
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СхемаСКД);
	
	Попытка
		
		Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));
		
	Исключение
		
		Результат = Неопределено;
		
	КонецПопытки;
	
	Если Результат = Неопределено Тогда
		
		Возврат Новый СхемаКомпоновкиДанных;
		
	Иначе
		
		Возврат Результат;
		
	КонецЕсли; 	
	
КонецФункции // 

Процедура УстановитьСхему(ОбъектСхемы) Экспорт
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОбъектСхемы, "dataCompositionSchema", "http://v8.1c.ru/8.1/data-composition-system/schema");
	СхемаСКД = ЗаписьXML.Закрыть();
	
КонецПроцедуры
...Показать Скрыть
8. Ildar Gabdrakhmanov (spezc) 308 06.10.15 14:18 Сейчас в теме
9. Александр Медведев (anig99) 2553 06.10.15 14:27 Сейчас в теме
10. Павел Островский (32ops) 94 06.10.15 14:28 Сейчас в теме
Под неупраляемым интерфейсом было
	СхемаКомпоновкиДанных=ПолучитьМакет(?(ИмяОтчета="ДЗ","ПросроченнаяЗадолженность","НевозвратнаяЗадолженность"));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
11. Александр Медведев (anig99) 2553 06.10.15 14:31 Сейчас в теме
(10) 32ops, нужно поменять схему, а не только настройки.
12. Павел Островский (32ops) 94 06.10.15 14:32 Сейчас в теме
13. Александр Медведев (anig99) 2553 06.10.15 14:34 Сейчас в теме
(12) 32ops, ну дык в управляемом интерфейсе это не работает.
14. Павел Островский (32ops) 94 06.10.15 14:34 Сейчас в теме
15. Денис (konstruktiv) 06.10.15 14:57 Сейчас в теме
(1) anig99, возможно это нельзя использовать именно для типа "ВнешнийОтчет". Если сделать просто обработку, то работает
Прикрепленные файлы:
СменаСхемы.epf
16. Ildar Gabdrakhmanov (spezc) 308 06.10.15 14:59 Сейчас в теме
правильный ответ - в отчете на управляемой форме такое не прокатит.
17. Александр Медведев (anig99) 2553 06.10.15 15:08 Сейчас в теме
(15) konstruktiv, меняется только конструктор настроек, но не схема.
18. Денис (konstruktiv) 06.10.15 15:10 Сейчас в теме
(17) anig99, стоп, так каков должен быть конечный результат? т.к. возможно переинициализировать компоновщик, значит и выполнение произвольной схемы будет работать в одной форме. И все штатные возможности будут
19. Ildar Gabdrakhmanov (spezc) 308 06.10.15 15:12 Сейчас в теме
20. Ирина Иванова (I_r_a) 06.10.15 15:12 Сейчас в теме
(11) anig99, вставила в модуль отчета (на одних курсах по скд так показывали) вроде работает
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Вставить содержимое обработчика.
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецПроцедуры
21. Денис (konstruktiv) 06.10.15 15:12 Сейчас в теме
(19) spezc, чего именно не будет?
22. 12e3 1sd (mymyka) 06.10.15 15:12 Сейчас в теме
Сколько ни пробовал, во внешнем отчете на УФ подменяй схему не подменяй, при нажатии ИзменитьВариант или ВыбратьВариант открывается схема по умолчанию.
Единственный способ - рисовать интерфейс настроек вручную и собирать потом схему программно, впрочем, как и сделаны все отчеты в Бух 3.0.
anig99; spezc; +2 Ответить
23. Александр Медведев (anig99) 2553 06.10.15 15:13 Сейчас в теме
(16) spezc, хотелось бы точно узнать на основании чего такое поведение платформы. Может всё-таки есть выход? Мне нужно подменить основную схему своей при старте отчета. Я нашёл 2 решения, но там возникает несколько ньюансов. Одно решение муторное, другое костыльное. Хотелось сделать красиво.
24. Денис (konstruktiv) 06.10.15 15:16 Сейчас в теме
(23) anig99, при старте - это при открытии? - подмена СКД это уже костыль какой-то изначально, зачем такое может понадобиться?
25. Ildar Gabdrakhmanov (spezc) 308 06.10.15 15:21 Сейчас в теме
(23) давно пытался, форумы перерыл. сейчас еще раз глянул новое по этой теме - ничего не изменилось.
почему - ответа нет. партнерский форум и разработчика молчат
26. Ildar Gabdrakhmanov (spezc) 308 06.10.15 15:21 Сейчас в теме
если надо - делайте костыль
27. Ildar Gabdrakhmanov (spezc) 308 06.10.15 15:23 Сейчас в теме
ну не знаю насколько это красивое по вашим меркам - сделайте сделайте две вложенные схемы (или сколько у вас разных схем), сделайте два варианта - в каждом варианте своя схема.

таким образом выбирая вариант (при открытии) - вы сможете выбирать нужную схему
28. Ildar Gabdrakhmanov (spezc) 308 06.10.15 15:32 Сейчас в теме
и если можно, поделитесь муторным и костыльными вариантами, хотя бы в общих чертах
kraynev-navi; +1 Ответить 3
29. С К (kraynev-navi) 224 06.10.15 16:00 Сейчас в теме
Я использую при компоновке результата
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
	УстановитьПривилегированныйРежим(Истина);
	НеобходимаяСКД = Неопределено;
	Если ЭтотОбъект.СКДоформление = "ПланНаМесяц" Тогда
		НеобходимаяСКД = ЭтотОбъект.ПолучитьМакет("ПланНаМесяц");
	ИначеЕсли ЭтотОбъект.СКДоформление = "ОплатыЗаДень" Тогда
		НеобходимаяСКД = ЭтотОбъект.ПолучитьМакет("ОплатыЗаДень");
	ИНАЧЕ
		НеобходимаяСКД = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	КонецЕсли;
	
    АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(НеобходимаяСКД, Новый УникальныйИдентификатор);

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

	
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    Попытка
        МакетКомпоновки = КомпоновщикМакета.Выполнить(НеобходимаяСКД, НастройкиСКД, ДанныеРасшифровки);
    Исключение
        Текст = ОписаниеОшибки();
    КонецПопытки;    
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки,Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры
...Показать Скрыть
30. Александр Медведев (anig99) 2553 06.10.15 16:40 Сейчас в теме
(28) spezc,
1. Через обработку. Создаем все нужные элементы формы для работы с отчетом (выбор варианта, изменение настройки и т.д.) сами.
2. Через отчет. Через процедуру в модуле отчета. Определенного успеха тут я добился. Компоновка настроек подгружается, но не сама схема. Её приходится грузить ПриКомпоновкеРезультата повторно. Соответственно не работают нормально остальные настройки.
31. Александр Медведев (anig99) 2553 06.10.15 16:47 Сейчас в теме
(28) spezc, ещё 3 вариант когда в модуле отчета

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

СменитьСхему();
...Показать Скрыть


делаешь как-то так. Т.е. схема меняется до создания управляемой формы. НО! Такой вариант устраивает только если Макет фиксирован в коде. Я не знаю нормального способа передать в модуль отчета ПЕРЕД созданием формы что-либо. Т.е. передать информацию о том, какой именно макет мне нужен, например.
32. Александр Медведев (anig99) 2553 06.10.15 16:52 Сейчас в теме
(28) spezc, если бы была возможность открывать управляемую форму отчета не через ОткрытьФорму...
33. Алексей (alexqc) 144 06.10.15 19:37 Сейчас в теме
У меня для вас плохие новости - к сожалению, никак.
Если посмотреть на реквизит Отчет в УФ, то мы увидим, что это ДанныеФормыСтруктура, содержащие только 2 поля - ИдентификаторТипаОтчета и КомпоновщикНастроек. Т.е. СКД там по-просту нет!

А теперь представим как выполняется отчет в УФ, как клиент-серверная система. Вот у тебя есть настроенная форма, НО! - в данный момент существует она только на клиенте! Т.е. хранит инфу только о Компоновщике настроек. Для выполнения эта форма передается на сервер, там генерируется уже объект-отчет (естественно, с настройками по-умолчанию, т.е со своим стандартным СКД), в него загружаются настройки из формы (компоновщик), и... собственно все, дальше уже вызывается исполнение компоновки. (проследить это можно, поставив в модуле Сообщить("вызов отчета") , и обратить внимание когда эти сообщения вылезут).

Таким образом, подменяй-не подменяй СКД в форме - это ничего не даст.

Можно поробовать обойти (что вы и пытались сделать): подменять непосредсвенно перед выпонением, в модуле, ПриКомпоновкеРезультата(). Передавать инфу туда можно либо добавив еще один реквизит отчета (ИмяМакета, например), либо пользуясь реквзитом ДополнительныеСвойства настроек компоновщика (это структура, куда можно запихать все чего надо). Последний вариант даже более предпочтителен, т.к. ДополнительныеСвойства вместе с остальными настройками компоновщика работают через стандартный механизм настроек - т.е. в сохранении/восстановлении и расшифровках показателей.
34. Алексей (alexqc) 144 06.10.15 19:44 Сейчас в теме
Да, и, для того чтобы не сбивались настройки (если доступные поля у компоновок разные) можно попробовать поиграться с методами Получитьнастройки/ЗагрузитьНастройки/Восстановить.
35. Sergey Andreev (starik-2005) 1134 07.10.15 00:01 Сейчас в теме
В типовых УТ 11 есть механизм рассылки отчетов. Там компоновщик вынесен в форму и любую схему может отобразить. Можно скопипастить.
36. Александр Новиков (ZergKRSK) 122 07.10.15 06:16 Сейчас в теме
А нельзя использовать вложенные схемы? И получать нужную когда надо.
37. Александр Медведев (anig99) 2553 07.10.15 08:02 Сейчас в теме
(36) ZergKRSK, нет. Так, к сожалению, не подойдет.
(35) starik-2005, сейчас гляну
38. Сергей Растатурин (tristarr1) 30 07.10.15 08:23 Сейчас в теме
А зачем такие сложности? Если нужно что-то подшаманить то по-моему лучше инициировать настройки из одной схемы и применять их к исполнению на другую вот и все. естественно придется доделывать обработчик "ПриКомпоновкеРезультата".
39. Александр Медведев (anig99) 2553 07.10.15 08:42 Сейчас в теме
(38) tristarr1, схему будет совсем другая. и настройки тоже
40. Александр Новиков (ZergKRSK) 122 07.10.15 08:57 Сейчас в теме
(39) anig99, почему нельзя заиспользовать вложенную схему?
41. Сергей Растатурин (tristarr1) 30 07.10.15 09:03 Сейчас в теме
(39) anig99, Тогда зачем нам это нужно? в чем смысл?
42. Александр Медведев (anig99) 2553 07.10.15 09:27 Сейчас в теме
(41) tristarr1, чтобы можно было открывать для внешних отчетов управляемую форму под толстым клиентом. А управляемая форма нужна, чтобы можно было нормально пользоваться вариантами отчетов и пользовательскими настройками.
43. Павел Островский (32ops) 94 07.10.15 09:43 Сейчас в теме
Добавить реквизит1 в отчет типа "КомпоновщикНастроекКомпоновкиДанных". Создать форму варианта (на форме изменить путь к данным у "КопоновщикНастроеНастройки" на Отчет.Реквизит1.Настройки), в ней при создании на сервере
СхемаДляОтбора = Отчеты.Отчет1.ПолучитьМакет("Макет");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаДляОтбора,УникальныйИдентификатор);
Отчет.Реквизит1.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
Отчет.Реквизит1.ЗагрузитьНастройки(СхемаДляОтбора.НастройкиПоУмолчанию);
Отчет.Реквизит1.Восстановить();
Схема редактируется.
44. евг волк (ben19791010) 07.10.15 10:57 Сейчас в теме
45. Александр Медведев (anig99) 2553 07.10.15 12:21 Сейчас в теме
(44) ben19791010, это не под управляемые формы.
(43) 32ops, этот вариант у меня лежит как крайний случай - создавать функционал редактирования настроек отчета и выбора варианта самому, а не использовать генерируемые платформой.
46. евг волк (ben19791010) 07.10.15 12:25 Сейчас в теме
(45) anig99, а я как всегда...вминательность мой конёк
47. Иван Титов (Ibrogim) 633 07.10.15 12:44 Сейчас в теме
Я делал одну форму с пользовательскими настройками и копировал настройки в нужные схемы. или это не про то?
48. Александр Медведев (anig99) 2553 07.10.15 13:25 Сейчас в теме
(47) Ibrogim, это решение из разряда "нарисовать свою форму, которая повторяет генерируемую платформой". Сделать это можно, но нудно.
49. Виталий Косоротов (kosorotov) 07.10.15 13:54 Сейчас в теме
Я более простой выход из ситуации нашел:

В модуле отчета есть процедура:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Вставить содержимое обработчика.
СтандартнаяОбработка = ЛОЖЬ;
Сформировать(ДокументРезультат);
КонецПроцедуры

Вот в ней отменяем Стандартную обработку и формируем уже что угодно. В модуле уже доступно получение Макета.
50. Александр Медведев (anig99) 2553 07.10.15 14:09 Сейчас в теме
(49) kosorotov, как уже тут писал - теряется возможность настроек отчёта. Схема-то от другого отчета в форме.
51. Александр Медведев (anig99) 2553 07.10.15 14:11 Сейчас в теме
(35) starik-2005, если это то, что нашел, то там только пользовательские настройки можно отобразить. Приложил рисунок что нашел
Прикрепленные файлы:
52. Sergey Andreev (starik-2005) 1134 08.10.15 09:16 Сейчас в теме
(51) anig99, а вы хотите полноценный отчет? В той же ут форма отчета подменяется общей формой. Там в коде общей формы много интересного.
53. Александр Медведев (anig99) 2553 08.10.15 16:30 Сейчас в теме
(52) starik-2005, общую форму нельзя открыть через ПолучитьФорму ОткрытьФорму - ругается, что нужно открывать определенный отчет.
54. Александр Медведев (anig99) 2553 08.10.15 16:30 Сейчас в теме
(52) starik-2005, но оттуда можно выцепить, что надо...
55. Александр Медведев (anig99) 2553 09.10.15 07:57 Сейчас в теме
(52) starik-2005, посмотрел. опять перемудрили, реально нужно только часть функций.
56. Ildar Gabdrakhmanov (spezc) 308 09.10.15 08:03 Сейчас в теме
а чем вариант с вложенными схемами и вариантами отчета не устроил? имхо самое оптимальное.
57. Александр Медведев (anig99) 2553 09.10.15 11:16 Сейчас в теме
(56) spezc, тем, что в итоге произвольный внешний отчет должен открываться в управляемой форме в толстом клиенте
58. Капитан Немо (capitan) 576 17.10.15 11:36 Сейчас в теме
На 8.2 99.99% что не получится сделать.
Самый простой вариант - сделать отчетов сколько нужно разных схем на СКД и одной обработкой стартером ими управлять.
Для пользователя это будет практически то же самое.
59. Xer shi (Xershi) 278 19.10.15 13:32 Сейчас в теме
(3) anig99, а в какой момент вы хотите заменить СКД?
60. Алексей Леонов (axelerleo) 227 19.10.15 16:18 Сейчас в теме
Вот рабочий вариант смены компоновки данных на управляемых формах. Без наворотов, просто интересен был сам факт того, что это можно сделать.

Добавлено.
разумеется, формировать список желательно по метаданным, перебирая макеты и варианты.
На обычных формах я использовал такую конструкцию:
		Для Каждого МакетСхемы Из ЭтотОбъект.Метаданные().Макеты Цикл
			СхемаКД = ПолучитьМакет(МакетСхемы.Имя);
			Для Каждого ВариантНастроек Из СхемаКД.ВариантыНастроек Цикл
				СписокВариантов.Добавить(МакетСхемы.Имя + "$" + ВариантНастроек.Имя, ВариантНастроек.Представление);
			КонецЦикла;
		КонецЦикла;
...Показать Скрыть

Дальше при смене варианта настроек:

//Загрузим схему компоновки данных
МногострочныйТекст = СтрЗаменить(ВыбранноеЗначение,"$", Символы.ПС);
ИмяСхемы = СтрПолучитьСтроку(МногострочныйТекст, 1);
Вариант = СтрПолучитьСтроку(МногострочныйТекст, 2);

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


При некотором желании то же самое можно сделать и на управляемых формах.
Мне было некогда сильно разбираться, поэтому список (он же "шписок") я просто прописал при создании на сервере.
Прикрепленные файлы:
СменаКД.erf
61. Ададуров Виталий (adva) 37 22.10.15 14:47 Сейчас в теме
Вот вроде получилось сделать то, что требуется, но формы настроек походу берутся их схемы, может их как-то можно изменить, но пока нет времени копать дальше
Прикрепленные файлы:
1Cv8.rar
62. Ададуров Виталий (adva) 37 22.10.15 14:57 Сейчас в теме
(61) Хотя подозреваю, что это даже не настройки, а использование метода ПолучитьФорму() аналогично толстому клиенту в обычном режиме, и в результате открывается именно форма для обычного режима.
63. Ададуров Виталий (adva) 37 26.10.15 07:21 Сейчас в теме
Ну так что, форма отчета СКД для обычного режима из (61) подходит, или нет?
64. Ададуров Виталий (adva) 37 26.10.15 08:41 Сейчас в теме
Вариант открытия стандартной формы СКД (а также изменения варианта, можно и настроек) внешнего отчета в упр. форме.
Хотя понял, что скорее всего требовалось не совсем это.
Прикрепленные файлы:
1Cv8_упр.cf
65. Ададуров Виталий (adva) 37 26.10.15 09:00 Сейчас в теме
А если нужна именно первоначальная форма отчета, то может быть стоит попробовать так. Делаем СКД, в которой перечисляем N полей типа "Поле1, Поле2, Поле3 ...", максимум, сколько может понадобиться (в т.ч. и в ресурсы).

А при создании на сервере, обзываем эти поля для пользователя так, как требуется, исходя из схемы требуемого отчета, (лишние поля отключаем для доступа). Пользователь производит настройки. При компоновке результата, производим обратное преобразование настроенных пользователем полей, в поля нужной схемы (при этом предварительно надо будет задать соответствие полей вида Поле1 полям нужной схемы)
66. Алексей Леонов (axelerleo) 227 26.10.15 09:02 Сейчас в теме
(64) adva, у вас нет интерактивной смены схемы СКД. Вопрос к топикстартеру и всем остальным - (60) никто не смотрел? Мне кажется, это близко к тому, что требовалось - интерактивная смена схемы компоновки данных с возможностью редактирования настроек. Все на булочке с кунжутом управляемых формах.
67. Ададуров Виталий (adva) 37 26.10.15 09:24 Сейчас в теме
(66) Вы сами пробовали это (60) сделать на управляемых формах? У меня получалось подсунуть настройки в упр. формах, но они без схемы были нерабочими (заданные по умолчанию настройки есть, а возможности их изменения нет). У меня нет интерактивной смены схемы, но в итоге, я думаю, мой вариант более рабочий, открывается форма внешнего отчета на СКД с типовыми настройками, а если все же требуется использовать форму самого отчета, то в (65) предложено вроде как рабочее решение.
68. Алексей Леонов (axelerleo) 227 26.10.15 10:09 Сейчас в теме
(67) adva, в (60) - как раз мной написанный отчет на управляемых формах, с двумя схемами компоновки данных :)
На базе УТ 11.1 в тонком клиенте на управляемом интерфейсе все работает. Вы бы проверяли, прежде чем писать...
Ниже - скриншоты.
Прикрепленные файлы:
69. Ададуров Виталий (adva) 37 26.10.15 10:59 Сейчас в теме
(68) тогда еще и покажите, пожалуйста на скрине, какие поля доступны при добавлении отбора / группировки. Я ж говорю, при моих попытках выполнить аналогичные действия, настройки внешне выглядели так, как требовалось, но при этом ничего нельзя было изменить. Возможно я чего-то не доделал.
70. Анянов Михаил (insurgut) 165 26.10.15 12:50 Сейчас в теме
(11) anig99, как я понял поменять схему только в модуле самого отчета получится, вроде такого:
Процедура РаспаковкаТекстаЗапроса() Экспорт
	
	РазмерШага = 536870912; // 2^29 секунд - это 17 лет назад - февраль 1997 года!
	
	ТекстЗапроса = ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос;
	
	Разделители = СтрВхождения(ТекстЗапроса, ";");
	
	Рефрен = Сред(ТекстЗапроса, Разделители[1] + 1, Разделители[2] - Разделители[1]);
	
	Рефрены = "";
	
	Пока РазмерШага > 1 Цикл 
		
		Рефрены = Рефрены + СтрЗаменить(СтрЗаменить(Рефрен, "Шаг1", "Шаг" + Формат(РазмерШага / 2, "ЧГ=0")), "536870912", Формат(РазмерШага, "ЧГ=0")); 
		
		РазмерШага = РазмерШага / 2
		
	КонецЦикла;
	
	ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = Сред(ТекстЗапроса, 1, Разделители[1]) + Рефрены + Сред(ТекстЗапроса, Разделители[2] + 1)
	
КонецПроцедуры

РаспаковкаТекстаЗапроса();
...Показать Скрыть



Когда форма уже открыта - можно повлиять только программное формирование отчета, либо изощряться, как указано выше.
71. Алексей Леонов (axelerleo) 227 29.10.15 10:31 Сейчас в теме
Почему-то автор темы пропал.
Мне кажется, я в (60) указал рабочий вариант.
Хотелось бы комментариев от автора темы :)
72. Xer shi (Xershi) 278 29.10.15 10:44 Сейчас в теме
(71) axelerleo, автор пропал еще на 59 посте=))
73. serg serg (seregasame) 29.10.15 11:10 Сейчас в теме
На диске итс есть внешний отчет "КонсольСистемыКомпоновкиДанных.erf", в котором в режиме предприятия даже можно изменять сам макет скд, через "конструктор схемы компоновки данных" или прямо в тексте схемы компоновки данных. поковыряй его, возможно найдешь ответ.
axelerleo; +1 Ответить
74. Александр Медведев (anig99) 2553 09.11.15 15:34 Сейчас в теме
(59) Без разницы в какой момент менять схему. Всё равно в определенные моменты 1с лезет за отчетом, которые сохранён в конфигураторе и всё обламывается. Т.е. использовать уже существующий в конфигурации отчёт ради управляемой формы - нельзя. Никак. Переназначить основной реквизит - тоже нельзя. Нашел только один рабочий вариант. Сделал свои общие управляемые формы для отчета и его настроек. Просто это оказалось намного проще, чем я думал. А дальше уже я при открытии внешнего отчета отменяю открытие формы и вызываю общую форму с передачей через параметры схемы отчета. При это мне доступно и варианты и настройки. Немного поменяв стандартный код и сохранять настройки получается. В общем влезть в конфигураторо всё же пришлось, но только 1 раз. Публикация сейчас отправлена на модерацию. Чуть позже раздам вознаграждение. Извините, что так пропал - работа, да и протестировать нужно было подсистему.
(71) это кусочек того, что пришлось в итоге дописать.
(70) какой-то замудрённый способ. есть попроще для моего случая. Но это всё равно не поможет. При формировании отчета схема перечитывается из конфигурации.
(66) не обязательно интерактивное. Главное - смена. Решено через общую форму. В принципе можно её допилить и до интерактивной смены прямо из формы.
75. Александр Медведев (anig99) 2553 09.11.15 15:36 Сейчас в теме
(70) (71) (72) http://infostart.ru/public/416562/ собственно сама публикация. Награды раскидаю попозже.
76. Анянов Михаил (insurgut) 165 09.11.15 16:52 Сейчас в теме
(74) anig99, да там замудрен только код изменения самого запроса в СКД - само изменение очень простое...
ТекстЗапроса = ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос;
// + алгоритм изменения запроса
// ...
//- алгоритм изменения запроса
ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ИзмененныйЗапрос;
...Показать Скрыть



Прилагаю пример переделки отчета просроченных долгов (без учета корректности привязки документов оплат) для конфигурации УТ 11.1 (тоже долго не мог понять как подогнать отчет для обычных форм под управляемые). В отладчике можно увидеть запрос ДО и запрос ПОСЛЕ, ну и открывается непосредственно в отчете запрос ПОСЛЕ (что и надо было). Т.е. таким образом можно изменять текст запроса при выполнении тех или иных условий (права пользователей, те или иные остатки и т.п.).
Прикрепленные файлы:
ПросроченныеДолгиФИФО_УТ11.erf
78. Александр Медведев (anig99) 2553 09.11.15 22:48 Сейчас в теме
раньше вроде была возможность напрямую передавать напрямую стартмани.
79. Elena Kolodina (kolodina240751) 17.12.15 06:58 Сейчас в теме
привет, возникла необходимость создать 5 разных отчетов УФ, лениво их делать, поэтому - хочу сделать один отчет, в котором параметром будет вид отчета.
в зависимости от вида - буду выбирать нужную схему.
почитала ветку - думаю будет полезно, спасибо.
поделюсь когда будет чем.
80. Игорь Колодин (KilloN) 27 20.03.17 14:32 Сейчас в теме
(79)
привет, возникла необходимость создать 5 разных отчетов УФ, лениво их делать, поэтому - хочу сделать один отчет, в котором параметром будет вид отчета.
в зависимости от вида - буду выбирать нужную схему.
почитала ветку - думаю будет полезно, спасибо.
поделюсь когда будет чем.

Удалось реализовать задуманное? :)
Оставьте свое сообщение