Мазмұнға өту
Tez Base

Проверка сертификата и декларации в реестре ЕАЭС из 1С: запрос, код и ловушки номера

· Жарияланды:

Интеграции и обмены

Проверить сертификат или декларацию по номеру в едином реестре Евразийского экономического союза можно прямо из 1С, без регистрации и без ключа. Реестр отдаёт даты начала и окончания действия, вид документа, страну и код статуса. Ниже запрос, функция на встроенном языке, список ответов, которые легко принять за “документа нет”, и порядок, в котором стоит начинать, если номеров в базе тысячи.

Запрос, поля ответа и примеры номеров перепроверены 25 сентября 2026 года.

Что отдаёт реестр по одному номеру

Человеку реестр показывают на tech.eaeunion.org. Под этим интерфейсом работает поиск, который принимает запрос в JSON и отвечает тоже JSON. Для одного документа полезны такие поля:

Поле ответаЧто в нёмПример
docIdномер документа, как он записан в реестреЕАЭС RU С-RU.АЯ46.В.40025/25
docStartDateдата начала действия{"$date":"2025-04-10T00:00:00Z"}
docValidityDateдата окончания действия{"$date":"2030-04-09T00:00:00Z"}
conformityDocKindNameвид документа словамисертификат соответствия ТР ЕАЭС
unifiedCountryCodeстрана, код в поле valueRU
docStatusDetailsстатус, код в поле docStatusCode01
matchedDocumentsсколько документов подошло под запрос1

Даты завёрнуты в объект с ключом $date, это расширенный JSON. Расшифровку кодов статуса реестр в ответе не даёт, поэтому для решения “действует или нет” мы опираемся на даты, а код статуса сохраняем рядом для справки.

Запрос

POST https://tech.eaeunion.org/spd2/find
     ?collection=kbdallread.service-prop-35_1-conformityDocDetailsType
     &limit=1&skip=0
Content-Type: text/plain

{"docId":"ЕАЭС RU С-RU.АЯ46.В.40025/25"}

Ответ на такой запрос приходит примерно за полсекунды. Вместо точного номера в docId можно передать {"$regex":"^ЕАЭС\\.KZ\\."}: поиск по началу строки идёт быстро, без якоря ^ реестр перебирает почти девять миллионов записей и отвечает за 13-16 секунд. Для цикла по справочнику годится только точный номер.

Функция на встроенном языке

Функция принимает номер и возвращает структуру с датами. Если документ не найден, Найден будет Ложь.

Функция ДокументИзРеестраЕАЭС(Номер) Экспорт

	Результат = Новый Структура("Найден, ДатаНачала, ДатаОкончания, Вид, Страна, КодСтатуса",
		Ложь, Дата(1, 1, 1), Дата(1, 1, 1), "", "", "");

	Соединение = Новый HTTPСоединение("tech.eaeunion.org", 443, , , , 30,
		Новый ЗащищенноеСоединениеOpenSSL);

	Запрос = Новый HTTPЗапрос("/spd2/find?collection=kbdallread.service-prop-35_1-conformityDocDetailsType"
		+ "&limit=1&skip=0");
	Запрос.Заголовки.Вставить("Content-Type", "text/plain");

	Запись = Новый ЗаписьJSON;
	Запись.УстановитьСтроку();
	ЗаписатьJSON(Запись, Новый Структура("docId", Номер));

	// без третьего параметра в режиме совместимости уйдёт BOM, и реестр ответит 500
	Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8,
		ИспользованиеByteOrderMark.НеИспользовать);

	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	Если Ответ.КодСостояния <> 200 Тогда
		ВызватьИсключение "Реестр ЕАЭС ответил " + Ответ.КодСостояния;
	КонецЕсли;

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
	Данные = ПрочитатьJSON(Чтение, Истина);

	Если Данные["matchedDocuments"] = 0 Тогда
		Возврат Результат;
	КонецЕсли;

	Документ = Данные["result"][0];
	Результат.Найден = Истина;
	Результат.ДатаНачала = ДатаИзРеестра(Документ["docStartDate"]);
	Результат.ДатаОкончания = ДатаИзРеестра(Документ["docValidityDate"]);
	Результат.Вид = Документ["conformityDocKindName"];
	Если Документ["unifiedCountryCode"] <> Неопределено Тогда
		Результат.Страна = Документ["unifiedCountryCode"]["value"];
	КонецЕсли;
	Если Документ["docStatusDetails"] <> Неопределено Тогда
		Результат.КодСтатуса = Документ["docStatusDetails"]["docStatusCode"];
	КонецЕсли;

	Возврат Результат;

КонецФункции

Функция ДатаИзРеестра(Значение)
	// {"$date":"2025-04-10T00:00:00Z"}: берём первые 19 знаков без зоны
	Если Значение = Неопределено Тогда
		Возврат Дата(1, 1, 1);
	КонецЕсли;
	Возврат XMLЗначение(Тип("Дата"), Лев(Значение["$date"], 19));
КонецФункции

Тело собирается через ЗаписьJSON, а не склейкой строк: так кавычки и обратные косые в номере не сломают запрос. Паузу между вызовами в цикле держите в одну-две десятых секунды. На такой скорости отказов по частоте мы не получали.

Ответы, которые врут

На правильно оформленный запрос реестр отвечает 200, найден документ или нет. Отличает их только matchedDocuments, и ноль там бывает по двум причинам: документа нет или реестр не понял номер. Как это выглядит на одном и том же живом номере:

Что ушло в реестрКод ответаНайдено
тело в UTF-8 без BOM2001
тело, где кириллица испорчена до одного байта на символ2000
кириллица записана последовательностями \uXXXX2001
несуществующий номер2000
тело с BOM500, тело пустое-
заголовок application/json415-

Вторая строка самая неприятная: ответ неотличим от “такого документа нет”. Кириллицу так портит любой промежуточный слой, который считает строку однобайтовой. Поэтому каждый прогон начинайте с номера, про который точно известно, что он в реестре есть, например с того, что в таблице полей выше. Не нашёлся он, значит сломана отправка, и результаты по вашим номерам пока ничего не значат.

Номер: три написания и буквы-близнецы

Реестр ищет по точному совпадению строки, а номер одного и того же вида документа в нём бывает записан по-разному. У казахстанских номеров мы насчитали три написания начала:

Начало номераДокументов на 25.09.2026Пример из реестра
ЕАЭС KZ через пробел267 457ЕАЭС KZ 02421.05.01.00001
ЕАЭС KZ. пробел, дальше точки83 040ЕАЭС KZ.1110033.13.12.00002
ЕАЭС.KZ. через точки10 099ЕАЭС.KZ.1110033.24.01.00691

Второе написание не опечатка: 82 425 номеров из 83 040 в нём устроены одинаково, цифровые группы через точку. Остальные это уже шум ввода, попадаются и двойная точка, и пробел внутри номера. Поиск по одной форме другие не находит. Хорошо видно на одном органе по сертификации, 1110033: через пробел у него ноль документов, через точки 17, через пробел и точки 33. Один орган, два написания. Отсюда правило: не приводите номер к “правильной” форме до запроса. Сначала спросите в том виде, как он записан в базе, и только при промахе пробуйте другие.

Вторая причина промахов опаснее, потому что её не видно глазами. Номер ЕАЭС пишется двумя алфавитами: коды стран латиницей, а маркерные буквы вроде С и В кириллицей. В учётной базе на их месте часто стоит латиница, и строка на экране не отличается от правильной:

ЕАЭС RU C-JP.МЕ10.В.01054/22    латинская C   -> 0 найдено
ЕАЭС RU С-JP.МЕ10.В.01054/22    кириллическая С -> 1 найдено

Как найти латиницу в номере и почему площадки отказывают по такому номеру, разобрано в статье про сертификаты для маркетплейсов из 1С. Для запроса в реестр нужна обратная операция: перебрать варианты начертаний и спросить каждый.

Приставку ЕАЭС не трогайте. Если заменить в ней Е, А и С на латинские, не найдётся ни один номер, и промах будет выглядеть как подтверждение того, что начертание ни при чём. На этом легко обмануться при проверке собственной гипотезы, мы так и обманулись в первый раз.

// Варианты номера: все сочетания кириллица/латиница в буквах-близнецах после приставки
Функция ВариантыНачертаний(Номер, МаксБукв = 6) Экспорт

	Кириллица = "АВЕКМНОРСТХ";
	Латиница  = "ABEKMHOPCTX";

	Приставка = "ЕАЭС";
	Хвост = Сред(Номер, СтрДлина(Приставка) + 1);

	Позиции = Новый Массив;
	Для Поз = 1 По СтрДлина(Хвост) Цикл
		Символ = Сред(Хвост, Поз, 1);
		Если СтрНайти(Кириллица, Символ) > 0 ИЛИ СтрНайти(Латиница, Символ) > 0 Тогда
			Позиции.Добавить(Поз);
		КонецЕсли;
	КонецЦикла;

	Варианты = Новый Массив;
	Если Позиции.Количество() > МаксБукв Тогда
		Варианты.Добавить(Номер);   // слишком много сочетаний, перебор не делаем
		Возврат Варианты;
	КонецЕсли;

	Для Маска = 0 По Pow(2, Позиции.Количество()) - 1 Цикл
		Вариант = Хвост;
		Для Инд = 0 По Позиции.Количество() - 1 Цикл
			Поз = Позиции[Инд];
			Символ = Сред(Хвост, Поз, 1);
			ИндБуквы = СтрНайти(Кириллица, Символ);
			Если ИндБуквы = 0 Тогда
				ИндБуквы = СтрНайти(Латиница, Символ);
			КонецЕсли;
			// бит маски выбирает алфавит для этой позиции
			Если Цел(Маска / Pow(2, Инд)) % 2 = 1 Тогда
				Замена = Сред(Латиница, ИндБуквы, 1);
			Иначе
				Замена = Сред(Кириллица, ИндБуквы, 1);
			КонецЕсли;
			Вариант = Лев(Вариант, Поз - 1) + Замена + Сред(Вариант, Поз + 1);
		КонецЦикла;
		Варианты.Добавить(Приставка + Вариант);
	КонецЦикла;

	Возврат Варианты;

КонецФункции

Коды стран вроде RU и JP тоже попадут в перебор, это лишние запросы, но не ошибка: правильный вариант среди сочетаний всё равно есть. Ограничение МаксБукв держит число запросов в разумных пределах, шесть букв это 64 варианта на номер. Перебор имеет смысл только для номеров, которые не нашлись точным запросом.

Сначала замер, потом загрузчик

Если в базе тысячи документов без дат, первая мысль написать загрузчик: нормализация, обработка отказов, журнал, повторы. Это неделя работы. Сколько номеров из вашей базы реестр знает, выясняется за час, и от этого числа зависит, нужна ли неделя.

Порядок:

  1. Выберите три-четыре десятка номеров разных стран и форматов.
  2. Первым запросом отправьте заведомо живой номер.
  3. Спросите каждый номер точно в том виде, как он записан в базе.
  4. Для промахов переберите начертания функцией выше.
  5. Посчитайте долю найденных в разрезе стран.

Наш замер на 34 номерах из рабочих протоколов, сентябрь 2026:

Страна документаНомеровНашлось точным запросом
Россия168
Казахстан115
Киргизия72
Всего3415

Перебор начертаний добавил ещё три номера, стало 18 из 34, и у всех трёх в маркере стояла латинская C. Замена написания “через пробел” на “через точки” не вернула ни одного. У всех 18 найденных пришли обе даты. Оставшиеся 16 номеров реестр не знает ни в каком виде, и почему, мы не разбирали: вариантов несколько, от национального реестра до ошибки в номере, а проверка каждого стоит дороже пользы.

Выборка маленькая и не случайная, поэтому 53 % годятся как ориентир. Для вашей базы число будет своим. Решение принимается по своему числу: нашлось девять из десяти, загрузчик окупится; нашлась половина, сначала решите, закрывает ли половина исходную задачу.

Чего в реестре ЕАЭС нет

Реестр отвечает, что это за документ и на какой срок выдан. Статус с точки зрения надзора, например приостановку, для российских документов удобнее брать не отсюда. В 1С:Управление торговлей 11.5 у справочника СертификатыНоменклатуры есть реквизиты СтатусРосаккредитации, ДатаОбновленияСтатусаРосаккредитации и СсылкаНаСертификатРосаккредитации, их обновляет регламентное задание ОбновлениеСтатусовСертификатовНоменклатурыРосаккредитации с pub.fsa.gov.ru. Это описано в информации об обновлении версии 11.5.15.40.

Сроки действия это задание не заполняет, и за ними как раз стоит идти в реестр ЕАЭС функцией выше.

Когда документы уже надо везти на площадку

С 1 октября 2026 года маркетплейсы сверяют разрешительный документ с реестром, поэтому номер и даты в карточке товара начинают значить больше. Готовые обработки для трёх площадок:

Если нужен загрузчик дат из реестра в ваш справочник или обмен с площадкой под вашу конфигурацию, это задача для интеграции с маркетплейсами.

Мұны сіздің орныңызға жөндей аламын

Ресейлік алаңдар бір 1С базасынан: ортақ қалдықтар, бірыңғай баға ережелері, тапсырыстар бір интерфейсте, комиссиялардың дұрыс есебі. Kaspi/Halyk-та да сауда жасайсыз ба - бәрін бірге қосамыз.

Құны
450 000 ₸-денбір алаң үшін; салықтарсыз; бірнеше алаң пакеті тиімдірек
бір 1С базасынан
5 алаң

Жазуға ерте ме? Өзіңіз өлшеп көріңіз

Сертификаты в Ozon из 1С, без ручного переноса по одному

Өңдеуді ашу

INFOSTART TECH EVENT 2026: конференция для 1с-специалистов. если собираетесь, регистрируйтесь по нашей ссылке. Регистрация →

Мұны да оқыңыз

GTIN-14 и EAN-13: в чём разница и почему в карточке маркетплейса нужны обе формы

GTIN-14 и EAN-13 - один и тот же номер товара, записанный 14 и 13 знаками. Ozon держит их как два разных элемента списка штрихкодов и одну форму из другой не выводит. Таблица по Ozon и Яндекс Маркету, проверка своих карточек и правка выгрузки из УТ 11.5.

Сертификаты и декларации на Ozon, Wildberries и Яндекс Маркет из 1С: что проверить до 1 октября

С 1 октября 2026 года маркетплейс сам сверяет сертификат или декларацию с реестром. Ozon принимает документ со сканом через API, Wildberries и Яндекс Маркет берут только номер. Сводная таблица по трём площадкам, подготовка сертификатов номенклатуры в УТ 11.5 и чек-лист.

Прибыль по товарам OZON в 1С: как проверить расчёт

Как связать продажи OZON с себестоимостью в 1С, учесть возвраты и распределение рекламы. Контрольные сверки перед решением об ассортименте.