Как исправить ошибку «Из текущего сеанса недопустимо использовать указанные значения разделителей» в РИБ

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

При работе в распределенных информационных базах (РИБ) одной из самых трудноуловимых проблем является ошибка механизма разделения данных. Часто она проявляется в момент синхронизации, когда система отказывается записывать объект, ссылаясь на недопустимые значения разделителей. Типичный пример сообщения об ошибке: «объект: 'Справочник.ВетеринарноСопроводительныйДокументВЕТИС' = {"S","2000"}, в то время как допустимым значением является {"S","0"}». Разберемся по шагам, почему это происходит и как привести базы в соответствие.

Анализируем причину ошибки: Магия чисел 0 и 2000

Для начала проанализируем само содержание ошибки. Значения {"S","0"} и {"S","2000"} не являются случайными строками. В платформе 1С:Предприятие 8 число «2000» в контексте системных идентификаторов чаще всего указывает на смещение дат. При создании базы в консоли администрирования или при загрузке из файла можно выбрать параметр «Смещение дат», который может принимать значения 0 или 2000.

Если в центральной базе установлено смещение 0, а в периферийной — 2000, то при передаче данных через XML-пакеты РИБ происходит конфликт интерпретации внутренних идентификаторов. Платформа воспринимает данные из другой базы как принадлежащие иному «контенту» или области разделения, что и вызывает блокировку записи.

Шаг 1. Проверка параметров базы в консоли администрирования

Выясним, совпадают ли настройки серверных баз. Для этого нам необходимо обратиться к консоли администрирования серверов 1С:Предприятие. Рассмотрим процедуру проверки:

  1. Откроем консоль администрирования на сервере, где расположена центральная база.
  2. Найдем нужную информационную базу в списке, откроем её свойства.
  3. Обратим внимание на параметр «Смещение дат».
  4. Повторим те же действия для сервера, на котором развернута база-приемник (магазин).

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

Шаг 2. Синхронизация версий платформы

Проанализируем ситуацию с версиями платформы. Разные версии могут по-разному обрабатывать механизмы сериализации объектов, особенно если речь идет о сложных справочниках с включенным разделением данных, таких как объекты ВЕТИС. Рассмотрим наши действия:

  1. Проверим версию платформы в «О программе» на всех узлах.
  2. Убедимся, что на всех серверах и клиентских местах установлена идентичная версия (например, 8.3.22.1750).
  3. Обновим платформу там, где она ниже, и обязательно очистим кэш сервера и пользователей.

Хотя само по себе обновление платформы не всегда исправляет проблему разделителей, оно исключает вероятность возникновения ошибок из-за разного поведения механизмов Data Separation в разных релизах.

Шаг 3. Исследование механизма разделения в конфигурации

Если параметры баз совпадают, а ошибка сохраняется, нам следует заглянуть «под капот» конфигурации. Ошибка прямо указывает на справочник Справочник.ВетеринарноСопроводительныйДокументВЕТИС. Проанализируем, какие общие реквизиты-разделители влияют на этот объект.

В типовых решениях (Розница, УНФ) может использоваться механизм разделения данных по организациям или магазинам. Если объект помечен как разделяемый, то при попытке записи система проверяет, соответствуют ли разделители текущего сеанса тем, что указаны в объекте.

Посмотрим на пример кода в модуле сеанса, который может влиять на инициализацию разделителей:


Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    // Если сеанс вызван обменом данными, нужно проверить, 
    // не переопределяются ли значения разделителей некорректно
    Если ОбменДаннымиСервер.ЭтоСеансОбмена() Тогда
        // Установка специфических значений для области данных
        // Например, принудительная установка области "0"
    КонецЕсли;

КонецПроцедуры

Если в вашей базе используется механизм «Областей данных» (SaaS-модель), убедитесь, что периферийный узел РИБ не пытается записать данные в область, к которой у него нет доступа в текущем сеансе.

Шаг 4. Отладка и анализ формата поля

Рассмотрим метод более детального поиска ошибки с помощью отладчика. Нам нужно поймать момент, когда объект пытается записаться в базу-приемник. Для этого в периферийной базе установим точку останова в модуле справочника ВетеринарноСопроводительныйДокументВЕТИС в процедуре ПередЗаписью или в процедуре загрузки данных обмена.

При остановке в отладчике выполним следующие действия:

  1. Проверим значение ЭтотОбъект.ОбменДанными.Загрузка. Обычно оно равно Истина.
  2. Проанализируем состав реквизитов объекта, которые могут выступать разделителями.
  3. Вызовем метод ПолучитьРазделителиСеанса() (если конфигурация позволяет) или проверим параметры сеанса, отвечающие за разделение.

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

Шаг 5. Очистка кэша и тестирование базы

Иногда платформа «запоминает» старые настройки разделителей в кэше метаданных. Проанализируем ситуацию: если вы обновляли конфигурацию или меняли настройки сервера, старый кэш может выдавать ошибку даже при верных данных. Выполним следующие действия:

Резюме

Ошибка с разделителями {"S","2000"} и {"S","0"} — это явный признак рассинхронизации настроек СУБД или платформенных параметров «Смещение дат». Основное решение: убедиться, что обе базы (и центральная, и периферийная) созданы с одинаковым смещением даты. Если это не так, базу с некорректным смещением придется пересоздать через выгрузку/загрузку .dt. В дополнение к этому всегда следите за идентичностью версий платформы 1С на всех узлах РИБ.

← На главную