Вход | Регистрация
 

УПП Сериализация отчета на СКД. Расшифровка

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

Список тем форума
 
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.