При администрировании инфраструктуры 1С часто возникает необходимость параллельного использования разных версий платформ. Типичный сценарий — сосуществование старых баз на платформе 8.2 и новых конфигураций на платформе 8.3. В таких условиях системные администраторы нередко сталкиваются с внезапным появлением критической ошибки: "Ошибка формата потока". При этом стандартные средства диагностики (тестирование и исправление, выгрузка-загрузка базы) не выявляют никаких повреждений, а база продолжает выдавать ошибку у пользователей.
В данной статье мы подробно разберем, почему возникает эта проблема, проанализируем её скрытые технические причины и рассмотрим проверенные способы решения и обхода этой ошибки.
Основная причина появления «Ошибки формата потока» в смешанной сетевой среде кроется в конфликте совместимости метаданных. Рассмотрим механизм этой проблемы подробнее. Если база данных, работающая на сервере под управлением 1С 8.2.18 (или ниже), хотя бы один раз открывается или перезаписывается клиентом с установленной платформой 8.3, структура кэша форм, временных файлов конфигурации или некоторых объектов метаданных обновляется под новый формат.
Когда после этого обычные пользователи пытаются подключиться к базе с помощью клиентского приложения платформы версии 8.2.18, загрузчик старого клиента не может корректно распознать обновленный формат данных, присылаемый сервером. В результате клиентское приложение аварийно завершает работу с ошибкой формата потока. Данный баг совместимости «вниз» был официально устранен разработчиками 1С только в финальных релизах ветки 8.2, начиная с версии 8.2.19. Именно поэтому установка платформы 8.2.19 на клиентских рабочих местах решает проблему: её загрузчик умеет корректно обрабатывать измененную структуру потока данных.
Самый быстрый и надежный практический способ устранить ошибку без глобального обновления серверной части — развертывание на рабочих станциях пользователей платформы версии 8.2.19 (например, 8.2.19.130) параллельно со старой версией 8.2.18.
Разберем по шагам, как это работает:
В процессе работы из-за динамических обновлений или аварийного завершения работы пользователей в кэше сессий на сервере могут накапливаться некорректные временные файлы данных. Для исправления этой ситуации выполним очистку сессионного кэша:
services.msc) или консоль.C:\Program Files\1cv82\srvinfo\reg_1541\ (или Program Files (x86) для 32-разрядной службы).snccntx. В этой директории хранятся временные данные сеансов пользователей и транзакционные блокировки.snccntx. При следующем запуске службы сервер автоматически пересоздаст этот каталог с чистыми параметрами.Еще одной неочевидной причиной «Ошибки формата потока» при работе с сервером приложений 1С является рассинхронизация сетевых пакетов из-за некорректной работы протокола IPv6 в операционных системах Windows. Если сетевая инфраструктура компании построена на протоколе IPv4, рекомендуется полностью отключить IPv6 либо настроить жесткую зависимость службы 1С от сетевого стека.
Для полного отключения протокола IPv6 выполним следующие действия через реестр Windows:
regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\ParametersDisabledComponentsDWORD (32-разрядное)FFFFFFFF (или 255 в десятичной).Если отключать IPv6 в системе нежелательно, настроим зависимость запуска службы сервера 1С, чтобы она стартовала строго после инициализации сетевых протоколов. Для этого в ветке реестра нашей службы 1С (например, 1C:Enterprise 8.2 Server Agent) найдем параметр DependOnService и добавим туда значение Tcpip6.
Если планируется постепенный перевод пользователей с конфигураций 1С 7.7 или старых версий 8.2 на новые базы под управлением 1С 8.3, выделять отдельный физический сервер под новую платформу не обязательно. Разберем, как правильно запустить два независимых сервера 1С на одном хосте во избежание сетевых конфликтов.
Для этого необходимо разнести порты служб. По умолчанию служба сервера 1С использует главный порт 1540, порт агента 1541 и диапазон рабочих портов 1560:1591. Настроим сервер 8.3 на альтернативные порты по следующей схеме:
sc create "1C:Enterprise 8.3 Server Agent" binPath= "\"C:\Program Files\1cv8\8.3.20.1613\bin\ragent.exe\" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d \"C:\Program Files\1cv8\srvinfo83\"" start= auto depend= Dnscache/Tcpip6
Обратим внимание на ключевые параметры в этой строке:
-regport 2541 — назначает альтернативный порт кластера.-port 2540 — назначает альтернативный порт агента сервера.-range 2560:2591 — задает рабочий диапазон портов для процессов rphost новой платформы.-d — указывает на индивидуальный каталог для хранения настроек и кэша сервера 8.3, полностью изолируя его от служебных файлов старого сервера 8.2.Использование этого подхода гарантирует стабильное разделение окружения двух платформ на одном физическом сервере и предотвращает возникновение сетевых ошибок формата потока у пользователей.