Как исправить ошибку MERC30304 «Отступ превышает количество записей» при обмене 1С с ВетИС?

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

При работе с системой ВетИС (Меркурий) через типовые конфигурации 1С, такие как Управление торговлей 11, ERP или Комплексная автоматизация, пользователи часто сталкиваются с ситуацией, когда обмен по конкретному складу или предприятию внезапно останавливается. В журнале регистрации или в окне обмена при этом фиксируется критическая ошибка: "api интерфейс для получения входящих ветеринарно-сопроводительных документов временно недоступен", а в техническом логе уточняется причина: "MERC30304: Отступ превышает количество записей".

В этой статье мы подробно разберем, почему возникает этот сбой, как работает механизм постраничной загрузки данных и какими способами можно восстановить работоспособность обмена, не теряя при этом важные документы.

Разберем причину возникновения ошибки MERC30304

Для начала проанализируем ситуацию с технической точки зрения. Система ВетИС отдает данные (ВСД, записи складского журнала) порциями, используя так называемое «смещение» (offset). Представьте, что у вас в очереди на получение находится 2000 документов. 1С запрашивает их пачками по 100 штук:

  1. Запрос 1: Дай документы с 1 по 100.
  2. Запрос 2: Дай документы со 101 по 200.
  3. ...и так далее.

Ошибка MERC30304 возникает в тот момент, когда 1С запрашивает очередную «страницу», например, начиная с 1501-й записи, но на стороне сервера Меркурия в текущей выборке осталось всего 1400 записей. Это происходит из-за динамического изменения списка документов на сервере: пока 1С обрабатывала предыдущие пакеты, часть ВСД могла быть аннулирована, перемещена в архив или обработана другим пользователем через веб-интерфейс. В итоге индекс (смещение), хранящийся в базе 1С, становится неактуальным — он «улетает» за пределы фактически существующих данных.

Способ 1: Очистка регистра синхронизации (Рекомендуемый)

Рассмотрим наиболее эффективный метод, который помогает в большинстве случаев. Нам необходимо заставить систему «забыть» старое некорректное смещение и инициировать получение только актуальных непогашенных документов. Пройдем по шагам:

1. Откроем список всех функций (или «Функции для технического специалиста» в современных версиях платформы 1С).

2. Найдем в списке регистр сведений СинхронизацияКлассификаторовВЕТИС.

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

4. Удалим запись для этого предприятия. Не бойтесь, это не приведет к удалению самих документов из базы 1С, это лишь удалит служебную информацию о том, на какой «странице» остановился обмен.

5. Перейдем в «Панель администрирования ВетИС» или в рабочее место «Обмен с ВетИС».

6. Установим отбор по нашему предприятию и запустим выполнение обмена вручную.

После этих действий система выполнит первичный запрос к ВетИС. Поскольку информация о смещении была удалена, 1С запросит не изменения с определенного момента, а весь список текущих непогашенных ВСД. Это позволит «проскочить» ошибочный индекс и восстановить нормальный цикл обмена.

Способ 2: Ручная корректировка смещения (Offset)

Если вы не хотите полностью сбрасывать синхронизацию, проанализируем ситуацию и попробуем точечное исправление. Этот метод часто применяется в 1С:ERP.

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

Например, если там стоит значение 1500, попробуем установить его в 0 или в значение, существенно меньшее текущего (например, 1000). Это заставит систему перечитать часть документов заново. 1С сопоставит их по уникальным идентификаторам (GUID), поймет, что они уже есть в базе, и просто обновит их, после чего продолжит загрузку новых документов с корректным смещением.

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

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

1. Перейдем в регистр сведений ОчередьСообщенийВЕТИС.

2. Найдем сообщения, которые имеют статус «К отправке» или «Обрабатывается» и относятся к проблемной организации/складу.

3. Удалим эти записи. Это прервет текущую неудачную сессию обмена и позволит сформировать новый, «чистый» запрос к API Меркурия.

Дополнительные рекомендации по настройке

Проанализируем параметры обмена, которые могут предотвратить появление таких ошибок в будущем. В настройках интеграции с ВетИС (раздел «НСИ и администрирование» — «Интеграция с ВетИС») обратим внимание на следующие моменты:

  1. Размер страницы при загрузке: По умолчанию система может запрашивать по 200 или 500 записей за раз. Если у вас нестабильный интернет или очень большой документооборот, попробуем уменьшить это значение до 50 или 100. Это снизит вероятность того, что список документов на сервере успеет существенно измениться за время обработки одного пакета.
  2. Регламентные задания: Убедимся, что регламентное задание «Обмен с ВЕТИС» выполняется достаточно часто. Чем чаще происходит синхронизация, тем меньше «пакеты» данных и тем ниже риск рассинхронизации индексов.
  3. Версия конфигурации: Проверим, установлены ли последние патчи (исправления) от фирмы 1С. Ошибка MERC30304 часто исправляется программно путем добавления в код обработки исключений, которые автоматически сбрасывают смещение при получении данного кода ответа от API.

Если после выполнения всех действий загрузка все равно не идет, стоит проверить справочник Предприятия ВЕТИС на наличие дублей. Иногда один и тот же склад может быть зарегистрирован в системе Цербер несколько раз с разными GUID. В этом случае 1С может пытаться получить данные по одной площадке, используя параметры синхронизации от другой, что также приводит к конфликтам и ошибкам API.

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

← На главную