Работа с Контур.Диадок (diadoc)

Год назад руководство поставило цель – отправлять документы клиентам с помощью системы электронного документооборота (главная страница https://www.diadoc.ru/).

Данная система очень распространена и решающим моментом в этом деле стало заявление такого крупного игрока, как Эмекс, что все документы должны быть загружены в электронном виде. А если не в электронном, тогда вам будет выставлен доп.счёт за обработку документов. А далее выяснилось, что таких клиентов очень много.

После получения задачи и не сильно разбираясь в сути проблемы и не разбирая инструментарий, который предоставляет Дидаок, решил сделать просто: формировать XML вручную. Сделав первый прототип и замучившись в отладкой решил что-то менять.

Для различных стандартных платформ (типа 1с) есть стандартные плагины, которые всё сделают за вас. Но в моём случае это не так и решение «самописное».

Работа с диадок-ом выглядит следующим образом:

1.       Формируем файл XML

2.       Загружаем файл в Контур.Диадок

В идеальном варианте у контура есть возможность использовать API-методы и сделать всё в 1 шаг, но сейчас реализовано половинчатое решение.

 

Документы, которые стоит изучить для понимания того, как заполнять XML файл (для примера УПД):

1.       https://normativ.kontur.ru/document?moduleId=1&documentId=271958 – Последний на сегодня (25.09.2017) документ, который утверждает электронный формат счёт-фактуры (Приказ ФНС РФ от 24.03.2016 N ММВ-7-15/155@)

2.       https://www.diadoc.ru/docs/forms/upd/structure/1 - Форма проверки документа в контуре

3.       https://www.diadoc.ru/docs/forms/upd/structure/xsd/1 - XSD-схема для УПД

Вооружившись этим документами можно формировать XML файл с помощью XSD схемы.

Для создания нормального объекта в C# я воспользовался утилитой XSD.exe и натравил на неё файл SCHFDOPPOK.xsd, который находится в архиве в третьей ссылке. У меня полная строка генерации файла класса выглядит так

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe SCHFDOPPOK.xsd /classes

Файл получился следующий:  http://www.adoe.ru/_files/SCHFDOPPOK.cs.txt. В проекте для работы я его переименовал в UpdDiadoc.cs

Ну а далее добавляем файл к решению и заполняем наш документ. Конечно, русские поля и названия классов выглядят странно, зато всё понятно и все поля соответствуют спецификации, которая указана в первой ссылке(Приказ ФНС…)

Я позволил себе набросать нерабочий проект, который содержит статичный метод CreateXML_UPD. Суть метода – наполнение объекта и генерация из него файла в XML через стандартный метод XmlSerializer.Serialize

Ясное дело, что объекты Outlay и outlayPosition у каждого свои. Главная цель – показать как работать с этим необычным объектом и как его заполнять. Некоторые решения по заполнению нетривиальны.

Большая часть этого текста сделана для себя с целью «Не забыть».

Ссылка на пример проекта http://www.adoe.ru/_files/diadoc.zip

 

 

Пишите нам

Если у Вас есть вопросы и Вы заинтересовались нашими услугами, напишите нам:

rinat@adoe.ru