Имя: Пароль:
1C
1С v8
Не могу понять - "Данный объект может быть сериализован в/из XML."
0 sergei123654
 
24.11.11
07:32
Доброго времени суток.

Путаюсь добавить/удалить в тело макета компоновки данных макет.
Добавлять/удалять в тело макета комновки нужно свойство "Макет"
В СП пишут что "Макет" - Сервер, толстый клиент, внешнее соединение.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data-composition-system/composition-template}. Имя типа XDTO: DataCompositionPartTemplate

Но как с этим работать? Есть ли у вас примеры работы с такими объектами? Подскажите кто сталкивался с подобными задачами.
1 sergei123654
 
24.11.11
08:28
ап
2 andrewks
 
24.11.11
08:35
что именно тебе не понятно? что такое сериализация? или как её сделать?
3 aleks-id
 
24.11.11
08:36
(2) видимо что с ней потом делать
4 sergei123654
 
24.11.11
08:40
(2) непонимаю для чего она...
Это надо мой добавляемый макет как то в XML сохранить а потом от туда подгружать его? в xml вообще чайник я..
5 sergei123654
 
24.11.11
08:41
(2) или как её сделать )
6 sergei123654
 
24.11.11
08:58
пишу так:
   МакетКомпановки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровкиКомпоновки);


   СвойМакет = МакетКомпановки.Макеты.Добавить();
   СвойМакет.Имя = "МакетОтбора";
   СвойМакет.Макет  = Новый МакетОбластиКомпоновкиДанных;
   МакетОбластиСвойМакет = СвойМакет.Макет.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
   ЯчейкиМакетОбластиСвойМакет = МакетОбластиСвойМакет.Ячейки.Добавить();

   ЭлементЯчейкиМакетОбластиСвойМакет = ЯчейкиМакетОбластиСвойМакет.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
   ЭлементЯчейкиМакетОбластиСвойМакет.Значение = "ЖЖЖЖ";

   //МакетКомпановки.Тело.Очистить(); - эта строка отрабатывает

   //ДобавлениеСвойМакетВТелоМакета = МакетКомпановки.Тело.Добавить(Тип("МакетОбластиМакетаКомпоновкиДанных")); а вот сдесь вот засада полная, совсем не смекаю как его черех XML закикинуть в тело.
7 sergei123654
 
24.11.11
09:26
Кто нибудь знает как работать с МакетОбластиМакетаКомпоновкиДанных?
8 sergei123654
 
24.11.11
10:11
Вверх!
9 andrewks
 
24.11.11
10:20
ничо не пойму. ты работаешь в пределах одной базы - наюх тебе через XML? или мантра такая?
10 sergei123654
 
24.11.11
10:30
(9) мне нужно в тело макета добавить свой макет.

при формировании отчета СКД:

..........................................
   МакетКомпановки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровкиКомпоновки);
   МакетКомпановки.Тело.Добавить(???????????????);
................................

СП говорит что вместо ??????????????? нужно вставить МакетОбластиМакетаКомпоновкиДанных

так же СП говорит что

МакетОбластиМакетаКомпоновкиДанных (DataCompositionTemplateAreaTemplate)
Свойства:

Макет (Template)

Описание:

Макет макета компоновки данных.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data-composition-system/composition-template}. Имя типа XDTO: DataCompositionPartTemplate

а вот как создать этот  МакетОбластиМакетаКомпоновкиДанных???
11 QLgKR
 
24.11.11
14:13
Получаешь копию с помощью функции все ок

Функция ПолучитьКопиюОписанияМакета(ОписаниеМакета, ФормаЗаписи = Неопределено) Экспорт
   
   Если ФормаЗаписи = Неопределено Тогда
       ФормаЗаписи = "{http://v8.1c.ru/8.1/data-composition-system/composition-template}";
   КонецЕсли;
   
   ЗаписьXML = Новый ЗаписьXML();
   ЗаписьXML.УстановитьСтроку();
   СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОписаниеМакета, "item", ФормаЗаписи);
   СтрокаXML = ЗаписьXML.Закрыть();
   
   ЧтениеXML = Новый ЧтениеXML();
   ЧтениеXML.УстановитьСтроку(СтрокаXML);
   
   Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML, ТипЗнч(ОписаниеМакета));
   
КонецФункции
12 sergei123654
 
25.11.11
07:46
(11) круто! Спасибо.
Только вот не работает что то..
........................................................
   СвойМакет = МакетКомпановки.Макеты.Добавить();
   СвойМакет.Имя = "МакетОтбора";
   СвойМакет.Макет  = Новый МакетОбластиКомпоновкиДанных;
   МакетОбластиСвойМакет = СвойМакет.Макет.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
   ЯчейкиМакетОбластиСвойМакет = МакетОбластиСвойМакет.Ячейки.Добавить();

   ЭлементЯчейкиМакетОбластиСвойМакет = ЯчейкиМакетОбластиСвойМакет.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
   ЭлементЯчейкиМакетОбластиСвойМакет.Значение = "ЖЖЖЖ";
   
МакетКомпановки.Тело.Добавить(ПолучитьКопиюОписанияМакета(СвойМакет, Неопределено));    
........................................................

&НаСервере
Функция ПолучитьКопиюОписанияМакета(ОписаниеМакета, ФормаЗаписи = Неопределено) Экспорт
   
   Если ФормаЗаписи = Неопределено Тогда
       ФормаЗаписи = "{http://v8.1c.ru/8.1/data-composition-system/composition-template}";
   КонецЕсли;
   
   ЗаписьXML = Новый ЗаписьXML();
   ЗаписьXML.УстановитьСтроку();
   СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОписаниеМакета, "item", ФормаЗаписи);
   СтрокаXML = ЗаписьXML.Закрыть();
   
   ЧтениеXML = Новый ЧтениеXML();
   ЧтениеXML.УстановитьСтроку(СтрокаXML);
   
   Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML, ТипЗнч(ОписаниеМакета));
   
КонецФункции


выдает ошибку.
{Отчет.ОборотноСальдоваяВедомость.Форма.ФормаОтчета.Форма(601)}: Ошибка при вызове метода контекста (ПрочитатьXML)
   Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML, ТипЗнч(ОписаниеМакета));
по причине:
Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.

непонимаю как формируется - ФормаЗаписи.
13 sergei123654
 
25.11.11
07:47
+(12)в моем коде вместо:
 Если ФормаЗаписи = Неопределено Тогда
       ФормаЗаписи = "{"http://v8.1c.ru/8.1/data-composition-system/composition-template}" target="_blank" ref="nofollow" class="extralink">http://v8.1c.ru/8.1/data-composition-system/composition-template}";

   КонецЕсли;

написано:
   Если ФормаЗаписи = Неопределено Тогда
       ФормаЗаписи = "{http://v8.1c.ru/8.1/data-composition-system/composition-template}";
   КонецЕсли;
14 sergei123654
 
25.11.11
07:47
+(13) то есть
   Если ФормаЗаписи = Неопределено Тогда
       ФормаЗаписи = "{http://v8.1c.ru/8.1/data-composition-system/composition-template}";
   КонецЕсли;
15 sergei123654
 
25.11.11
07:49
0_о

а че то теперь совсем не херва не понятно. почему копируя сюда строку
///  "{http://v8.1c.ru/8.1/data-composition-system/composition-template}";

она превращается в
//
"{"http://v8.1c.ru/8.1/data-composition-system/composition-template}" target="_blank" ref="nofollow" class="extralink">http://v8.1c.ru/8.1/data-composition-system/composition-template}";
16 QLgKR
 
25.11.11
09:37
Вообще должно работать как-то так

МакетОбластиКомпоновки = Новый МакетОбластиКомпоновкиДанных;
//заполнение свойств
...

ОписаниеМакета = МакетКомпоновки.Макеты.Добавить();
ОписаниеМакета.Имя = <Указать свое имя, например Макет333>;
ОписаниеМакета.Макет = МакетОбластиКомпоновки;


МакетОбласти = МакетКомпоновки.Тело.Добавить(Тип("МакетОбластиМакетаКомпоновкиДанных"));
МакетОбласти.Макет = <Указать свое имя, например Макет333>;
17 QLgKR
 
25.11.11
09:39
+ а сериализацию можно использовать для копирования существующих макетов, например, если новый макет это копия существующего с незначительными изменениями
18 sergei123654
 
25.11.11
13:07
(16)(17) большое спасибо за помощь.
как в (16) не работает. Решил свою задачу по другому.
СПАСИБО