В практике администрирования «1С:Документооборот» нередко возникают нестандартные задачи, продиктованные требованиями руководства или соображениями конфиденциальности. Одна из таких задач — необходимость временно «спрятать» определенную папку с внутренними документами от глаз пользователей (включая топ-менеджмент), а затем вернуть её в исходное состояние без нарушения сквозной нумерации и связей в системе.
Классическое удаление с последующим восстановлением базы из резервной копии (бэкапа) в данном случае не подходит. Если восстановить более старую копию базы, затрется вся текущая работа пользователей, проделанная с момента создания этой копии. Пометка на удаление тоже не решает проблему, так как помеченные объекты остаются видимыми в списках для многих сотрудников, что привлекает лишнее внимание.
Проанализируем ситуацию и разберем по шагам два надежных метода решения этой задачи: через ограничение прав доступа (штатный и безопасный способ) и через выгрузку/загрузку данных в формате XML (технический способ для физического удаления объектов из базы на время).
Это наиболее простой, быстрый и абсолютно безопасный для целостности базы данных способ. В «1С:Документооборот» реализована мощная система разграничения прав. Если у пользователя нет прав на чтение конкретной папки, программа полностью скрывает её из интерфейса. Пользователь не сможет найти документы из этой папки ни через стандартные списки, ни через отчеты, ни с помощью механизма полнотекстового поиска. Для него этой информации просто не существует.
Выясним, как настроить права для скрытия папки внутренних документов:
Администратор (или конкретный технический специалист, выполняющий скрытие).Все пользователи и снимем для них галочку в колонке Чтение (установим значение Запрещено). Помните, что в системе 1С явный запрет всегда имеет наивысший приоритет над любыми разрешающими правами.Результат: Папка и все хранящиеся в ней внутренние документы мгновенно исчезнут для всех сотрудников. При этом сами файлы, карточки документов и связи не нарушаются. Бизнес-процессы, запущенные по этим документам, временно приостановят отправку уведомлений исполнителям, у которых пропал доступ.
Когда руководство даст команду вернуть всё назад, нам потребуется просто зайти в настройки прав этой же папки под учетной записью администратора, вернуть флаг наследования прав или заново добавить группу Все пользователи с разрешением на чтение.
Иногда возникают ситуации (например, внешняя проверка или передача копии базы третьим лицам), когда документы требуется именно физически удалить из базы данных, чтобы их невозможно было восстановить стандартными средствами платформы 1С. Но после завершения проверки данные необходимо вернуть в исходном виде.
Для решения этой задачи рассмотрим использование стандартного инструмента — обработки УниверсальныйОбменДаннымиXML. Этот метод позволяет выгрузить определенную ветку справочников во внешний файл, полностью стереть объекты из базы, а затем загрузить их обратно. Главное преимущество данного подхода заключается в том, что при загрузке сохраняются уникальные идентификаторы объектов (GUID). Это значит, что все внутренние ссылки, истории версий и привязки файлов останутся работоспособными.
Выполним процедуру по шагам:
Шаг 1. Выгрузка данных в XML
ПапкиВнутреннихДокументовВнутренниеДокументыФайлыВерсииФайловПапкиВнутреннихДокументов укажем конкретную папку, которую нужно временно удалить. Для справочника ВнутренниеДокументы настроим отбор по реквизиту Родитель (папка документов должна соответствовать нашей целевой папке).Шаг 2. Физическое удаление объектов из базы
Просто пометить объекты на удаление недостаточно — их нужно физически стереть из таблиц СУБД. Сделать это можно двумя путями:
Удалить() у объектов справочников.Проанализируем пример кода для быстрого программного удаления документов из определенной папки:
// Выбираем все документы в целевой папке
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнутренниеДокументы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
|ГДЕ
| ВнутренниеДокументы.Родитель = &ЦелеваяПапка";
Запрос.УстановитьПараметр("ЦелеваяПапка", СсылкаНаПапку);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Получаем объект документа и удаляем его непосредственно из базы данных
ДокОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Если ДокОбъект <> Неопределено Тогда
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Удалить();
КонецЕсли;
КонецЦикла;
Важное предупреждение: Использование метода Удалить() обходит стандартные проверки платформы. Используйте этот код только тогда, когда точно понимаете структуру данных и имеете актуальную резервную копию базы данных!
Шаг 3. Восстановление данных из XML
Когда наступит время вернуть документы обратно в рабочую базу:
Платформа автоматически считает структуру файла и создаст объекты с теми же системными идентификаторами (GUID), которые у них были изначально. Благодаря этому все связи восстанавливаются автоматически.
Перед тем как использовать метод с XML-выгрузкой, обязательно проанализируйте следующие технологические аспекты системы «1С:Документооборот»:
Таким образом, для временного скрытия информации в штатном режиме всегда используйте первый вариант с настройкой прав доступа. Он не требует программирования, абсолютно безопасен и полностью решает задачу скрытия конфиденциальной информации от любых категорий пользователей.