Универсальный просмотр XML в поле HTML-документа

28.09.16

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Произвольный XML-документ отображается в ПолеHTMLДокумента через универсальное XSLT-преобразование с возможностью свертывания уровней, аналогично тому, как делает это по умолчанию интернет-браузер, но без использования файловых операций и вызова внешних объектов

Скачать файлы

Наименование Файл Версия Размер
ОтображениеXML.epf
.epf 16,63Kb
86
.epf 16,63Kb 86 Скачать

Для тех, кто имеет дело с обменами данных и взаимодействием с интернет-приложениями, часто возникает необходимость открыть на просмотр в 1С XML с незнакомой структурой. Что делать?

Разнообразные предшественники

пробовали заниматься автоматическим анализом структуры XML, создавали более или менее универсальные утилиты программного разбора, используя при этом разнообразные "нагруженные" объекты 1С типа ТаблицаЗначений, ДеревоЗначений, либо в худшем (для универсальности и переносимости) случае подключали внешние компоненты.

Но неужели нет простых средств, с минимальными затратами и желательно без программирования?

Конечно, можно поместить текст XML в Поле текстового документа. Но если XML получен из источника, который формировал его автоматически, то скорее всего текст будет неотформатирован и плохо читаем, например:

неформат XML

Заметим, что форматирование XML задача несложная. Ее стандартно решает объект ЗаписьXML (свойство Отступ либо объект ПараметрыЗаписиXML), примерно так:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ИсходныйТекстXML);

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Истина, Истина));//здась как раз и содержится явное указание 1С отформатировать XML при записи

ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ИсходныйТекстXML= ЗаписьXML.Закрыть();

В результате получаем читаемый документ:

формат XML

 Но так отобразить может только в поле текстового документа (причем без подсветки синтаксиса и без свертывания уровней).

Но при работе с интернет задача же часто стоит отображать XML именно в поле HTML-документа. Как?

Если в ПолеHTMLДокумента поместить некий произвольный XML, то 1С ничего не отобразит.

Не поможет и попытка предварительного чтения XML объектами 1С, к примеру:

 ЧтениеXML = Новый ЧтениеXML; 
 ЧтениеXML.УстановитьСтроку(OriginXML);
 ПостроительDOM = Новый ПостроительDOM;
 ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
 ЗаписьHTML = Новый ЗаписьHTML;
 ЗаписьHTML.УстановитьСтроку();
 ЗаписьDOM = Новый ЗаписьDOM;
 ЗаписьDOM.Записать(ДокументDOM, ЗаписьHTML); 
 XML2HTML = ЗаписьHTML.Закрыть();

Однако известно, что в отличие от ПолеHTMLДокумента из 1С, интернет-броузеры умеют отображать текст произвольых XML-документов. Примерно так:

формат как в IE

Оказывается, делают они это с помощью встроенных XSL-таблиц. Для IE в Windows такая таблица расположена на локальном компьютере по адресу: res://msxml3.dll/defaultss.xsl   ( см. например http://www.script-coding.com/XSL.html или http://farinadesign.narod.ru/XMLtech/Lectures/DSO.html )

Поэтому задачу полностью решает использование XSL-преобразования (идея взята из //infostart.ru/public/184288/ ):

	Преобразование = Новый ПреобразованиеXSL;
	Преобразование.ЗагрузитьИзСтроки(ТекстПреобразованияXSL);
	XML2HTML = Преобразование.ПреобразоватьИзСтроки(ИсходныйТекстXML);

Дополнительного программирования в 1С не требуется! Требуется только получитьподходящий default.xsl файл. Причем, естественно, варианты таких файлов могут отличаться. Предлагаю использовать следующий, полученный из предыдущих версий IE, исходник xsl-преобразования:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output indent="no" method="html"/>
 <xsl:template match="/">
  <HTML>
   <HEAD>
    <SCRIPT>
     <xsl:comment><![CDATA[
                  function f(e){
                     if (e.className=="ci") {
                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");
                     }
                     if (e.className=="di") {
                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");
                     } e.id="";
                  }
                  function fix(e,cl){
                    e.className=cl;
                    e.style.display="block";
                    j=e.parentElement.children(0);
                    j.className="c";
                    k=j.children(0);
                    k.style.visibility="visible";
                    k.href="#";
                  }
                  function ch(e) {
                    mark=e.children(0).children(0);
                    if (mark.innerText=="+") {
                      mark.innerText="-";
                      for (var i=1;i<e.children.length;i++) {
                        e.children(i).style.display="block";
                      }
                    }
                    else if (mark.innerText=="-") {
                      mark.innerText="+";
                      for (var i=1;i<e.children.length;i++) {
                        e.children(i).style.display="none";
                      }
                    }
                  }
                  function ch2(e) {
                    mark=e.children(0).children(0);
                    contents=e.children(1);
                    if (mark.innerText=="+") {
                      mark.innerText="-";
                      if (contents.className=="db"||contents.className=="cb") {
                        contents.style.display="block";
                      }
                      else {
                        contents.style.display="inline";
                      }
                    }
                    else if (mark.innerText=="-") {
                      mark.innerText="+";
                      contents.style.display="none";
                    }
                  }
                  function cl() {
                    e=window.event.srcElement;
                    if (e.className!="c") {
                      e=e.parentElement;
                      if (e.className!="c") {
                        return;
                      }
                    }
                    e=e.parentElement;
                    if (e.className=="e") {
                      ch(e);
                    }
                    if (e.className=="k") {
                      ch2(e);
                    }
                  }
                  function ex(){}
                  function h(){window.status=" ";}
                  document.onclick=cl;
              ]]></xsl:comment>
    </SCRIPT>
    <STYLE>
              BODY {font:x-small 'Verdana'; margin-right:1.5em}
                .c  {cursor:hand}
                .b  {color:red; font-family:'Courier New'; font-weight:bold;
                     text-decoration:none}
                .e  {margin-left:1em; text-indent:-1em; margin-right:1em}
                .k  {margin-left:1em; text-indent:-1em; margin-right:1em}
                .t  {color:#990000}
                .xt {color:#990099}
                .ns {color:red}
                .dt {color:green}
                .m  {color:blue}
                .tx {font-weight:bold}
                .db {text-indent:0px; margin-left:1em; margin-top:0px;
                     margin-bottom:0px;padding-left:.3em;
                     border-left:1px solid #CCCCCC; font:small Courier}
                .di {font:small Courier}
                .d  {color:blue}
                .pi {color:blue}
                .cb {text-indent:0px; margin-left:1em; margin-top:0px;
                     margin-bottom:0px;padding-left:.3em; font:small Courier;
                     color:#888888}
                .ci {font:small Courier; color:#888888}
                PRE {margin:0px; display:inline}
           </STYLE>
   </HEAD>
   <BODY class="st">
    <xsl:apply-templates/>
   </BODY>
  </HTML>
 </xsl:template>
 <xsl:template match="processing-instruction()">
  <DIV class="e">
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>&lt;?</xsl:text>
   </SPAN>
   <SPAN class="pi">
    <xsl:value-of select="name(.)"/>
    <xsl:value-of select="."/>
   </SPAN>
   <SPAN class="m">
    <xsl:text>?></xsl:text>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="processing-instruction('xml')">
  <DIV class="e">
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>&lt;?</xsl:text>
   </SPAN>
   <SPAN class="pi">
    <xsl:text>xml </xsl:text>
    <xsl:for-each select="@*">
     <xsl:value-of select="name(.)"/>
     <xsl:text>="</xsl:text>
     <xsl:value-of select="."/>
     <xsl:text>" </xsl:text>
    </xsl:for-each>
   </SPAN>
   <SPAN class="m">
    <xsl:text>?></xsl:text>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="@*">
  <SPAN>
   <xsl:attribute name="class"><xsl:if test="xsl:*/@*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
   <xsl:value-of select="name(.)"/>
  </SPAN>
  <SPAN class="m">="</SPAN>
  <B>
   <xsl:value-of select="."/>
  </B>
  <SPAN class="m">"</SPAN>
 </xsl:template>
 <xsl:template match="text()">
  <DIV class="e">
   <SPAN class="b"> </SPAN>
   <SPAN class="tx">
    <xsl:value-of select="."/>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="comment()">
  <DIV class="k">
   <SPAN>
    <A STYLE="visibility:hidden" class="b" false"
    <SPAN class="m">
     <xsl:text>&lt;!--</xsl:text>
    </SPAN>
   </SPAN>
   <SPAN class="ci" id="clean">
    <PRE>
     <xsl:value-of select="."/>
    </PRE>
   </SPAN>
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>--></xsl:text>
   </SPAN>
   <SCRIPT>f(clean);</SCRIPT>
  </DIV>
 </xsl:template>
 <xsl:template match="*">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em">
    <SPAN class="b">
     <xsl:call-template name="entity-ref">
      <xsl:with-param name="name">nbsp</xsl:with-param>
     </xsl:call-template>
    </SPAN>
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>/></xsl:text>
    </SPAN>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[node()]">
  <DIV class="e">
   <DIV class="c">
    <A class="b" href="#" false"
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
   <DIV>
    <xsl:apply-templates/>
    <DIV>
     <SPAN class="b">
      <xsl:call-template name="entity-ref">
       <xsl:with-param name="name">nbsp</xsl:with-param>
      </xsl:call-template>
     </SPAN>
     <SPAN class="m">
      <xsl:text>&lt;/</xsl:text>
     </SPAN>
     <SPAN>
      <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
      <xsl:value-of select="name(.)"/>
     </SPAN>
     <SPAN class="m">
      <xsl:text>></xsl:text>
     </SPAN>
    </DIV>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[text() and not (comment() or processing-instruction())]">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em">
    <SPAN class="b">
     <xsl:call-template name="entity-ref">
      <xsl:with-param name="name">nbsp</xsl:with-param>
     </xsl:call-template>
    </SPAN>
    <SPAN class="m">
     <xsl:text>&lt;</xsl:text>
    </SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
    <SPAN class="tx">
     <xsl:value-of select="."/>
    </SPAN>
    <SPAN class="m">&lt;/</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
    </SPAN>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[*]" priority="20">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em" class="c">
    <A class="b" href="#" false"
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
   <DIV>
    <xsl:apply-templates/>
    <DIV>
     <SPAN class="b">
      <xsl:call-template name="entity-ref">
       <xsl:with-param name="name">nbsp</xsl:with-param>
      </xsl:call-template>
     </SPAN>
     <SPAN class="m">
      <xsl:text>&lt;/</xsl:text>
     </SPAN>
     <SPAN>
      <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
      <xsl:value-of select="name(.)"/>
     </SPAN>
     <SPAN class="m">
      <xsl:text>></xsl:text>
     </SPAN>
    </DIV>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template name="entity-ref">
  <xsl:param name="name"/>
  <xsl:text disable-output-escaping="yes">&amp;</xsl:text>
  <xsl:value-of select="$name"/>
  <xsl:text>;</xsl:text>
 </xsl:template>
</xsl:stylesheet>

Так же можно попробовать поискать аналогичные default-схемы xsl-преобразований в Сhrome (chrome://global/content/xml/XMLPrettyPrint.xsl) и других броузерах

Желающие могут скачать пример обработки просмотра и форматирования произвольных XML-файлов (управляемые и обычные формы).

Ноо повторяю, что вся автоматизация отображения произволного XML сводится к двум строчкам текста 1С

Преобразование.ЗагрузитьИзСтроки(ТекстПреобразованияXSL);
XML2HTML = Преобразование.ПреобразоватьИзСтроки(ИсходныйТекстXML);

и использованию подходящей XSL-схемы, которую можно найти как в интернете, так и у себя на локальном компьютере.

XML XSL XSLT HTML

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134933    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68417    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34169    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46290    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20247    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67445    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150714    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. theshadowco 238 08.05.15 11:31 Сейчас в теме
(0) а такой вариант не подойдет?
	#Если НЕ ВебКлиент Тогда
		
		ВремФайл = ПолучитьИмяВременногоФайла("xml");
		ЗаписьXML = Новый ЗаписьXML;
		ЗаписьXML.ОткрытьФайл(ВремФайл);
		ЗаписьXML.ЗаписатьБезОбработки(ТекстСообщения);
		ЗаписьXML.Закрыть();
		
		ОткрытьФорму("ОбщаяФорма.ПросмотрHTML", Новый Структура("ДанныеHTML, Заголовок", ВремФайл, "Просмотр текста сообщения"), ЭтотОбъект);
		
	#КонецЕсли 


Показать

ПросмотрHTML - форма с реквизитом "ДанныеHTML" строкового типа и полем html на форме..
bprogs; ixijixi; +2 Ответить
2. tarassov 111 08.05.15 12:01 Сейчас в теме
(1) theshadowco,
нет. Это "масло масляное". Подали на вход текст XML в ЗаписьXML.ЗаписатьБезОбработки(ТекстСообщения) и с помощью ЗаписьXML.Закрыть() его же и записали. Ничего не изменилось. И не отобразилось
10. theshadowco 238 18.05.15 10:41 Сейчас в теме
(2) Отлично отображается, вы попробуйте :). Не первый год так работает, отображает любые XML.

Как работает у меня:
Есть регистр с реквизитом, содержащим текст XML. Иногда требуется посмотреть XML в более читабельном виде, чем просто строка. Для Этого на форме записи добавлена указанная в примере команда (точнее выдержка из команды), которая создает временный файл и показывает его в форме просмотре. В этой форме (управляемая) нет ничего интересного, кроме строкового реквизита, которому соответствует элемент формы с видом "Полле HTML документа"
Прикрепленные файлы:
11. tarassov 111 18.05.15 11:01 Сейчас в теме
(10) theshadowco,
А что в вашем примере скрыто под конструкцией "ОбщаяФорма.ПросмотрHTML" ?
Давайте вместе посмотрим, что там внутри в этой форме делается
12. tarassov 111 18.05.15 11:05 Сейчас в теме
(10) theshadowco,
В этой форме (управляемая) нет ничего интересного

Надо все-таки смотреть на устройство формы.
По виду снимка вывода можно предположить, что используется OLE-объект
Будет ли Ваша конструкция без переделок работать под Linux?
13. theshadowco 238 18.05.15 11:26 Сейчас в теме
(12) не используется ничего, только платформа.
Смотрите скрины. Проще некуда.
Прикрепленные файлы:
FilippSerg; +1 Ответить
14. tarassov 111 18.05.15 13:38 Сейчас в теме
(13) theshadowco,
Может быть тогда что-то дополнительное установлено в настройках операционной системы и ее интернет-броузерах?
15. theshadowco 238 18.05.15 13:43 Сейчас в теме
(14) да нет, все по дефолту.
16. tarassov 111 20.05.15 16:18 Сейчас в теме
(15) theshadowco,
Я наконец понял, что имелось в виду.
Этот пример действительно работает. Но если все делать через файлы (ЗаписьXML.ОткрытьФайл() вместо ЗаписьXML.УстановитьСтроку()) и полю HTMLДокумента соответственно передавать на вход имя файла на диске, а не текст документа.
Я же говорил о другом, пытался показывать принцип работы с текстом файла, т.е. строковые операции, без привлечения файловой системы
frkbvfnjh; binex; FilippSerg; +3 Ответить
3. gaglo 13.05.15 10:06 Сейчас в теме
В статье сразу написано, что
интернет-броузеры умеют отображать текст произвольных XML-документов

Это - по-моему - и есть
решение с минимальными затратами и желательно без программирования

Описанный в статье способ позволяет открыть XML-файл непосредственно в 1С.
Это его единственное преимущество перед открытием в браузере или есть еще достоинства, о коих я не догадался?
4. tarassov 111 13.05.15 10:48 Сейчас в теме
(3) gaglo, да, речь идет только о 1С
5. gaglo 14.05.15 10:12 Сейчас в теме
(4) Ясно. Тогда позволю себе отметить: в публикации infostart.ru/public/21664/ двухпальцовый reader_XML, кстати, перечисленной в списке предшественников, есть ссылка на внешний XML-редактор firstobject, маленький (624к), быстрый (файл в 55 мег открывается секунд за 5), портабельный и бесплатный. Да, и он еще позволяет редактировать!
ЗЫ. А ход вашей мысли (то есть выдрать XSL из браузера и применить у себя) мне нравится!
6. tarassov 111 14.05.15 11:49 Сейчас в теме
(5) gaglo, Так понятно, что вне 1С есть тысяча и одна удабная утилита для работя с XML. Но ведь я специально указал область задачи: "Внутри 1С и без внешних библиотек". В этом случае все "внешние XML-редакторы" остаются "за бортом"
7. gaglo 15.05.15 09:47 Сейчас в теме
(6) А вот это мне и непонятно. Зачем специально было так сужать область задачи? Неужели "просто так"? Иными словами, зачем так часто стоит задача отображать XML именно в поле HTML-документа? Если мы хотим XML обработать, так вроде бы отображать и не надо... Навскидку придумал только случай, когда на входе валятся файлы самых разных структур, мы их показываем оператору и спрашиваем: "Чего с ним делать?" А оператор проглядит его, решает, что этот по алгоритму 15, а этот просто отклонить, и нажимает соответствующую кнопку. Но выглядит это неестественно.
8. tarassov 111 15.05.15 16:44 Сейчас в теме
(7) gaglo,
У меня эта задача возникла из разработки интерфейса отслеживания почтовых отправлений различных служб доставки (СДЭК, Деловые линии, ДПД, ПЭК и т.п.) для интернет-магазина http://automediya.ru/, аналогично тому, как я сделал для Почты России http://infostart.ru/public/347510/
Данные, полученные с с того или ниого вэб-сервиса при этом не требовалось обрабатывать, а только показывать, но в красивом и читаемом виде. Оказалось, что наиболее просто и естественно отобразить их как раз поле HTML-документа
При этом потребовалось обрабатывать исключительные ситуации. А именно, когда код состояния ответа HTML не равен 200. Можно бы было выдать сообщение "КодСостояния=...", но в некотрых случаях в теле ответа приходит содезная информация. Например пришется что-то об ошибке сети, веб-сервиса, прокси и прочее. Вот для таких особых ситуаций универсальный просмотр как раз годится.
Ну а мне еще удобно было им пользоваться при отладке, когда я, в точности как описано выше, имел дело с XML-файлами самих разных структур.
9. tarassov 111 16.05.15 15:24 Сейчас в теме
(5) gaglo,
Если уж сравнивать с аналогами не по принципу соответствия поставленной задаче, а про универсальности и простоте, то мне больше чем "двупальцевый" нравится "однопальцевый" вариант http://infostart.ru/public/84254/
17. yuraer 42 23.09.16 12:38 Сейчас в теме
Похоже, что xsl не валидный:
Ошибка разбора XML: - [296,23]
Фатальная ошибка:
Couldn't find end of Start Tag A line 296
18. NicholasUzunov 18.05.17 08:30 Сейчас в теме
В статье приводиться default.xsl с ошибками. Пример
<A STYLE="visibility:hidden" class="b" false"
Тут тег <A> не закрыт. Рабочий XSL скачал от сюда https://gist.github.com/byrner75/5659000.

А вот не много измененный код:

	
Преобразование = Новый ПреобразованиеXSL;
Преобразование.ЗагрузитьИзФайла("D:\defaultss.xsl");
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(Преобразование.ПреобразоватьИзФайла("D:\WayBillAct.xml"));
Прикрепленные файлы:
defaultss.xsl
japopov; user1290365; CagoBHuK; Nat_S; silberRus; +5 Ответить
20. CagoBHuK 32 09.07.19 12:18 Сейчас в теме
Хотел поставить автору плюс, но не буду, т.к. XSL невалиден. Зато поставил плюс (18).
22. Yashazz 4709 12.10.21 14:37 Сейчас в теме
(18)
Преобразование = Новый ПреобразованиеXSL;
Преобразование.ЗагрузитьИзФайла("D:\defaultss.xsl");
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(Преобразование.ПреобразоватьИзФайла("D:\WayBillAct.xml"))

И зачем тягать файловую систему? Проще, надёжнее и быстрее этот хсл загнать в макет или вообще пихать как константную строку.
19. maloy-v 06.10.18 15:01 Сейчас в теме
До сих пор актуально. Фишка с непосредственным подсовывание файла в форму HTML в последних релизах перестала работать.
А "Преобразование" работает. Красота!
23. ixijixi 1775 16.03.23 11:28 Сейчас в теме
(19) В 2023 уже обратно заработало)
Прикрепленные файлы:
bprogs; 0x00; +2 Ответить
24. trigor 26 29.10.23 13:55 Сейчас в теме
(23) а у Вас сворачиваются теги XML?
25. ixijixi 1775 29.10.23 17:45 Сейчас в теме
26. trigor 26 29.10.23 19:02 Сейчас в теме
(25) можите поделиться как Вы это сделали. Что-то у меня не получается.
27. ixijixi 1775 30.10.23 09:00 Сейчас в теме
(26) Нужно реквизиту, содержащему отображение XML, присвоить имя локального файла
Прикрепленные файлы:
XML.epf
28. QWEASD888 13.03.24 19:21 Сейчас в теме
(27)
присвоить имя локального файла

А что значит имя локального файла? Можно пример?
29. ixijixi 1775 13.03.24 19:36 Сейчас в теме
30. QWEASD888 13.03.24 19:48 Сейчас в теме
31. ixijixi 1775 14.03.24 08:48 Сейчас в теме
(30) В комментарии 27 прикреплена обработка, там можно подсмотреть реализацию
21. antonio_i 80 14.05.20 17:01 Сейчас в теме
В статье же написано, что получить схему можно по адресу в браузере
Firefox
chrome://global/content/xml/XMLPrettyPrint.xsl
IE
res://msxml3.dll/defaultss.xsl

Актуальная версия Firefox отображает необходимый XSL.

Но может кто знает, где в системе можно этот файл найти, не прибегая к помощи браузеров и интернета?
Оставьте свое сообщение