При отправке товарно-транспортных накладных (ТТН) контрагентам со статусом индивидуального предпринимателя (ИП) через УТМ ЕГАИС пользователи и разработчики могут столкнуться с ошибкой валидации структуры XML-документа. УТМ отклоняет документ еще на этапе локальной проверки по XSD-схеме, возвращая сообщение об ошибке SAXParseException.
Разберем природу возникновения данной ошибки, структуру XSD-схем ЕГАИС и конкретные шаги для устранения проблемы в программах 1С.
При попытке передать накладную в УТМ документ не принимается, а в квитанции или логах содержится сообщение следующего вида:
org.xml.sax.SAXParseException; cvc-pattern-valid: Value '522602426886' is not facet-valid with respect to pattern '[0-9]{10}' for type 'INN10Type'.
Проанализируем текст сообщения: валидатор ожидает значение типа INN10Type, состоящее ровно из 10 цифр (как у юридических лиц), а также наличие обязательного тега KPP из 9 цифр. Однако у индивидуального предпринимателя ИНН состоит из 12 знаков, а КПП отсутствует вовсе. В результате документ признается невалидным.
В схемах ЕГАИС (таких как ClientRef_v2, ClientRef_v3 и последующих) блок описания контрагента oref:Client строится на базе логического ветвления по типам субъектов:
oref:UL. Для нее строго обязательны тег oref:INN (10 цифр) и тег oref:KPP (9 цифр).oref:FL. Для нее тег oref:INN содержит ровно 12 цифр, а элемент oref:KPP отсутствует. Наличие даже пустого тега КПП внутри блока физлица приводит к ошибке схемы.oref:FO и oref:TS.Ошибка возникает, когда программа формирования XML ошибочно помещает реквизиты индивидуального предпринимателя в узел oref:UL вместо положенного узла oref:FL.
Если проблема возникла в типовой конфигурации (например, 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP или отраслевых решениях для алкогольной продукции), выполним проверку нормативно-справочной информации по следующим шагам:
Контрагенты и проверим реквизит вида организации. В поле «Вид контрагента» (или «Юр./Физ. лицо») должно быть выбрано значение Индивидуальный предприниматель или Физическое лицо. Поле КПП должно оставаться пустым.Классификатор организаций ЕГАИС. Найдем соответствующую запись контрагента и проверим его тип. Если организация была создана вручную с типом «Юридическое лицо», алгоритм выгрузки будет формировать тег oref:UL.QueryClients_v2).ReplyClient типовой механизм автоматически обновит реквизиты классификатора с корректным типом субъекта.Если выгрузка реализована в нетиповой конфигурации, самописной обработке или внешнем модуле интеграции, необходимо скорректировать программное формирование XML-файла. Разберем логику разделения веток.
В процедуре выгрузки узлов грузоотправителя и грузополучателя (WbShipper, WbConsignee) необходимо добавить проверку типа контрагента перед созданием тега клиента:
Если СтрДлина(СокрЛП(КонтрагентИНН)) = 12 Или ВидКонтрагента = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
// Формируем блок индивидуального предпринимателя
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:FL");
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:ClientRegId");
ЗаписьXML.ЗаписатьТекст(ИдентификаторФСРАР);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:FullName");
ЗаписьXML.ЗаписатьТекст(ПолноеНаименование);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:ShortName");
ЗаписьXML.ЗаписатьТекст(КраткоеНаименование);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:INN");
ЗаписьXML.ЗаписатьТекст(КонтрагентИНН);
ЗаписьXML.ЗаписатьКонецЭлемента();
// Блок адреса
СформироватьУзелАдреса(ЗаписьXML, КонтрагентАдрес);
ЗаписьXML.ЗаписатьКонецЭлемента(); // oref:FL
Иначе
// Формируем блок юридического лица
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:UL");
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:ClientRegId");
ЗаписьXML.ЗаписатьТекст(ИдентификаторФСРАР);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:FullName");
ЗаписьXML.ЗаписатьТекст(ПолноеНаименование);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:ShortName");
ЗаписьXML.ЗаписатьТекст(КраткоеНаименование);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:INN");
ЗаписьXML.ЗаписатьТекст(КонтрагентИНН);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("oref:KPP");
ЗаписьXML.ЗаписатьТекст(КонтрагентКПП);
ЗаписьXML.ЗаписатьКонецЭлемента();
// Блок адреса
СформироватьУзелАдреса(ЗаписьXML, КонтрагентАдрес);
ЗаписьXML.ЗаписатьКонецЭлемента(); // oref:UL
КонецЕсли;
Обратим внимание на важное отличие ИП от юридических лиц при работе с местами осуществления деятельности:
ClientRegId (FSRAR ID).ClientRegId, который зарегистрирован в реестре ФСРАР для фактического адреса поставки.