XPath в 1С - как с этим работать.

Публикация № 280340

Разработка - Системная интеграция - Обмен через XML

XML XPath

Формат XML давно и прочно вошёл в обиход. Уже освоены средства документа DOM. Но быстрый поиск XPath, активно применяемый в работе с xml, почти не освещён, хотя в 1С, как всегда, "есть нюансы". Предлагаю краткое руководство, заточенное именно под "одинэснегов" и не претендующее на пересказ учебников по XPath. Как сделать, на что обратить внимание.

Публикация не ставит целью заменить или продублировать руководства по XPath, коих полным-полно, в т.ч. на русском. Публикация лишь описывает основные понятия, необходимые для быстрого освоения этого механизма именно в 1С.

Заранее извиняюсь за огрехи форматирования, но я ухлопал два часа, так и не победив полностью окно публикации ИС... Ну вот что-то криво у меня в манипуляторах... Если где потеряны скобки или ещё что, извиняйте. По смыслу, думаю, всё будет ясно.

 

 

Что это такое?

Суть механизма XPath - быстрое получение нужных элементов из документа, построенного согласно DOM на основании текста, являющегося правильным XML. То есть, имеем xml-строку или файл, содержимое которых хотим быстро рассмотреть на предмет наличия неких тегов. В терминах DOM - хотим найти элементы и/или атрибуты, или другие составляющие DOM-модели, в этом документе. Чаще всего речь именно об элементах, атрибутах и их свойствах.

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

Пространство имён

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

Пространство имён - это просто строка, уникальное имя, которое определяет "среду обитания" тегов. Исторически есть 2 варианта написания, URL и URN, и в 1С используются URL, т.е. внешний вид этой строки должен выглядеть правильным интернет-адресом, пусть и реально не существующим. Например, "http://www.w3.org/2001/XMLSchema" или "http://www.404_1C.ru", лишь бы он был уникален в пределах данных, с которыми вы работаете. Эти адреса и называют URI.

Для краткости, вместо URI, в тексте используют префиксы (по сути, алиасы, псевдонимы) пространств имён - это тоже строки, но покороче. Поэтому объявление пространства имён, например, для "среды обитания" тегов/элементов DOM, понятий, которыми пользуются айтишники, будет таким:  

<НачалоДокумента xmlns:IT="http://v8.it_cool.ru">.

А для понятий отдела кадров, в свою очередь, можно объявить:

<НачалоДокумента xmlns:Kadri="http://NashiKadri"/>. 

В общем случае, объявление пространства имён размещается внутри теговых рамок и имеет вид xmlns:="". Причём, объявление само по себе не считается ни отдельным тегом, ни атрибутом, и в коллекции элементов DOM-документа тоже не входит. 

Зачем это нужно? Чтобы различать понятия. Предположим, в xml-файле есть тег или атрибут "". Понять его содержимое можно по-разному. И вот тут используются префиксы пространств имён, поэтому IT:Мать это сведения о материнской плате ПК, а Kadri:Мать - семейные данные человека. Обратите внимание, что, если речь о теге, и закрываться он тоже должен с указанием префикса.

На один xml-текст можно объявить сколько угодно пространств имён с разными префиксами и применять рядом, вперемешку и как угодно, для тегов и атрибутов. Объявлений внутри тега может быть несколько, они разделяются пробелами. Более того, для конкретного случая можно "по месту" переопределить или доопределить пространство имён - объявлять их вовсе не обязательно в начале документа, это можно сделать где угодно:  

<Klients:Klient xmlns:Klients ="http://www.ohrenevshie.com">
  <
Summ>99999<Summ>
  <Klients:Person
xmlns:Klients="http://www.VIP_bazar.com">Господин директор<Klients:Person>
  <
Klients:Chances>No chance (((<Klients:Chances>
<Klients:Klient>

Так, тут мы используем пространство имён для неплательщиков, но элемент Person переопределён, и находится в пространстве имён для ВИПов. И действует это переобъявление только в рамках этого тега. Также заметим, что тег/элемент Summ вообще не входит явным образом в указанное пространство имён.

Итак, внутри одного xml обычно находятся теги и атрибуты с префиксами, принадлежащими разным, объявленным уникально, пространствам имён. Для работы с этим никаких особых средств нет, да это и не требуется. В 1С есть объект, который, теоретически, должен предоставлять возможность работы с разными пространствами имён, и он называется РазыменовательПространствИменDOM, но пользы от него мало. Разыменователь может создаваться на основании одной или нескольких связок "префикс-URI", или на основании документа DOM или его узла, но на практике - как ни создавай, разницы не заметно. Несмотря на уверения СП, прямое влияние контекста разыменователя, по крайней мере на работу XPath, проследить не удалось. Обойти коллекцию имеющихся пространств имён с его помощью тоже нет возможности. И единственная, пожалуй, польза, это что на некоем уровне, для документа в целом или для любого его элемента, где используется указание URI пространства имён, можно его получить по его префиксу:

Разыменователь=Новый РазыменовательПространствИменDOM(ДокументИлиЭлемент);
URI=Разыменователь.НайтиURIПространстваИмен("IT");
// для конструкции xmlns:d3p1=http://v8.1c.ru/8.1/data/core метод с аргументом "d3p1" вернёт строку "http://v8.1c.ru/8.1/data/core"

Т.е. чисто теоретически, можно пробежаться по DOM-документу и поискать по префиксам, но несколько полезнее в этом плане, на мой взгляд, поиск самим XPath по оси "namespace" (см.ниже).

Замечу ещё, что понятие "имя" для элемента DOM (в т.ч. атрибута) и понятие "локальное имя" в рамках 1С также выглядят иначе, нежели должны бы по смыслу. Локальное имя пусто и бесполезно, хотя, по идее, полное имя должно включать префикс пространства имён, а локальное - не включать, т.е. в целом Klients:Person это должно быть имя, а Person - локальное имя. Однако локальные имена хоть сколько-то логично ведут себя лишь для самих пространств имён, т.е. для элемента типа "ПространствоИменXPath", и для стандартного пространства там локальное имя пусто. Также, мне не удалось добиться проку ни от одного из свойств ДокументDOM, связанных с URI, они все пусты, как ни инициализируй документ.

А вот теперь - внимание! В реализации XPath 1С есть одна решающая тонкость. Дело в том, что, вообще-то, возможно и пространство имён БЕЗ префикса, напрямую xmlns="", оно называется "стандартное" пространство имён. Придумали это ради работы "по умолчанию", но для 1С это не срабатывает. Если у вас в xml-тексте есть хоть одно объявление стандартного пространства, то внутри области его действия (а иногда и вообще по всему тексту) для любых тегов, не имеющих префиксов другого пространства имён, поиск XPath работать не будет.

Проще говоря, логика работы XPath с xml в зависимости от наличия там пространств имён такова:

1. Если нет никаких пространств имён, отлично всё находит при любых запросах.

2. Если есть некие префиксованные пространства имён, отлично всё находит, но не забывайте указывать префиксы как часть имени. Если у вас одинаковые имена (но разные префиксы), пишите их в запросе вместе с префиксом. Если вам нужны имена, у которых префиксов нет (т.е. относящиеся к стандартному пространству имён), то тоже смело пишите их, прямо без префиксов, всё найдёт. Учтите, что в ряде случаев указание в запросе префикса, который не объявлен, приводит к ошибке "неверный запрос".

3. Если, наряду с префиксованными пространствами имён, или как единственное, есть стандартное пространство имён, то поиск по именам элементов (тегов) возможен только для тех, у кого указан напрямую префикс. Если стандартное пространство единственное, или если префиксов у элементов нет, поимённый поиск по элементам не работает. Всегда работать будет только поиск по именам атрибутов. То есть, при наличии стандартного пространства имён:

"//*[@Номер]" - вернёт все те элементы, где есть атрибут с именем "Номер";

"//Документ[@Номер]" - не вернёт вам ничего.

4. Если есть не только стандартное пространство имён, но и префиксованное, вообще начинается красота. Так, если в целом заявлено только лишь стандартное пространство имён, а в тексте для конкретного тега есть переопределение:

    <Документ Номер="000000017"/>
    <
Тыц:Документ xmlns:Тыц="http://NowhereNamespace" Номер="000000018"/>
    <
Документ Нумер="000000019"/>

то при попытке найти "//Документ" вы не найдёте ничего; а при попытке "//Тыц:Документ" вы получите что? Не угадали, все три элемента, хотя остальные два без префиксов. А вот если у вас то же пространство имён "Тыц" объявлено в старшем теге, наряду со стандартным, тогда "//Документ" тоже ничего не вернёт, но "//Тыц:Документ" вернёт ровно те элементы, в чьём имени префикс чётко указан. Словом, внутренняя логика происходящего несколько своеобразна.

 

Повторюсь, аргумент конструктора разыменователя вообще никак ни на что не влияет, даже на локально заданные пространства имён. Либо XPath успешно ищет везде, либо не может найти нигде.

Советую просто искать по тексту xml вхождение подстроки "xmlns=" и заменять на любое вменяемое с префиксом, например, на "xmlns:Пыщь=", и поиск по именам элементов сразу заработает.

 

 

Запрос XPath

 

Теперь о том, что такое вообще этот "запрос".

Строковый запрос XPath чуть более процедурный, чем SQL, т.е. больше значимость указания того, как именно получить результат, по сравнению с обычными запросами, где важно "что нужно", но не очень важно "как это получить". Запрос XPath составляется с учётом и пониманием порядка получения нужной выборки. Делается это, в первую очередь, исходя из естественного рассуждения, "как бы мы получали это вручную", т.е. работа механизма легко эмулируется и отлаживается, и легко разбивается на этапы.

Запрос XPath - это строка, разделённая символами "/" на отдельные "шаги" выполнения.

 

На каждом шаге мы находимся в некоем контексте (на некоей позиции в тексте xml, на ветке в дереве DOM), т.е. знаем, откуда ищем - это называется "контекст" и этим в 1С можно управлять по ходу поиска. Это та ветка дерева, куда нас привёл предыдущий шаг, если он был, и откуда начнётся новый шаг поиска.

 

На каждом шаге можно указать, среди чего ищем - это называется "ось". Осей по смыслу немного и они отлично понятны, если представить обычный поиск в дереве значений 1С. Оси бывают такие:

ancestor::  Возвращает множество всех предков (родительских веток до корня).

ancestor-or-self:: - Возвращает множество предков и текущий элемент (то же, плюс текущий).

attribute:: - Возвращает множество атрибутов текущего элемента (т.е. это уже когда известна ветка дерева, получить значения колонок дерева для неё). Можно заменять на "@".

child:: - Возвращает множество потомков на один уровень ниже (все ветки, у которых родитель - текущая). Есть тонкость: обозначение этой оси часто пропускают и можно запутаться, будьте внимательны. Кроме того, начиная "от корня", учтите, что запрос "/child::*" даст вам первый дочерний элемент от корня, т.е. то, что называется "корневой элемент" и получается как ДокументDOM.ЭлементДокумента. А запрос  "child::*" даст вам уже элементы, подчинённые этому корневому, т.е. на 1 уровень глубже.

descendant:: - Возвращает полное множество потомков (вообще все ветки по поддереву текущей). Можно заменять на "//".

descendant-or-self:: - Возвращает полное множество потомков и текущий элемент.

following:: - Возвращает множество, ниже текущего элемента (вглубь и далее по дереву).

following-sibling:: - Возвращает множество элементов на том же уровне, следующих за текущим (все следующие ветки того же уровня, и необязательно от того же родителя, что текущая).

parent:: - Возвращает предка на один уровень назад (родительскую ветку или пустую выборку, если ветка корневая). Можно заменять на "..".

preceding:: - Возвращает множество элементов, исключая множество предков (т.е. только предыдущие ветки, попавшие в выборку).

preceding-sibling:: - Возвращает множество элементов на том же уровне, предшествующих текущему.

self:: - Возвращает текущий элемент. Можно заменять на ".". Это полезно, если надо уже поработать с атрибутами текущего элемента, и быть уверенным, что контекст при этом "не уедет" на другой элемент.

namespace:: - Возвращает множество, имеющее пространство имён (то есть присутствует атрибут xmlns). Только эта ось, пожалуй, хоть как-то позволяет рассматривать пространства имён, объявленные где-либо в рассматриваемых данных. Запрос "namespace::*" даёт выборку из ПространствоИменXPath, причём один элемент есть всегда, даже если никаких пространств имён не объявлено. Правда, дообъявления в конкретных тегах он, похоже, не видит, и от контекста тоже, насколько я понял, не зависит.

 

И наконец, на каждом шаге можно указать, что ищем. Собственно, что нам нужно. Это может быть общий шаблон (всем знакомая звёздочка *), имя конкретного тега (элемента DOM), имя атрибута, и некое уточнение в довесок к этому. Например, "//Документ" найдёт все элементы, объявленные тегом что-то, и сделает это за один раз, т.к. использована ось "//" (искать сразу по всей глубине). А запрос "/Платёжки/*" найдёт все элементы, дочерние для . В простом виде, запрос похож на путь к файлу в файловой системе, но вот написать //МойМузон.mp3 и найти это сразу на диске файл-менеджеры обычно не могли, а XPath позволяет. Можно искать элементы, у которых есть некий атрибут: запрос "//Документ[@Номер]" найдёт все элементы с таким атрибутом, а если у кого-то атрибут называется "Нумер", то, конечно, такое не будет найдено. Можно получить сразу выборку атрибутов, а не элементов, например, запрос "//@*" выдаст вообще все атрибуты всех элементов.

Можно уточнить условие с помощью предиката - это нечто в квадратных скобках, указанное для конкретного шага после основного условия. Можно указать индекс (порядковый №, начиная с 1). Так, "/Платёжки/Документы[2]" вернёт второй из документов в ветке платёжек. Интересно, что это всегда не номер в итоговой общей выборке (это вам не "Первые 10" в SQL), а индекс в своей подветке, т.е. мы получаем запросом "//@*[3]" все атрибуты, идущие третьими в своих элементах. На самостоятельную работу оставляю вам понимание запроса "(х/у)[2]", дерзайте :)

Можно указать в предикате условие, например, "/Платёжки/Документы[@Номер="025"] - и тут полный простор творчества и воображения, т.к. поддерживаются все логические операции, условия можно организовывать по принципу "и", "или", "не". Синтаксис, правда, имеет особенности: "не равно" выглядит как "!=", а знаки "больше" и "меньше" следует писать, как в нотации html. Допустимы также функции, числовые и строковые операции, т.е. "//Документ[starts-with(@Номер,"003")]" вернёт все элементы, где значение атрибута "Номер" начинается с подстроки "003". Функций много. Мне показалась полезной функция "normalize-space", заменяющая все повторные пробелы в строке одиночным и обрезающая крайние левый и правый, а также убирающая всякие спецсимволы (а такие прелести в xml бывают).

 

Выборку можно скомпоновать из нескольких запросов, разделённых символом "|", при этом условия каждого учитываются по "или", но результаты выборки идут без повторов (т.е. как "различные" в SQL).

 

Помните, запрос регистрочувствителен! Т.е. не только к написанию условий, но и в процессе компиляции. "//документ" и "//Документ" - разные вещи и разные результаты, "not(условие)" - правильно, а "Not(условие)" - ошибка компиляции. Строковые функции также различают регистр. При этом, функции, аналогичной ВРег/НРег, в XPath нет, можно лишь делать замену символов функцией Translate.

 

Оператор равенства, когда по обе стороны от него элементы/реквизиты, а не литералы, проверяет, имеют ли эти узлы одно и то же значение, а не то, являются ли они одним и тем же узлом. Т.е., говоря о дереве значений, мы сравниваем не две ветки, а два их наполнения значениями. Это может быть использовано при сравнении значений атрибутов. Например, запрос "Сотрудница[@ДевичьяФамилия = @ФамилияПоМужу]" выберет элементы тех сотрудниц, у кого атрибуты имеют одинаковое значение.

 

Итак, запрос XPath - строка вида Шаг1/Шаг2/..../ШагN, где каждый "Шаг" - это указание оси и указание условия (возможно, уточнённое предикатом).

Ещё раз обращаю внимание на важность того, с чего начинается поиск, и что "/Документ" не эквивалентно "Документ". И тут играет роль, помимо запроса, ещё и программное указание 1С, откуда "начинать искать" - речь об узле DOM, который указывается соответствующим методам поиска XPath. Если вы не уверены, где примерно находится искомое, лучше задавать "точкой отсчёта" весь документ DOM, а если хотите ускорить процесс и точно знаете элемент, можно и конкретизировать. Учтите, что переопределение узла поиска в рамках одного сеанса существования выражения XPath в 1С недопустимо, независимо ни от каких факторов. Поэтому, если хотите менять контекст поиска в процессе работы, или создавайте разные объекты выражений, или играйте с навигацией осями и шагами поиска.

Поскольку ось не одна на весь поиск, а своя на каждый шаг, мы можем на каждом шаге менять "направление" поиска - сначала поискать среди всех уровней вложенности, где-то глубоко найти нужную ветку; на втором шаге, исходя из этой ветки, получить предыдущую на том же уровне; на третьем шаге от этой предыдущей получим нужный элемент-родитель гораздо "выше" по уровням, потом два следующих за ним, и так далее. Важно лишь, чтобы каждый не-последний шаг позволял однозначно понять, где мы в данный момент, т.е. результаты промежуточных шагов должны быть счётны и конечны - но необязательно единичны! Это не просто "брожение" по дереву во все стороны, это возможность пойти сразу по нескольким маршрутам сразу и прийти в несколько конечных веток. Эти ветки, либо значения их колонок (атрибуты) и будут результатной выборкой XPath. Например, небольшое "путешествие":

"/descendant::Документ[@Тип="ПКО"]/*[last()-1]/parent::*/following-sibling::*[5]"

- нашли среди документов имеющие тип "ПКО", среди их дочерних получили предпоследние по индексу, от них перешли к их родительским и получили от этих родительских пятые по счёту следующие по уровню ветки.

 

 

Как это работает?

 

Теперь о том, как со всем этим работать в 1С.

Начинается всё с xml-строки, на основе которой надо создать ДокументDOM. Напрямую с xml механизм XPath не работает, потому что коллекция результатов должна быть чем-то более внятным, чем куски текста - и результат является коллекцией элементов DOM (обычно это значения типа ЭлементDOM или АтрибутDOM). Это делается так:

хмл=Новый ЧтениеXML;
хмл.УстановитьСтроку(СтрокаXML);
// или хмл.ОткрытьФайл(ИмяФайлаXML итд)
постр=Новый ПостроительDOM;
докDOM=постр.Прочитать(хмл);

 

Создаём разыменователь пространств имён. Несмотря на всю вышеизложенную теорию, всё равно каким именно вариантом конструктора и с какими аргументами. Самый общий вариант, например:

Разыменователь=Новый РазыменовательПространствИменDOM(док);

 

Далее можно либо быстро искать "по ходу дела", либо создавать отдельный объект для поиска XPath. Быстрый поиск делается с помощью метода документа ВычислитьВыражениеXPath, куда сразу передают все нужные параметры и который сразу возвращает выборку. Поиск с помощью отдельного объекта предназначен, по идее, для получения разных выборок результатов по итогам одного и того же текста запроса и разыменователя, но исходя из разного контекста и типа результата. Возможно, этот способ ещё и планировался 1С как более оптимальный при групповом вызове, т.к. инициализация делается единожды. 

Это делается так:

Выражение=док.СоздатьВыражениеXPath(СокрЛП(ТекстЗапроса),Разыменователь);
Результат=Выражение.Вычислить(ИсходныйУзелПоиска,ТипРезультата);
// заметим, что именно при создании выражения (а не при вычислении) делается
//проверка правильности написания запроса!

По факту, метод Вычислить() вызывается для каждой инициализации единожды, т.к. изменить исходный узел мне не удалось ни при каком типе результата. Опять-таки, теоретически, понятно, что тип результата должен влиять на поведение объекта "Выражение", но на практике ни один тип результата мне не позволил переопределить исходный узел поиска так, чтобы использовать тот же объект повторно.

Тип результата не связан с тем, что результат всегда может быть представлен как выборка. Наряду с выборкой, для нужд XSLT и других смежных механизмов технологии xml, можно представить результат как число, строку или булево значение. По опыту, число - это обычно количество элементов в выборке, строка - это конкатенация значений, которые можно представить строкой (например, для атрибутов их значения выдаёт, но текстовое содержимое для элементов не выдаёт), булево - есть непустой результат или нет (т.е. пуста ли выборка). Кроме того, результат можно представить как одиночный (первый или случайный) элемент выборки - это обычно имеет смысл, если выборка чем-то по сути однородна, или вообще состоит из одного элемента. Также, выборка может представлять собой "снимок" - т.е. данные этой результатной коллекции уже не изменятся, что ни делай с их первоисточником (т.е. хранятся абсолютные значения), или "итератор" - т.е. данные результатной коллекции привязаны к первоисточнику (т.е. хранятся ссылки на значения). Оба варианта выборки бывают упорядоченными и нет, но практической пользы в этом особой не нашёл, т.к. обойти выборку методом ПолучитьСледующий() можно всегда:

Пока Истина Цикл
   
ОбработкаПрерыванияПользователя();
   
Узел=рРезультат.ПолучитьСледующий();
    Если
Узел=Неопределено Тогда Прервать КонецЕсли;
КонецЦикла;

И уже с этим объектом Узел можно делать что угодно, работать с ним как с элементом DOM, считывать и обрабатывать его данные, использовать его свойства и методы. Эти объекты в выборке всегда запоминаются "по значению", их можно хранить во временных коллекциях и данных форм (на сервере), и их существование не связано, по сути, ни с исходным документом DOM, ни с выражением XPath.

 

В заключение отмечу, что для больших текстов xml (более 100 мб) лучше не использовать XPath 1С, т.к. построитель загружает весь документ DOM в оперативную память без кэширования. Можно сперва попробовать искать нужное с помощью MSXML-XPath, а уж потом кусками обрабатывать в 1С. 

 

Успеха, коллеги! И каждый, рассказавший больше, да будет достоин уважения!

p.s. Прилагаю обработку для обычных форм, позволяющую удобно тестировать XPath-запросы (сам на ней тренировался). 

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

Наименование Файл Версия Размер
ОбработкаXPath

.epf 12,81Kb
20.05.14
121
.epf 12,81Kb 121 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4435 20.05.14 12:41 Сейчас в теме
(0) Мне понравилось. Ещё может пригодиться.
Cyrus842; +1 Ответить
2. Yashazz 3474 20.05.14 14:38 Сейчас в теме
(1) Вообще, что интересно будет сравнить, так это производительность работы через методы самого документа DOM "СоздатьИтераторУзлов" или "СоздатьОбходДерева", и аналогичным по смыслу XPath. Мне пока недосуг.((

Кстати, ещё сегодня вечером ссылочки подкину на хорошие руководства по теме.
5. Поручик 4435 20.05.14 23:04 Сейчас в теме
(2) Это разные сущности. Некоторе время назад XPath мне потребовался для поиска и замены фрагмента в XML-файле и остальные методы не подошли по разным причинам. Более простым в реализации оказался XPath.
6. Yashazz 3474 21.05.14 10:30 Сейчас в теме
(2) Это да. XPath в сочетании с регулярными выражениями - сила.

Из всех подходящих ссылок на примеры, мне понравилось http://www.zvon.org/xxl/XPathTutorial/Output_rus/ и, как ни странно, http://msdn.microsoft.com/ru-ru/library/ms256086(v=vs.110).aspx
3. artbear 1199 20.05.14 15:12 Сейчас в теме
4. Yashazz 3474 20.05.14 17:46 Сейчас в теме
Блин, нашёл корявость. Место "найдёт все элементы, объявленные тегом что-то" должно было выглядеть как "найдёт все элементы, объявленные тегом <Документ>что-то</Документ>. Извините, плз.
7. LexSeIch 208 21.05.14 11:43 Сейчас в теме
Мир этому дому!
Спасибо за статью.
8. Yashazz 3474 21.05.14 12:14 Сейчас в теме
Нашёл ещё "съеденное" при публикации.

Фразу "В общем случае, объявление пространства имён размещается внутри теговых рамок и имеет вид xmlns:=""" правильно читать так: xmlns:Префикс="URI".

Фразу "Предположим, в xml-файле есть тег или атрибут "". Понять его содержимое можно по-разному." правильно читать так: "Предположим, в xml-файле есть тег или атрибут "<Мать>". Понять его содержимое можно по-разному."

Фразу "А запрос "/Платёжки/*" найдёт все элементы, дочерние для ." правильно читать так: "А запрос "/Платёжки/*" найдёт все элементы, дочерние для <Платёжки>."

Извините, эти глюки в результате половину смысла отъедают (((
9. Evil Beaver 6855 21.05.14 17:52 Сейчас в теме
В вашей обработке не заметил способа задать соответствие префиксов пространств имен.
У меня есть аналогичная http://infostart.ru/public/158831/, посмотрите на вторую закладку, там соответствие namespace-ов. Добавьте к себе такую же и у вас будет супер!
10. Yashazz 3474 21.05.14 20:43 Сейчас в теме
(9) Evil Beaver, ага, не ставил такой задачи. Вообще как-то позорно прохлопал вашу публикацию, выражаю респект!
11. Armando 1393 22.05.14 01:16 Сейчас в теме
Не могу разобраться(( Приложил пример файла.

Как должен выглядеть запрос, который должен вернуть элемент "passageState" родителя "item", у которого другой дочерний элемент "itemCode" имеет текстовое значение "Действие1".
У меня даже элементарный запрос /FlowchartContextType не заработал. Подозреваю, что это из-за пространств имен, но не могу сообразить, куда это пространство прикрутить.

update:
Вроде въехал. Надо было для неймспейса http://v8.1c.ru/8.2/data/graphscheme самостоятельно определить префикс при создании разыменователя, например "а". Тогда запрос "/a:FlowchartContextType" работает корректно.
Прикрепленные файлы:
Схема.xml
12. Yashazz 3474 22.05.14 09:09 Сейчас в теме
(11) Это как раз то, о чём я писал - при наличии стандартного пространства имён он не ищет ничего. Самый простой способ - не прикручивать ничего ни к какому разыменователю, и не менять теги, а тупо заменить xmlns="http://v8.1c.ru/8.2/data/graphscheme" на xmlns:a="http://v8.1c.ru/8.2/data/graphscheme", и всё сразу заработает. Ну и вдобавок, у вас открывающий тег по регистрам букв был не такой, как закрывающий, это тоже очень важно.
13. Armando 1393 22.05.14 11:21 Сейчас в теме
(12) спасибо за разъяснение.
14. Armando 1393 22.05.14 23:22 Сейчас в теме
Поразбирался немного в синтаксисе. Кому интересно, запрос для (11) будет выглядеть:
item[itemCode = "Действие1"]/passageState
15. infosoft-v 483 23.05.14 10:59 Сейчас в теме
Добрый день, коллеги.

Всегда с удовольствием читаю такие основательно проработанные статьи. Спасибо. Но к сожалению на практике не разу не приходилось сталкиваться с этими технологиями. Толи у меня такие клиенты, толи я не вижу где их можно и нужно применять.

Поделитесь реальными примерами (истории успеха) где была использована технология X-Path. Какая информация обрабатывалась? И вопрос с подвохом, если бы при внедрении этого реального примера вы бы не владели технологией X-Path то что бы было взамен.

Буду благодарен за любые подробности.

Евгений.
16. Armando 1393 23.05.14 23:08 Сейчас в теме
(15) infosoft-v, в (11) реальная задача. Графическая схема 1С сериализуется в XML. В XML редактируется некое свойство определенной точки маршрута, т.к. штатными средствами 1С это свойство нельзя редактировать, даже прочитать нельзя. Посредством XPath выполняется прямое попадание на нужный узел. До этого редактирование было реализовано перебором узлов. Результат тот же, но выглядит круче)

И еще есть одна задача. Каждый день с помощью 1CDTool из хранилища в XML выгружается таблица versions с комментариями разработчиков. Ищутся коммиты с незаполненным комментарием, и разработчику в почту приходит письмо о необходимости написать комментарий. XPath вполне подойдет для этих целей, т.к. одним махом можно выбрать все нужные узлы.
18. infosoft-v 483 26.05.14 09:06 Сейчас в теме
(16) Armando, Второй пример понятен. А вот по первому примеру вопрос. Были ли у вас заказчики, которым приходилось "на ходу" править графические схемы? Что это была за задача?
19. artbear 1199 27.05.14 17:45 Сейчас в теме
(16) По второй задаче (поиск пустых комментов к коммитам) можешь дать код?
Давно хочу заняться этой задачей.
Жду ответа.
Можно в личку.
21. Magister 133 01.06.14 22:30 Сейчас в теме
(16) Аналогично - прошу код поиска пустых комментариев к коммитам.
Давно думал такое сделать...
17. Armando 1393 24.05.14 09:58 Сейчас в теме
В итоге обошелся баз XPath во втором случае, т.к. у полученных узлов надо еще дочерние элементы вытаскивать. Открыл для себя XSL преобразование. После преобразования получается XML файл только с пустыми коммитами и без лишних подчиненных элементов и прочего мусора. После этого XML преобразуется в XDTO объект, а с ним удобней работать, чем с DOM.
20. zfilin 2191 30.05.14 18:45 Сейчас в теме
Печально, что оно так странно обрабатывает пустые пространства имен.
Об этом же, если я правильно понял, пишут и MSDN - http://msdn.microsoft.com/ru-ru/library/e5t11tzt%28v=vs.110%29.aspx (раздел "Пространство имен по умолчанию")
22. Yashazz 3474 03.06.14 03:26 Сейчас в теме
(20) Да, похоже на то. Может, в других релизах что изменится, я упражнялся на 8.3.4
23. Патриот 261 05.09.14 21:36 Сейчас в теме
(0), + спасибо большое. Не могу выполнить поиск в определённом узле, получается только во всём документе.
	Разыменователь = Новый РазыменовательПространствИменDOM(ЭлементDOM);
	ХПуть = ДокументDOM.СоздатьВыражениеXPath(Запрос, Разыменователь);
	Выборка = ХПуть.Вычислить(ЭлементDOM);
Хочу в приведённом коде, чтобы поиск шёл только в ЭлементDOM, но он всё равно идёт во всём ДокументDOM. Я так понял, вы столкнулись с той же проблемой? Есть решение? Или я просто криво что-то делаю..?
24. monsta 59 20.09.14 00:38 Сейчас в теме
Хорошая статья, интересный инструмент для тестирования выражений XPath, полезен для отладки загрузки данных со страниц HTML как альтернатива HAP Explorer. Была бы интересна возможность увидеть подчиненные элементы для найденных в виде дерева.
25. bionicle 11.10.14 19:04 Сейчас в теме
26. aexeel 72 13.05.15 18:03 Сейчас в теме
Статья неплохая, но оформление ужасно. Шрифты скачут - тяжело читать. Примеры некорректно набраны (например, в "<Summ>99999<Summ>" нет завершающего тега).
27. Yashazz 3474 13.05.15 18:12 Сейчас в теме
(26) aexeel, знаю, но это не ко мне вопрос, а к редактору сообщений ИС. Я ведь авансом извинился за все огрехи, вами перечисленные. По этой причине более статей такого рода не выкладываю, ибо "ниасилил"; а статью по тюнингу веб-сервисов мучил-домучивал, плюнул и прицепил как вложение к публикации... Увы мне.
28. Поручик 4435 13.05.15 23:38 Сейчас в теме
(27) Ога, я как посмотрел на свою статью по передаче чего-то на сайт, так и желание обновить до более современного варианта отпало, толком не родившись.
Оставьте свое сообщение

См. также

Редактор объектов информационной базы 8.3 Промо

Универсальные обработки Обмен через XML v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.51 от 31.08.2020

2 стартмани

23.01.2019    30123    312    ROL32    39    

Улучшенная обработка универсального обмена данными в формате XML (УФ)

Универсальные обработки Внешние источники данных Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).

1 стартмани

23.06.2020    4265    49    Lem0n    0    

Загрузка из XML файла ЭДО в документ поступления для конфигураций 1С: Розница 2.2/2.3, Управление торговлей 10.3/11.4

Розничная торговля Обработка документов Документооборот и делопроизводство Обмен через XML v8 УТ10 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Внешние обработки загрузки данных из XML файлов формата ON_NSCHFDOPPRMARK ЭДО в документы поступления 1С Розница версия 2.2.10.19 и выше, Управление торговлей 10.3.52.2 и выше, Управление торговлей 11.4.5.63 и выше

1 стартмани

04.06.2020    11871    161    independ    105    

Выгрузка и загрузка XML для управляемых форм 8.3 (с отбором)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

В работе постоянно приходится разделять в различные базы или объединять несколько организаций в одну базу, долгое время пользовался стандартной обработкой выгрузка-загрузка из UNIREPS 8.2, в режиме обычного приложения, но, к сожалению, для управляемого приложения стандартная обработка из UNIREPS 8.3 (Диск ИТС) не позволяет нормально сделать выгрузку с отбором, поэтому ей никогда не воспользовался. Решил что напишу обработку, которая позволит делать отборы в различных вариациях, кроме того, в обработках из UNIREPS (8.2 и 8.3) существенно отличается процесс загрузки предопределенных, что не всегда удобно при больших объемах данных. Обработка написана на базе UNIREPS 8.3, но есть существенные изменения. Но интерфейс доработан так, чтобы обработка была похожа на старую добрую обработку из UNIREPS 8.2, к которой все так привыкли.

1 стартмани

05.11.2019    9306    170    o.kovalev    14    

Преобразование XML файла в переменную структура, Загрузка в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

Обработка, демонстрирующая работу процедур и функций по преобразованию XML файла в дерево значений, а также в переменную типа структура.

1 стартмани

14.09.2019    9009    12    vik070777    19    

Документы и Справочники в JSON

Обмен через XML v8 1cv8.cf Абонемент ($m)

Пример выгрузки всех данных Документа или Справочника в JSON

1 стартмани

20.06.2019    13303    17    Teut_Vlad    15    

Перенос документов из УТ 10.3 в УТ 11.4

Обмен через XML Перенос данных из 1C8 в 1C8 v8 v8::ОУ УТ10 УТ11 УУ Абонемент ($m)

Перенос основных документов из ут 10.3 в ут 11.4. Правила сделаны на основании помощника перехода, поэтому доступен перенос справочников и остатков.

3 стартмани

30.04.2019    10042    148    leobrn    10    

Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка предназначена для загрузки и выгрузки данных по правилам обмена в любых конфигурациях, реализованных на платформе 1С:Предприятие 8.3. Преимуществом перед типовой обработкой является добавленный функционал: #1. Установка произвольных фильтров на выгружаемые объекты при помощи механизма системы компоновки данных #2. Сохранение различных вариантов настроек (сохраняются правила обмена, фильтры выгрузки, параметры, настройки обработки) - что позволяет гибко настроить в базе-источнике фильтры для выгрузки объектов по различным правилам обмена для различных баз-приемников, сохранить выполненные настройки и в будущем уже пользоваться этими вариантами настроек. Проверялась на 1С:ERP Управление предприятием 2.4.7.141.

1 стартмани

29.04.2019    16285    279    sapervodichka    20    

Выгрузка и загрузка данных XML 8.3 на управляемых формах с отбором и конструктором запроса (в полной мере возможности реализованы для версии 1С:Предприятия 8.3 выше версии 8.3.5)

Обмен через XML Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

В этой форме всегда не хватало конструктора запросов для удобной выгрузки уникальных элементов по ссылке. Теперь он здесь есть. Как только стало возможным создавать конструктор запроса в управляемых формах, я добавил её в стандартную обработку. Необходимо напомнить, что обработка функционирует полноценно только с версии 8.3.5 1С:Предприятия 8.3.

1 стартмани

24.04.2019    8246    38    AlexandrSmith    1    

Альтернативное получение значения из хранилища значения. Свой ХранилищеЗначения.Получить();

Распределенная БД (УРИБ, УРБД) Обмен через XML v8 1cv8.cf Абонемент ($m)

Данная публикация не претендует на использование в продакшене, но когда "Нельзя, но очень хочется" в отношении получения ооочень больших данных из ХранилищаЗначения и когда сама платформа не может получить значение и падает, при этом, перед падением съедает почти всю память. Это своего рода костыль, в безвыходной ситуации. Речь пойдет про получение больших данных из хранилища значения в файловых базах на 32-х битной платформе. Данное не касается 64-х битных клиентов/серверов где нет ограничения на размер потребляемой памяти (верней есть, но доступно памяти гораздо больше, чем 32-х битному приложению без PAE).

1 стартмани

22.04.2019    8961    5    markers    0    

Выгрузка - загрузка данных в XML с отбором по организации Промо

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Выгрузка - загрузка данных в XML с отбором по организации (УФ)

1 стартмани

25.05.2014    47230    303    buganov    42    

Выгрузка и загрузка данных XML с гибкими отборами

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Обработка выгрузки и загрузки данных через XML между идентичными конфигурациями с возможностью установки произвольных отборов на выгружаемые объекты.

1 стартмани

07.04.2019    19590    481    sapervodichka    7    

Формирование xml файла ЭДО (СБИС, Диадок, Такском и т.п.) для типовых документов (счета-фактуры, накладные)

Внешние источники данных Обмен через XML Документооборот и делопроизводство Документооборот и делопроизводство v8 1cv8.cf Абонемент ($m)

Не все типовые документы типовых конфигураций 1С можно выгрузить в файл формата xml ЭДО. Например счет-фактуру, на текущий момент момент это не предусмотрено. Обработка позволяет сделать это.

4 стартмани

30.03.2019    40464    225    capitan    85    

Перенос данных КА 1.1 -> КА 2

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 КА2 Россия Абонемент ($m)

Перенос данных КА 1.1 => КА 2 с помощью правил обмена данными в формате XML КД 2 (переносятся остатки, документы, справочная информация).

5 стартмани

20.03.2019    17057    264    gudogu    143    

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1 Промо

Обмен через XML Зарплата Перенос данных из 1C8 в 1C8 Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    39848    153    kostya_whiskas    24    

Обработка для выгрузки и загрузки данных XML 8.3. С отбором, предпросмотром данных и сохранением настроек

Обмен через XML Перенос данных из 1C8 в 1C8 v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка Выгрузки и загрузки данных XML 8.3 на управляемых формах. Универсальная обработка "Выгрузка и загрузка данных XML" производит полную или частичную выгрузку данных информационной базы в файл в формате XML. Впоследствии этот файл может быть загружен в информационную базу с помощью этой же обработки. Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью. (Описание взято с ИТС)

1 стартмани

07.03.2019    15023    237    Gmix    7    

Правила обмена УПП 1.3 -> БП 3.0 (+ БП КОРП 3.0 + перенос остатков)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 УПП1 КД БП3.0 БУ Абонемент ($m)

Актуальные правила обмена: УПП 1.3.137.1 -> БП 3.0.76.77; УПП 1.3.137.1 -> БП КОРП 3.0.76.77; УПП 1.3.128.1 -> БП 3.0.74.63; УПП 1.3.128.1 -> БП КОРП 3.0.74.63; УПП 1.3.123.3 -> БП 3.0.71.83; УПП 1.3.123.3 -> БП КОРП 3.0.71.83; УПП 1.3.118.1 -> БП 3.0.68.61; УПП 1.3.118.1 -> БП КОРП 3.0.68.61.

1 стартмани

04.03.2019    12534    289    Смешной 1С    44    

Выгрузка данных из Бухгалтерии ред. 3.0 в Управление небольшой фирмой, ред. 1.6

Обмен через XML Перенос данных из 1C8 в 1C8 v8 УНФ БП3.0 Россия УУ Абонемент ($m)

Выгрузка данных из 1С БП 3.0 в УНФ 1.6. Обработка переносит документы по банку, кассе, движения ТМЦ + справочники контрагентов, номенклатуры и другие связанные справочники. Полный список документов на скриншоте.

1 стартмани

08.02.2019    12763    215    dinarz    69    

Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3 Промо

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v7.7 v8 1cv7.md Россия Абонемент ($m)

Воспользоваться современным средством переноса данных "Конвертация данных 3.0.5.3" можно только выгрузив из системы - источника данных XML в формате обмена данными EnterpriseData. В этой публикации можно скачать приемы выгрузки из 1С 7.7 универсального формата обмена для Конвертации данных 3. Выполняем перенос данных из «1С:Предприятие 7.7» в «1С:Предприятие 8.3». Используем Конвертацию данных КД 3.0 из 1c 7.7 --> 1С 8.3. На первой стадии еще не опубликовано иного способа подложить файл для Конвертации данных 3 кроме как сформировать его вручную, постараемся решить данную проблему.

1 стартмани

26.02.2018    39464    52    ksnik    3    

1С: Розница/УТ 10.3. ЕГАИС, загрузка акцизных марок в справочник Штрихкоды и Упаковки, регистр Акцизные марки из XML-сообщений входящих ТТН ЕГАИС + Печать акцизных марок

Розничная торговля Обработка справочников Обмен через XML Ценники Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Пакетная загрузка/обновление списка акцизных марок ЕГАИС из входящих ТТН ЕГАИС. Для 1С Розница 2.2.9.ХХХ/2.2.10.ХХХ//2.2.11.ХХХ/2.2.12.ХХХ/Управление торговлей 10.3.49.ХХХХ и выше с возможностью печати

1 стартмани

31.01.2019    22249    169    independ    123    

Ручная выгрузка и загрузка данных через универсальный обмен данными с настройками (расширение, платформа 8.3+)

Обработка документов Обработка справочников Обмен через XML Перенос данных из 1C8 в 1C8 v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Данное расширение (не требует изменения конфигураций) служит как надстройка для конфигураций, у которых обмен между базами происходит через универсальный формат (EnterpriseData), с использованием стандартных правил конвертации, которые уже есть в конфигурации. Интерфейс адаптирован для простых пользователей, сделан общий отбор по Организации для всех документов, имеется пару настроек для передачи в параметры конвертации, которые расположены в общем модуле конфигураций, а так же есть возможность выбора запуска - в фоне или в текущем сеансе. Теперь не нужно настраивать обмен между базами, для того чтоб просто перенести нужные документы. Подходит точно для УТ 11.4, БП 3.0.67, КА 2.4.5, Розница 2.2.9 (Обновление 1.2 от 02.03.2019)

2 стартмани

19.01.2019    23079    137    hakerxp    10    

Перенос данных КА 1.1.115.1 => БП 3.0.75.104 (перенос остатков, документов, зарплатный блок и справочной информации)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 БП3.0 Россия Абонемент ($m)

Переносятся: остатки по счетам 01, 02, 10, 20, 41, 60, 62, 71, 97 и их субсчетам; документы; отдельно можно перенести справочники (номенклатура, контрагенты, договоры контрагентов, организации, склады, физические лица, сотрудники).

5 стартмани

22.12.2018    15566    364    gudogu    157    

Универсальный обмен данными в формате XML (2.1.8) 8.3 УФ с отбором и без модальности

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

К типовой обработке "Универсальный обмен данными в формате XML" добавлены отбор и возможность работать в конфигурациях с отключенным режимом модальности.

1 стартмани

07.11.2018    24149    308    nicxxx    7    

SOAP для чайников

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Немножко про SOAP сервис. И пример работы с подключением и получением данных по SOAP за 5 минут.

1 стартмани

05.09.2018    49911    43    dusha0020    18    

003. Почему я больше не люблю "Выгрузку Загрузку XML"

Обмен через XML v8 1cv8.cf Абонемент ($m)

Ниже будет много букаф, но если коротко — можно ускорить этот инструмент в 1000 раз

1 стартмани

03.09.2018    7996    8    Nikola23    8    

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора. Промо

Обработка документов Универсальные обработки Обмен через XML v8 Абонемент ($m)

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

1 стартмани

07.09.2016    41601    156    Aphanas    4    

Заполнение документа Word без ComОбъект

Практика программирования v8 1cv8.cf Абонемент ($m)

Идея написать публикацию пришла после прочтения очередного рассказа о том, как файл Word заполнялся через COM-объект в клиент-серверном варианте. При этом падал Сервер 1С. Зачем в принципе использовать файлы Word как шаблоны? Ну, допустим, в организации используется некая внутренняя отчетность, выполнения в корпоративном стиле, и переделать ее на привычные табличные документы нет возможности.

1 стартмани

08.07.2018    15608    nbeliaev    27    

Простой эмулятор вызова веб-сервиса 1С с просмотром результата

Обмен через XML WEB v8 1cv8.cf Россия Абонемент ($m)

Последнее время все чаще сталкиваюсь с разработкой веб-сервисов средствами 1С. Для ускорения разработки и отладки написал внешнюю обработку. На какой-то сверх-крутой функционал она не претендует, но, может, кому-то пригодится.

1 стартмани

24.04.2018    13002    19    anvolkov1cbit    9    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Обмен через XML Перенос данных из 1C8 в 1C8 Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов, справочников и планов видов расчета из конфигурации 1С ЗУП 2.5 в ЗУП 3.1.

3 стартмани

28.03.2018    29631    413    Cobranet123    64    

Загрузка файлов грузовых таможенных деклараций из файлов ФТС формата xml (Альта софт, Сигма софт, Декларант +) Промо

Внешнеэкономическая деятельность (ВЭД) Обмен через XML Внешнеэкономическая деятельность (ВЭД) v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:" если что. Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные)

5 стартмани

09.08.2016    47076    189    capitan    315    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов из ЗУП 2.5 в ЗУП 3.1 - позволяет снизить объем работ при опытной эксплуатации ЗУП 3.1 параллельно с ЗУП 2.5.

1 стартмани

04.12.2017    33245    498    AntonH851    38    

XML JSON преобразователь

Обмен через XML v8 1cv8.cf Россия Абонемент ($m)

Обработка демонстрирует возможность программного преобразования XML в JSON и обратно без подключения внешних модулей.

1 стартмани

11.10.2017    16928    50    m-rv    4    

Усовершенствованный редактор правил обмена КД2 Промо

Обмен через XML v8 КД Абонемент ($m)

РПО-2М – мощный редактор правил обмена для КД 2. Позволяет ускорить свою разработку и ознакомление/доработку чужих правил обмена. Превосходство над встроенным редактором достигается за счет удобного функционального интерфейса, применения шаблонизации кода правил, богатого инструментария, упрощающего разработку, и интеграции с Инструментами Разработчика.

3 стартмани

16.09.2015    36463    185    Lem0n    40    

Простой способ передачи файла с клиента на сервер и обратно. Пример работы с XML

Практика программирования Обмен через XML v8 1cv8.cf Россия Абонемент ($m)

В статье представлен простенький пример передачи файла с клиента на сервер и с сервера на клиент. Плюс к этому разобраны методы работы с записью XML. Платформа 8.3.10.2466. Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.49.21).

1 стартмани

05.09.2017    23749    16    Sergant007007    9    

Правила обмена ЗУП 3.1 - БП 2.0 и ЗУП 3.1 - УПП 1.3 (отражение, ведомости и справочники)

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::БУ v8::СПР БП2.0 БП3.0 ЗУП3.x Россия БУ Абонемент ($m)

Правила обмена для выгрузки документов "Отражение зарплаты в бухучете", "Ведомость в банк", "Ведомость в кассу", справочников "Сотрудники" и "Физические лица"

1 стартмани

01.08.2017    79559    1560    forseil    209    

«Горыныч - то НЕ НАСТОЯЩИЙ!» … или О Конвертации Данных ред.3 (КД 3) и обменах в универсальном формате Enterprise Data… доступным русско-народным языком

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

Тем, кто хочет быстро разобраться с темой инструмента Конвертация данных 3.0 и технологией обмена по новому формату 1С, активно применяемому во всех новых конфигурациях от 1С на БСП, расширяющем возможности интеграции, пакет полезных материалов.

1 стартмани

13.06.2017    21742    142    Davlad_A    16    

1С:Интеграция ЕГАИС + Инвентаризация на ТСД Промо

Обработка справочников Обмен через XML Оптовая торговля Оптовая торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Интеграция ЕГАИС модуля для 1С: 8.3 + модуль WMS контура для инвентаризации алкогольных марок на ТСД.

1 стартмани

10.12.2015    36916    27    JetBrain    5    

"Конвертация данных" + Git. Решение проблемы различий в файлах

Инструментарий разработчика Обмен через XML v8 КД Абонемент ($m)

Как известно, типовая конфигурация «Конвертация данных» обладает одним недостатком, мешающим работать с ней в Git-е. Если выгруженные из нее правила обмена загрузить в другую КД, а потом снова выгрузить, то полученные два файла будут очень сильно отличаться друг от друга, и при сравнении (diff) доработок будет невозможно провести код-ревью, равно как найти сами изменения, которые закоммитил разработчик.

1 стартмани

08.06.2017    25172    41    stas_ganiev    13    

Пообъектный разбор разметки

Инструментарий разработчика Обмен через XML v8 Абонемент ($m)

Обработка облегчает разбор разметки XML и позволяет обращаться с узлами (элементами, тэгами) почти как с объектами, не привлекая XDTO и не описывая формат предварительно. При этом обходится без загрузки всего файла в оперативную память, что позволяет читать файлы любого размера.

1 стартмани

26.04.2017    9347    4    9-pm    8    

XMPP(jabber) на чистом 1С

Обмен через XML v8 1cv8.cf Абонемент ($m)

На сайте infostart, есть несколько реализаций работы 1С с протоколом XMPP (jabber), но в основном они на использование сторонних библиотек (нативных), которые надо регистрировать в операционке (и только в винде), или на основе других систем - php, python и т.п. Предлагаю пример реализации отправки сообщения через этот протокол только средствами 1С.

1 стартмани

26.12.2016    16439    14    kodnik    10    

Простой универсальный обмен между отличающимися конфигурациями. Код открыт! (СериализаторXDTO,ПостроительDOM) +примеры использования Промо

Обмен через XML v8 1cv8.cf Абонемент ($m)

Очень удобная обработка всего с двумя "командами": Выгрузить(Что, Куда) Загрузить(Откуда)

1 стартмани

02.09.2015    23942    100    Mi4man    15    

Загрузка XML в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

Случайно наткнулся на статью с алгоритмом загрузки XML-строки в дерево значений и подумал, а не проще ли сделать это через механизм XDTO рекурсивно. На мой взгляд, решение получилось неплохое - даже атрибуты грузит..

1 стартмани

17.11.2016    25156    52    starik-2005    26    

Навигатор по файлу обмена Промо

Универсальные обработки Обмен через XML v8 1cv8.cf Абонемент ($m)

Просмотр содержимого XML-файла выгрузки данных

1 стартмани

02.04.2014    30013    37    RocKeR_13    24