Выгрузка документа в XML произвольной структуры (+пример для выгрузки в ECOD)






Обновлено до версии 0.7.
Добавлена функция пропуска заголовков табличных частей.
Исправлены баги в версии без сохранения (если стандартная версия выдает ошибки)

 

Цель обработки:

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

Возможности обработки:

  • Создание настройки выгрузки на основе существующего xml-файла. Вам не нужно создавать структуру выгрузки с нуля.
  • Указание соответствия узлов/атрибутов в дереве в xml-файла и дерева реквизитов документа для выгрузки.
  • Дерево реквизитов документов можно разворачивать до любого желаемого уровня.

  • В список реквизитов входят свойства и категории.

  • Для объекта типа «Номенклатура» в список реквизитов входят данные регистра сведений «Номенклатура контрагентов»
  • Использование форматирования выгружаемых значений
  • Использование таблицы соответствия для фиксированной замены выгружаемых значений
  • Работа с табличной частью документа.

  • Указание кодировки конечного xml-файла
  • Сохранение настроек в файл

  • Сохранение настроек в типовой справочник Сохраненные настройки (для конфигураций без типового справочника отдельная версия обработки)

  • Использование обработки как внешней печатной формы

 

Чего обработка не может (возможно только пока):

  • управляемая форма
  • работа с пространством имён (нет образца для проверки)
  • выгрузка списка документов
  • выгрузка табличных частей нескольких документов в один файл
  • использование произвольных запросов для установки значения для выгрузки
  • работа с csv файлами
  • работа со схемами XML

Подробнее.
Настройки.

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

Соответствие между реквизитом/табличной частью/строкой табличной части документа и узлом/атрибутом через колонку Реквизит документа. При нажатии кнопки «Выбрать»(F4) откроется структура документа, где можно выбрать необходимое. При этом можно практически любой реквизит «развернуть» ещё дальше, т. е. получить реквизиты реквизита. Для этого нужно нажать правой кнопкой на реквизит и выбрать соответствующий пункт в меню. Получить табличную часть для реквизита строки табличной части нельзя.

Следующей необходимой для заполнения колонкой является Тип, где указывается тип узла. Значимыми являются типы Реквизит, Табличная часть и Строка табличной части.

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

Колонка Формат позволяет установить форматную строку для выгружаемого значения.

 

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

 

После всех настроек их можно сохранить в файл или в типовой справочник Сохраненные настройки.

 

Использование в качестве обработки.

  • Загрузить настройки из файла или типового справочника Сохраненные настройки.

  • Выбрать документ для выгрузки

  • Нажать кнопку Выгрузить документ

  • Выбрать каталог и имя файла.

  • Profit

 

Использование в качестве печатной формы:

  • Загрузить обработку в качестве внешней печатной формы

  • Указать тип документа

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

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

  • Profit

 

З.Ы. Просто и удобно. Не на чем пока проверить использование атрибутов, т. к. ECOD использует только узлы.

З.Ы.Ы. Настройка для ECOD потребует изменения для 4 реквизитов: Buyer — ILN, Seller — ILN, CodeByBuyer, DeliveryPoint – ILN. У меня данные реквизиты хранятся в качестве свойств элементов справочников Контрагенты и Организация — это коды контрагентов и организации в системе ECOD и системе покупателя.

 

 

44 Comments

  1. Поручик

    (0) Голая баба обнажённая девушка с пистолетом смотрелась бы креативней.

    Reply
  2. anig99

    Была идея — другая картинка из этого фильма (который в тему обработки), но там цензура почти всё закрывает.

    Reply
  3. Поручик

    1C:Управление небольшой фирмой тут ни к чему, она на управляемых.

    1С:Управление торговлей 10.3.13.2

    При открытии

    Обнаружены ошибки
    
    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(430,2)}: Переменная не определена (СохранениеНастроек)
    <<?>>СохранениеНастроек.СохранитьНастройкуОбъекта(СохраненнаяНастройка, СтруктураНастроек);
    

    Модуль СохранениеНастроек есть, если не изменяет память, только в БП.

    Reply
  4. anig99

    Щас подправлю. и конфу и код

    Reply
  5. Поручик

    Если только в УНФ не использовать в режиме толстого клиента, тогда можно оставить.

    Reply
  6. anig99

    (5) тогда оставлю, чтобы был стимул управляемую форму быстрее дописать

    Reply
  7. anig99

    (5) добавил версию для конф без справочника Сохраненные настройки

    Reply
  8. Ish_2

    А где ..?

    Даешь tits !

    Reply
  9. anig99

    (11) развивай фантазию! Вон как по одной только шевелюре Поручик и Eugeneer разошлись.

    Reply
  10. Alraune

    Народ, не хулиганьте 🙂

    Reply
  11. Ish_2

    (13) Посты (9),(10) нужно удалить. Как неприличные.

    Пост (11) как конструктивное предложение — нужно оставить.

    Reply
  12. CheBurator

    Правильная обработка. Только на днях боролся с корусовцами — кк-то тяжело валидировать файл, не имея формальной схемы…

    Reply
  13. 1cmax

    однозначно ++

    недавно занимался подобным, размещал метаданные в копии файла с данными путем типизации и разметки элементов в xml файле.

    будет время — выложу

    Reply
  14. cool.vlad4

    Чудеса науки?

    Reply
  15. anig99

    (17) угу…или «Ох уж эта наука»

    Reply
  16. anosin

    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(178)}: Поле объекта не обнаружено (НазначенияСвойствКатегорийОбъектов)

    ВыборкаПВХ = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Выбрать();

    Reply
  17. anig99

    (19) конфа?

    Reply
  18. anosin

    БП

    Reply
  19. anig99

    (21) поправил. сейчас не должно ругаться

    Reply
  20. iov
    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(434,2)}: Переменная не определена (СохранениеНастроек)

    <<?>>СохранениеНастроек.СохранитьНастройкуОбъекта(СохраненнаяНастройка, СтруктураНастроек);

    УТ 10.3

    Reply
  21. anig99

    (23) запусти вариант «ВыгрузкаXML_Версия_Без_Сохранения_В_Справочник.epf»

    Reply
  22. iov

    а это он и есть 😀

    Reply
  23. iov

    Процедура СохранитьНастройку() Экспорт

    СтруктураНастроек = ПолучитьСтруктуруДляСохранения();

    //СтруктураНастроек.Версия = «2.00»;

    СохранениеНастроек.СохранитьНастройкуОбъекта(СохраненнаяНастройка, СтруктураНастроек);

    КонецПроцедуры

    Reply
  24. iov
    {Форма.Форма.Форма(40,27)}: Переменная не определена (ТиповыеОтчеты)

    ТаблицаВариантовОтчета = <<?>>ТиповыеОтчеты.ПолучитьТаблицуДоступныхВариантов(ТиповыеОтчеты.ПолучитьИдентификаторОбъекта(ЭтотОбъект), глЗначениеПеременной(«глТекущийПользователь»));

    {Форма.Форма.Форма(40,75)}: Переменная не определена (ТиповыеОтчеты)

    ТаблицаВариантовОтчета = ТиповыеОтчеты.ПолучитьТаблицуДоступныхВариантов(<<?>>ТиповыеОтчеты.ПолучитьИдентификаторОбъекта(ЭтотОбъект), глЗначениеПеременной(«глТекущийПользователь»));
    Reply
  25. iov

    👿

    Reply
  26. iov

    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(208)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить().Выбрать();

    по причине:

    по причине:

    {(19, 2)}: Таблица не найдена «Справочник.КатегорииОбъектов»

    <<?>>Справочник.КатегорииОбъектов КАК КатегорииОбъектов

    Бухгалтерия предприятия, редакция 2.0 (2.0.22.1)

    Reply
  27. anig99

    (27)(28) Как я уже сказал, «ВыгрузкаXML_Версия_Без_Сохранения_В_Справочник.epf» лишена части функционала, но зато ошибок не выдает

    Reply
  28. iov

    (30) как я уже сказал именно её я скачал и она эти ошибки и выдает

    Reply
  29. iov

    ВыгрузкаXMLБезСохранения.epf

    Reply
  30. anig99

    (32) поправил. Спутались версии, когда в прошлый раз редактировал.

    Reply
  31. Eraser

    Спасибо за комментарий.

    Reply
  32. It-developer

    Узнаю знакомые поля 🙂

    Reply
  33. It-developer

    Я еще контроль понатыкал на выгрузку обратно — чтоб ошибок в ECOD-e не было

    Reply
  34. vi.rus

    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(208)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить().Выбрать();

    по причине:

    {(19, 2)}: Таблица не найдена «Справочник.КатегорииОбъектов»

    <<?>>Справочник.КатегорииОбъектов КАК КатегорииОбъектов

    Reply
  35. Восьмой

    Спасибо за обработку, выручила.

    Reply
  36. FKLDOZ

    Идет ошибка:

    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(509)}: Индекс находится за границами массива

    ХМЛ.ЗаписатьНачалоЭлемента(ДеревоXML.Строки[0].ИмяУзла);

    Бухгалтерия предприятия, редакция 2.0 (2.0.65.15)

    В чем дело?

    Reply
  37. anig99

    (39) FKLDOZ, приложите скриншот схемы

    Reply
  38. aikosyapr

    Огромное спасибо! Кучу времени сэкономило

    Reply
  39. jrs2013

    Техническая информация:

    {ВнешняяОбработка.ВыгрузкаXML.МодульОбъекта(117,21)}: Тип не определен (ДиалогВыбораФайла)

    Reply
  40. anig99

    (42) Добрый день! А в чём пытаетесь открыть? Платформа и конфигурация.

    Reply
  41. jrs2013

    (43)бухгалтерия 3.0

    Reply
  42. anig99

    (44) Данная обработка написана на обычных формах. Режим запуска Бухгалтерии 3.0 — управляемые формы. Если сможете, откройте конфигурацию в режиме обычного приложения и откройте обработку оттуда.

    Reply
  43. jrs2013

    (45) я уже понял. Жаль, что на управляемых формах не работает. Не планируете в будущем доработать?

    Reply
  44. anig99

    (46) если действительно есть потребность… Вообще планировал, но не в этом году.

    Reply

Leave a Comment

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