Как решить ошибку обмена между 1С:Касса 2.0 и 1С:Розница 2.3 через веб-сервер Apache при выгрузке номенклатуры

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

Настройка синхронизации между конфигурациями 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 это вызывает ряд критических проблем:

  1. Таймаут веб-сервера: Обработка и сериализация тысяч позиций номенклатуры в XML- или JSON-пакет на стороне сервера занимает длительное время. У Apache по умолчанию лимит ожидания ответа составляет от 60 до 300 секунд. Если 1С не успевает сформировать пакет за это время, веб-сервер принудительно разрывает соединение.
  2. Таймаут сессии 1С: Параметры публикации информационной базы в файле default.vrd могут содержать слишком жесткие ограничения на время жизни неактивной сессии.
  3. Превышение размера пакета: По умолчанию в настройках веб-сервера Apache могут стоять ограничения на максимальный размер передаваемого тела запроса. Пакет со справочником номенклатуры на десятки тысяч позиций может весить более 100 Мб, что приводит к блокировке запроса веб-сервером.
  4. Несоответствие версий платформ 1С: Разница в версиях платформ (например, использование устаревшей 8.3.15 на одном узле и более новой 8.3.17 на другом) может приводить к утечкам памяти и сбоям при десериализации тяжелых XDTO-пакетов.

Способ 1. Первоначальный обмен через локальный файл (рекомендуемый метод)

Самый простой, надежный и быстрый способ наполнить пустую базу «1С:Касса» — выполнить первый «тяжелый» обмен локально, полностью исключив веб-сервер из цепочки передачи данных.

Проанализируем этот процесс по шагам:

  1. Зайдем в настройки синхронизации данных в обеих конфигурациях (в «1С:Розница» и «1С:Касса»).
  2. Временно изменим способ подключения. Вместо варианта «Подключение через веб-сервер» выберем «Синхронизация через локальный или сетевой каталог».
  3. Укажем в качестве каталога обмена любую удобную локальную папку или внешний накопитель (флешку).
  4. Запустим выгрузку данных из «1С:Розница». Платформа без каких-либо ограничений по таймауту сформирует файлы обмена и сохранит их в указанную папку.
  5. Перенесем файлы в базу «1С:Касса» и выполним загрузку. Программа спокойно сопоставит объекты и создаст всю необходимую номенклатуру.
  6. Выполним ответную выгрузку из «1С:Касса» и загрузим ее в «1С:Розница», чтобы завершить цикл сопоставления идентификаторов.
  7. После успешного завершения первичного обмена вернем настройки подключения обратно на веб-сервер Apache. Поскольку базы уже синхронизированы, при последующих сеансах будут передаваться только небольшие измененные пакеты данных («дельта»), и обмен будет проходить мгновенно.

Способ 2. Регистрация изменений и выгрузка данных порциями

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

Выясним, как это сделать с помощью стандартных инструментов платформы 1С:

  1. В базе источника («1С:Розница») перейдем в меню «Администрирование» — «Синхронизация данных».
  2. Найдем нашу настройку обмена и откроем окно «Состав отправляемых данных» (также доступно через функции для технического специалиста — обработка РегистрацияИзмененийДляОбмена).
  3. Найдем в списке зарегистрированных объектов справочник Номенклатура. Мы увидим, что к отправке зарегистрированы все позиции справочника.
  4. Нажмем правую кнопку мыши и выберем пункт «Отменить регистрацию всех объектов этого типа». Справочник номенклатуры станет пустым для обмена.
  5. Теперь будем регистрировать номенклатуру небольшими частями. Для этого можно воспользоваться отбором по группам (папкам) или зарегистрировать выборочно несколько сотен позиций.
  6. Запустим обмен. Небольшой пакет данных успешно пройдет через веб-сервер без таймаутов. Повторим процедуру для остальных групп товаров.

Способ 3. Изменение настроек таймаутов в веб-сервере Apache и файле default.vrd

Если требуется обеспечить гарантированную передачу больших пакетов напрямую через веб-сервер, необходимо скорректировать лимиты времени ожидания в конфигурационных файлах веб-сервера и публикации 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


Способ 4. Выравнивание версий и обновление платформ 1С

Обратим внимание на важную деталь в исходном сообщении пользователя: одна база работает на платформе версии 8.3.17.1386, а вторая — на более старой платформе линейки 8.3.15.1556.

Платформы старых редакций (особенно ветки 8.3.15) имели задокументированные ошибки, связанные с утечкой оперативной памяти при обработке больших массивов сериализованных XML/XDTO-данных. При чтении тяжелых пакетов веб-сервис 1С мог аварийно завершать работу из-за нехватки выделенной памяти.

Для устранения подобных системных сбоев выполним следующие действия:

  1. Обновим платформу 1С:Предприятие на компьютере с «1С:Розница» как минимум до версии 8.3.17, а еще лучше — установим одинаковую актуальную версию платформы на обоих узлах обмена (например, актуальный релиз ветки 8.3.22 или выше).
  2. Переопубликуем информационную базу на веб-сервере Apache из новой версии платформы 1С через конфигуратор («Администрирование» — «Публикация на веб-сервере»).

Выполнение этих четырех шагов позволит полностью устранить ошибки при обмене данными и обеспечит стабильную работу распределенной информационной системы.

← На главную