Что делать, если пропали документы из расширения 1С после обновления конфигурации?

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

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

В этой статье мы подробно разберем, почему так происходит на уровне платформы 1С и СУБД, как восстановить утерянные данные из резервной копии, и как правильно выполнять подобные обновления в будущем, чтобы избежать катастрофической потери информации.

Физика процесса: почему пропадают данные при удалении расширения

Для того чтобы понять причину проблемы, заглянем «под капот» платформы 1С:Предприятие. Когда мы добавляем собственный объект (например, документ КассовыйПланУтвержденный) в расширение конфигурации, платформа создает для него полноценные физические таблицы в базе данных СУБД (MS SQL, PostgreSQL или внутреннем файле .1CD). Эти таблицы имеют специальные системные префиксы, привязанные к уникальному идентификатору вашего расширения.

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

  1. При использовании команды «Удалить» в списке расширений платформа 1С инициирует полную реструктуризацию базы данных.
  2. В СУБД отправляется прямая инструкция DROP TABLE для всех таблиц, ассоциированных с удаляемым расширением. Все данные физически стираются с диска.
  3. Когда вы заново загружаете сохраненный файл расширения .cfe в базу данных, платформа видит новые объекты и заново создает под них таблицы СУБД. Эти таблицы абсолютно пустые — связь со старыми удаленными данными потеряна навсегда, так как физических записей больше нет.

Именно поэтому простое переподключение расширения возвращает структуру метаданных (мы снова видим типы документов в интерфейсе), но не возвращает сами документы.

Главная ошибка: «Удаление» вместо «Деактивации»

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

Вместо полного удаления расширения необходимо использовать механизм деактивации:

Пошаговый алгоритм восстановления утерянных данных из резервной копии

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

Шаг 1. Подготовка копии базы данных

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

Шаг 2. Выгрузка данных в формате XML

Для переноса данных нам понадобится универсальная обработка ВыгрузкаЗагрузкаДанныхXML.epf (ее можно найти на диске ИТС или в каталоге шаблонов установленной платформы). Рассмотрим порядок действий в архивной базе:

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

Шаг 3. Загрузка данных в обновленную рабочую базу

Теперь перейдем в обновленную рабочую базу, куда вы уже успели заново установить расширение (структура документов создана, но они пустые):

  1. Запустите рабочую базу в режиме «1С:Предприятие» под правами администратора.
  2. Откройте ту же обработку ВыгрузкаЗагрузкаДанныхXML.epf.
  3. Перейдите на вкладку «Загрузка», выберите ранее сохраненный XML-файл и нажмите «Загрузить данные».
  4. Платформа сопоставит GUID объектов и запишет документы в новые таблицы расширения.

Шаг 4. Программное восстановление движений документов

При стандартном XML-переносе документы переносятся в базу данных в том статусе, в котором они были записаны, однако их движения по регистрам сведений и накопления (бухгалтерские проводки) могут не восстановиться автоматически. Чтобы вернуть актуальные движения, перенесенные документы необходимо перепровести. Для сопоставления результатов переноса можно задействовать автоматическое сравнение бухгалтерских и налоговых проводок между базами 1С.

Если документов много, ручное перепроведение займет слишком много времени. Напишем и запустим в обработке группового проведения следующий несложный код:


Выборка = Документы.КассовыйПланУтвержденный.Выбрать();
Пока Выборка.Следующий() Цикл
    ДокОбъект = Выборка.ПолучитьОбъект();
    Если ДокОбъект.Проведен Тогда
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
            Сообщить("Успешно проведен документ: " + Строка(ДокОбъект));
        Исключение
            Сообщить("Ошибка проведения документа " + Строка(ДокОбъект) + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Как правильно выполнять обновления 1С с установленными расширениями

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

  1. Создайте резервную копию базы данных! Это базовое правило, пренебрежение которым приводит к потере работы нескольких отделов компании. При работе с несколькими информационными базами процедуру можно автоматизировать с помощью автоматического архивирования, обновления и тестирования баз 1С.
  2. Зайдите в Конфигуратор, откройте список расширений (меню «Конфигурация» — «Расширения конфигурации»).
  3. Найдите нужное расширение и снимите флаг «Активно». Ни в коем случае не используйте кнопку «Удалить»!
  4. Выполните обновление основной конфигурации через стандартную процедуру («Поддержка» — «Обновить конфигурацию»).
  5. После успешного обновления основной конфигурации зайдите в ее свойства и посмотрите значение реквизита РежимСовместимости.
  6. Откройте свойства вашего деактивированного расширения. Найдите там аналогичное свойство РежимСовместимости и установите его в точное соответствие с режимом совместимости основной конфигурации.
  7. Снова установите флаг «Активно» у расширения и запустите базу в режиме Предприятия для выполнения процедур обновления данных.

Важное архитектурное правило для разработчиков (Best Practice)

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

Никогда не храните критически важные бизнес-данные в объектах, созданных исключительно внутри расширений конфигурации.

Почему этого следует избегать?

Как делать правильно:

Если вам требуется добавить новый документ (например, КассовыйПланУтвержденный) или справочник в типовую конфигурацию, которая находится на поддержке:

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

При таком подходе данные ваших пользователей будут находиться под надежной защитой СУБД в составе основной конфигурации. Даже если расширение будет полностью удалено, повреждено или отключено из-за конфликта версий при обновлении, сами документы останутся в базе данных. Вы сможете спокойно обновиться, исправить код в расширении, подключить его заново — и все данные мгновенно отобразятся в интерфейсе без необходимости восстановления из резервных копий.

← На главную