В процессе эксплуатации информационных систем 1С нередко возникают ситуации, когда данные в определенных реквизитах документов по ошибке или из-за сбоев принимают некорректные значения. Рассмотрим, как восстановить значения реквизита, например, типа Булево, если у нас есть актуальная рабочая база и резервная копия месячной давности, содержащая верные данные.
Прежде чем приступать к восстановлению, необходимо убедиться, что причина потери данных устранена. Если значения реквизитов «затерлись» без видимых причин, рекомендуем выполнить Тестирование и исправление информационной базы в Конфигураторе. Возможно, проблема кроется в физическом повреждении таблиц базы данных или сбоях на стороне сервера.
Также важно оценить риск: если за прошедший месяц в рабочей базе менялись другие данные в тех же документах, простое копирование объектов из старой базы (бэкапа) приведет к потере актуальных изменений (например, новых сумм или дат). Поэтому мы будем использовать методы, позволяющие обновлять только конкретный реквизит.
Это самый профессиональный и надежный метод, который позволяет минимизировать риск повреждения других данных. Мы напишем небольшую внешнюю обработку, которая «на лету» свяжет две базы.
COMОбъект.Ссылка.УникальныйИдентификатор(), находим соответствующие объекты в рабочей базе.Для «чистой» записи, чтобы не сработали подписки на события или автоматическое перепроведение, используем флаг ОбменДанными.Загрузка = Истина.
// Пример фрагмента кода для реализации переноса через COM
Соединение = Новый COMОбъект(\"V83.COMConnector\");
БазаБэкап = Соединение.Connect(\"Srvr=...;Ref=...\");
Выборка = БазаБэкап.Документы.РеализацияТоваровУслуг.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.НужныйРеквизит = Истина Тогда
ДокСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор(Выборка.Ссылка.УникальныйИдентификатор()));
Объект = ДокСсылка.ПолучитьОбъект();
Объект.НужныйРеквизит = Истина;
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Если документов очень много, оптимальным решением станет создание правил обмена с помощью конфигурации Конвертация данных 2.1 или 3.0. Этот метод позволяет гибко настроить перенос только одного поля.
Разберем, как это работает:
ВыгрузитьТолькоСсылку = Истина.GUID.Таким образом, мы гарантируем, что система найдет именно тот документ, который нужен, и обновит в нем только необходимое значение, не затрагивая остальные реквизиты.
Если база небольшая и риск ошибок минимален, можно воспользоваться стандартной обработкой ГрупповоеИзменениеРеквизитов. Однако будьте осторожны: поиск по номеру документа ненадежен!
Важное предостережение: Номера документов не являются уникальными идентификаторами в базе данных. Поиск только по номеру может привести к записи данных не в те объекты. Рекомендуем выгружать список документов из резервной базы по критерию «Истина», а в рабочей базе использовать отбор по полученному списку.
Порядок действий:
ГрупповоеИзменениеРеквизитов находим все документы, где реквизит равен Истина.Истина для найденных объектов.Мы проанализировали три способа решения задачи. Если вы программист — выбирайте COM-соединение как наиболее быстрый и контролируемый путь. Если вы хотите использовать типовые инструменты — правила конвертации обеспечат максимальную сохранность данных. Избегайте «ручного» переноса по номерам, всегда опирайтесь на УникальныйИдентификатор, чтобы ваши данные оставались целостными и корректными.