Интеграция 1С с системой «Меркурий» (ВетИС) является критически важным узлом для предприятий, работающих с продукцией животного происхождения. Одной из самых трудоемких операций является начальная загрузка остатков. Часто пользователи сталкиваются с тем, что процесс «зависает» на неопределенный срок или прерывается критическими ошибками. В этой статье мы подробно разберем, почему это происходит, сколько времени на самом деле должна занимать загрузка и какими методами можно оптимизировать этот процесс.
Прежде всего, давайте выясним нормативные показатели скорости обмена. Время загрузки напрямую зависит от количества записей в складском журнале вашей организации. Проанализируем статистику: практика показывает, что обработка 3000 записей занимает примерно 20–25 минут при стабильном интернет-соединении и средней нагрузке на шлюз ВетИС.API.
Если в вашем журнале числятся десятки тысяч записей, процесс может растянуться на несколько часов. Рассмотрим факторы, влияющие на время ожидания:
Рассмотрим ситуацию, когда при загрузке остатков возникает ошибка «Недостаточно памяти». Это типичная проблема для 32-битных клиентских приложений 1С. Выясним причину: при получении данных через API система формирует массивный XML-пакет. Стандартные механизмы платформы 1С считывают этот пакет в оперативную память целиком для последующего парсинга.
Если объем данных велик (например, накопилось много «микро-остатков» или неаннулированных записей), потребление памяти может превысить порог в 2 Гб, что приведет к аварийному завершению работы. Проанализируем способы решения этой проблемы:
Вместо использования мастера «Начальной настройки», который зачастую пытается загрузить всё и сразу, мы рекомендуем использовать штатный документ ЗапросСкладскогоЖурналаВетИС. Разберем по шагам, почему этот метод эффективнее:
В документе Запрос складского журнала вы имеете возможность гибко настроить фильтры. Рассмотрим основные параметры:
Если стандартный запрос всё равно вызывает переполнение памяти, попробуйте запрашивать данные по конкретным типам продукции последовательно. В 1С это реализуется созданием нескольких документов Запрос складского журнала с разными фильтрами по виду продукции. Проанализируем ситуацию: загрузка 5000 записей по «Мясу и мясопродуктам» и затем 5000 по «Молочной продукции» пройдет гораздо стабильнее, чем попытка получить 10 000 записей общим списком.
Для понимания процесса важно знать, как 1С обменивается данными. Посмотрим на упрощенную схему работы кода (в фоновом режиме):
// Пример логики обработки ответа от ВетИС
Запрос = Новый HTTPЗапрос(АдресРесурса);
Ответ = Соединение.ОтправитьЗапрос(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
// Здесь происходит основной расход памяти при больших объемах
Пока ЧтениеXML.Прочитать() Цикл
// Обработка элементов складского журнала
КонецЦикла;
КонецЕсли;
В современных конфигурациях 1С этот процесс вынесен в ФоновыеЗадания. Если окно программы кажется «зависшим», проверьте консоль фоновых заданий. Вполне вероятно, что процесс идет, просто ожидается ответ от внешнего шлюза. Прерывать процесс стоит только в том случае, если в журнале регистрации зафиксирована ошибка Out of memory или время ожидания превысило 3 часа без каких-либо изменений в базе.
Подведем итог и составим алгоритм действий для успешной загрузки остатков:
Запрос складского журнала.ЖурналРегистрации для отслеживания хода выполнения. Если вы видите записи о получении пакетов данных, значит, система работает, и нужно просто набраться терпения.Соблюдение этих правил превратит процесс из «бесконечного ожидания» в контролируемую техническую процедуру, которая завершится успехом даже при больших объемах данных.