Как исправить ошибку «В базе данных не обнаружена запись с идентификатором...» при обмене с системой Меркурий (ВетИС) в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с системой Меркурий (ВетИС) в программе 1С:Управление торговлей 11 пользователи часто сталкиваются с ситуацией, когда регламентный или ручной обмен прерывается критической ошибкой. В журнале регистрации при этом фиксируется сообщение вида: При загрузке документа с типом getStockEntryChangesListResponse возникла ошибка: В базе данных не обнаружена запись с идентификатором [GUID]. Эта проблема блокирует дальнейшую загрузку измененных записей складского журнала и не позволяет поддерживать остатки в актуальном состоянии. В этой статье мы подробно разберем, почему возникает этот сбой и как его устранить несколькими способами.

Проанализируем ситуацию: почему возникает эта ошибка?

Прежде чем приступать к исправлению, давайте разберем механизм возникновения проблемы. Ошибка возникает в момент обработки входящего XML-пакета от шлюза ВетИС. Система пытается сопоставить данные, присланные сервером, с объектами в локальной информационной базе 1С. Основные причины расхождения данных:

  1. Ручное удаление объектов: Кто-то из пользователей или администраторов мог удалить запись справочника ЗаписиСкладскогоЖурналаВЕТИС напрямую, минуя стандартные механизмы контроля.
  2. Сбой транзакции при записи: В предыдущем сеансе обмена запись начала создаваться, но из-за обрыва связи или программной ошибки транзакция не завершилась, и объект не был физически записан в базу данных, хотя сервер ВетИС считает его переданным.
  3. Ошибки в кэше очереди сообщений: В регистре сведений ОчередьСообщенийВЕТИС завис ответ, который ссылается на объект, отсутствующий в справочнике.
  4. Рассинхронизация идентификаторов: GUID (Уникальный идентификатор), который ожидает увидеть 1С, существует на сервере Меркурия, но в локальной базе 1С связь между этим идентификатором и ссылкой на объект была утеряна (например, после неудачного тестирования и исправления базы).

Способ 1: Поиск и удаление проблемной записи

Рассмотрим самый простой метод, который помог большинству пользователей на форумах. Если 1С сообщает, что запись не найдена, она всё же может присутствовать в базе в «битом» виде или быть помеченной на удаление, что мешает корректному обновлению.

Выполним следующие шаги:

  1. Скопируем идентификатор (GUID) из текста ошибки (например, 0ebda661-0451-40cb-b9ab-8bd7daa003da).
  2. Перейдем в раздел НСИ и администрирование — Обслуживание — Групповое изменение реквизитов.
  3. В поле «Выбирать элементы типа» выберем Записи складского журнала ВЕТИС.
  4. Нажмем кнопку «Дополнительные параметры» и установим флаг «Показывать служебные реквизиты».
  5. В условиях отбора выберем поле Идентификатор (UUID) и вставим наш GUID.
  6. Если запись найдена, попробуем установить ей пометку на удаление. Если запись не находится даже через групповое изменение, переходим к следующему методу.

Способ 2: Очистка очереди сообщений ВетИС

Часто ошибка «зацикливается» из-за того, что некорректное входящее сообщение постоянно пытается обработаться системой. Разберем, как очистить очередь:

Откроем через «Все функции» (или «Функции для технического специалиста») регистр сведений ОчередьСообщенийВЕТИС. Проанализируем записи в этом регистре. Нам необходимо найти сообщения со статусом Принят или Ошибка, которые имеют тип getStockEntryChangesList. Удаление этих записей позволит системе «забыть» о проблемном пакете данных. После удаления записей из регистра необходимо запустить обмен заново — система сформирует новый запрос и получит актуальный пакет данных, который может уже не содержать ссылку на отсутствующий объект.

Способ 3: Метод создания «пустышки» (для продвинутых пользователей)

Если система «спотыкается» именно на отсутствии объекта, мы можем обмануть её, создав пустую запись с тем самым идентификатором, который она ищет. Рассмотрим программный пример того, как это можно сделать через внешнюю обработку или консоль кода:


// Определим GUID из ошибки
НужныйGUID = "0ebda661-0451-40cb-b9ab-8bd7daa003da";
УИД = Новый УникальныйИдентификатор(НужныйGUID);

// Проверим, нет ли уже такой ссылки в базе
Ссылка = Справочники.ЗаписиСкладскогоЖурналаВЕТИС.ПолучитьСсылку(УИД);

// Создаем новый объект с принудительной установкой ссылки
НовыйОбъект = Справочники.ЗаписиСкладскогоЖурналаВЕТИС.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(Ссылка);
НовыйОбъект.Наименование = "Временная запись (восстановление обмена)";
// Заполняем минимально необходимые реквизиты (организация, предприятие), если требуется
НовыйОбъект.Записать();

Сообщить("Запись успешно создана. Попробуйте повторить обмен.");

После выполнения этого кода в справочнике появится запись с нужным внутренним идентификатором. При следующем обмене 1С найдет этот объект и просто обновит его данными из Меркурия, заполнив все реквизиты актуальной информацией.

Способ 4: Проверка регистра соответствия объектов

Выясним, нет ли противоречий в регистре СоответствиеОбъектовВЕТИС. Иногда случается так, что запись в справочнике отсутствует, но в этом регистре осталась привязка GUID к несуществующей ссылке (объекту типа «Объект не обнаружен»).

Проанализируем ситуацию:

  1. Откроем регистр СоответствиеОбъектовВЕТИС.
  2. Установим фильтр по колонке Идентификатор, используя наш GUID.
  3. Если мы видим запись, где в колонке СобственныйОбъект указано <Объект не найден>, такую запись необходимо удалить.
  4. После удаления связи 1С при загрузке данных создаст новый элемент справочника с чистого листа.

Рекомендации по синхронизации остатков

Чтобы избежать повторения подобных ошибок, рекомендуем выполнить полную синхронизацию данных по конкретному предприятию. Вместо общего обмена перейдем в раздел Складской журнал и воспользуемся командой Загрузить записи. Выбирая конкретное предприятие, мы инициируем запрос getWithdrawalList или getStockEntryList, что принудительно обновляет локальную базу на основе данных из облака ВетИС.

Важный момент: Если вы используете старые релизы УТ 11, проверьте наличие патчей в сервисе обновлений 1С. Разработчики выпускали исправления для общего модуля ОбменДаннымиВЕТИС, которые добавляют в код проверку Если ЗаписьСуществует Тогда... Иначе... КонецЕсли, предотвращая аварийное завершение работы системы при отсутствии локальной записи.

← На главную