При работе с системой ВетИС (Меркурий) через типовые конфигурации 1С, такие как Управление торговлей 11, ERP или Комплексная автоматизация, пользователи часто сталкиваются с ситуацией, когда обмен по конкретному складу или предприятию внезапно останавливается. В журнале регистрации или в окне обмена при этом фиксируется критическая ошибка: "api интерфейс для получения входящих ветеринарно-сопроводительных документов временно недоступен", а в техническом логе уточняется причина: "MERC30304: Отступ превышает количество записей".
В этой статье мы подробно разберем, почему возникает этот сбой, как работает механизм постраничной загрузки данных и какими способами можно восстановить работоспособность обмена, не теряя при этом важные документы.
Для начала проанализируем ситуацию с технической точки зрения. Система ВетИС отдает данные (ВСД, записи складского журнала) порциями, используя так называемое «смещение» (offset). Представьте, что у вас в очереди на получение находится 2000 документов. 1С запрашивает их пачками по 100 штук:
Ошибка MERC30304 возникает в тот момент, когда 1С запрашивает очередную «страницу», например, начиная с 1501-й записи, но на стороне сервера Меркурия в текущей выборке осталось всего 1400 записей. Это происходит из-за динамического изменения списка документов на сервере: пока 1С обрабатывала предыдущие пакеты, часть ВСД могла быть аннулирована, перемещена в архив или обработана другим пользователем через веб-интерфейс. В итоге индекс (смещение), хранящийся в базе 1С, становится неактуальным — он «улетает» за пределы фактически существующих данных.
Рассмотрим наиболее эффективный метод, который помогает в большинстве случаев. Нам необходимо заставить систему «забыть» старое некорректное смещение и инициировать получение только актуальных непогашенных документов. Пройдем по шагам:
1. Откроем список всех функций (или «Функции для технического специалиста» в современных версиях платформы 1С).
2. Найдем в списке регистр сведений СинхронизацияКлассификаторовВЕТИС.
3. В открывшемся списке записей найдем строку, которая соответствует вашему проблемному предприятию. Обратите внимание на колонки «Тип объекта» (там должен быть указан тип, связанный с ветеринарными документами) и само «Предприятие ВЕТИС».
4. Удалим запись для этого предприятия. Не бойтесь, это не приведет к удалению самих документов из базы 1С, это лишь удалит служебную информацию о том, на какой «странице» остановился обмен.
5. Перейдем в «Панель администрирования ВетИС» или в рабочее место «Обмен с ВетИС».
6. Установим отбор по нашему предприятию и запустим выполнение обмена вручную.
После этих действий система выполнит первичный запрос к ВетИС. Поскольку информация о смещении была удалена, 1С запросит не изменения с определенного момента, а весь список текущих непогашенных ВСД. Это позволит «проскочить» ошибочный индекс и восстановить нормальный цикл обмена.
Если вы не хотите полностью сбрасывать синхронизацию, проанализируем ситуацию и попробуем точечное исправление. Этот метод часто применяется в 1С:ERP.
В том же регистре СинхронизацияКлассификаторовВЕТИС найдем проблемную запись. Вместо удаления, откроем ее для редактирования. Нас интересует числовое поле, отвечающее за смещение (итератор). Если система выдает ошибку, что отступ превышает количество записей, мы можем вручную уменьшить это значение.
Например, если там стоит значение 1500, попробуем установить его в 0 или в значение, существенно меньшее текущего (например, 1000). Это заставит систему перечитать часть документов заново. 1С сопоставит их по уникальным идентификаторам (GUID), поймет, что они уже есть в базе, и просто обновит их, после чего продолжит загрузку новых документов с корректным смещением.
Иногда проблема кроется не в самом смещении, а в «зависшем» ответе от сервера, который система пытается обработать снова и снова. Выясним, как очистить очередь:
1. Перейдем в регистр сведений ОчередьСообщенийВЕТИС.
2. Найдем сообщения, которые имеют статус «К отправке» или «Обрабатывается» и относятся к проблемной организации/складу.
3. Удалим эти записи. Это прервет текущую неудачную сессию обмена и позволит сформировать новый, «чистый» запрос к API Меркурия.
Проанализируем параметры обмена, которые могут предотвратить появление таких ошибок в будущем. В настройках интеграции с ВетИС (раздел «НСИ и администрирование» — «Интеграция с ВетИС») обратим внимание на следующие моменты:
Если после выполнения всех действий загрузка все равно не идет, стоит проверить справочник Предприятия ВЕТИС на наличие дублей. Иногда один и тот же склад может быть зарегистрирован в системе Цербер несколько раз с разными GUID. В этом случае 1С может пытаться получить данные по одной площадке, используя параметры синхронизации от другой, что также приводит к конфликтам и ошибкам API.
Используя приведенные выше инструкции, мы сможем восстановить обмен и обеспечить корректное отражение ветеринарных документов в учетной системе. Если отдельные документы так и не появились в базе, можно использовать обработку для загрузки записей журнала продукции и ВСД из ВетИС.