Как исправить ошибку «Таблица не найдена УдалитьНастройкиРМКПрисоединенныеФайлы.Изменения» при обновлении 1С:Розница до версии 2.2.7.32?

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

При переходе на новые релизы программных продуктов семейства «1С:Предприятие» пользователи и администраторы баз данных нередко сталкиваются со сбоями при выполнении дополнительных (отложенных) процедур обновления. Типичным примером такой проблемы является ошибка при обновлении конфигурации «1С:Розница» до версии 2.2.7.32 (при обновлении с ветки 2.2.6.х).

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

Процедура "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений" обработки данных завершилась с ошибкой: {ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(2024)}: Ошибка при вызове метода контекста (Выполнить) РезультатЗапроса = Запрос.Выполнить; по причине: {(5, 2)}: Таблица не найдена "Справочник.УдалитьНастройкиРМКПрисоединенныеФайлы.Изменения"

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

Выясняем техническую причину сбоя

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

Алгоритм работы этого обработчика устроен следующим образом:

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

При выпуске релиза 2.2.7.32 разработчики «1С» приняли решение вывести из эксплуатации справочник НастройкиРМКПрисоединенныеФайлы. Они переименовали его в УдалитьНастройкиРМКПрисоединенныеФайлы, подготовив к полному удалению в будущих версиях, и корректно исключили его из всех планов обмена базы данных.

Однако в коде отложенного обновления БСП этот справочник по-прежнему остался в списке анализируемых объектов. Когда процедура динамически формирует запрос к базе данных и пытается прочитать таблицу изменений Справочник.УдалитьНастройкиРМКПрисоединенныеФайлы.Изменения, платформа выдает ошибку, так как этой таблицы физически не существует в базе — ведь объект был исключен из планов обмена! Это классическая архитектурная недоработка релиза, которую нам предстоит обойти.

Решение А. Для версий ПРОФ (с возможностью изменения конфигурации)

Если вы используете версию конфигурации «1С:Розница ПРОФ» (или любую другую версию с возможностью внесения изменений), самым быстрым и корректным решением будет временное включение проблемного справочника в состав системного плана обмена. Это заставит платформу физически создать требуемую SQL-таблицу изменений.

Рассмотрим этот процесс по шагам:

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

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

Решение Б. Для Базовых версий (изменение конфигурации запрещено)

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

Наша задача — принудительно сообщить подсистеме обновления БСП, что сбойный обработчик уже «выполнен успешно». Сведения о состоянии отложенных обработчиков обновлений хранятся в специальном регистре сведений. Мы напишем код, который найдет запись о проблемном обработчике и установит ему статус выполнения.

Для реализации этого метода выполните следующие действия:

  1. Создайте новую внешнюю обработку в конфигураторе или воспользуйтесь обработкой для выполнения произвольного кода на сервере (например, стандартной обработкой «Групповая изменение реквизитов» или любой консолью кода).
  2. Напишите и выполните следующий алгоритм на встроенном языке «1С:Предприятия» (код адаптирован под механизмы БСП):

// Процедура принудительной пометки обработчика обновления как выполненного
Процедура СнятьБлокировкуОбновленияНаСервере()
    
    // Имя проблемной процедуры, которая вызывает сбой
    ИмяСбойногоОбработчика = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений";
    
    // В зависимости от версии БСП данные могут храниться в регистре "ОбработчикиОбновления"
    РегистрОбработчиков = РегистрыСведений.ОбработчикиОбновления;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Обработчики.ИмяОбработчика КАК ИмяОбработчика,
        |	Обработчики.Версия КАК Версия
        |ИЗ
        |	РегистрСведений.ОбработчикиОбновления КАК Обработчики
        |ГДЕ
        |	Обработчики.ИмяОбработчика ПОДОБНО &ИмяОбработчика";
        
    Запрос.УстановитьПараметр("ИмяОбработчика", "%" + ИмяСбойногоОбработчика + "%");
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        Сообщить("Сбойный обработчик обновления не найден в регистре сведений!");
        Возврат;
    КонецЕсли;
    
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        
        // Создаем менеджер записи для изменения статуса конкретного обработчика
        МенеджерЗаписи = РегистрОбработчиков.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.ИмяОбработчика = Выборка.ИмяОбработчика;
        МенеджерЗаписи.Версия = Выборка.Версия;
        МенеджерЗаписи.Прочитать();
        
        Если МенеджерЗаписи.Выбран() Тогда
            // Устанавливаем статус "Выполнен" из соответствующего перечисления БСП
            МенеджерЗаписи.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнен;
            
            Попытка
                МенеджерЗаписи.Записать();
                Сообщить("Статус обработчика успешно изменен на 'Выполнен' для версии " + Выборка.Версия);
            Исключение
                Сообщить("Ошибка при записи изменений в регистр: " + ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

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

После выполнения данного кода запустите процедуру обновления заново через форму Поддержка и обслуживание — Обновление программы (или просто перезапустите сеанс «1С:Предприятие»). Система увидит, что проблемный шаг успешно пройден, и завершит процесс обновления оставшихся подсистем без вывода сообщений об ошибках.

Рекомендации по дальнейшему обслуживанию ИБ

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

← На главную