Имя: Пароль:
1C
1С v8
Выгрузка и сохранение отчета СКД в серверном модуле
0 faso
 
01.11.13
12:08
Коллеги, нужен совет. Цель - выгрузить тяжелый отчет на сервере и сохранить в mxl, во избежание проблем с нехваткой памяти при формировании и сохранении на клиенте.
1 faso
 
01.11.13
16:14
[code]
// Записать массив в строку XML
Функция МассивВСтрокуXML(Массив) Экспорт
    
    // Создадим объект для записи XML

    ЗаписьXML = Новый ЗаписьXML;
    
    // Укажем необходимость вывода в строку

    ЗаписьXML.УстановитьСтроку();
    
    // Запишем начальный элемент массива

    ЗаписьXML.ЗаписатьНачалоЭлемента("array");
    
    // Переберем элементы массива

    Для Каждого Элемент Из Массив Цикл
        
        // Выведем элемент массива

        СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Элемент);
        
    КонецЦикла;
    
    // Запишем конечный элемент массива

    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    // Закончим вывод

    Возврат ЗаписьXML.Закрыть();

КонецФункции

// Загрузить массив из строки XML
Функция МассивИзСтрокиXML(Строка) Экспорт
    
    // Создадим объект для чтения значения

    ЧтениеXML = Новый ЧтениеXML;
    
    // Установим строку, из которой будем читать значние

    ЧтениеXML.УстановитьСтроку(Строка);
    
    // Создадим массив, в который будем считывать

    Массив = Новый Массив;
    
    // Считаем элемент начала массива

    ЧтениеXML.Прочитать();
    
    // Считаем начало перовго элемента

    ЧтениеXML.Прочитать();
    
    // Пока не прочитан конечный элемент

    Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл
        
        // Прочитаем значение

        Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
        
        // Поместим считанное значение в массив

        Массив.Добавить(Значение);
        
    КонецЦикла;
        
    // Чтение закончено - вернем считанный массив

    Возврат Массив;
    
КонецФункции

// Функция выполняет компоновку во внешнем соединении.
// Возвращается результат компоновки.
  Функция ПолучитьСериализованныйРезультатПростогоОтчетаСКД(ИмяОтчета, Параметры) Экспорт
    
    Отчет = Отчеты[ИмяОтчета].Создать();
    
    Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ЭтоПолучениеСериализованногоРезультата");
    
    Для Каждого Параметр Из Параметры Цикл
        ПараметрыДанных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
        ПараметрДанных = ПараметрыДанных.Найти(Параметр.Ключ);
        ПользовательскийПараметрДанных = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
        ПользовательскийПараметрДанных.Значение = МассивИзСтрокиXML(Параметр.Значение);
    КонецЦикла;
    
    ТаблицаРезультата = Новый ТабличныйДокумент;
    Отчет.СкомпоноватьРезультат(ТаблицаРезультата);
    
    
    ТаблицаРезультата.Записать("\\server\share\Таблица2.mxl");

    Возврат Истина;
    
КонецФункции


[/code]
2 faso
 
01.11.13
16:14
Ответ
3 РазДва
 
01.11.13
16:19
(0) Передавай в фоновое задание, все новые типовые так делают, пользуйся "бест практис".
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.