Как исправить ошибку контроля неразделенных данных БСП при обновлении нетиповой конфигурации «1С:Бухгалтерия 3.0»?

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

При обновлении нетиповых (измененных) конфигураций «1С:Бухгалтерия предприятия 3.0» (и других программ на базе Библиотеки стандартных подсистем — БСП) разработчики часто сталкиваются с критической ошибкой на этапе принятия изменений. В процессе обновления базы в режиме «1С:Предприятие» система аварийно завершает работу, выдавая длинное сообщение об ошибке, связанное с общим модулем РаботаВМоделиСервиса. Программа сообщает, что обнаружены несоответствия в структуре метаданных, так как определенные объекты конфигурации не входят в состав разделителей и одновременно не защищены специальными подписками на события.

В этой статье мы подробно разберем, почему возникает эта ошибка, как устроены механизмы защиты данных в модели сервиса (облачном режиме / 1C:Fresh) и какими способами можно успешно завершить обновление информационной базы. При регулярном обслуживании нескольких систем этот процесс можно автоматизировать, настроив архивирование, обновление и тестирование баз 1С по расписанию.

Выясняем причину: почему БСП блокирует обновление?

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

Все объекты метаданных в такой архитектуре жестко делятся на две категории:

  1. Разделяемые данные — документы, справочники и регистры, которые содержат информацию конкретного клиента. Доступ к ним регулируется общими реквизитами-разделителями, главным из которых является ОбластьДанныхОсновныеДанные (и вспомогательный — ОбластьДанныхВспомогательныеДанные).
  2. Неразделяемые (общие) данные — классификаторы, системные настройки, служебные справочники и регистры, единые для всех пользователей облака.

Чтобы пользователи отдельных областей данных не могли случайно или умышленно перезаписать общую информацию (например, испортить единый справочник валют или забить мусором служебный регистр), БСП использует защитные подписки на события, такие как КонтрольНеразделенныхОбъектовПриЗаписи и КонтрольНеразделенныхНаборовЗаписейПриЗаписи. Эти подписки перехватывают попытку записи общего объекта в разделенном сеансе и вызывают исключение.

Во время обновления ИБ процедура РаботаВМоделиСервиса.КонтрольНеразделенныхДанныхПриОбновлении() выполняет тотальную проверку структуры метаданных конфигурации. Она требует, чтобы любой объект ИБ удовлетворял одному из условий:

Если в конфигурации обнаруживается объект (например, устаревший регистр сведений РегистрСведений.УдалитьОтправкиОтчетностиКОбработке), который не входит в разделители и при этом исключен из подписок контроля, БСП считает конфигурацию потенциально небезопасной и аварийно прерывает обновление.

Почему ошибка возникает при нетиповых обновлениях?

При обновлении измененных конфигураций через окно «Сравнение и объединение» разработчики часто совершают типовые ошибки:

Рассмотрим подробнее по шагам все возможные варианты решения этой проблемы — от быстрых обходных путей до правильных архитектурных подходов.

Способ 1. Корректная очистка устаревших объектов при объединении

Если ошибка указывает на объект, который содержит префикс Удалить (например, РегистрСведений.УдалитьОтправкиОтчетностиКОбработке), это означает, что фирма «1С» больше не использует данный объект. Самым правильным решением будет полностью удалить его из вашей конфигурации, если вы уверены, что в нем нет критически важных данных, которые вы планировали перенести.

Разберем процедуру удаления через сравнение и объединение:

  1. Запустите Конфигуратор и откройте окно сравнения/объединения с новым релизом поставщика.
  2. В окне сравнения найдите общий реквизит ОбластьДанныхОсновныеДанные и установите для него флаг, чтобы взять свойства из новой конфигурации поставщика.
  3. Найдите проблемный объект (в нашем случае — РегистрСведений.УдалитьОтправкиОтчетностиКОбработке). Если в новой конфигурации поставщика этого регистра уже нет, система предложит его удалить. Установите флаг объединения для этого регистра.
  4. После выполнения объединения этот регистр будет полностью удален из метаданных вашей рабочей конфигурации, а свойства общего реквизита корректно обновятся.

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

Способ 2. Быстрое исправление состава общего реквизита в Конфигураторе

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

  1. В дереве метаданных конфигурации перейдите в ветку Общие -> Общие реквизиты.
  2. Найдите общий реквизит ОбластьДанныхОсновныеДанные и откройте его палитру свойств.
  3. Найдите свойство Состав и нажмите кнопку Открыть.
  4. В открывшемся списке объектов найдите тот метаданный объект, на который ругается система (например, наш регистр сведений).
  5. Обратите внимание на значение в колонке использования разделителя. Установите для него значение Автоматически (или Использовать, в зависимости от логики вашей конфигурации).
  6. Сохраните изменения в конфигурации базы данных (клавиша F7) и запустите обновление в режиме Предприятия заново.

Важное примечание: Этот способ отлично работает для быстрого обхода ошибки, однако с точки зрения архитектуры БСП он может быть не совсем корректным, если объект по своей логике должен быть неразделенным (общим для всей базы данных). Тем не менее, для успешного прохождения проверки обновления этот метод является самым быстрым.

Способ 3. Добавление объекта в источники защитных подписок

Если ваш кастомный или устаревший объект должен оставаться строго неразделенным (общим для всей базы данных), его ни в коем случае нельзя включать в состав разделителя ОбластьДанныхОсновныеДанные. Правильный путь — привязать его к подпискам контроля БСП:

  1. В дереве метаданных перейдите в раздел Общие -> Подписки на события.
  2. Найдите подписку КонтрольНеразделенныхОбъектовПриЗаписи (если ошибка возникла на справочнике, документе или другом ссылочном типе) или КонтрольНеразделенныхНаборовЗаписейПриЗаписи (если ошибка указывает на регистр сведений, накопления или бухгалтерии).
  3. Откройте свойства выбранной подписки на события.
  4. В строке свойства Источник нажмите кнопку выбора (три точки).
  5. В открывшемся списке типов найдите ваш проблемный объект метаданных и установите напротив него флажок.
  6. Сохраните изменения в конфигурации (F7).

Теперь система контроля БСП увидит, что ваш объект защищен от несанкционированной записи в разделенных сеансах, и успешно пропустит этот шаг при обновлении.

Способ 4. Программное добавление объектов в исключения БСП (Архитектурный подход)

Если вы не хотите вручную править свойства подписок или разделителей (чтобы облегчить последующие обновления конфигурации), в БСП предусмотрен штатный программный механизм добавления исключений.

В некоторых сообщениях на форумах предлагают напрямую редактировать процедуру КонтрольНеразделенныхДанныхПриОбновлении в общем модуле РаботаВМоделиСервиса, добавляя туда строки вида:


// Прямое добавление в исключения БСП (не рекомендуется править типовой код!)
Исключения.Добавить(Метаданные.РегистрыСведений.УдалитьОтправкиОтчетностиКОбработке);

Однако прямое редактирование общего модуля РаботаВМоделиСервиса усложнит поддержку конфигурации. Правильнее использовать официальную точку интеграции БСП:

  1. Найдите в конфигурации общий модуль ИнтеграцияПодсистемБТС (или аналогичный модуль вашей версии БСП, отвечающий за интеграцию технологии сервиса).
  2. Найдите в нем экспортную процедуру ПриОпределенииИсключенийНеразделенныхДанных(Исключения).
  3. Добавьте программное исключение для вашего объекта в массив Исключения. Пример правильного кода:

Процедура ПриОпределенииИсключенийНеразделенныхДанных(Исключения) Экспорт
    
    // Добавляем кастомные или устаревшие объекты в список исключений контроля БСП
    Исключения.Добавить(Метаданные.РегистрыСведений.УдалитьОтправкиОтчетностиКОбработке);
    
КонецПроцедуры

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

Способ 5. Специфика работы с Расширениями конфигурации

Начиная с версии платформы «1С:Предприятие 8.3.11», разработчики начали массово использовать Расширения конфигурации для добавления новых объектов. Если вы добавили собственный справочник или регистр через Расширение, вы гарантированно столкнетесь с аналогичной ошибкой, так как:

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

Резюме

Мы проанализировали причины возникновения ошибки контроля структуры неразделенных данных БСП при обновлении «1С:Бухгалтерия 3.0». Для исправления ситуации вы можете использовать любой из предложенных методов в зависимости от ваших задач:

← На главную