close

Вход

Забыли?

вход по аккаунту

...это вихрь задорного танца, душевной русской песни;doc

код для вставкиСкачать
АСУ «Поверка.kz»
Обмен данными
с внешними системами
(предварительная версия 1.0)
Оглавление
Обмен данными ....................................................................................................................... 3
Структура импортируемых данных в формате XML .............................................................. 4
Структура ответа в формате XML ............................................................................................ 8
Подготовка данных с помощью DLL ..................................................................................... 10
Обмен данными
АСУ «Поверка.kz» позволяет обмениваться данными о поверке с внешними системами.
Для обмена разработан формат обмена данными в формате XML. Формирование данных в
формате XML можно выполнить как самостоятельно, так и воспользовавшись готовой DLL (C#
.Net Framework 4 Client Profile) подготовки данных, которая дополнительно проверяет
подготавливаемые данные.
Структура импортируемых данных в формате XML
Файл начинается с тэга содержащего информацию о кодировке. Далее идет корневой
элемент VerificationReport отчет о поверках с датой и временем отчета (Date), шифром
поверительной лаборатории (Code) и версией отчета. Он содержит элемент Documents
который
перечисляет
элементы
VerificationDocument
документ
поверка
и
VerificationDocumentCancel отмена документа поверка в нужном количестве и в
хронологическом порядке.
<?xml version="1.0" encoding="utf-8"?>
<VerificationReport Date="" Code="" Version="1">
<Documents>
<VerificationDocumentCancel Number="" Date="" LastChange="" VerificationPassing="">
<Declarant Phone="" IINorBIN="">
<Name Ru="" Kz="" />
<Address Ru="" Kz="" />
</Declarant>
<MeasureDevice Number="" VerificationGap="" Class="">
<Model Ru="" Kz="" />
<MDProductionDate></MDProductionDate>
<MeasurmentRange Ru="" Kz="" />
<AllowedByClass Ru="" Kz="" />
<AllowedByCat Ru="" Kz="" />
<AllowedByRandom Ru="" Kz="" />
<MDProducer Ru="" Kz="" />
<Name Ru="" Kz="" />
<VerificationProc Ru="" Kz="" />
</MeasureDevice>
</VerificationDocumentCancel>
<VerificationDocument Number="" Date="" LastChange="" VerificationPassing="">
<VerificationComment Ru="" Kz="" />
<Declarant Phone="" IINorBIN="">
<Name Ru="" Kz="" />
<Address Ru="" Kz="" />
</Declarant>
<MeasureDevice Number="" VerificationGap="" Class="" DKP="">
<Model Ru="" Kz="" />
<MDProductionDate></MDProductionDate>
<MeasurmentRange Ru="" Kz="" />
<AllowedByClass Ru="" Kz="" />
<AllowedByCat Ru="" Kz="" />
<AllowedByRandom Ru="" Kz="" />
<MDProducer Ru="" Kz="" />
<Name Ru="" Kz="" />
<VerificationProc Ru="" Kz="" />
</MeasureDevice>
<VerificationDevices>
<VerificationDevice Ru="" Kz="" />
</VerificationDevices>
<Details>
<Detail Type="" Year="" Quarter="" Begin="" End="" />
</Details>
<Director Ru="" Kz="" />
<Operator Ru="" Kz="" />
</VerificationDocument>
…
</Documents>
</VerificationReport>
Ru – основной атрибут большинства элементов представляющий строку на русском
языке. Все атрибуты обязательны к заполнению, кроме атрибутов: Kz – строка на казахском
языке, Phone – телефон заявителя, Address – адрес заявителя и IINorBIN – ИИН или БИН.
Элементы VerificationDocument и VerificationDocumentCancel имеют общие
обязательные атрибуты номер (Number), дату время документа (Date) и дату время
последнего изменения документа (LastChange), тип документа (VerificationPassing) и общие
обязательные элементы заявителя (Declarant) и средство измерения (MeasureDevice). Атрибут
VerificationPassing имеет логическое значение true или false и означает, что это документ
поверки, если true и извещение о непригодности, если false. При значении false элемент
Details не должен присутствовать, так как не используются в этом случае клейма. Номер
состоит из шифра поверителя, класса средства измерения и десятизначного номера
документа (пример: АА-05-0000000038). При этом определяющим ключом этой
последовательности является атрибуты LastChange, Date, Number и VerificationPassing, они
позволяют АСУ «Поверка.kz» выстроить хронологию изменений документов поверки при
загрузке в базу.
Элемент
непригодности.
VerificationComment
–
комментарий
поверки
или
извещения
о
Элемент Declarant – заявитель, организация подавшая средство измерения на поверку.
Вложенные элементы содержат информацию о наименовании организации (Name) и адресе
(Address).
Элемент MeasureDevice – средство измерения (СИ), оборудование, полученное на
поверку. Атрибуты: серийный номер (Number), межповерочный интервал в месяцах
(VerificationGap), если равен нулю, то бессрочно, вид средства измерения (класс) (Class) и
динамический код прослеживаемости (DKP). Состоит из элементов:
Model – модель;
Name – наименование;
MDProducer – производитель;
MDProductionDate – дата производства (строка, необязательный);
VerificationProc – методика поверки;
MeasurmentRange – диапазон измерений;
AllowedByClass – допуск по классу;
AllowedByCat – допуск по разряду;
AllowedByRandom – допуск с учетом неопределенности.
Элемент VerificationDevices – перечисление, состоящее из устройств VerificationDevice,
которыми или с использованием которых проводится поверка.
Элемент Director – руководитель или директор лаборатории.
Элемент Operator – работник поверительной лаборатории, который непосредственно
выполнял поверку.
Формат даты и времени должен быть в виде: 2013-09-26T16:20:00.
Пример заполнения:
<?xml version="1.0" encoding="utf-8"?>
<VerificationReport Date="2013-09-30T09:25:12" Code="АА" Version="1">
<Documents>
<VerificationDocument Number="АА-05-0000000038"
26T16:20:00" VerificationPassing="false">
Date="2013-09-23T16:16:52"
<VerificationComment Ru="-" Kz="-" />
<Declarant Phone="+9999999">
<Name Ru="ТОО КазВода" Kz="ТОО КазВода КЗ" />
<Address Ru="Астана, ул. Мира 1" Kz="Астана, ул. Мира 1 КЗ" />
</Declarant>
<MeasureDevice Number="012548799" VerificationGap="96" Class="5" DKP="ДКП">
<Model Ru="ШТ-15" Kz="ШТ-15 KZ" />
<MDProductionDate>2013-03-01</MDProductionDate>
<MeasurmentRange Ru="ИЗМ" Kz="ИЗМ KZ" />
<AllowedByClass Ru="КЛАСС" Kz="КЛАСС KZ" />
<AllowedByCat Ru="РАЗР" Kz="РАЗР KZ" />
<AllowedByRandom Ru="НЕОП" Kz="НЕОП KZ" />
<MDProducer Ru="ООО Атырау" Kz="ООО Атырау КЗ" />
<Name Ru="ШТАНГЕНЦИРКУЛЬ" Kz="ШТАНГЕНЦИРКУЛЬ КЗ" />
<VerificationProc Ru="ГОСТ 123456-01-7" Kz="ГОСТ 123456-01-7 КЗ" />
</MeasureDevice>
<VerificationDevices>
LastChange="2013-09-
<VerificationDevice Ru="ЛИТР ДИСТИЛ ВОДЫ" Kz="ЛИТР ДИСТИЛ ВОДЫ КЗ" />
</VerificationDevices>
<Director Ru="Петров П. П." Kz="Петров П.П.1 KZ" />
<Operator Ru="Сидоров И. А." Kz="Сидоров И. А. КЗ" />
</VerificationDocument>
<VerificationDocument Number="АА-02-0000000042"
26T18:20:00" VerificationPassing="true">
Date="2013-07-23T17:44:18"
<VerificationComment />
<Declarant Phone="+9999999">
<Name Ru="ТОО КазВода" Kz="ТОО КазВода КЗ" />
<Address Ru="Астана, ул. Мира 1" Kz="Астана, ул. Мира 1 КЗ" />
</Declarant>
<MeasureDevice Number="012548799" VerificationGap="3" Class="5" DKP="ДКП">
<Model Ru="ШТ-15" />
<MDProductionDate>2013-03-01</MDProductionDate>
<MeasurmentRange Ru="ИЗМ" />
<AllowedByClass Ru="КЛАСС" />
<AllowedByCat Ru="РАЗР" />
<AllowedByRandom Ru="НЕОП" />
<MDProducer Ru="Титан" />
<Name Ru="ШТАНГЕНЦИРКУЛЬ" Kz="ШТАНГЕНЦИРКУЛЬ КЗ" />
<VerificationProc Ru="ГОСТ 123456-01-7" Kz="ГОСТ 123456-01-7 КЗ" />
</MeasureDevice>
<VerificationDevices>
<VerificationDevice Ru="ЭТАЛОН 1 МЕТРА" Kz="ЭТАЛОН 1 МЕТРА
КЗ" />
</VerificationDevices>
<Details>
<Detail Type="ПП" Year="2013" Quarter="4" Begin="5" End="5" />
<Detail Type="СП" Year="2013" Begin="5" End="5" />
<Detail Type="Л12" />
<Detail Type="Л12" Year="2013" />
<Detail Type="Л12" Year="2013" Quarter="4" />
</Details>
<Director Ru="Петров П.П.1" Kz="Петров П.П.1 KZ" />
<Operator Ru="АА" Kz="АА
</VerificationDocument>
</Documents>
</VerificationReport>
КЗ" />
LastChange="2013-09-
Структура ответа в формате XML
На предоставляемые данные генерируется ответный XML. Файл начинается с тэга
содержащего информацию о кодировке. Далее идет корневой элемент ResultReport отчет
результатах импорта с датой и временем отчета (Date), шифром поверительной лаборатории
(Code), версией отчета и признаком ответа (LogicalCheck). Он содержит элемент Documents
который перечисляет элементы ResultDocument документ результат в хронологическом
порядке.
Файл содержит два варианта ответа (LogicalCheck), если true, то это проверка на
логические ошибки в импортируемом файле, загрузка документов не производилась и если
false, то отчет о загрузке документов поверки. В атрибуте Result содержится строковое
представление ошибки по заголовку отчета.
<?xml version="1.0" encoding="utf-8"?>
<ResultReport Date="" Code="" Version="" LogicalCheck="" Result="">
<Documents>
<ResultDocument Number="" Date="" LastChange="" Result="" Success="">
<Details>
<ResultDetail Type="" Year="" Quarter="" Begin="" End="" Result="" Code="" />
…
</Details>
</ResultDocument>
…
</Documents>
</ResultReport>
Элемент ResultDocument имеет обязательные атрибуты номер (Number), дату время
документа (Date) и дату время последнего изменения документа (LastChange) подставляемые
из импортируемого документа, результат проверки/загрузки (Success) имеет логическое
значение true или false и строковое значение результата проверки/загрузки (Result).
(проверка или загрузка определяет атрибут LogicalCheck)
Если загружаемый документ имел состав из клейм, то в ответе также присутствует
элемент по каждому интервалу клейм ResultDetail с целочисленным указанием кода ошибки
(Code), ошибка если значение меньше нуля и если равно и более нуля, то успешная проверка
и строковым значением ошибки (Result).
Пример заполнения с логическими ошибками в импортируемом файле:
<?xml version="1.0" encoding="utf-8"?>
<ResultReport Date="2014-01-30T17:04:09" Code="НМ" Version="1" LogicalCheck="true">
<Documents>
<ResultDocument Number="АА-02-145" Date="2014-01-29T09:00:00" LastChange="2014-01-29T09:00:00"
Result="VerificationDocument:&#xD;&#xA;VerificationDocumentBase:&#xD;&#xA;Номер
документа
(Number)
должен начинаться с кода поверочной лаборатории и он должен совпадать с кодом в заголовке отчета."
Success="false" />
</Documents>
</ResultReport>
Пример заполнения с удачной загрузкой:
<?xml version="1.0" encoding="utf-8"?>
<ResultReport Date="2014-01-30T17:03:13" Code="НМ" Version="1" LogicalCheck="false">
<Documents>
<ResultDocument Number="НМ-01-150"
Result="Проведен" Success="true">
Date="2014-01-29T09:00:00"
LastChange="2014-01-29T09:00:00"
<Details>
<ResultDetail Type="ПП" Year="2013" Quarter="4" Begin="5" End="5" Result="Проверка пройдена
успешно" Code="0" />
<ResultDetail
Code="0" />
Type="СП"
Year="2013"
Begin="5"
End="5"
Result="Проверка
пройдена
успешно"
<ResultDetail Type="Л12" Result="Проверка пройдена успешно" Code="0" />
<ResultDetail Type="Л12" Year="2013" Quarter="4" Result="Проверка пройдена успешно" Code="0"
/>
</Details>
</ResultDocument>
</Documents>
</ResultReport>
Подготовка данных с помощью библиотеки
Для обмена данными подготовлена библиотека (DLL C# .Net Framework 4.0
Client Profile), позволяющая формировать файлы импорта и читать отчеты о загрузке.
В библиотеке реализованы все используемые объекты при обмене данными и
дополнительно, есть проверка логической целостности файла и помощник в сериализации и
десериализации объектов.
Пример заполнения файла импорта:
var report = new VerificationReport()
{
Code = "АА",
Documents = new VerificationDocumentBase[]
{
new VerificationDocumentCancel
{
Number = "АА-02-0000000001",
Date = new DateTime(2014, 01, 15),
LastChange = new DateTime(2014, 01, 15, 10, 0, 0),
VerificationPassing = true,
Declarant = new Declarant()
{
Name = new LocalizedString { Ru = "JSC &quot;Омар&quot;" },
Address = new LocalizedString { Ru = "г. Астана, ул. Мирзояна, 19" },
Phone = "+7 999 9999999",
IINorBIN = "565649977",
},
MeasureDevice = new MeasureDevice
{
Model = new LocalizedString { Ru = "ШТ-15" },
Name = new LocalizedString { Ru = "Штангель циркуль" },
Number = "11111",
Class = 2,
VerificationGap = 12,
DKP = "ФЕ.АА",
MDProducer = new LocalizedString { Ru = "ОАО Штангель" },
MDProductionDate = "01.01.2013",
MeasurmentRange = new LocalizedString { Ru = "от 0 до 15" },
AllowedByCat = new LocalizedString { Ru = "1" },
AllowedByClass = new LocalizedString { Ru = "2" },
AllowedByRandom = new LocalizedString { Ru = "3" },
VerificationProc = new LocalizedString { Ru = "ГОСТ 9999" },
},
},
new VerificationDocument
{
Number = "АА-02-0000000001",
Date = new DateTime(2014, 01, 15),
LastChange = new DateTime(2014, 01, 15, 16, 0, 0),
VerificationPassing = true,
Declarant = new Declarant()
{
Name = new LocalizedString { Ru = "JSC &quot;Омар&quot;" },
Address = new LocalizedString { Ru = "г. Астана, ул. Мирзояна, 19" },
Phone = "+7 999 9999999",
IINorBIN = "565649977",
},
MeasureDevice = new MeasureDevice
{
Model = new LocalizedString { Ru = "ШТ-15" },
Name = new LocalizedString { Ru = "Штангель циркуль" },
Number = "11111",
Class = 2,
VerificationGap = 12,
DKP = "ФЕ.АА",
MDProducer = new LocalizedString { Ru = "ОАО Штангель" },
MDProductionDate = "01.01.2013",
MeasurmentRange = new LocalizedString { Ru = "от 0 до 15" },
AllowedByCat = new LocalizedString { Ru = "1" },
AllowedByClass = new LocalizedString { Ru = "2" },
AllowedByRandom = new LocalizedString { Ru = "3" },
VerificationProc = new LocalizedString { Ru = "ГОСТ 9999" },
},
VerificationComment = new LocalizedString { Ru = "комент" },
VerificationDevices = new LocalizedString[]
{
new LocalizedString { Ru = "Эталон метра" },
new LocalizedString { Ru = "Эталон милиметра" },
},
Details = new Detail[]
{
new Detail { Type = "ПП", Year = 2014, Quarter = 1, Begin = 1, End = 1 },
new Detail { Type = "С2" },
},
Director = new LocalizedString { Ru = "Попов И. А." },
Operator = new LocalizedString { Ru = "Сидоров Е. Е." },
},
}
};
Проверку логической целостности можно осуществить командой:
if (!report.Valid())
throw new Exception("Ошибки: " + report.GetErrors());
Записать файл импорта:
var bytes = SerializerHelper.Obj2BinXml(report);
if (bytes == null || bytes.Length == 0)
throw new Exception("Ошибка сериализации отчета");
File.WriteAllBytes("Имя_файла.xml", bytes);
Чтение результата обработки с помощью библиотеки
var result = SerializerHelper.BinXml2Obj<ResultReport>(File.ReadAllBytes(Result1));
if (result.LogicalCheck)
{
//логическая ошибка
Console.WriteLine("Ошибка: " + result.Result);
}
else
{
//результат загрузки
Console.WriteLine("Результат загрузки");
}
foreach (var each in result.Documents)
{
Console.WriteLine(string.Format("{0} ({1}): {2}", each.Number, each.Date.ToShortDateString(),
each.Success ? "Успешно" : each.Result));
if (each.Details != null && each.Details.Length > 0)
{
foreach (var detail in each.Details)
{
Console.WriteLine(string.Format("\t{0} {1}/{2} {3}-{4}: {5} ({6})",
detail.Type, detail.Year, detail.Quarter, detail.Begin, detail.End, detail.Result,
detail.Code));
}
}
}
1/--страниц
Пожаловаться на содержимое документа