Как исправить ошибку несоответствия кодовой страницы при обмене УРБД в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При сопровождении распределенных информационных баз (УРБД) на платформе 1С:Предприятие 7.7 администраторы и разработчики часто сталкиваются с аппаратным и системным конфликтом операционных систем. Типичный сценарий: центральная база (ЦБ) развернута на сервере под управлением Windows Server 2008 R2 или более новой ОС, а периферийные базы (ПБ) переносятся на рабочие станции с Windows 10. При первой же попытке выполнить автообмен система выдает критическую ошибку, сообщающую о несоответствии кодовых страниц, и полностью блокирует загрузку пакета данных.

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

Выясняем причину: почему ordnochk.prm не помогает при автообмене?

Многие системные администраторы знают о существовании файла-маркера ordnochk.prm (часто называемого в сообществе «ордночек»). Начиная с 26-го релиза платформы 1С 7.7, добавление пустого файла с таким именем в каталог базы данных или в папку BIN установленной платформы позволяет отключить проверку соответствия системной сортировки Windows и кодовой страницы таблиц ИБ. Это действительно помогает успешно запустить базу данных в режиме «Предприятие».

Однако при попытке выполнить автообмен (загрузить файл переноса данных .zip или распакованный .dat) система все равно завершает работу аварийно. Давайте разберем техническую причину этого поведения:

  1. За запуск и работу клиентского приложения отвечает исполняемый файл платформы 1cv7s.exe (или его аналоги), который считывает директиву из ordnochk.prm и игнорирует различия в таблицах сортировки операционной системы.
  2. За выполнение процедур миграции, выгрузки и загрузки пакетов УРБД отвечает специализированная библиотека механизма распределенных баз — DistrDB.dll.
  3. При формировании файла обмена в центральной базе 1С записывает информацию о текущей кодовой странице и порядке сортировки непосредственно в заголовок файла переноса.
  4. При попытке импорта файла на периферийной точке библиотека DistrDB.dll выполняет собственную, жестко зашитую проверку заголовка пакета на соответствие параметрам принимающей базы данных. Наличие файла ordnochk.prm библиотека полностью игнорирует. При малейшем несовпадении стандартов кодирования процедура обмена прерывается.

Основное решение: использование опции «Текущая системная установка»

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

Шаг 1. Подготовка резервной копии
Перед проведением любых низкоуровневых операций с таблицами базы данных обязательно создайте полную резервную копию каталога информационной базы (файлы формата .DBF и .CDX).

Шаг 2. Изменение кодовой страницы в Конфигураторе
Запустите Конфигуратор 1С 7.7 на проблемной периферийной точке (или в центральной базе, если планируется массовое обновление структуры). Перейдите в меню Администрирование — Кодовая страница таблиц ИБ....

В появившемся окне выбора кодовой страницы прокрутите список в самый низ и выберите опцию «+ Текущая системная установка». Нажмите кнопку «ОК».

Шаг 3. Реиндексация и реструктуризация таблиц
Система выдаст предупреждение о том, что кодовая страница изменена и требуется перестроить индексы таблиц. Согласитесь с проведением операции. Программа автоматически выполнит физическую перезапись заголовков файлов базы данных под стандарты текущей операционной системы. После завершения процесса закройте Конфигуратор.

Шаг 4. Повторение процедуры на всех узлах обмена
Для успешного прохождения проверки DistrDB.dll необходимо, чтобы данная опция («Текущая системная установка») была выбрана во всех базах, участвующих в распределенной сети — как в центральной, так и во всех периферийных. Поскольку операционные системы семейства Windows NT 6+ (Windows 7, 8, 10, Server 2008/2012/2016) имеют совместимые системные локали, этот шаг гарантирует беспрепятственное прохождение файлов обмена.

Важное предупреждение: опасность гетерогенных сетей

Обратите внимание на критический нюанс использования системной кодировки в смешанных IT-инфраструктурах. Если в вашей сети распределенных баз все еще присутствуют старые компьютеры под управлением Windows XP или Windows Server 2003, переход на «Текущую системную установку» может полностью парализовать работу.

Правила сортировки (collation) символов в Windows XP и Windows 10 принципиально отличаются на уровне ядра ОС. Если база на Windows XP и база на Windows 10 будут настроены на локальную системную кодировку, они начнут циклически требовать монопольной переиндексации при переносе файлов обмена, а сам автообмен продолжит выдавать ошибки кодовых страниц. В такой ситуации требуется либо полный отказ от устаревших ОС, либо использование альтернативных методов (патчей ядра платформы).

Критическое требование: использование латиницы в идентификаторах баз

Проанализируем еще одну скрытую проблему, о которой часто забывают разработчики при развертывании новых точек УРБД. Речь идет о наименовании и трехбуквенных кодах информационных баз.

При отключении стандартных проверок сортировки (с помощью файлов-маркеров или модифицированных библиотек) внутренние механизмы 1С 7.7 начинают некорректно транслировать символы кириллического алфавита. Это напрямую влияет на служебные таблицы миграции данных:

Если трехбуквенный уникальный код вашей периферийной базы содержит кириллические символы (например, МСК, СПБ, ЦБД), то при работе под современными версиями Windows 10 механизм автообмена с высокой долей вероятности выдаст ошибку вида «Ошибка адреса ИБ» или «Неверный идентификатор базы». Кодовая страница Windows 10 не сможет корректно сопоставить русские символы в бинарных заголовках DBF.

Правило разработки: Все трехбуквенные идентификаторы баз данных в распределенной сети должны создаваться строго с использованием символов латинского алфавита (например, MSK, SPB, CBD).

Что такое «Секретный релиз» платформы и когда он нужен?

В процессе обсуждения проблем кодовых страниц системные администраторы часто упоминают термин «секретный релиз». Под этим понятием скрываются неофициальные, модифицированные сборки файлов платформы 1С 7.7 (в частности, патченная библиотека bkend.dll).

Зачем это нужно?

Пример настройки пакетного файла для автоматического обмена

Чтобы автоматизировать процесс регулярного обмена данными между точками и минимизировать влияние человеческого фактора (особенно когда на точках работают неподготовленные пользователи), мы рекомендуем использовать командные файлы Windows (батники). Ниже приведен пример скрипта для запуска пакетного автообмена в файловом режиме:


@echo off
echo Запуск сеанса обмена данными УРБД...
rem Путь к исполняемому файлу платформы 1С 7.7
set EXE_PATH="C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe"
rem Путь к каталогу вашей информационной базы
set DB_PATH="C:\1C_Bases\Branch_MSK"
rem Имя пользователя и пароль с правами на обмен данными
set DB_USER="ExchangeRobot"
set DB_PASS="SecurePass123"

rem Запуск 1С в режиме Конфигуратора для выполнения автообмена
%EXE_PATH% config /D%DB_PATH% /N%DB_USER% /P%DB_PASS% /@autoexchange.tip
if %ERRORLEVEL% NEQ 0 (
    echo Произошла ошибка при выполнении автообмена! Проверьте логи.
    pause
    exit /b %ERRORLEVEL%
)
echo Обмен успешно завершен.

Использование подобных автоматизированных сценариев совместно с правильно настроенными кодовыми страницами позволяет построить отказоустойчивую систему распределенных баз данных даже на базе устаревшей платформы 1С 7.7, работающей в современном системном окружении.

← На главную