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

















Воспользоваться современным средством переноса данных «Конвертация данных 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С» разработан формат обмена данными EnterpriseData. Формат основан на XML и является бизнес-ориентированным – описанные в нем структуры данных соответствуют бизнес-сущностям (документам и элементам справочников), представленным в программах «1С», например: акт выполненных работ, приходный кассовый ордер, контрагент, договор и т. п. Это делает формат интуитивно понятным и легким в использовании.

Формат EnterpriseData предназначен для обмена данными внутри компании (в том числе между разнородными и территориально удаленными информационными системами) и призван покрыть все сферы деятельности предприятия – финансы, производство, закупки и продажи, складские операции и т. п. 

Я считаю что  EnterpriseData это удобный современный стандарт, применение которого дает массу преимуществ по переносу данных программисту не особо знакомому с современными конфигурациями 8.3. Способов перенести даные из 7.7 в 8.3 безусловно много, но конкретно этот способ силён заимствованной методикой универсального переноса EnterpriseData, обеспечивающего корректное заполнение любых документов современной конфигурации.   

Особенности отладки EnterpriseData

Для настройки обмена на принимающей стороне я использовал публикацию 1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) //infostart.ru/public/695523/

Данная публикация родилась в процессе перехода с устаревшей очень сильно переписаной (для торговли) комплексной 1С 7.7 на современную 1С 8.3 ЕРП. Самая большая работа по созданию обмена была проделана в 7-ке, разработаны генераторы текста XML для отправки отдельных документов. Однако еще предстоит узнать Сможем ли мы создать собственные правила конвертации? Еще предстоит разобраться как должен выглядеть модуль менеджера обмена данными правил конвертации в 7ке. Кому интересна данная тема прошу Вас, не проходить мимо, присоединяйтесь к обсуждению на форуме и давайте поможем друг другу и вместе найдем истину, как эффективно переводить такие конфигурации на современные 8.3.

По ссылке https://its.1c.ru/db/metod8dev#content:5934:hdoc доступно описание формата  EnterpriseData. Однако руководствоваться данным описанием к действию нельзя. Чтобы выполнить перенос данных 7.7 — 8.3 НУЖНО ОТКРЫТЬ ОПИСАНИЕ СХЕМЫ В КОНФИГУРАТОРЕ 1С:Предприятия 8 (принимающей системы) и выполнить формирование XML в соответствии с ним.

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

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

 

 Подробнее об ошибках связанных с несоблюдением последовательности вывода полей — под спойлером.

Нужно внимательно называть поля так, как они называются в схеме XDTO в конфигурации. В пакете XDTO дерева конфигурации можно найти все объекты, на которые указывают сообщения об ошибках, выводимые при импорте данных. Например, если назвать поле <ВидРасчета>СПоставщиком</ВидРасчета> а в схеме <xs:element name="ВидРасчетов" type="tns:ВидыРасчетовСКонтрагентами"> то получим ошибку "Не установлено значение одного из следующих свойств: ВидРасчетов".

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

 

 Еще о решении проблем связанных с правильным заполнением полей XML файла.

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

Например для подстановки определенного пользователя, если он не создался из-за неверной передачи через XML, поможет следующий код 1C 8.3: 

 

 О том, как изменить не существующую (битую) ссылку в 1С 8.3 на выгружаемое через формат значение.

Еще может возникнуть ошибка преобразования данных XDTO "Структура объекта не соответствует типу". Например если в выписке банка (расход) не заполнен банковский счет контрагента, можно получить сообщение с указанием номера предыдущего выгружаемого документа и текстом "не установлено значение свойства БИК".

 

  Решение по возникшей ошибки преобразования данных XDTO "Структура объекта не соответствует типу"

Иногда бывает сложно сразу понять, в каком именно месте заключается ошибка. Например вид ошибки, Структура объекта не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.5}РасшифровкаПлатежа. (никакой другой информации сообщение об ошибке не несет).

Дело в том, что внутри "РасшифровкаПлатежа" я написал "РасшифровкаПлатежаСтрока" а должно было быть "Строка". Было неправильно:

РасшифровкаПлатежа.ДобавитьЗначение(РасшифровкаПлатежаСтрока,"РасшифровкаПлатежаСтрока");

Исправил:

    РасшифровкаПлатежа.ДобавитьЗначение(РасшифровкаПлатежаСтрока,"Строка");

Теперь внимательо следим за названием каждого элемента схемы XDTO пакета.

 

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

 

 Об ошибке "Нарушен порядок следования значений свойств"

Отправка из 1C 7.7 EnterpriseData

На Инфостарт есть единственный пример генерации файла обмена EnterpriseData формата 1.2, смотрите публикацию План обмена в формате "EnterpriseData" для 1С 7.7. В нем описана отправка и получение XML заказа и реализации EnterpriseData из 1С 7.7.

Мой код выгружает приходный кассовый ордер из Комплексной конфигурации редакции 4.2 универсального формата обмена EnterpriseData версии 1.5 пригодный для загрузки в любую современную конфигурацию, нет необходимости обновлять устаревшую конфигурацию-источник. Правила выгрузки я создал в  "Конвертация данных 3.0.5.3" и перенес в данный код в виде комментариев (эти комментарии начинаются с номера 2). Попутно у меня открыт пример из описания формата EnterpriseData и собственно само описание, которое тоже присутствует в комментариях (описание формата в комментариях начинается с номера 1). 

 

 Привожу текст процедуры "Сформировать" генерирующей файл EnterpriseData для документа 1С 7.7 (ПКО)

В результате работы процедуры получился следующий XML файл, который успешно загружен в 1С 8.3.

 

 Образец XML-файл EnterpriseData. Пример спецификации документа 1С 1.7 Приходный кассовый ордер (ПКО)

Его загрузка приводит к появлению в 1С 8.3 вот такого документа (приводится печатная форма результата загрузки из 1С 8.3.

Данный опубликованный выше модуль 1С 7.7 EnterpriseData выгрузки документа ПКО в XML получился не лаконичным (даже сумбурным) ввиду того, что я сперва заточил его под распечатанный из статьи ИТС стандарт и впоследствии по выявлении несогласованности его с реальной схемой вынужден был в корне перекроить модуль на основании выгруженной схемы XSDschemeEntepriseData15.xsd формирования XML.

В схеме EnterpriseData присутствует несколько шаблонов импорта кассовых и банковских документов (которым в 7.7 соответствуют разные коды операций).

 

 Вот мой способ выбрать конкретные подходящие шаблоны.

На основании данных выявленных используемых кодов операций проводим сопоставление с шаблонами.

Затем, в каждом кодов операций (и соответствующих им шаблонах) в кассовых документах могут быть выбраны несколько статей движения денежных средств, которые тоже нужно сопоставить между собой.

 

 Сопоставляем статьи движения денежных средств между 7.7 и 8.3

Выгрузка Расходного кассового ордера (РКО) из 1С 7.7 в EnterpriseData.

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

 

 Комбинирование для комментариев 1С 7.7 целевой схемы выгрузки данных из исходного XDTO пакета

При составлении данной структуры с помощью XML редактора WMHelp можно перемещаться по уровням вложенности схемы с помощью контекстного меню Go to Definition и главного меню View — Navigate Backward.

Это главное преимещество специализированного XML редактора (потому что в просмотрщике пакета XDTO кофигуратора не хватает рекурсии, а с помощью простого текстового редактора все составные типы прийдется соединять с помощью копи-паста из разных фрагментов текста, что довольно неудобно). Да и структуры собственно не вышло, так как правильно последовательность открывающихся и закрывающихся тегов при копи-пасте восстановить оказалось сложно. Вывод — формирование кусочковой схемы в комментариях сложное и неблагодарное занятие.

 

 Текст следующего фрагмента программы, выгружающего документ РКО в 1С 7.7 EnterpriseData

Привожу листинг сформированного XML  1С 7.7 EnterpriseData.

 

 XML файл выгрузки РКО из устаревшей системы 1С 7.7 (Комплексной конфигурации версия 4.2)

Рассмотрим еще один способ визуализации информации об объектах пакета EnterpriseData версии 1.5 — запрос в консоли запросов на языке запросов 1С 8.3 в конфигурации Конвертация данных 3.

 

 Текст запроса выводит иерархически упорядоченную таблицу полей формата EnterpriseData версии 1.5

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

 

 Результат выполнения запроса — структура полей XDTO EnterpriseData 1.5

Таким образом Данный запрос позволил нам автоматически сформировать структуру тегов для аполнения в 7ке.
Тут можно на шаг продвинуться к созданию правил переноса данных для 7ки. Разработаем алгоритм, который заполнит часть кода 1С 7.7 автоматически.

 

 Формируем автоматически часть текст программы 1С 7.7 который создает XML EnterpriseData 1.5

Тут же в запроснике в Конвертации данных 3 из результатов приведенного выше запроса можно открыть свойство формата и увидеть список его разрешенных значений, очень удобно.

Создаем модуль экспорта 1С 7.7 EnterpriseData для документа "Строка выписки банка (приход)".

Кормментарии к разработанному модулю.
Два параметра функций название которых начинается словом «Добавить» (Контрагент = "", ТекущийДокументСсылка) нужны для управления выводом вложенности полей там, где схемой заложена рекурсия (когда поля взаимно ссылаются друг на друга). Например если указать конкретного контрагента в первом параметре, его банковский счет к структуре присоединяться не будет, а обрежется. А если не передать контрагента явно указав только текущий документ — будет принято решение о том, что в данном случае описывается младший узел схемы в котором схемой требуется передать сведения об основном банковском счете контрагента.
 
Документ приемника содержит табличную часть. Информация о представлении табличной части была на ИТС, в Интернет по ссылке https://its.1c.ru/db/metod8dev#content:5851:hdoc можно видеть пример:
****************************************************************************************************
****************************************************************************************************

В нашем случае структура строк табличной части вот такая (схему строит XML-редактор, берем из него):

****************************************************************************************************

В конфигурации "Конвертация данных 3" можно открыть свойства формата, левее есть колонка "Обязательное поле":

****************************************************************************************************
Выдержка из описания схемы XDTO строки табличной части расшифровки платежа, обратите внимание — у обязательных полей отсутствует свойство minOccurs="0":

 <xs:complexType name="РасшифровкаПлатежа.Строка">
<xs:sequence>
<xs:element name="Заказ" minOccurs="0">
<xs:complexType>
<xs:choice>
<xs:element name="ЗаказКлиента" type="tns:КлючевыеСвойстваЗаказКлиента" minOccurs="0"/>
<xs:element name="ЗаказПоставщику" type="tns:КлючевыеСвойстваЗаказПоставщику" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="СтатьяДДС" type="tns:КлючевыеСвойстваСтатьяДДС" minOccurs="0"/>
<xs:element name="Сумма" type="tns:ТипСумма"/>
<xs:element name="СуммаВзаиморасчетов" type="tns:ТипСумма" minOccurs="0"/>
<xs:element name="СуммаНДС" type="tns:ТипСумма" minOccurs="0"/>
<xs:element name="СтавкаНДС" type="tns:СтавкиНДС" minOccurs="0"/>
<xs:element name="ДанныеВзаиморасчетов" type="tns:ОбщиеСвойстваДанныеВзаиморасчетов"/>
<xs:element name="ВидРасчетовРасширенный" minOccurs="0">
<xs:complexType>
<xs:choice>
<xs:element name="ВидРасчетовСПокупателямиПоставщиками" type="tns:ВидыРасчетовСПокупателямиПоставщиками" minOccurs="0"/>
<xs:element name="ВидРасчетовПоКредитамИЗаймам" type="tns:ВидыРасчетовПоКредитамИЗаймам" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="СпособПогашенияЗадолженности" type="tns:СпособыПогашенияЗадолженности" minOccurs="0"/>
<xs:element name="ДокументРасчетов" type="tns:СоставнойДокументРасчетов" minOccurs="0"/>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>

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

 

1С 7.7 EnterpriseData Строка банковской выписки (приход) -> Поступление безналичных денежных средств

Написали программу, формируем файл.

 

 Сформирован файл XML выгрузки документа Строка выписки банка (приход) 1С 7.7 в ПБДС (EnterpriseData).

 Теперь в общем понятно как действовать. На следующий документ переработаю типизацию комментариев, впредь номером буду обозначать — уровень сущности внутри структуры XDTO. Попробую прикрутить парсер XML.

Разработка переноса из 1С 7.7 Строки выписки банка (расход) в EnterpriseData

Добавил использование парсера "AddIn.XMLParser" из "v7plus.dll". Особенность моего подхода в том, что можно использовать в парсере поля XML, созданные вручную в виде сложного текстового фрагмента без использования парсера и оформленные в виде блоков текста (на тот случай, когда часть элементов XML просто заимствована из современной учетной системы, в которую мы переносим данные). Если требуется добавить в XML самописный текстовый узел используем методы ADODB.Stream. С учетом заимствования ранее выгруженных узлов и применения парсера теперь подготовка тела XML занимает реально короткое время. Но подход конечно нужно продолжать унифицировать для применения на других объектах.

За пример работы с парсером для выгрузки XML большое спасибо Денису Новоселову  за его open source проект План обмена в формате "EnterpriseData" для 1С 7.7.

 

 Выгрузка строки банка (расход), 1С 7.7 EnterpriseData (используется парсер XML)

Сформирован файл, успешно загруженный в современную конфигурацию.

 

 1С 7.7 EnterpriseData документа Строки выписки банка (расход) -> Списание безналичных денежных средств

Показанный подход суммируюет простоту применения парсера и удобство заимствования текстовых фрагментов XML из выгрузки конфигурации — приемника.

3 Comments

  1. yurazyuraz

    Тема интересная, буду наблюдать за развитием.

    Reply
  2. Solikamsk

    Добрый день.

    Чтобы настроиться на формат выгрузки из 7.7 я поначалу попытался из самой 8-ки почти пустой БСП + Справочник Контрагенты выгрузить пару группу и элемент. Элемент выгружается, а вот группа ругается. (см. ругань ниже). Видимо надо отдельно сделать ПОД для группы и элемента. Но в «Демо КД 3». Там этот элемент один.. Куда копать?

    В ходе выполнения операции возникли ошибки:

    Событие: Отправка.

    ПОД: Справочник_Контрагенты_Отправка.

    ПКО: Справочник_Контрагенты.

    Объект: Справочник объект: Контрагенты, ГруппаФизЛица (e1cib/data/Справочник.Контрагенты?ref=8203408d5cd341b011e8ba64ba63a7de).

    {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(607)}: Ошибка при вызове метода контекста (Проверить)

    ОбъектXDTO.Проверить();

    по причине:

    Ошибка проверки данных XDTO:

    Структура объекта ‘/КлючевыеСвойства’ не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.6}КлючевыеСвойстваКонтрагент

    Проверка свойства ‘Код’:

    форма: Элемент

    имя: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.6}Код

    тип:

    Не установлено значение одного из следующих свойств: ЮридическоеФизическоеЛицо

    Данные могут быть выгружены не полностью.

    Reply
  3. MaxS

    (2) Для группы нужно использовать другой объект формата — Справочник.КонтрагентыГруппа и другие ПОД и ПКО.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *