При работе с системой Меркурий (ВетИС) в программе 1С:Управление торговлей 11 пользователи часто сталкиваются с ситуацией, когда регламентный или ручной обмен прерывается критической ошибкой. В журнале регистрации при этом фиксируется сообщение вида: При загрузке документа с типом getStockEntryChangesListResponse возникла ошибка: В базе данных не обнаружена запись с идентификатором [GUID]. Эта проблема блокирует дальнейшую загрузку измененных записей складского журнала и не позволяет поддерживать остатки в актуальном состоянии. В этой статье мы подробно разберем, почему возникает этот сбой и как его устранить несколькими способами.
Прежде чем приступать к исправлению, давайте разберем механизм возникновения проблемы. Ошибка возникает в момент обработки входящего XML-пакета от шлюза ВетИС. Система пытается сопоставить данные, присланные сервером, с объектами в локальной информационной базе 1С. Основные причины расхождения данных:
ЗаписиСкладскогоЖурналаВЕТИС напрямую, минуя стандартные механизмы контроля.ОчередьСообщенийВЕТИС завис ответ, который ссылается на объект, отсутствующий в справочнике.Рассмотрим самый простой метод, который помог большинству пользователей на форумах. Если 1С сообщает, что запись не найдена, она всё же может присутствовать в базе в «битом» виде или быть помеченной на удаление, что мешает корректному обновлению.
Выполним следующие шаги:
0ebda661-0451-40cb-b9ab-8bd7daa003da).Записи складского журнала ВЕТИС.Идентификатор (UUID) и вставим наш GUID.Часто ошибка «зацикливается» из-за того, что некорректное входящее сообщение постоянно пытается обработаться системой. Разберем, как очистить очередь:
Откроем через «Все функции» (или «Функции для технического специалиста») регистр сведений ОчередьСообщенийВЕТИС. Проанализируем записи в этом регистре. Нам необходимо найти сообщения со статусом Принят или Ошибка, которые имеют тип getStockEntryChangesList. Удаление этих записей позволит системе «забыть» о проблемном пакете данных. После удаления записей из регистра необходимо запустить обмен заново — система сформирует новый запрос и получит актуальный пакет данных, который может уже не содержать ссылку на отсутствующий объект.
Если система «спотыкается» именно на отсутствии объекта, мы можем обмануть её, создав пустую запись с тем самым идентификатором, который она ищет. Рассмотрим программный пример того, как это можно сделать через внешнюю обработку или консоль кода:
// Определим GUID из ошибки
НужныйGUID = "0ebda661-0451-40cb-b9ab-8bd7daa003da";
УИД = Новый УникальныйИдентификатор(НужныйGUID);
// Проверим, нет ли уже такой ссылки в базе
Ссылка = Справочники.ЗаписиСкладскогоЖурналаВЕТИС.ПолучитьСсылку(УИД);
// Создаем новый объект с принудительной установкой ссылки
НовыйОбъект = Справочники.ЗаписиСкладскогоЖурналаВЕТИС.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(Ссылка);
НовыйОбъект.Наименование = "Временная запись (восстановление обмена)";
// Заполняем минимально необходимые реквизиты (организация, предприятие), если требуется
НовыйОбъект.Записать();
Сообщить("Запись успешно создана. Попробуйте повторить обмен.");
После выполнения этого кода в справочнике появится запись с нужным внутренним идентификатором. При следующем обмене 1С найдет этот объект и просто обновит его данными из Меркурия, заполнив все реквизиты актуальной информацией.
Выясним, нет ли противоречий в регистре СоответствиеОбъектовВЕТИС. Иногда случается так, что запись в справочнике отсутствует, но в этом регистре осталась привязка GUID к несуществующей ссылке (объекту типа «Объект не обнаружен»).
Проанализируем ситуацию:
СоответствиеОбъектовВЕТИС.Идентификатор, используя наш GUID.СобственныйОбъект указано <Объект не найден>, такую запись необходимо удалить.Чтобы избежать повторения подобных ошибок, рекомендуем выполнить полную синхронизацию данных по конкретному предприятию. Вместо общего обмена перейдем в раздел Складской журнал и воспользуемся командой Загрузить записи. Выбирая конкретное предприятие, мы инициируем запрос getWithdrawalList или getStockEntryList, что принудительно обновляет локальную базу на основе данных из облака ВетИС.
Важный момент: Если вы используете старые релизы УТ 11, проверьте наличие патчей в сервисе обновлений 1С. Разработчики выпускали исправления для общего модуля ОбменДаннымиВЕТИС, которые добавляют в код проверку Если ЗаписьСуществует Тогда... Иначе... КонецЕсли, предотвращая аварийное завершение работы системы при отсутствии локальной записи.