Текущее время: Чт, июн 26 2025, 04:10

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Кодировка при создании XML и странности CONCATENATE
СообщениеДобавлено: Пн, окт 01 2007, 10:22 
Ассистент
Ассистент

Зарегистрирован:
Ср, июл 11 2007, 17:06
Сообщения: 47
Добрый день всем.
Мне подсказали, что можно легко выгружать данные в Exel, создавая XML-файлы. Я сохранил книгу Exel как XML-таблицу, скопировал содержимое через тестовый редактор в программу и попытался через
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = TXT
TABLES
DATA_TAB = i_doctable.
создать на диске аналогичный исходному файл. Но он не открывается т.к. изменилась кодировка для кириллических символов.
И ещё весь текст я собирал в
DATA : BEGIN OF i_doctable_rep_xml OCCURS 0 ,
line(2048) TYPE C ,
END OF i_doctable_rep_xml.
с помощью CONCATENATE, а он каким-то образом набросал в результирующие строки одинарных кавычек. Я их потом в цикле отлавливаю.
Подскажите как задать нужную кодировку и бороться со страннстями CONCATENATE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка при создании XML и странности CONCATENATE
СообщениеДобавлено: Пн, окт 01 2007, 10:31 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
gallek написал(а):
Добрый день всем.
Мне подсказали, что можно легко выгружать данные в Exel, создавая XML-файлы. Я сохранил книгу Exel как XML-таблицу, скопировал содержимое через тестовый редактор в программу и попытался через
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = TXT
TABLES
DATA_TAB = i_doctable.
создать на диске аналогичный исходному файл. Но он не открывается т.к. изменилась кодировка для кириллических символов.
И ещё весь текст я собирал в
DATA : BEGIN OF i_doctable_rep_xml OCCURS 0 ,
line(2048) TYPE C ,
END OF i_doctable_rep_xml.
с помощью CONCATENATE, а он каким-то образом набросал в результирующие строки одинарных кавычек. Я их потом в цикле отлавливаю.
Подскажите как задать нужную кодировку и
воспользоваться поиском - кодировки уже неоднократно обсуждались, в том числе и для GUI_DOWNLOAD.
Цитата:
бороться со страннстями CONCATENATE.

Со странностями бороться не надо, т.к. их нет. Изучите и исправьте собственный код и тогда не будет лишних кавычек.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 01 2007, 11:16 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Если хотите выгружать - то и формируйте в программе xml-ку удобного вида(то есть только с содержательными данными) и потом вызывайте xlt преобразование. imho concatenate не реально.
Код на абапе не привожу - в хелпе подробно описано что и как делать.
Пример выгрузки прайслиста - в коде формируется xml дерево произвольной вложенности, которое потом экспортится в эксел.

Причем работает в фоне на юниксовом сервере ;)
Code:
Примерный вид - пишу по памяти
<header>
<created>1.10.2007<created>
<name>Boger<name>
</header>
<categories name = "Нормальный">
  <category>
   <node name="Принтеры">
      <node name="HP">
         <material> ...</material>
         ....
      </node>
      ...
      </node name="Samsung">
   </node>
  </category>
  <category name = "Брак">
    ...
  </category>
</categories>

Code:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sapxsl="http://www.sap.com/sapxsl" version="1.0">

  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>
 
  <xsl:template match="catalog">
    <?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html=
"http://www.w3.org/TR/REC-html40">
      <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
        <Author>
          <xsl:value-of select="//header/name"/>
        </Author>
        <LastAuthor>
          <xsl:value-of select="//header/name"/>
        </LastAuthor>
        <Created>2005-09-16T09:38:52Z</Created>
        <LastSaved>2005-11-29T15:03:40Z</LastSaved>
        <Company>Home</Company>
        <Version>11.6360</Version>
      </DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
        <Colors>
          <Color>
            <Index>39</Index>
            <RGB>#E3E3E3</RGB>
          </Color>
        </Colors>
      </OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
        <WindowHeight>6840</WindowHeight>
        <WindowWidth>13170</WindowWidth>
        <WindowTopX>0</WindowTopX>
        <WindowTopY>0</WindowTopY>
        <TabRatio>601</TabRatio>
   <ProtectStructure>False</ProtectStructure>
        <ProtectWindows>False</ProtectWindows>
      </ExcelWorkbook>
      <Styles>
        <Style ss:ID="Default" ss:Name="Normal">
          <Alignment ss:Vertical="Bottom"/>
          <Borders/>
<Font x:CharSet="204"/>
          <Interior/>
          <NumberFormat/>
          <Protection/>
        </Style>
        <Style ss:ID="s23">
          <Alignment ss:Horizontal="Center" ss:Vertical="Bottom" ss:WrapText="1"/>
          <Font ss:Bold="1"
x:CharSet="204" x:Family="Swiss"/>
        </Style>
      </Styles>
      <xsl:apply-templates select="categories"/>
    </Workbook>
  </xsl:template>
  <xsl:template match="categories">
    <xsl:apply-templates select="category"/>
  </xsl:template>
 
<xsl:template match="category">
    <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" ss:Name="{@name}">
      <Table
ss:ExpandedColumnCount="100" ss:ExpandedRowCount="{2+count(descendant-or-self::line|descendant-or-self::node)}" x:FullColumns="1" x:FullRows="1">
        <Column ss:AutoFitWidth="0" ss:Width="51"/>
        <Column ss:AutoFitWidth="0" ss:Width="41.25"/>
       <Column ss:AutoFitWidth="0" ss:Width="55.5"/>
        <Column ss:AutoFitWidth="0" ss:Index="5" ss:Width="62.25"/>
        <Column ss:AutoFitWidth="0" ss:Width="191.25"/>
        <Column ss:AutoFitWidth="0" ss:Width="130.5"/>
        <Column ss:AutoFitWidth="0" ss:Width="56.25"/>
        <Column ss:AutoFitWidth="0" ss:Width="40.5"/>
        <Column ss:AutoFitWidth="0" ss:Width="51.75"/>
        <Column ss:AutoFitWidth="0" ss:Width="66.75"/>

        <Row>
          <Cell>
            <Data ss:Type="String">Дата выгрузки:
            </Data>
          </Cell>
          <Cell>
            <Data ss:Type="String">
              <xsl:value-of select="//header/date"/>
            </Data>
          </Cell>
          <Cell>
            <Data ss:Type="String">
              <xsl:value-of select="//header/time"/>
            </Data>
          </Cell>

        </Row>
        <Row ss:Height="38.25" ss:StyleID="s23">
          <Cell ss:Index="5">
            <Data ss:Type="String">Код материала</Data>
          </Cell>
          <Cell>
            <Data ss:Type="String">Описание</Data>
          </Cell>
          <Cell>
            <Data ss:Type="String">P/N</Data>
          </Cell>
           ....
        </Row>
        <xsl:apply-templates select="node"/>
      </Table>
      <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
        <Selected/>
        <ProtectObjects>False</ProtectObjects>
        <ProtectScenarios>False</ProtectScenarios>
      </WorksheetOptions>
    </Worksheet>

  </xsl:template>
  <xsl:template match="node">
      <xsl:apply-templates select="node"/>
      <xsl:apply-templates select="data"/>
  </xsl:template>

  <xsl:template match="data">
    <xsl:for-each select="material">
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
        <Cell ss:Index="5">
          <Data ss:Type="Number">
            <xsl:value-of select="MATNR"/>
          </Data>
        </Cell>
        ....
        <Cell>
          <Data ss:Type="Number">
            <xsl:value-of select="STOCKRF"/>
          </Data>
        </Cell>
        <Cell>
          <Data ss:Type="Number">
            <xsl:value-of select="STOCKRF_FREE"/>
          </Data>
        </Cell>
      </Row>
    </xsl:for-each>
  </xsl:template>
</xsl:transform>

PS для лучшей читаемости xlt обрезано вручную, так что валидность не гарантирую.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB