Настройка синхронизации между конфигурациями 1С:Касса 2.0 и 1С:Розница 2.3 — это стандартная задача при автоматизации небольших торговых точек. Однако при использовании веб-сервера Apache в качестве транспортного канала пользователи часто сталкиваются с неприятной проблемой: обмен небольшими порциями (изменениями) проходит мгновенно, но при попытке выполнить первоначальную синхронизацию с пустой базой (для первоначального наполнения номенклатурой) процесс аварийно завершается ошибкой.
В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем записи Журнала регистрации и рассмотрим четыре эффективных способа решения проблемы.
Рассмотрим типичную ситуацию. В филиале на удаленном компьютере установлена пустая база 1С:Касса 2.0 (платформа 8.3.17), а в центральном офисе развернута рабочая база 1С:Розница 2.3 (платформа 8.3.15), опубликованная через веб-сервер Apache 2.4. При попытке запустить полную синхронизацию для переноса каталога товаров система выдает ошибку.
В Журнале регистрации на стороне принимающей или отправляющей базы фиксируется следующее системное сообщение:
{Обработка.ПомощникИнтерактивногоОбменаДанными.Форма.Форма.Форма(2336)}: ВызватьИсключение РезультатАнализа.СообщениеОбОшибке;
Важно понимать, что данная строчка кода — это всего лишь общая заглушка платформы 1С. Она сообщает о том, что интерактивный помощник обмена не смог обработать полученный пакет данных. Сама истинная ошибка кроется в записях Журнала регистрации, расположенных строго перед этой строкой.
Когда мы включаем полную выгрузку данных в пустую базу, система пытается сериализовать и отправить весь справочник Номенклатура. При обмене через веб-сервер Apache это вызывает ряд критических проблем:
default.vrd могут содержать слишком жесткие ограничения на время жизни неактивной сессии.8.3.15 на одном узле и более новой 8.3.17 на другом) может приводить к утечкам памяти и сбоям при десериализации тяжелых XDTO-пакетов.Самый простой, надежный и быстрый способ наполнить пустую базу «1С:Касса» — выполнить первый «тяжелый» обмен локально, полностью исключив веб-сервер из цепочки передачи данных.
Проанализируем этот процесс по шагам:
Если физического доступа к файловой системе серверов нет, либо базы находятся на значительном удалении, можно принудительно разбить выгрузку номенклатуры на небольшие порции.
Выясним, как это сделать с помощью стандартных инструментов платформы 1С:
РегистрацияИзмененийДляОбмена).Номенклатура. Мы увидим, что к отправке зарегистрированы все позиции справочника.Если требуется обеспечить гарантированную передачу больших пакетов напрямую через веб-сервер, необходимо скорректировать лимиты времени ожидания в конфигурационных файлах веб-сервера и публикации 1С.
Разберем по шагам настройку веб-окружения:
Во-первых, отредактируем конфигурационный файл Apache httpd.conf. Найдем его в каталоге установки веб-сервера (например, C:\Program Files\Apache Software Foundation\Apache2.4\conf\). Нам необходимо найти или добавить следующие параметры:
# Увеличиваем время ожидания ответа от сервера до 20 минут (1200 секунд)
Timeout 1200
# Настройки удержания постоянного соединения
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 60
Если веб-сервер ограничивает размер загружаемого файла, добавьте или измените директиву LimitRequestBody, установив значение в байтах (например, 0 для снятия ограничений или 209715200 для лимита в 200 Мб):
# Лимит на размер передаваемого запроса (200 Мбайт)
LimitRequestBody 209715200
Во-вторых, настроим файл публикации базы 1С default.vrd, который находится в каталоге физической публикации на веб-сервере. Откроем его текстовым редактором и отредактируем параметры времени жизни сессии. Добавим атрибуты sessionMaxAge и SessionTimeout:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/Retail"
ib="Srvr="Server1C";Ref="RetailBase";">
<!-- Увеличиваем таймаут сессии до 1200 секунд -->
<ws enable="true" sessionMaxAge="1200"/>
</point>
После внесения всех изменений в файлы конфигурации обязательно выполним перезапуск службы веб-сервера Apache через консоль служб Windows или с помощью команды в командной строке:
httpd.exe -k restart
Обратим внимание на важную деталь в исходном сообщении пользователя: одна база работает на платформе версии 8.3.17.1386, а вторая — на более старой платформе линейки 8.3.15.1556.
Платформы старых редакций (особенно ветки 8.3.15) имели задокументированные ошибки, связанные с утечкой оперативной памяти при обработке больших массивов сериализованных XML/XDTO-данных. При чтении тяжелых пакетов веб-сервис 1С мог аварийно завершать работу из-за нехватки выделенной памяти.
Для устранения подобных системных сбоев выполним следующие действия:
8.3.17, а еще лучше — установим одинаковую актуальную версию платформы на обоих узлах обмена (например, актуальный релиз ветки 8.3.22 или выше).Выполнение этих четырех шагов позволит полностью устранить ошибки при обмене данными и обеспечит стабильную работу распределенной информационной системы.