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

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

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


Не помогает. В приложении отчет. Как сделать правильно?
Прикрепленные файлы:
ТестСменыСхемы.erf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
22. mymyka 06.10.15 15:12 Сейчас в теме
Сколько ни пробовал, во внешнем отчете на УФ подменяй схему не подменяй, при нажатии ИзменитьВариант или ВыбратьВариант открывается схема по умолчанию.
Единственный способ - рисовать интерфейс настроек вручную и собирать потом схему программно, впрочем, как и сделаны все отчеты в Бух 3.0.
Merkalov; anig99; spezc; +3 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
15. konstruktiv 06.10.15 14:57 Сейчас в теме
(1) anig99, возможно это нельзя использовать именно для типа "ВнешнийОтчет". Если сделать просто обработку, то работает
Прикрепленные файлы:
СменаСхемы.epf
17. anig99 2843 06.10.15 15:08 Сейчас в теме
(15) konstruktiv, меняется только конструктор настроек, но не схема.
18. konstruktiv 06.10.15 15:10 Сейчас в теме
(17) anig99, стоп, так каков должен быть конечный результат? т.к. возможно переинициализировать компоновщик, значит и выполнение произвольной схемы будет работать в одной форме. И все штатные возможности будут
19. spezc 782 06.10.15 15:12 Сейчас в теме
21. konstruktiv 06.10.15 15:12 Сейчас в теме
(19) spezc, чего именно не будет?
45. anig99 2843 07.10.15 12:21 Сейчас в теме
(44) ben19791010, это не под управляемые формы.
(43) 32ops, этот вариант у меня лежит как крайний случай - создавать функционал редактирования настроек отчета и выбора варианта самому, а не использовать генерируемые платформой.
46. ben19791010 07.10.15 12:25 Сейчас в теме
(45) anig99, а я как всегда...вминательность мой конёк
2. mymyka 06.10.15 13:54 Сейчас в теме
ОтчетО = РеквизитФормыВЗначение("Отчет");
	//Получаем схему из макета
	Схема = ОтчетО.ПолучитьМакет("Макет");
	//Из схемы возьмем настройки по умолчанию
	//Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
	Настройки = ОтчетО.КомпоновщикНастроек.Настройки;
	
	//установим нужные параметры
	//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Граница1",Период.ДатаНачала);
	//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ГраницаПрошл",КонецДня(Период.ДатаОкончания));
	
	//Помещаем в переменную данные о расшифровке данных
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
	//Формируем макет, с помощью компоновщика макета
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	//Передаем в макет компоновки схему, настройки и данные расшифровки
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,
	Настройки, ДанныеРасшифровки);
	
	//Выполним компоновку с помощью процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
	ДанныеРасшифровки);
	
	//Очищаем поле табличного документа
	Результат.Очистить();
	
	//Выводим результат в табличный документ
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	//Левак
	//ОтчетО.СхемаКомпоновкиДанных = Схема;
	//АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);
	//ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
	//ОтчетО.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
	//ОтчетО.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
	//ЗначениеВРеквизитФормы(ОтчетО, "Отчет");
Показать

З.Ы. Гугл выдает миллиард верных ответов по запросу "Программное формирование СКД", если что.
jobkostya1c_ERP; +1 Ответить
3. anig99 2843 06.10.15 13:56 Сейчас в теме
(2) mymyka, это программное выполнение отчета. Мне нужно сменить схему для отчета, чтобы можно было дальше настраивать его пользователю штатными средствами платформы перед формированием.
4. mymyka 06.10.15 14:01 Сейчас в теме
(3)Тогда просто измените
АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
на
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
axelerleo; +1 Ответить
5. anig99 2843 06.10.15 14:14 Сейчас в теме
59. Xershi 1474 19.10.15 13:32 Сейчас в теме
(3) anig99, а в какой момент вы хотите заменить СКД?
74. anig99 2843 09.11.15 15:34 Сейчас в теме
(59) Без разницы в какой момент менять схему. Всё равно в определенные моменты 1с лезет за отчетом, которые сохранён в конфигураторе и всё обламывается. Т.е. использовать уже существующий в конфигурации отчёт ради управляемой формы - нельзя. Никак. Переназначить основной реквизит - тоже нельзя. Нашел только один рабочий вариант. Сделал свои общие управляемые формы для отчета и его настроек. Просто это оказалось намного проще, чем я думал. А дальше уже я при открытии внешнего отчета отменяю открытие формы и вызываю общую форму с передачей через параметры схемы отчета. При это мне доступно и варианты и настройки. Немного поменяв стандартный код и сохранять настройки получается. В общем влезть в конфигураторо всё же пришлось, но только 1 раз. Публикация сейчас отправлена на модерацию. Чуть позже раздам вознаграждение. Извините, что так пропал - работа, да и протестировать нужно было подсистему.
(71) это кусочек того, что пришлось в итоге дописать.
(70) какой-то замудрённый способ. есть попроще для моего случая. Но это всё равно не поможет. При формировании отчета схема перечитывается из конфигурации.
(66) не обязательно интерактивное. Главное - смена. Решено через общую форму. В принципе можно её допилить и до интерактивной смены прямо из формы.
76. insurgut 207 09.11.15 16:52 Сейчас в теме
(74) anig99, да там замудрен только код изменения самого запроса в СКД - само изменение очень простое...
ТекстЗапроса = ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос;
// + алгоритм изменения запроса
// ...
//- алгоритм изменения запроса
ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ИзмененныйЗапрос;



Прилагаю пример переделки отчета просроченных долгов (без учета корректности привязки документов оплат) для конфигурации УТ 11.1 (тоже долго не мог понять как подогнать отчет для обычных форм под управляемые). В отладчике можно увидеть запрос ДО и запрос ПОСЛЕ, ну и открывается непосредственно в отчете запрос ПОСЛЕ (что и надо было). Т.е. таким образом можно изменять текст запроса при выполнении тех или иных условий (права пользователей, те или иные остатки и т.п.).
Прикрепленные файлы:
ПросроченныеДолгиФИФО_УТ11.erf
6. spezc 782 06.10.15 14:16 Сейчас в теме
&НаСервере
Процедура СохранитьСхемуСКДНаСервере(СхемаСКД)
	
	ОбъектФормы = РеквизитФормыВЗначение("Объект");
	
	ОбъектФормы.УстановитьСхему(СхемаСКД);
	
	ЗначениеВРеквизитФормы(ОбъектФормы, "Объект");	
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ТипЗнч(ИсточникВыбора) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда
		
        СхемаСКД = ИсточникВыбора.ПолучитьСхему();
        СохранитьСхемуСКДНаСервере(СхемаСКД);
		Модифицированность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры
Показать
7. spezc 782 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. spezc 782 06.10.15 14:18 Сейчас в теме
9. anig99 2843 06.10.15 14:27 Сейчас в теме
10. 32ops 191 06.10.15 14:28 Сейчас в теме
Под неупраляемым интерфейсом было
	СхемаКомпоновкиДанных=ПолучитьМакет(?(ИмяОтчета="ДЗ","ПросроченнаяЗадолженность","НевозвратнаяЗадолженность"));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
11. anig99 2843 06.10.15 14:31 Сейчас в теме
(10) 32ops, нужно поменять схему, а не только настройки.
12. 32ops 191 06.10.15 14:32 Сейчас в теме
13. anig99 2843 06.10.15 14:34 Сейчас в теме
(12) 32ops, ну дык в управляемом интерфейсе это не работает.
14. 32ops 191 06.10.15 14:34 Сейчас в теме
20. I_r_a 06.10.15 15:12 Сейчас в теме
(11) anig99, вставила в модуль отчета (на одних курсах по скд так показывали) вроде работает
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Вставить содержимое обработчика.
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецПроцедуры
70. insurgut 207 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)
	
КонецПроцедуры

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



Когда форма уже открыта - можно повлиять только программное формирование отчета, либо изощряться, как указано выше.
75. anig99 2843 09.11.15 15:36 Сейчас в теме
(70) (71) (72) http://infostart.ru/public/416562/ собственно сама публикация. Награды раскидаю попозже.
16. spezc 782 06.10.15 14:59 Сейчас в теме
правильный ответ - в отчете на управляемой форме такое не прокатит.
23. anig99 2843 06.10.15 15:13 Сейчас в теме
(16) spezc, хотелось бы точно узнать на основании чего такое поведение платформы. Может всё-таки есть выход? Мне нужно подменить основную схему своей при старте отчета. Я нашёл 2 решения, но там возникает несколько ньюансов. Одно решение муторное, другое костыльное. Хотелось сделать красиво.
24. konstruktiv 06.10.15 15:16 Сейчас в теме
(23) anig99, при старте - это при открытии? - подмена СКД это уже костыль какой-то изначально, зачем такое может понадобиться?
25. spezc 782 06.10.15 15:21 Сейчас в теме
(23) давно пытался, форумы перерыл. сейчас еще раз глянул новое по этой теме - ничего не изменилось.
почему - ответа нет. партнерский форум и разработчика молчат
22. mymyka 06.10.15 15:12 Сейчас в теме
Сколько ни пробовал, во внешнем отчете на УФ подменяй схему не подменяй, при нажатии ИзменитьВариант или ВыбратьВариант открывается схема по умолчанию.
Единственный способ - рисовать интерфейс настроек вручную и собирать потом схему программно, впрочем, как и сделаны все отчеты в Бух 3.0.
Merkalov; anig99; spezc; +3 Ответить
26. spezc 782 06.10.15 15:21 Сейчас в теме
если надо - делайте костыль
27. spezc 782 06.10.15 15:23 Сейчас в теме
ну не знаю насколько это красивое по вашим меркам - сделайте сделайте две вложенные схемы (или сколько у вас разных схем), сделайте два варианта - в каждом варианте своя схема.

таким образом выбирая вариант (при открытии) - вы сможете выбирать нужную схему
28. spezc 782 06.10.15 15:32 Сейчас в теме
и если можно, поделитесь муторным и костыльными вариантами, хотя бы в общих чертах
kraynev-navi; +1 Ответить
30. anig99 2843 06.10.15 16:40 Сейчас в теме
(28) spezc,
1. Через обработку. Создаем все нужные элементы формы для работы с отчетом (выбор варианта, изменение настройки и т.д.) сами.
2. Через отчет. Через процедуру в модуле отчета. Определенного успеха тут я добился. Компоновка настроек подгружается, но не сама схема. Её приходится грузить ПриКомпоновкеРезультата повторно. Соответственно не работают нормально остальные настройки.
31. anig99 2843 06.10.15 16:47 Сейчас в теме
(28) spezc, ещё 3 вариант когда в модуле отчета

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

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


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

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

	
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    Попытка
        МакетКомпоновки = КомпоновщикМакета.Выполнить(НеобходимаяСКД, НастройкиСКД, ДанныеРасшифровки);
    Исключение
        Текст = ОписаниеОшибки();
    КонецПопытки;    
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки,Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры
Показать
33. alexqc 150 06.10.15 19:37 Сейчас в теме
У меня для вас плохие новости - к сожалению, никак.
Если посмотреть на реквизит Отчет в УФ, то мы увидим, что это ДанныеФормыСтруктура, содержащие только 2 поля - ИдентификаторТипаОтчета и КомпоновщикНастроек. Т.е. СКД там по-просту нет!

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

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

Можно поробовать обойти (что вы и пытались сделать): подменять непосредсвенно перед выпонением, в модуле, ПриКомпоновкеРезультата(). Передавать инфу туда можно либо добавив еще один реквизит отчета (ИмяМакета, например), либо пользуясь реквзитом ДополнительныеСвойства настроек компоновщика (это структура, куда можно запихать все чего надо). Последний вариант даже более предпочтителен, т.к. ДополнительныеСвойства вместе с остальными настройками компоновщика работают через стандартный механизм настроек - т.е. в сохранении/восстановлении и расшифровках показателей.
runkofff; +1 Ответить
34. alexqc 150 06.10.15 19:44 Сейчас в теме
Да, и, для того чтобы не сбивались настройки (если доступные поля у компоновок разные) можно попробовать поиграться с методами Получитьнастройки/ЗагрузитьНастройки/Восстановить.
35. starik-2005 3033 07.10.15 00:01 Сейчас в теме
В типовых УТ 11 есть механизм рассылки отчетов. Там компоновщик вынесен в форму и любую схему может отобразить. Можно скопипастить.
51. anig99 2843 07.10.15 14:11 Сейчас в теме
(35) starik-2005, если это то, что нашел, то там только пользовательские настройки можно отобразить. Приложил рисунок что нашел
Прикрепленные файлы:
52. starik-2005 3033 08.10.15 09:16 Сейчас в теме
(51) anig99, а вы хотите полноценный отчет? В той же ут форма отчета подменяется общей формой. Там в коде общей формы много интересного.
53. anig99 2843 08.10.15 16:30 Сейчас в теме
(52) starik-2005, общую форму нельзя открыть через ПолучитьФорму ОткрытьФорму - ругается, что нужно открывать определенный отчет.
54. anig99 2843 08.10.15 16:30 Сейчас в теме
(52) starik-2005, но оттуда можно выцепить, что надо...
55. anig99 2843 09.10.15 07:57 Сейчас в теме
(52) starik-2005, посмотрел. опять перемудрили, реально нужно только часть функций.
36. ZergKRSK 129 07.10.15 06:16 Сейчас в теме
А нельзя использовать вложенные схемы? И получать нужную когда надо.
37. anig99 2843 07.10.15 08:02 Сейчас в теме
(36) ZergKRSK, нет. Так, к сожалению, не подойдет.
(35) starik-2005, сейчас гляну
38. tristarr1 58 07.10.15 08:23 Сейчас в теме
А зачем такие сложности? Если нужно что-то подшаманить то по-моему лучше инициировать настройки из одной схемы и применять их к исполнению на другую вот и все. естественно придется доделывать обработчик "ПриКомпоновкеРезультата".
39. anig99 2843 07.10.15 08:42 Сейчас в теме
(38) tristarr1, схему будет совсем другая. и настройки тоже
40. ZergKRSK 129 07.10.15 08:57 Сейчас в теме
(39) anig99, почему нельзя заиспользовать вложенную схему?
41. tristarr1 58 07.10.15 09:03 Сейчас в теме
(39) anig99, Тогда зачем нам это нужно? в чем смысл?
42. anig99 2843 07.10.15 09:27 Сейчас в теме
(41) tristarr1, чтобы можно было открывать для внешних отчетов управляемую форму под толстым клиентом. А управляемая форма нужна, чтобы можно было нормально пользоваться вариантами отчетов и пользовательскими настройками.
43. 32ops 191 07.10.15 09:43 Сейчас в теме
Добавить реквизит1 в отчет типа "КомпоновщикНастроекКомпоновкиДанных". Создать форму варианта (на форме изменить путь к данным у "КопоновщикНастроеНастройки" на Отчет.Реквизит1.Настройки), в ней при создании на сервере
СхемаДляОтбора = Отчеты.Отчет1.ПолучитьМакет("Макет");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаДляОтбора,УникальныйИдентификатор);
Отчет.Реквизит1.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
Отчет.Реквизит1.ЗагрузитьНастройки(СхемаДляОтбора.НастройкиПоУмолчанию);
Отчет.Реквизит1.Восстановить();
Схема редактируется.
47. Ibrogim 1311 07.10.15 12:44 Сейчас в теме
Я делал одну форму с пользовательскими настройками и копировал настройки в нужные схемы. или это не про то?
48. anig99 2843 07.10.15 13:25 Сейчас в теме
(47) Ibrogim, это решение из разряда "нарисовать свою форму, которая повторяет генерируемую платформой". Сделать это можно, но нудно.
49. kosorotov 07.10.15 13:54 Сейчас в теме
Я более простой выход из ситуации нашел:

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

Вот в ней отменяем Стандартную обработку и формируем уже что угодно. В модуле уже доступно получение Макета.
50. anig99 2843 07.10.15 14:09 Сейчас в теме
(49) kosorotov, как уже тут писал - теряется возможность настроек отчёта. Схема-то от другого отчета в форме.
56. spezc 782 09.10.15 08:03 Сейчас в теме
а чем вариант с вложенными схемами и вариантами отчета не устроил? имхо самое оптимальное.
57. anig99 2843 09.10.15 11:16 Сейчас в теме
(56) spezc, тем, что в итоге произвольный внешний отчет должен открываться в управляемой форме в толстом клиенте
58. capitan 2466 17.10.15 11:36 Сейчас в теме
На 8.2 99.99% что не получится сделать.
Самый простой вариант - сделать отчетов сколько нужно разных схем на СКД и одной обработкой стартером ими управлять.
Для пользователя это будет практически то же самое.
60. axelerleo 338 19.10.15 16:18 Сейчас в теме
Вот рабочий вариант смены компоновки данных на управляемых формах. Без наворотов, просто интересен был сам факт того, что это можно сделать.

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

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

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

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


При некотором желании то же самое можно сделать и на управляемых формах.
Мне было некогда сильно разбираться, поэтому список (он же "шписок") я просто прописал при создании на сервере.
Прикрепленные файлы:
СменаКД.erf
71. axelerleo 338 29.10.15 10:31 Сейчас в теме
Почему-то автор темы пропал.
Мне кажется, я в (60) указал рабочий вариант.
Хотелось бы комментариев от автора темы :)
72. Xershi 1474 29.10.15 10:44 Сейчас в теме
(71) axelerleo, автор пропал еще на 59 посте=))
61. adva 45 22.10.15 14:47 Сейчас в теме
Вот вроде получилось сделать то, что требуется, но формы настроек походу берутся их схемы, может их как-то можно изменить, но пока нет времени копать дальше
Прикрепленные файлы:
1Cv8.rar
62. adva 45 22.10.15 14:57 Сейчас в теме
(61) Хотя подозреваю, что это даже не настройки, а использование метода ПолучитьФорму() аналогично толстому клиенту в обычном режиме, и в результате открывается именно форма для обычного режима.
63. adva 45 26.10.15 07:21 Сейчас в теме
Ну так что, форма отчета СКД для обычного режима из (61) подходит, или нет?
64. adva 45 26.10.15 08:41 Сейчас в теме
Вариант открытия стандартной формы СКД (а также изменения варианта, можно и настроек) внешнего отчета в упр. форме.
Хотя понял, что скорее всего требовалось не совсем это.
Прикрепленные файлы:
1Cv8_упр.cf
66. axelerleo 338 26.10.15 09:02 Сейчас в теме
(64) adva, у вас нет интерактивной смены схемы СКД. Вопрос к топикстартеру и всем остальным - (60) никто не смотрел? Мне кажется, это близко к тому, что требовалось - интерактивная смена схемы компоновки данных с возможностью редактирования настроек. Все на булочке с кунжутом управляемых формах.
67. adva 45 26.10.15 09:24 Сейчас в теме
(66) Вы сами пробовали это (60) сделать на управляемых формах? У меня получалось подсунуть настройки в упр. формах, но они без схемы были нерабочими (заданные по умолчанию настройки есть, а возможности их изменения нет). У меня нет интерактивной смены схемы, но в итоге, я думаю, мой вариант более рабочий, открывается форма внешнего отчета на СКД с типовыми настройками, а если все же требуется использовать форму самого отчета, то в (65) предложено вроде как рабочее решение.
68. axelerleo 338 26.10.15 10:09 Сейчас в теме
(67) adva, в (60) - как раз мной написанный отчет на управляемых формах, с двумя схемами компоновки данных :)
На базе УТ 11.1 в тонком клиенте на управляемом интерфейсе все работает. Вы бы проверяли, прежде чем писать...
Ниже - скриншоты.
Прикрепленные файлы:
69. adva 45 26.10.15 10:59 Сейчас в теме
(68) тогда еще и покажите, пожалуйста на скрине, какие поля доступны при добавлении отбора / группировки. Я ж говорю, при моих попытках выполнить аналогичные действия, настройки внешне выглядели так, как требовалось, но при этом ничего нельзя было изменить. Возможно я чего-то не доделал.
65. adva 45 26.10.15 09:00 Сейчас в теме
А если нужна именно первоначальная форма отчета, то может быть стоит попробовать так. Делаем СКД, в которой перечисляем N полей типа "Поле1, Поле2, Поле3 ...", максимум, сколько может понадобиться (в т.ч. и в ресурсы).

А при создании на сервере, обзываем эти поля для пользователя так, как требуется, исходя из схемы требуемого отчета, (лишние поля отключаем для доступа). Пользователь производит настройки. При компоновке результата, производим обратное преобразование настроенных пользователем полей, в поля нужной схемы (при этом предварительно надо будет задать соответствие полей вида Поле1 полям нужной схемы)
73. seregasame 29.10.15 11:10 Сейчас в теме
На диске итс есть внешний отчет "КонсольСистемыКомпоновкиДанных.erf", в котором в режиме предприятия даже можно изменять сам макет скд, через "конструктор схемы компоновки данных" или прямо в тексте схемы компоновки данных. поковыряй его, возможно найдешь ответ.
axelerleo; +1 Ответить
77. пользователь 09.11.15 22:47
Сообщение было скрыто модератором.
...
78. anig99 2843 09.11.15 22:48 Сейчас в теме
раньше вроде была возможность напрямую передавать напрямую стартмани.
79. kolodina240751 17.12.15 06:58 Сейчас в теме
привет, возникла необходимость создать 5 разных отчетов УФ, лениво их делать, поэтому - хочу сделать один отчет, в котором параметром будет вид отчета.
в зависимости от вида - буду выбирать нужную схему.
почитала ветку - думаю будет полезно, спасибо.
поделюсь когда будет чем.
80. KilloN 56 20.03.17 14:32 Сейчас в теме
(79)
привет, возникла необходимость создать 5 разных отчетов УФ, лениво их делать, поэтому - хочу сделать один отчет, в котором параметром будет вид отчета.
в зависимости от вида - буду выбирать нужную схему.
почитала ветку - думаю будет полезно, спасибо.
поделюсь когда будет чем.

Удалось реализовать задуманное? :)
81. 1cden 08.12.20 21:05 Сейчас в теме
вот так все работает, отчет внешний из файла

&НаСервере
Процедура Инициализация()
	
	
	О = РеквизитФормыВЗначение("Отчет");
	Если Отчет.ЭтоДанныеПоПоказателям Тогда
		О.СхемаКомпоновкиДанных = О.ПолучитьМакет("Показатели");
	Иначе
		О.СхемаКомпоновкиДанных = О.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	КонецЕсли;
	
    
 
    // Для инициализации схемы нам нужен адрес в хранилище  
    АдресСхемы = ПоместитьВоВременноеХранилище(О.СхемаКомпоновкиДанных,УникальныйИдентификатор);
    Отчет.КомпоновщикНастроек.Инициализировать(
        Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)
    );
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(О.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
	ЗначениеВРеквизитФормы(О,"Отчет");
	
	Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(О.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
КонецПроцедуры
Показать
msergeev79; Sarkikker; user1503726; +3 Ответить
82. Sarkikker 14.02.21 21:39 Сейчас в теме
(81) Спасибо большое! Так действительно работает. Только не нужно указывать основную схему, иначе компоновщик настроек будет брать настройки из неё. И соответственно в модуле объекта в процедуре при компоновке результата нужно тоже указывать макет. Я добавил реквизит внешней обработки, чтобы имя схемы было доступно и в модуле формы, и в модуле объекта.
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день