Как восстановить удаленный предопределенный счет в 1С:Предприятие 8.3?

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

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

Удаление предопределенного счета — это серьезная проблема, которая нарушает ссылочную целостность базы данных. Все документы, проводки и регистры, в которых фигурировал данный счет, начинают отображать битые ссылки вида <Объект не найден>. В этой статье мы подробно и пошагово рассмотрим, как восстановить удаленный предопределенный счет, сохранив его уникальный идентификатор (GUID) и восстановив полную работоспособность системы.

Причины возникновения проблемы

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

Давайте разберем пять наиболее эффективных способов решения этой проблемы — от простых интерактивных методов до программного восстановления силами встроенного языка и Библиотеки стандартных подсистем (БСП).

Способ 1. Воссоздание элемента вручную и привязка имени предопределенных данных

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

Выполним следующие шаги:

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

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

Способ 2. Перенос оригинального GUID через XML-выгрузку из копии

Если удаленный счет уже использовался в проводках, то простое создание нового элемента по Способу 1 приведет к тому, что в старых документах ссылки останутся битыми. Это происходит из-за несовпадения уникальных идентификаторов (GUID). Чтобы исправить это, нам понадобится архивная копия базы данных, в которой этот счет еще существовал.

Проанализируем ситуацию и выполним перенос элемента с сохранением его GUID:

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

Поскольку загрузка XML-данных перезаписывает объекты с сохранением их уникальных идентификаторов, предопределенный счет появится в рабочей базе с тем же GUID. Все битые ссылки в документах автоматически восстановятся и начнут отображать правильный счет.

Способ 3. Программное создание элемента с точным GUID (без использования XML)

Иногда использование обработки выгрузки/загрузки XML неудобно или невозможно (например, из-за разных версий конфигураций в архиве и рабочей базе). В этом случае мы можем написать короткий и эффективный программный код, который создаст счет с нужным GUID напрямую.

Для начала нам нужно узнать GUID удаленного счета из архивной базы. Это можно сделать программно в архиве, выполнив запрос или обратившись к ссылке. Получив строковое представление уникального идентификатора (например, "d3b07384-d113-11e3-80c8-00155d013a03"), мы можем запустить в рабочей базе внешнюю обработку со следующим кодом:


// Определяем уникальный идентификатор, полученный из архивной копии
УникальныйИД = Новый УникальныйИдентификатор("d3b07384-d113-11e3-80c8-00155d013a03");

// Формируем ссылку на основе GUID для нужного плана счетов
СсылкаНаСчет = ПланыСчетов.Хозрасчетный.ПолучитьСсылка(УникальныйИД);

// Проверяем, действительно ли элемент отсутствует в базе
Если СсылкаНаСчет.ПолучитьОбъект() = Неопределено Тогда
    
    // Создаем новый объект счета
    НовыйСчет = ПланыСчетов.Хозрасчетный.СоздатьСчет();
    
    // Устанавливаем ранее полученную ссылку для нового объекта
    НовыйСчет.УстановитьСсылкуНового(СсылкаНаСчет);
    
    // Заполняем обязательные свойства
    НовыйСчет.Код = "41.01";
    НовыйСчет.Наименование = "Товары на складах";
    НовыйСчет.ИмяПредопределенныхДанных = "ТоварыНаСкладах";
    
    // Записываем объект в базу данных
    НовыйСчет.Записать();
    
    Сообщить("Предопределенный счет успешно воссоздан с оригинальным GUID!");
Иначе
    Сообщить("Счет с данным GUID уже существует в информационной базе.");
КонецЕсли;

Этот способ является наиболее чистым и безопасным для ссылочной целостности базы данных, так как он мгновенно «склеивает» все старые проводки с вновь созданным элементом без появления дублей.

Способ 4. Использование готовых механизмов БСП (Библиотеки стандартных подсистем)

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

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


// Автоматическое восстановление всех утерянных предопределенных элементов во всех объектах метаданных
СтандартныеПодсистемыСервер.ВосстановитьПредопределенныеЭлементы();

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


// Обновление предопределенных элементов конкретного объекта метаданных
ОбъектМетаданных = Метаданные.ПланыСчетов.Хозрасчетный;
ОбновлениеИнформационнойБазы.ОбновитьПредопределенныеЭлементы(ОбъектМетаданных);

Способ 5. Принудительное обновление предопределенных данных средствами платформы

Платформа 1С:Предприятие поддерживает управление обновлением предопределенных данных на уровне всей информационной базы. Если данные были удалены, мы можем принудительно активировать системный механизм инициализации при запуске.

Для этого можно воспользоваться запуском конфигуратора с ключом командной строки. Закройте все сеансы работы с базой данных и выполните запуск из командной строки Windows:

1cv8.exe DESIGNER /F "ПутьКВашейБазе" /N "Администратор" /P "Пароль" /SetPredefinedDataUpdate -UpdateAutomatically

После запуска конфигуратора выполните обновление конфигурации базы данных (клавиша F7) или запустите процедуру реструктуризации таблиц. Платформа обнаружит отсутствие предопределенных записей в СУБД и автоматически воссоздаст их.

Также этот параметр можно установить непосредственно из программного кода встроенного языка, выполнив следующую команду под правами администратора:


// Установка режима автоматического обновления предопределенных данных
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически);

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

Резюме и рекомендации

Мы детально разобрали несколько различных способов восстановления удаленных предопределенных счетов. Подведем итог: какой метод выбрать в зависимости от ситуации?

Перед выполнением любых из описанных действий обязательно сделайте резервную копию (архив) вашей информационной базы!

← На главную