Имя: Пароль:
1C
 
УПП Сериализация отчета на СКД. Расшифровка
0 breezee
 
22.01.21
18:54
Добрый вечер. Управление производственным предприятием, редакция 1.3 (1.3.36.1). Платформа 1С:Предприятие 8.3 (8.3.13.1513)
Я пытаюсь выполнить отчеты из одной базы в другой базы.
С отчетом на построителе у меня вышло. Если кому интересно - вот тема с рабочим кодом УПП как сериализовать универсальный отчет
Есть отчеты на СКД. Я переделал отчет на СКД, чтобы он выполнялся в другой базе, но при расшифровке возникает ошибка.
В модуле "ТиповыеОтчеты" я поменял код
//было:
//МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
//стало:

ДанныеВыполнения = мойМодуль.ОбработатьСКДПоВебСервису(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);    
            
МакетКомпоновки        = ДанныеВыполнения.ТабдДок;
ДанныеРасшифровки     = ДанныеВыполнения.ДанныеРасшифровки;
Схема            = ДанныеВыполнения.Схема_Новая;

Вот функция общего модуля в которой идет запрос по веб-сервису
функция ОбработатьСКДПоВебСервису(Схема, НастройкиКомпановщика, ДанныеРасшифровки) Экспорт
    
    //1. Сериализуем параметры для выполнения макета
    СтруктураПараметров = Новый Структура("Схема, НастройкиКомпановщика, ДанныеРасшифровки", Схема, НастройкиКомпановщика, ДанныеРасшифровки);
    
    СтруктураПараметров_Сериал = ОбщегоНазначения.ЗначениеВСтрокуXML(Новый ХранилищеЗначения(СтруктураПараметров));    
        
    ////2. Подключимся к отчтености и выполним построитель
    ПустьВебСервисаОтчетности = МОЙ_ПУТЬ_СЕРВИСА;
    
    ПутьВебСервисаОбмена        = ПустьВебСервисаОтчетности;
    ИмяПользователяОбмена        = ИМЯЮЗЕРА;    
    ПарольПользователяОбмена    = ПАРОЛЬЮЗЕРА;
        
    Попытка
        ОпределениеWS = Новый WSОпределения(ПутьВебСервисаОбмена, ИмяПользователяОбмена, ПарольПользователяОбмена);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;    

    Сервис                = ОпределениеWS.Сервисы.Получить(0);
    ИмяСервиса            = Сервис.Имя;
    ТочкаПодключения    = Сервис.ТочкиПодключения.Получить(0).Имя;
            
    КлиентWS = Новый WSПрокси(ОпределениеWS, Сервис.URIПространстваИмен, ИмяСервиса, ТочкаПодключения);
    
    КлиентWS.Пользователь = ИмяПользователяОбмена;
    КлиентWS.Пароль          = ПарольПользователяОбмена;

    ТабДокСериализованный =  КлиентWS.ВыполнитьСКД(СтруктураПараметров_Сериал);
    
    ТабдДок = ОбщегоНазначения.ЗначениеИзСтрокиXML(ТабДокСериализованный);
    
    ТабдДок = ТабдДок.Получить();
        
    Возврат ТабдДок;
    
КонецФункции


А вот функция веб-сервиса, которая выполняет отчет по веб-сервису:

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

А вот ошибка, которая возникает, когда я нажимаю на поле для его расшифровке в отчете, который выполнился:
{ОбщийМодуль.ТиповыеОтчеты.Модуль(975)}: Поле объекта не обнаружено (Поле)
            ДотупноеПоле = ПолучитьДоступноеПоле(Новый ПолеКомпоновкиДанных(МассивПолейРасшифровкиСРесурсами[0].Поле), ОтчетОбъект.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора);


Сама ошибка меня ясна - МассивПолейРасшифровкиСРесурсами[0] содержит свойства
Свойство    Значение    Тип
МассивПолейРасшифровкиСРесурсами[0]    ЭлементОтбораКомпоновкиДанных    ЭлементОтбораКомпоновкиДанных
ВидСравнения    Равно    ВидСравненияКомпоновкиДанных
ИдентификаторПользовательскойНастройки    ""    Строка
Использование    Истина    Булево
ЛевоеЗначение    Подразделение    ПолеКомпоновкиДанных
ПравоеЗначение    МОЕ_ПОДРАЗДЕЛЕНИЕ    СправочникСсылка.Подразделения
Представление    ""    Строка
ПредставлениеПользовательскойНастройки    ""    Строка
Применение    Обычное    ТипПримененияОтбораКомпоновкиДанных
РежимОтображения    Быстрый доступ    РежимОтображенияЭлементаНастройкиКомпоновкиДанных
Родитель        Неопределено

А свойства "ПОЛЕ" нет.

А вот откуда это свойство "поле" должно быть - я не понимаю. Как работает СКД тоже не сильно понимаю (не совсем 0, но особенностей не знаю).
Может, пожалуйста, у кого-то будет идея? Не понимаю как сделать так, чтобы расшифровка работала
1 breezee
 
22.01.21
18:57
Отвечаю на вопрос который может возникнуть - "плодю" темы, потому что первая тема была про отчет на построителе, эта тема про отчет на СКД. Считаю что это разные темы.
2 breezee
 
22.01.21
22:20
up
3 hhhh
 
23.01.21
13:42
МассивПолейРасшифровкиСРесурсами[0] - поле не того типа, что тут думать. Или может вообще неопределено. Вставьте туда проверку на неопределено. А лучше отладчиком глянуть тип этого поля.
4 breezee
 
25.01.21
18:29
Разобрался как побороть 1 отчет
Надо дописать
ДанныеРасшифровки.Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
Но ломается другой отчет. Почему это происходит я не разобрался. Как починить я не разобрался. Если у кого есть пример буду безмерно благодарен. Задача оказалась сложнее чем я думал(