Текущее время: Ср, июн 25 2025, 13:54

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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