Контакти

1с файл не містить визначення xsd схеми. Типізований об'єкт DataSet. Читання та запис XML-документів

У цьому розділі буде показано, як написати XML-схеми. Ви також дізнаєтесь, що схема може бути записана по-різному.

Документ XML

Давайте подивимося на цей XML-документ під назвою "shiporder.xml":

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
John Smith

Ola Nordmann

Langgt 23

4000 Stavanger
Norway


Empire Burlesque
Special Edition
1
10.90


Hide your heart
1
9.90

Документ XML вище складається з кореневого елемента "shiporder", який містить обов'язковий атрибут під назвою "orderid". "shiporder" елемент містить три різні дочірні елементи: "orderperson" , "shipto" і "item" . "item" елемент з'являється двічі, і він містить "title", необов'язковий "note" елемент, "quantity", і "price" елемент.

Лінія вище: Xmlns: XSI = "http://www.w3.org/2001/XMLSchema-instance" каже XML-аналізатору, що цей документ має бути перевірений на схемі. Лінія: XSI: noNamespaceSchemaLocation = "shiporder.xsd" вказує, де знаходиться схеми що і (here it is in the same folder as "shiporder.xml") .

Створення XML-схеми

Тепер ми хочемо створити схему для документа XML вище.

Ми почнемо з відкриття нового файлу, який ми називатимемо "shiporder.xsd" . Для того, щоб створити схему ми могли б просто дотримуватися структури в документі XML і визначити кожен елемент, як ми знаходимо його. Ми почнемо зі стандартної декларації XML з наступним хз: елемент схеми, який визначає схему:



...

У схемі вище ми використовуємо стандартні простір імен (xs) , і URI , пов'язаний з цим простір імен є визначення мови схеми, яка має стандартне значення http://www.w3.org/2001/XMLSchema.

Далі ми повинні визначити "shiporder" елемент. Цей елемент має атрибут та містить інші елементи, тому ми розглядаємо його як складний тип. Дочірні елементи "shiporder" елемент оточений хз: елемент послідовності, яка визначає впорядковану послідовність субелементів:




...


Потім ми повинні визначити "orderperson" елемент в якості простого типу (оскільки вона не містить будь-яких атрибутів або інших елементів). У типу (xs:string) з префіксом префікс простору імен, пов'язаного з XML - схеми, яка вказує наперед визначений тип даних схеми:










За допомогою схем, які ми можемо визначити кількість можливих появ для елемента з MaxOccurs та атрибутами MinOccurs. MaxOccurs визначає максимальну кількість входжень для елемента MinOccurs визначає мінімальну кількість входжень для елемента. Значення за замовчуванням для обох MaxOccurs та MinOccurs 1!

Тепер ми можемо визначити "item" елемент. Цей елемент може з'являтися кілька разів усередині shiporder елемента. Це визначається встановленням maxOccurs атрибут "item" елемента "unbounded" , що означає, що там може бути багато входжень "item" елемент, як автор хоче. Зверніть увагу, що "note" елемент не є обов'язковим. Ми визначили це, встановивши minOccurs атрибут до нуля:










Тепер ми можемо оголосити атрибут "shiporder" елемент. Оскільки це обов'язковий атрибут, ми вказуємо використання = "потрібний".

Note: Заяви атрибутів завжди мають прийти востаннє:

Ось повний список файлу схеми під назвою "shiporder.xsd":





























Розділіть схеми

Попередній метод дизайну дуже простий, але може бути важко читати та підтримувати, коли документи є складними.

Наступний метод дизайну ґрунтується на визначенні всіх елементів і атрибутів, а потім посилаючись на них, використовуючи ref атрибут.

Ось новий дизайн файлу схеми ("shiporder.xsd"):








































Використання іменованих типів

Спосіб третій дизайн визначає класи чи типи, що дозволяє повторно використовувати визначення елементів. Це робиться шляхом іменування елементів simpleTypes і complexTypes, а потім вказати на них через тип атрибута елемента.

Ось уже третій дизайн файлу схеми ("shiporder.xsd"):

































Елемент обмеження вказує на те, що тип даних був отриманий із простору імен типу даних XML-схеми W3C. Таким чином, наступний фрагмент означає, що значення елемента чи атрибута має бути значення рядка:

Елемент обмеження частіше використовується для застосування обмежень до елементів. Подивіться на наступні рядки із наведеної вище схеми:





Це вказує на те, що значення елемента або атрибута має бути рядком, воно має бути рівним шість символів у рядку, і ці символи повинні бути числом від 0 до 9.

Анотація: XML-схеми даних (XSD) Створення XSD-схеми серед Visual Studio .NET. Створення типізованого об'єкту DataSet. Отримання інформації про структуру об'єкту DataSet. Завантаження XML-документів та XSD-схем у типізований та звичайний об'єкти DataSet. Методи ReadXml та ReadXmlSchema. Запис вмісту та структури типізованого та звичайного об'єкта DataSet. Методи WriteXml та WriteXmlSchema

Типізований об'єкт DataSet. Читання та запис XML-документів

XML-схеми даних (XSD)

Схеми даних 1 Точний переклад XML Schema Document -< схема документа XML>, проте ми будемо використовувати термін "схема даних XML". XSD (XML Schema Document, XSD) є альтернативним способом правил побудови XML-документів. У порівнянні з DTD, схеми мають більш потужні засоби для визначення складних структур даних, забезпечують більш зрозумілий спосіб опису граматики мови, здатні легко модернізуватися і розширюватися. Схема XSD може містити таку інформацію:

  • подання зв'язків між елементами даних, аналогічне зв'язків зовнішніх ключів між таблицями в реляційній базі даних;
  • представлення унікальних ідентифікаторів, подібних до первинного ключа;
  • специфікацію типівданих кожного індивідуального елемента та атрибуту у XML-документі.

Для створення схеми даних Visual Studio .NET в головному меню переходимо File \ New \ File і вибираємо зі списку шаблонів (див. рис. 11.3) XML Schema . З'являється вікно з написом "Щоб розпочати, перетягніть об'єкти з вікна Server Explorer або Toolbox на робочу область (область дизайну) або клацніть правою кнопкою" (рис. 11.1):


Мал. 11.1.

Справа в тому, що ми перебуваємо в режимі дизайну. Переключаємося в режим коду, для чого натискаємо кнопку (XML):

Перший рядок - це вже знайома вказівка ​​на те, що схема є XML-документом з кореневим елементом xs:schema . Префікс xs : випереджає всі елементи схеми, вказуючи на свій простір імен. У другому рядку знаходиться довгий, докладний і часто зовсім непотрібний опис схеми (порівняйте з аналогічним кодом для HTML-сторінок). Для коректної роботи цілком достатньо обмежитися наступним уявленням:

Утім, вбудовані засоби візуалізації студії передбачають наявність цієї "шапки", тому її не слід видаляти. Створення схеми, що описує заданий XML-документ у Visual Studio .NET - досить просте завдання. Створимо наступний документ XMLEasy.xml:

1

Перемикаємось на вкладку (Data) і бачимо лише один запис (рис. 11.2).


Мал. 11.2.

Створити схему, що описує цей документ, можна декількома способами: у головному меню вибрати пункт "XML \ Create Schema" (рис. 11.3, А), у режимі XML у контекстному меню вибрати цей же пункт (рис. 11.3, Б), у режимі Data в контекстному меню вибрати цей пункт (рис. 11.3, В), і, нарешті, в режимі Data натиснути кнопку панелі інструментів XML (рис. 11.3, Г).


Мал. 11.3.

У будь-якому випадку з'являється схема документа як таблиці (рис. 11.4). Залишимо поки режим Schema і перейдемо в режим (XML).


Мал. 11.4.

Середовище згенерувало XML-код, який описує структуру документа:

Сюди входить також опис, необхідний подальшого маніпулювання схемою з допомогою об'єктів ADO .NET. У вихідному документі XMLEasy.xml з'явилося посилання на схему даних:

Документ XMLEasy.xsd був автоматично створений у тій же директорії, де знаходиться XMLEasy.xml.

Щоб навчитися розуміти схеми XSD, спочатку слід попрацювати з описом даних у чистому вигляді, без додаткових елементів. У таблиці 11.1 наводиться кілька найпростіших XML-документів та його схем, сформованих без прив'язки до об'єктів ADO .NET.

Таблиця 11.1. Приклади складання XSD-схем
Вміст XML-документа Вміст XSD-схеми

1

Опис
У документі XMLEasy.xml елемент TOUR – кореневий елемент, що містить дочірній елемент IDTOUR. Загальна схема для кореневого елемента має такий вигляд:

: Вміст елемента...

Дочірні елементи описуються так:

Вміст XML-документа Вміст XSD-схеми

1 Кіпр 25 000,00 грн. У вартість двох дорослих путівок входить ціна однієї дитячої (до 7 років) 2 Греція 32 000,00 грн. У серпні та вересні діють спеціальні знижки. 3 Таїланд 30 000,00 грн. Не включаючи вартість авіаквитка 4 Італія 26 000,00 грн. Сніданок у готелі включений у вартість путівки 5 Франція 27 000,00 грн. Додаткові екскурсії не входять у вартість путівки

Опис
Кореневий елемент TABLE містить елемент TOUR , що складається, своєю чергою, із групи дочірніх елементів. Елемент choice визначає вибір інших елементів, причому значення unbounded (необмежено) атрибуту maxOccurs вказує на можливість необмеженої наявності груп TOUR .

: :

Вміст XML-документа Вміст XSD-схеми

1 Кіпр 25 000,00 грн. 1 У вартість двох дорослих путівок входить ціна однієї дитячої (до 7 років)


Мал. 11.5.
Опис
Для елемента IDTOUR було встановлено тип даних int , для елемента CLOSED - тип boolean , інших - за умовчанням тип string . Змінювати тип даних можна безпосередньо в режимі XML-схеми даних, але зручніше - в режимі Schema (в даному випадку режим буде називатися DataSet) вибирати тип даних зі списку, що випадає (рис. 11.5):

У програмному забезпеченні курсу ви знайдете всі файли цієї таблиці в папці XSD (Code\Glava5\ XSD).

Завдання типу даних у XML-документі (останній приклад – табл. 11.1) – один із способів обмеження вмісту. Для обмеження значення заданого типу використовуються додаткові атрибути. У наступному фрагменті схеми значення елемента PRICE має бути в межах від 50 до 100:

Для обмеження документа XML деякими фіксованими значеннями використовується наступна конструкція:

Тут елемент NAME може набувати лише одного фіксованого значення з п'яти назв країн.

Розробка XSD-схеми є досить копіткою роботою. Візуальні засоби середовища Visual Studio .NET значно полегшують це завдання. Для освоєння основних концепцій бажано вивчити кілька схем документів XML, створених автоматично. У таблицях 11.2-11.4 наводиться опис основних елементів та атрибутів, які при цьому можна зустріти.

Таблиця 11.2. Елементи XSD-схем
Елемент Опис
all Вкладені елементи можуть визначатися у довільному порядку
Annotation Батьківський елемент елементів-коментарів і
any Будь-які вкладені елементи
anyAttribute Будь-які атрибути
appInfo Елемент-коментар. Задає титул схеми
attribute Атрибут
attributeGroup Група атрибутів
choice Вибір інших елементів. Аналог оператора "|" у DTD
complexContent Обмеження або розширення моделівмісту складного типу
complexType Елемент складного типу
documentation Елемент-коментар. Надає інформацію про схему
element Елемент
extension Розширення елемента
field Оголошення поля. Застосовується всередині елемента для визначення полів
group Група елементів
import Імпорт декларації типів з іншої схеми
include Включення іншої схеми до існуючого простору імен
key Завдання елемента або атрибута з ключем, який вказує на інший елемент
keyref Завдання елемента або атрибута, на який вказує ключ
list Елемент, який може містити перелік значень
redefine Перевизначення вже оголошених елементів
restriction Обмеження елемента
schema Кореневий елемент схеми
selector Селектор для відбору XML-елементів
sequence Послідовність інших елементів. Аналог оператора "," у DTD
simpleContent Модель, вміст якої представляє лише символьні дані
simpleType Елемент простого типу
union Елемент або атрибут, який може мати множину
unique Елемент чи атрибут, який повинен мати унікальне значення
Таблиця 11.3. Атрибути – обмеження XSD-схем
Атрибут Опис
enumeration Список значень
length Довжина
maxLength Максимальна довжина
minLength Мінімальна довжина
maxExclusive Максимальне значення
maxInclusive Максимальне значення включно
minExclusive Мінімальне значення
minInclusive Мінімальне значення включно
fractionDigits Кількість знаків після коми у дробових числах
totalDigits Кількість цифр
pattern Зразок (патерн) вмісту елементів
default Значення елемента або атрибута за замовчуванням
elementFormDefault Завдання властивостей локального елемента як глобально визначеного
fixed Фіксоване значення елемента чи атрибута
form Локально оголошені елементи визначаються у конкретних примірниках документів
itemType Тип пунктів списку
memberTypes Тип членів, використаних у об'єднанні (union)
maxOccurs Максимальна кількість входжень елемента
minOccurs Мінімальна кількість входжень елемента
mixed Завдання елемента, що має змішаний тип
name Назва елемента чи атрибута
namespace Простір імен
noNamespace Завдання розташування документа-схеми,
SchemaLocation не має результуючих просторів імен
nillable Визначення того, що елемент може мати пусте значення NULL (nil)
ref Завдання посилання на глобально визначений елемент
schemaLocation Визначення розташування схеми
substitutionGroup Визначення заміни елементів на інші елементи
targetNamespace Результуючий простір імен схеми
type Тип елемента
use Чи є елемент обов'язковим чи ні
value Значення елемента схеми
xsi:nil Завдання реального змісту порожнього (NULL) елемента XML-документа
xsi:schemaLocation Реальне розташування елемента в XML-документі
xsi:type Реальний тип елемента у XML-документі

Помилка, що повідомляє про те, що файл не відповідає XSD-схемі, є спільною для випадків, коли система не може вважати дані зі звіту. Загалом такі помилки у людей виникають нерідко, а впоратися з ними досить нескладно.

Для початку потрібно розібратися в тому, що означає XSD-схема, щоб зрозуміти, чому ваш файл не відповідає.

Отже, XSD – це мова програмування,з його допомогою описується структура звіту. До структури входять, наприклад, параметри змісту звіту, тип, вид, синтаксис даних, розділи, які містять інформацію.

Виходить, що XSD-схема-це опис структури вашого звіту, виконане однією з мов програмування. Якщо до звіту буде внесено неправильну інформацію, то для схеми вона буде просто нечитана, саме тому система видає помилку про те, що файл не відповідає XSD-схемі.

Це говорить про те, що інформація, яку ви запровадили, не може бути прочитана мовою програмування, отже, програма визнає її неправильною.

Варто зазначити, що дана проблема може виникнути як через невірно введених даних(наприклад, ви помилилися, коли вводили ІПН організації), так і через неправильний формат введення даних (наприклад, ви вказали зайві прогалини або дефіси).

Однак це не єдина причина, яка спричиняє невідповідність файлу XSD-схемі. Ця помилка також може виникнути через те, що на вашому пристрої встановлена ​​застаріла версія програми, в якій ви робите звіт, а також якщо в самому податковому органі не встановлено оновлення програми.

Для того, щоб вирішити помилку в XSD-схемі, вам необхідно буде перевірити правильність усіх даних,які ви ввели, а також уточнити, чи не виходило оновлення програми, в якій ви працюєте. Однак, перш ніж перевіряти файл, уважно подивіться на текст помилки, яку видає.

Справа в тому, що в деяких ситуаціях після тексту про те, що файл не відповідає схемі, стоїть двокрапка і далі вказується причина цієї проблеми. Якщо причина в самій помилці не вказана, оновіть програму до останньої версії.

Завершивши оновлення, спробуйте знову надіслати звіт. Якщо після оновлення файл знову видає помилку, то необхідно шукати проблему у ньому.Якщо ви працюєте в програмі 1С, ви можете перевірити файл за допомогою спеціальної кнопки, яка називається «перевірити в інтернеті».

Якщо два попередні пункти не допомогли виявити вам проблему, перевірте, чи всі обов'язкові поля ви заповнили, чи правильно ви ввели всі дані, адже багато з них необхідно заповнювати цифрами, в такому випадку дуже легко допустити друкарську помилку.

Крім цього, вам необхідно перевірити всі поля на відсутність зайвих прогалин, дефісів та інших знаків. Якщо ви перевірили весь файл і не можете знайти помилку або якщо помилку знайти вдалося, але виправити її ви ніяк не можете, вам обов'язково варто звернутися до служби технічної підтримкипрограми, за допомогою якої ви робите звіт або до її розробників.

Для того, щоб вирішити цю проблему за допомогою розробників програми, вам буде потрібно відправити деякі документи, такі як сам файл, в якому знаходиться звіт, протокол сповіщення, який вам видає комп'ютер.

Крім цього, розробники можуть запросити у вас деяку інформацію про вашу організацію, а також інші відомості, які їм видадуться потрібними, їх ви обов'язково повинні надати, інакше вирішити проблему не вдасться.

Отже, якщо ви намагаєтеся надіслати звіт до податкового органу, але файл видає помилку про те, що він не відповідає XSD-схемі, це означає, що ваш звіт не може бути відправлений,оскільки програма не може прочитати дані, які ви запровадили.

Але піддаватися паніці не варто, адже здебільшого ця проблема вирішується досить простота швидко. До того ж, якщо звіт ви надіслали вчасно, але він не був прийнятий через невірний формат, то податкова не має права штрафуватиза не вчасно наданий звіт. Насамперед, зверніть увагу на сам текст помилки, можливо, там уже вказано причину її виникнення.

По суті, причин може бути лише дві. Або у вас на пристрої встановлено стара версія програми, за допомогою якої ви робите звіт, у такому випадку вирішити проблему легко, потрібно просто завантажити останнє оновлення, зазвичай його можна знайти на сайті програми, яку ви використовуєте. Другою причиною може бути те, що ви неправильно заповнили якісь дані, або взагалі не заповнили якесь поле.

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

XDTO – механізм 1С, який потрібен під час створення та використання веб-сервісів у 1С.

Пакети XDTO 1С дозволяють описати структуру необхідного файлу XML для перетворення даних у XML та з XML.

Кому цікаво – розберемо питання докладніше.

Файли XML передаються через інтернет, сприймаються багатьма програмами.

Сприймаються – значить у їхньому коді зашито – якщо зустрінеш у XML файлі певне ім'я елемента – сприймай його ось так і роби ось це.

Тому якщо ми будемо використовувати ім'я елемента Apple, то досить великий шанс, що якась інша програма може «подумати», що це відомий їй Apple, але ми мали на увазі щось своє.

Для того, щоб такого не відбувалося і щоб явно вказувати, що наш Apple відрізняється від решти, у файлі може бути задано найменування простору імен – префікс, який використовується перед назвою елементів.

Визначається простір імен (англійською namespace) ось так - xmlns: Ім'я Простору = "URL", наприклад:
xmlns:store = "http://store.ru"

Навіщо потрібна URL?

Тому вказується унікальний ідентифікатор, визначальний заодно і автора простору імен.

Природно мається на увазі, що імен, що вказав простір імен, виключно чесна людина і вказав свій сайт і не використовує з одним сайтом кілька різних просторів імен.

До речі, зазвичай вказують не тільки URL сайту, але URL конкретної папки на сайті, щоб якщо що, можна було створити інший простір імен в іншій папці на сайті для його використання в іншій ситуації.

Об'єкт – це певна структура даних, самодостатня, що містить усі свої дані.

Так як у XML описані структуровані дані, тобто у вигляді структури, що мають свої властивості і т.п., то на них можна дивитися як на об'єкти.

У наведеному прикладі це може бути об'єкт LIST з властивістю та вкладеним елементом.

DOM – це спосіб розгляду файлу XML не як текст у певному форматі, а як набір об'єктів із властивостями, полями тощо.

Опис файлу XML

Якщо ми використовуємо файл певної структури для обміну між двома програмами, ми ймовірно хотіли б:

  • Щоб були використані певні назви
  • Щоб були ті елементи, на які ми очікуємо (які «мають бути для використання в нашому обміні»)
  • Щоб в атрибутах були вказані ті типи, на які ми очікуємо (рядок, число тощо).

Для опису структури XML існують такі стандарти форматів файлів (які також зберігаються у звичайному текстовому файлі):

  • Розширення DTD – Document Type Definition
  • Розширення XSD - XML ​​Shema.

Обидва формати описують, який має бути документ. Процедура перевірки відповідності XML описаному у такому файлі стандарту називають верифікацією.

XDTO 1С – це , який дозволяє конфігурацію додати опис XML файлу. Точніше описується не файл, а конкретні структури XML.

Щоб вказати типи, можливі до використання, використовується список, бібліотека типів, яку називають фабрика XDTO 1С.

У цій фабриці вказані як прості типи (рядок, число, дата), які прийнято використовувати в інших мовах, програмах і т.п., а й типи 1С, які використовуються в 1С та конкретній конфігурації.

Фабрика XDTO 1С сама складається з кількох пакетів. Базові типи описані у пакеті з ім'ям www.w3.org

Типи даних поточної конфігурації описані в пакеті http://v8.1c.ru/8.1/data/enterprise/current-config

Самі типи називаються відповідно до імені в конфігураторі з додаванням англомовного вигляду (CatalogRef, CatalogObject, DocumentRef, DocumentObject), наприклад:

CatalogObject.Номенклатура

Додавання пакету XDTO 1С

Безумовно, все це круто звучить. І ми не дійшли ще до теми XSLT - способу перетворювати файли XML на щось інше, наприклад в HTML. Тема XML дуже велика і її складно включити навіть в окрему книгу.

Наше завдання – зрозуміти, що XDTO 1С дозволяє описати які елементи мають бути в пакеті XML, який потрібно сформувати чи рахувати.

Пакети XDTO 1С знаходяться у конфігурації у гілці Загальні/Пакети XDTO 1С.

Додати пакет XDTO в 1С можна вручну (круто!), але краще дістати відповідний XSD файл із готовим описом схеми.

Опис XSD схеми об'єктів будь-якої конфігурації можна отримати натисканням на гілку Загальні/Пакети XDTO 1С та вибравши пункт меню Експорт XML схеми конфігурації.

Файл текстовий, Ви можете відредагувати його в блокноті Windows, прибравши зайві непотрібні Вам об'єкти.

Додати готову XSD схему в 1С можна натиснувши правою кнопкою на гілку Загальні/XDTO 1С пакети та вибравши пункт меню Імпорт XML схеми.

Використання механізму XDTO 1С

Робота з XDTO 1С – це перетворення значень у XML та з XML.

Робота ведеться за допомогою об'єктів мови 1С Читання XML/Запис XML.

Під час роботи з XDTO 1С Ви повинні вказати пакет, з яким працюєте. Це може бути типовий пакет (обговорювали вище, див. XDTO) або доданий до конфігурації пакет. Ідентифікація пакета здійснюється за URL, вказаним у пакеті.

Два основних простих способи роботи – це:

  • Серіалізація – автоматичне перетворення значень із 1С на XML і навпаки
  • Створення об'єкта, заповнення його полів, запис у XML (і читання з XML і потім читання його полів).

Приклад серіалізації значення:
Серіалізатор = Новий Серіалізатор XDTO (Фабрика XDTO);
ФайлXML = Новий записXML();
ФайлXML.ВідкритиФайл(«Ім'яФайлу»);
Серіалізатор.ЗаписатиXML(ФайлXML, Значення1С);

Приклад читання/запису об'єкта:

Довідник Об'єкт XDTO = Фабрика XDTO.
ЗаповнитиЗначенняВластивостей(ДовідникОб'єктXDTO, ДовідникПосилання1С);

Виникла задача створення XML файлу на основі XSD схеми. Пошуки по форумах призводили до великої кількості обговорень, пов'язаних з нерозумінням процесу, і всього до кількох статей, які пояснюють суть. Люди ставили питання, билися над рішенням, але після того, як завдання піддавалося їм, просто зникали, не описавши механізм. Це спонукало створення простого опису процесу.
P.S. Не лайтеся сильно, моєю метою не було створення якоїсь наукоподібної статті, яка суворо використовує правильну термінологію, а бажання просто допомогти зробити перший крок до розуміння дуже потужного механізму обміну через XML.
P.P.S. Відразу повинен обмовитися, що файл вивантаження, що додається до статті, є тільки заготовкою, що створює тільки частину необхідної структури XML файлу, т.к. моя робота з цим вивантаженням мала швидше пізнавальний характер (копіювати попередній документ з експорту на сайті ФМС і завантажувати з Excel"івського файлу тільки табличну частину Товари представилося більш ефективним рішенням), а брак часу не дозволяв дописати створення всієї структури, виходячи тільки з міркувань перфекціонізму .

Отже, зареєструвавшись на сайті ФМС, стало зрозуміло, що для створення документів Статистичної звітності з експорту потрібне вивантаження даних із документів Реалізація товарів та послуг Управління торгівлею та створення файлу для завантаження.

Там можливо два варіанти завантаження.

Перший: завантаження табличної частини з Товарами з файлу Excel (цей варіант і був обраний як робітник, тому що мав ті плюси, що не треба було возитися з обробкою "Шапки" документа, а можна було просто копіювати попередній, змінивши "Шапці" те, що потрібно).

Другий: створення XML файлу за схемою завантаженої із сайту ФМС у вигляді "Альбома форматів електронних форм документів". Альбом є досить великою кількістю XSD схем. У них було знайдено схему "Статистичної форми обліку переміщення товару" та додаткові файли з описами типів для неї. Схеми додаються до статті у архіві з обробкою.

Для перегляду XSD схем використовувався безкоштовний Microsoft XML Notepad 2007.

На зображенні показаний основний файл зі схемою XSD Статистична форма обліку переміщення товару. На зображенні виділено основні блоки XSD схеми, необхідні нам її розуміння.

Зі схеми видно, що нам треба отримати XML файл, заповнений структурою, вказаною у гілці "xs: element" типу StaticFormType.

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

Дана структура має тип StaticFormType, який у свою чергу складається з базового типу BaseDocType, набору об'єктів різних типів та текстових атрибутів.

Базовий тип BaseDocStyle описується в іншому файлі (і просторі імен)
.

Цей файл містить ще масу типів, які використовуються нашому випадку.

Тепер перейдемо до роботи у 1С. У двох словах, те, що нам треба зробити, зводиться до наступного:

1. Створюється Фабрика XDTO

НашаФабрикаXDTO = СтворитиФабрикуXDTO(МасивПовнихІменФайлівЗСхемамиXSD);

2. У фабриці XDTO створюються всі складні типи даних, які далі ми заповнюватимемо у створюваному файлі XML:

StaticFormType = МояФабрикаXDTO.Тип("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

Типи даних, що входять до певного типу, можна отримати з колекції його властивостей:

CUOrganizationType = StaticFormType.Властивості.Отримати("Consignee").Тип; NameType = CUOrganizationType.Властивості.Отримати("OrganizationName").Тип; ShortNameType = CUOrganizationType.Властивості.Отримати("ShortName").Тип; LanguageCodeType = CUOrganizationType.Властивості.Отримати("OrganizationLanguage").Тип;

3. Коли всі складні типи даних створені, створюємо на їх основі структуру файлу XML, що складається з об'єктів ФабрикиXDTO:

StaticFormType_Об'єктXDTO = МояФабрикаXDTO.Створити(StaticFormType); // колекція з документами NewDocuments = МояФабрикаXDTO.Створити(DocumentsType); NewDocuments.PrDocumentName = МояФабрикаXDTO.Створити(PrDocumentNameType, "Товарна накладна"); NewDocuments.PrDocumentNumber = МояФабрикаXDTO.Створити(PrDocumentNumberType, "123-номер"); NewDocuments.PrDocumentDate = МояФабрикаXDTO.Створити(PrDocumentDateType, "2014-10-05"); StaticFormType_Об'єктXDTO.Documents.Додати(NewDocuments);

Одночасно заповнюємо елементарні (прості типи) реквізити.

4. Ну і нарешті вивантажуємо все з Фабрики XDTO у файл:

ФайлXML = Новий записXML(); ФайлXML.ВідкритиФайл(Ім'яФайлу); ФайлXML.ЗаписатиОголошенняXML(); МояФабрикаXDTO.ЗаписатиXML(ФайлXML, StaticFormType_Об'єктXDTO); ФайлXML.Закрити();

P.S. В архіві міститься файл заготовки вивантаження в XML (створюються лише деякі реквізити, що відображають усі випадки заповнення файлу) та схеми XSD.

Розархівувати всі файли до певної директорії.

XML буде створюватися в ній.



Сподобалася стаття? Поділіться їй