![]() |
|
v8: Сериализовать ТЗ в УдобоваримыЙ текст быстро. | ☑ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Живой Ископаемый
26.07.12
✎
20:40
|
http://screencast.com/t/WBUfDhiSFEo
Или не ТЗ, или например через СКД, но макет будет не табличным документом, а текстовым, можно? Самое обидное, что в СП написано что ТЗ сериализуется в ХМЛ. Но например Такой код: Сообщить(XMLСтрока(тзБуф)); сообщает Код обработки результата: Строка 3: Ошибка при вызове метода контекста (XMLСтрока): Ошибка преобразования данных XML |
||||||||||||||||
1
acsent
26.07.12
✎
20:42
|
сериализация в хмл делается не так
|
||||||||||||||||
2
Ksandr
26.07.12
✎
20:43
|
СериализаторXDTO не предлагать?
|
||||||||||||||||
3
H A D G E H O G s
26.07.12
✎
20:53
|
Напиши свой, бинарный.
|
||||||||||||||||
4
Живой Ископаемый
26.07.12
✎
20:57
|
2(2) Предлагать.. Но если можно на примере.
2(1) а как 2(3) нет, этого не надо |
||||||||||||||||
5
Живой Ископаемый
26.07.12
✎
20:59
|
Вообще, например макетом СКД может служить ТекстовыйДокумент? а ПостроителяОтчетов?
|
||||||||||||||||
6
Живой Ископаемый
26.07.12
✎
21:06
|
в общем, если есть чо, то кидайте, хочу пробовать...
|
||||||||||||||||
7
H A D G E H O G s
26.07.12
✎
21:15
|
|||||||||||||||||
8
KAO111
26.07.12
✎
21:15
|
В типовых есть модуль ТиповыеОтчеты. В нем функция
Функция СериализоватьОбъектXDTO(Объект) Экспорт ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Объект); СтрокаXML = ЗаписьXML.Закрыть(); Возврат СтрокаXML; КонецФункции ТЗ нормально серилизуется |
||||||||||||||||
9
Живой Ископаемый
26.07.12
✎
21:16
|
2(8) И что на выходе?
|
||||||||||||||||
10
KAO111
26.07.12
✎
21:17
|
ТЗ = новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Кол1"); ТЗ.Колонки.Добавить("Кол2"); Стр = ТЗ.Добавить(); Стр.Кол1 = 1; Стр.Кол2 = "1"; Стр = ТЗ.Добавить(); Стр.Кол1 = 2; Стр.Кол2 = "2"; Сообщить( ТиповыеОтчеты.СериализоватьОбъектXDTO(ТЗ) ); Выдает <ValueTable xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <column> <Name xsi:type="xs:string">Кол1</Name> <ValueType/> </column> <column> <Name xsi:type="xs:string">Кол2</Name> <ValueType/> </column> <row> <Value xsi:type="xs:decimal">1</Value> <Value xsi:type="xs:string">1</Value> </row> <row> <Value xsi:type="xs:decimal">2</Value> <Value xsi:type="xs:string">2</Value> </row> </ValueTable> |
||||||||||||||||
11
KAO111
26.07.12
✎
21:18
|
если типы описать будет с типами
|
||||||||||||||||
12
Живой Ископаемый
26.07.12
✎
22:22
|
2(8,10) клево... сенкс...
А вот так чтобы на как на картинке в (0) - не? можеткаким-нить читерским, нештатным образом? |
||||||||||||||||
13
KAO111
26.07.12
✎
23:25
|
ну если только через XSLT, если 1С использует движок Microsoft работать будет очень быстро
ТЗ = новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Кол1"); ТЗ.Колонки.Добавить("Кол2"); ТЗ.Колонки.Добавить("Кол3"); Стр = ТЗ.Добавить(); Стр.Кол1 = 1; Стр.Кол2 = "1"; Стр.Кол3 = ТекущаяДата(); Стр = ТЗ.Добавить(); Стр.Кол1 = 2; Стр.Кол2 = "2"; Стр.Кол3 = ТекущаяДата(); СтрXML = ТиповыеОтчеты.СериализоватьОбъектXDTO(ТЗ); //Сообщить( СтрXML ); СтрокаXSL = " |<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:a='http://v8.1c.ru/8.1/data/core'> |<xsl:output method='text' indent='yes'/> |<xsl:template match='/' xml:space='preserve'> |<xsl:for-each select='a:ValueTable/a:column'><xsl:value-of select='a:Name'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |<xsl:for-each select='a:ValueTable/a:row'><xsl:for-each select='a:Value'><xsl:value-of select='.'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |</xsl:for-each> |</xsl:template> |</xsl:stylesheet>"; Преобразование = Новый ПреобразованиеXSL; Преобразование.ЗагрузитьИзСтроки(СтрокаXSL); Результат = Преобразование.ПреобразоватьИзСтроки(СтрXML); Сообщить( Результат ); |
||||||||||||||||
14
KAO111
26.07.12
✎
23:26
|
возвращает
Кол1,Кол2,Кол3 1,1,2012-07-27T01:27:20 2,2,2012-07-27T01:27:20 |
||||||||||||||||
15
Живой Ископаемый
27.07.12
✎
00:16
|
2(14) а у меня нет :(
тзБуф = мРезультатЗапроса.Выгрузить(); //СериализацияТЗ = ТиповыеОтчеты.СериализоватьОбъектXDTO(тзБуф); //Сообщить(СериализацияТЗ); ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, тзБуф); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить( СтрокаXML ); СтрокаXSL = " |<xsl:stylesheet version='1.0' xmlns:xsl='""http://www.w3.org/1999/XSL/Transform"" target=""_blank"" ref=""nofollow"" class=""extralink"">http://www.w3.org/1999/XSL/Transform' xmlns:a='http://v8.1c.ru/8.1/data/core'>; |<xsl:output method='text' indent='yes'/> |<xsl:template match='/' xml:space='preserve'> |<xsl:for-each select='a:ValueTable/a:column'><xsl:value-of select='a:Name'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |<xsl:for-each select='a:ValueTable/a:row'><xsl:for-each select='a:Value'><xsl:value-of select='.'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |</xsl:for-each> |</xsl:template> |</xsl:stylesheet>"; Преобразование = Новый ПреобразованиеXSL; Преобразование.ЗагрузитьИзСтроки(СтрокаXSL); Результат = Преобразование.ПреобразоватьИзСтроки(СтрокаXML); Сообщить( Результат ); ============ Возвращает: ========== <ValueTable xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <column> <Name xsi:type="xs:string">Field1</Name> <ValueType> <Type>Null</Type> <Type>xs:decimal</Type> <NumberQualifiers> <Digits>0</Digits> <FractionDigits>0</FractionDigits> <AllowedSign>Any</AllowedSign> </NumberQualifiers> </ValueType> <Title>Field1</Title> <Width xsi:type="xs:decimal">32</Width> </column> <column> <Name xsi:type="xs:string">Field2</Name> <ValueType> <Type>xs:string</Type> <Type>Null</Type> <StringQualifiers> <Length>6</Length> <AllowedLength>Variable</AllowedLength> </StringQualifiers> </ValueType> <Title>Field2</Title> <Width xsi:type="xs:decimal">6</Width> </column> <column> <Name xsi:type="xs:string">Field3</Name> <ValueType> <Type>xs:dateTime</Type> <Type>Null</Type> <DateQualifiers> <DateFractions>DateTime</DateFractions> </DateQualifiers> </ValueType> <Title>Field3</Title> <Width xsi:type="xs:decimal">19</Width> </column> <row> <Value xsi:type="xs:decimal">2</Value> <Value xsi:type="xs:string">Second</Value> <Value xsi:type="xs:dateTime">2012-07-26T00:00:00</Value> </row> <row> <Value xsi:type="xs:decimal">1</Value> <Value xsi:type="xs:string">First</Value> <Value xsi:type="xs:dateTime">2012-07-26T00:00:00</Value> </row> </ValueTable> <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl='"http://www.w3.org/1999/XSL/Transform" target="_blank" ref="nofollow" class="extralink">http://www.w3.org/1999/XSL/Transform' xmlns:a="http://v8.1c.ru/8.1/data/core">; <xsl:output method="text" indent="yes"/><xsl:template match="/" xml:space="preserve"> <xsl:for-each select="a:ValueTable/a:column"><xsl:value-of select="a:Name"/><xsl:if test="position()!=last()">,</xsl:if></xsl:for-each> <xsl:for-each select="a:ValueTable/a:row"><xsl:for-each select="a:Value"><xsl:value-of select="."/><xsl:if test="position()!=last()">,</xsl:if></xsl:for-each> </xsl:for-each> </xsl:template></xsl:stylesheet> ===== а вот если бы именно как в (14) - это было бы здорово! |
||||||||||||||||
16
Живой Ископаемый
27.07.12
✎
00:39
|
Блин, вообще круто... только жалко что-то не работает...
В любом случае спасибо огромное! |
||||||||||||||||
17
KAO111
27.07.12
✎
07:53
|
Там лишние кавычки поставил форум в описании XSL, достаточно версию указать. Но XSL работает, можно попробовать в каком-нибудь XML редакторе, тогда ошибки покажет. Скорость преобразования конечно очень хорошая.
СтрокаXSL = " |<xsl:stylesheet version='1.0'> |<xsl:output method='text' indent='yes'/> |<xsl:template match='/' xml:space='preserve'> |<xsl:for-each select='a:ValueTable/a:column'><xsl:value-of select='a:Name'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |<xsl:for-each select='a:ValueTable/a:row'><xsl:for-each select='a:Value'><xsl:value-of select='.'/><xsl:if test='position()!=last()'>,</xsl:if></xsl:for-each> |</xsl:for-each> |</xsl:template> |</xsl:stylesheet>"; |
||||||||||||||||
18
Живой Ископаемый
27.07.12
✎
08:04
|
не, все равно не получается.. Но я добьюсь, сенкс.. Ты мне просто глаза открыл. Я уже накачал книжек по XSL| XLT
буду читать и пробовать |
||||||||||||||||
19
KAO111
27.07.12
✎
08:26
|
Я с давних времен времен использую редактор Stylus Studio.
Там визуально все выбирается - и вот это преобразование точно работает |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |