При работе с расширениями конфигурации в крупных прикладных решениях, таких как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Зарплата и Управление Персоналом, разработчики часто сталкиваются со специфическим сбоем платформы. При попытке сохранить изменения в расширении или обновить конфигурацию базы данных система выдает ошибку: «Требуемая операция не может быть выполнена, т.к. установлены не все разделители ИБ». Данная проблема может полностью заблокировать процесс разработки и развертывания обновлений.
В этой статье мы подробно разберем природу возникновения этой ошибки, выясним основные причины технического конфликта и рассмотрим пошаговые практические методы ее устранения.
Даже если ваша информационная база работает в обычном локальном (файловом или клиент-серверном) режиме и вы не используете разделение данных (например, технологию 1С:Fresh), в типовых конфигурациях на уровне метаданных физически присутствуют общие реквизиты-разделители. К ним относятся такие системные реквизиты, как ОбластьДанныхОсновныеДанные и ОбластьДанныхВспомогательныеДанные.
Когда вы заимствуете определенные типы объектов (в частности, оборотные регистры накопления) в расширение, платформа 1С на некоторых релизах начинает некорректно обрабатывать эти внутренние системные разделители. Происходит внутренний конфликт СУБД, при котором система «теряет» связь с таблицами разделителей и блокирует запись расширения.
Проанализируем наиболее частую причину сбоя. Зачастую разработчики заимствуют регистры накопления в расширение «на всякий случай» или в процессе переноса других связанных объектов (документов, отчетов), когда платформа предлагает автоматически перенести зависимые элементы. Если заимствованный регистр накопления не претерпел никаких изменений (в него не добавлялись новые измерения, реквизиты или ресурсы), он дублирует структуру основной конфигурации и становится источником ошибки.
Разберем по шагам, как решить проблему путем очистки расширения:
Del на выделенном регистре). Обратите внимание: удаление объекта из расширения никак не затронет данные в основной конфигурации!F7).Как показывает практика, удаление неиспользуемых заимствованных регистров накопления мгновенно устраняет ошибку и позволяет продолжить работу.
Выясним причину глубже. Ошибка часто оказывается багом конкретных версий платформы 1С:Предприятие (начиная с релизов линейки 8.3.12 и выше), который проявляется при работе с оборотными регистрами накопления, если конфигурация и расширение функционируют в режиме совместимости со старыми версиями (например, 8.3.10 или 8.3.14). При этом регистры остатков заимствуются без каких-либо нареканий.
Рассмотрим алгоритм обхода этой проблемы:
Не использовать (или установите максимально свежую версию).Важное предупреждение: На крупных рабочих базах данных этот прием следует использовать с крайней осторожностью, так как изменение режима совместимости основной конфигурации может запустить длительный процесс реструктуризации таблиц всей базы данных. Перед выполнением этих действий обязательно создайте резервную копию!
Поскольку проблема напрямую связана со специфическими ошибками реструктуризации таблиц в самой платформе, ее часто удается решить простой сменой версии платформы:
Если ошибка возникает непосредственно в режиме «1С:Предприятие» при записи документов, констант или обращении к механизмам получения итогов, это означает, что система обращается к разделяемым данным до того, как сеанс пользователя был полностью инициализирован в контексте разделения данных БСП (Библиотеки Стандартных Подсистем).
Посмотрим на пример решения этой проблемы программным путем. Мы можем принудительно установить использование разделителя при старте системы. Для этого в модуле сеанса найдем или создадим обработчик УстановкаПараметровСеанса и добавим следующий код:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Инициализируем использование разделителя для текущего сеанса
Попытка
ПараметрыСеанса.РазделительИспользование = Истина;
Исключение
// Обработка исключения, если параметр сеанса отсутствует в данной конфигурации
КонецПопытки;
КонецПроцедуры
Этот код принудительно сообщает платформе, что разделители должны учитываться при всех последующих обращениях к таблицам базы данных в текущем сеансе, что предотвращает появление ошибки.
Иногда база данных заходит в тупик: удалить расширение через конфигуратор невозможно из-за ошибок СУБД (например, неуникальности записей в системных таблицах), а сохранить изменения не дает ошибка разделителей. В такой ситуации проанализируем следующий обходной путь:
.cfe) через конфигуратор или пользовательский режим.Данный комплекс действий полностью очищает «зависшие» в базе данных некорректные связи с таблицами разделителей и позволяет восстановить штатную работоспособность системы.