![]() |
|
СКД | ☑ | ||
---|---|---|---|---|
0
Iceman_1982
27.11.12
✎
15:07
|
Добрый день, уважаемые знатоки 1С. Пытаюсь реализовать следующий механизм. Создал в УТ 10.3 отчет. У отчета основная форма управляемая. В форме отчета сделал ссылку на справочник "Внешние обработки". У отчета в конфигурации создал пустую компоновку данных. Методика работы такая. В форме отчет выбираю отчет из внешних обработок. При выборе отчета из выбранного отчета должна браться схема компоновки и компоновщик настроек и копироваться в аналогичные объекты конфигурации. Делается это все для того чтобы можно было сформировать внешний отчет в управляемой форме. В итоге возникла следующая проблема. Настройки копируются нормально, а вот с компоновкой проблемы, при формировании отчета ругается на первую же группировку. Кто-нибудь реализовывал такую операцию или может кто знает как сделать по другому
|
|||
1
lxndr
27.11.12
✎
15:09
|
текст ошибки
|
|||
2
Iceman_1982
27.11.12
✎
15:10
|
по причине:
Ошибка исполнения отчета по причине: Поле не найдено "ЭкспедиторПеревозчик" |
|||
3
Iceman_1982
27.11.12
✎
15:11
|
экспедиторперевозчик это первая группировка
|
|||
4
lxndr
27.11.12
✎
15:16
|
код, которым СКД собираешь и выводишь?
|
|||
5
Iceman_1982
27.11.12
✎
15:25
|
НаСервере
Процедура ЗагрузитьСКДНаСервере() ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = Отчет.ВнешнийОтчет.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла); Макет = Отчеты.УниверсальныйУправляемыйОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Макет = Форма.СхемаКомпоновкиДанных; Отчет.КомпоновщикНастроек = Форма.КомпоновщикНастроек; КонецПроцедуры &НаКлиенте Процедура ОтчетПриИзменении(Элемент) Если ЗначениеЗаполнено(Отчет.ВнешнийОтчет) Тогда ЗагрузитьСКДНаСервере(); КонецЕсли; КонецПроцедуры |
|||
6
lxndr
27.11.12
✎
15:28
|
Макет = Отчеты.УниверсальныйУправляемыйОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Макет = Форма.СхемаКомпоновкиДанных; Что это? Сначала получил СКД отчета, потом СКД внешнего отчета. Надо всю СКД вручную (программно) собирать. |
|||
7
Iceman_1982
27.11.12
✎
15:30
|
у меня вся нужная СКД собрана во внешнем отчете, ее нужно динамически загрузить в СКД встроенного отчета
|
|||
8
Iceman_1982
27.11.12
✎
15:31
|
если подскажите каким образом ее пересобрать на основании СКД встроенного отчета, то буду благодарен
|
|||
9
lxndr
27.11.12
✎
15:32
|
возможно пересобирать и не потребуется. Попробуй так:
СхемаКомпоновкиДанных = Форма.СхемаКомпоновкиДанных; |
|||
10
Iceman_1982
27.11.12
✎
15:40
|
не прокатывает, такая переменная не определена
|
|||
11
lxndr
27.11.12
✎
15:41
|
ОтчетОбъект.<Имя отчета>.СхемаКомпоновкиДанных (ReportObject.<Имя отчета>.DataCompositionSchema)
ОтчетОбъект.<Имя отчета> (ReportObject.<Имя отчета>) СхемаКомпоновкиДанных (DataCompositionSchema) Использование: Чтение и запись. Описание: Тип: СхемаКомпоновкиДанных. Схема компоновки, на основании которой будет выполняться отчет. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
12
lxndr
27.11.12
✎
15:42
|
В модуле формы бращайся через ОтчетОбъект
|
|||
13
Iceman_1982
27.11.12
✎
15:49
|
Процедура ЗагрузитьСКДНаСервере()
ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = Отчет.ВнешнийОтчет.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла); //Отчеты.УниверсальныйУправляемыйОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Макет = Форма.СхемаКомпоновкиДанных; Отчеты.УниверсальныйУправляемыйОтчет.СхемаКомпоновкиДанных = Форма.СхемаКомпоновкиДанных; Отчет.КомпоновщикНастроек = Форма.КомпоновщикНастроек; КонецПроцедуры &НаКлиенте Процедура ОтчетПриИзменении(Элемент) Если ЗначениеЗаполнено(Отчет.ВнешнийОтчет) Тогда ЗагрузитьСКДНаСервере(); КонецЕсли; КонецПроцедуры Так ошибку выдает |
|||
14
Iceman_1982
27.11.12
✎
15:50
|
ОтчетОбъект, также не обнаружен, если через него
|
|||
15
lxndr
27.11.12
✎
15:55
|
(14)
Блиин: ОтчетОбъект = ДанныеФормыВЗначение(Отчет, Тип("ОтчетОбъект.УниверсальныйУправляемыйОтчет")); |
|||
16
Iceman_1982
27.11.12
✎
16:02
|
написал вот так
ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = Отчет.ВнешнийОтчет.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла); //Отчеты.УниверсальныйУправляемыйОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Макет = Форма.СхемаКомпоновкиДанных; ОтчетОбъект = ДанныеФормыВЗначение(Отчет, Тип("ОтчетОбъект.УниверсальныйУправляемыйОтчет")); ОтчетОбъект.СхемаКомпоновкиДанных = Форма.СхемаКомпоновкиДанных; Отчет.КомпоновщикНастроек = Форма.КомпоновщикНастроек; Ошибка про поле ЭкспедиторПеревозчик |
|||
17
Iceman_1982
27.11.12
✎
16:23
|
Есть еще какие-то варианты?
|
|||
18
lxndr
27.11.12
✎
16:57
|
ВОт чего раскопал. По всей видимости, схему компоновки можно подменить только в обработчике ПриКомпоновкеРезультата():
http://partners.v8.1c.ru/forum/thread.jsp?id=805283#805498 Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СхемаКомпоновкиДанных = Отчеты.Отчет1.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |