Удаляем бизнес-процессы в 1С 8.3 без потери задач и ссылок
Содержание
Конкретный бизнес-процесс (запущенное задание, согласование) в 1С 8.3 удаляют в два шага: ставят на нём пометку удаления в списке, а затем запускают Администрирование → Обслуживание → Удаление помеченных объектов. Если нужно убрать сам вид бизнес-процесса из программы, это делают в Конфигураторе: удаляют объект из ветки «Бизнес-процессы» и обновляют конфигурацию базы данных.
Это два разных действия с разными последствиями. Первое убирает данные — один процесс или сотню старых. Второе меняет структуру базы и уничтожает все процессы этого вида вместе с таблицами. Порядок действий для обоих случаев и то, как не оставить в базе «висящие» задачи, — ниже по разделам. Описание общее для платформы 8.3 и конфигураций на Библиотеке стандартных подсистем (БСП): БП 3.0, ЗУП 3.1, УТ 11, ERP, Документооборот.
Что проверить перед удалением бизнес-процесса
Сначала определитесь, что именно вы удаляете.
| Задача | Где делается | Что исчезнет | Обратимо? |
|---|---|---|---|
| Убрать один или несколько процессов | Режим «Предприятие» | Выбранные процессы и их задачи | Только из резервной копии |
| Очистить базу от старых процессов массово | Обработка на встроенном языке | Все процессы по условию отбора | Только из резервной копии |
| Убрать вид бизнес-процесса из конфигурации | Конфигуратор | Объект метаданных, все его данные и таблицы | Только из резервной копии |
Каждый бизнес-процесс связан с задачами. У любой задачи есть стандартный реквизит БизнесПроцесс — ссылка на процесс, который её породил. Поэтому процесс почти никогда не удаляется «в одиночку»: за ним тянутся задачи исполнителей, а иногда и подчинённые процессы.
Перед работой проверьте три вещи:
- 🔗 Ссылки. На процесс могут ссылаться задачи, документы-основания, записи регистров БСП (например, сведения о состоянии и исполнителях процессов), вложенные процессы через
ВедущаяЗадача. - ⏳ Состояние. Активный процесс продолжает порождать задачи. Сначала его останавливают или прерывают.
- 👥 Пользователи. Если удаление массовое или затрагивает конфигурацию, предупредите коллег: при обновлении структуры базы сеансы придётся завершить.
Удаление помеченных объектов и изменение конфигурации необратимы. Сделайте выгрузку Администрирование → Выгрузить информационную базу в Конфигураторе (файл .dt) или резервную копию средствами СУБД. Без копии не начинайте.
Способ 1. Удаление бизнес-процесса в режиме «Предприятие»
Это самый безопасный путь. Программа сама проверит ссылки и не даст удалить то, на что что-то ссылается.
Шаг 1. Найдите список процессов
В конфигурациях на БСП бизнес-процессы обычно открываются из раздела с задачами («Задачи», «Совместная работа», «Органайзер» — зависит от программы). Если пункта нет в разделах, откройте список через «Все функции»:
- Включите команду: главное меню (☰) →
Сервис → Параметры→ флажок «Отображать команду “Все функции”». - Главное меню →
Все функции→ веткаБизнес-процессы→ нужный вид (в БСП это, например, «Задание»).
Шаг 2. Остановите активный процесс
Если процесс ещё не завершён, откройте его и остановите командой в командной панели формы или списка. В конфигурациях на БСП для этого есть команды «Остановить» и «Продолжить». После остановки новые задачи по нему не создаются.
Шаг 3. Поставьте пометку удаления
- Выделите процесс (или несколько, с
CtrlилиShift). - Нажмите
DelилиЕщё → Пометить на удаление / Снять пометку. - Подтвердите. Строка станет перечёркнутой.
Задачи этого процесса пометьте так же — в списке задач с отбором по процессу. В БСП при пометке процесса пометку обычно получают и его задачи, но проверьте это глазами: откройте список задач и отфильтруйте по колонке «Бизнес-процесс».
Шаг 4. Удалите помеченные объекты
Откройте Администрирование → Обслуживание → Удаление помеченных объектов. Обработка покажет все помеченные объекты базы.
- Выберите режим с выбором объектов, чтобы не удалить заодно чужие пометки.
- Оставьте флажки только у процессов и их задач.
- Нажмите «Удалить».
Если объект не удалился, обработка покажет, что на него ссылается. Типичная картина: процесс не удаляется, потому что на него ссылается непомеченная задача или запись регистра. Пометьте найденные объекты или снимите ссылку и повторите.
Перед массовым удалением сузьте список отбором по дате или автору. Пометки, которые другие пользователи ставили месяцами, лучше не трогать без согласования.
Способ 2. Программное удаление бизнес-процессов обработкой
Когда процессов тысячи, удобнее внешняя обработка. Создайте её в Конфигураторе (Файл → Новый → Внешняя обработка), добавьте форму с кнопкой и серверную процедуру.
Пример ниже ставит пометку удаления на все завершённые процессы вида «Задание» старше заданной даты и на их задачи. Ссылочная целостность при этом сохраняется: окончательно удалит их обработка удаления помеченных.
&НаСервере
Процедура ПометитьСтарыеПроцессыНаСервере(ДатаГраницы)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БП.Ссылка КАК Ссылка
|ИЗ
| БизнесПроцесс.Задание КАК БП
|ГДЕ
| БП.Завершен
| И БП.Дата < &ДатаГраницы
| И НЕ БП.ПометкаУдаления";
Запрос.УстановитьПараметр("ДатаГраницы", ДатаГраницы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗапросЗадач = Новый Запрос;
ЗапросЗадач.Текст =
"ВЫБРАТЬ
| З.Ссылка КАК Ссылка
|ИЗ
| Задача.ЗадачаИсполнителя КАК З
|ГДЕ
| З.БизнесПроцесс = &БП
| И НЕ З.ПометкаУдаления";
ЗапросЗадач.УстановитьПараметр("БП", Выборка.Ссылка);
ВыборкаЗадач = ЗапросЗадач.Выполнить().Выбрать();
НачатьТранзакцию();
Попытка
Пока ВыборкаЗадач.Следующий() Цикл
ЗадачаОбъект = ВыборкаЗадач.Ссылка.ПолучитьОбъект();
ЗадачаОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
ПроцессОбъект = Выборка.Ссылка.ПолучитьОбъект();
ПроцессОбъект.УстановитьПометкуУдаления(Истина);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Сообщить("Не удалось пометить " + Строка(Выборка.Ссылка) + ": "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Имена Задание и ЗадачаИсполнителя — из БСП. В вашей конфигурации посмотрите точные имена в дереве метаданных и замените.
Пометка или прямое удаление
У объекта есть и метод Удалить(). Он стирает запись сразу, без контроля ссылок. Задачи с битой ссылкой на процесс останутся в базе и будут показываться как <Объект не найден>.
| Метод | Контроль ссылок | Когда применять |
|---|---|---|
УстановитьПометкуУдаления(Истина) + удаление помеченных | Есть | Почти всегда |
Удалить() | Нет | Только если вы сами удалили все задачи и записи регистров, ссылающиеся на процесс |
Запускайте обработку сначала на копии базы. Проверьте количество помеченных объектов и только потом повторите в рабочей базе.
Способ 3. Удаление бизнес-процесса из конфигурации в Конфигураторе
Этот путь нужен разработчику, который убирает вид процесса из своей или доработанной конфигурации. Например, «Согласование договора» больше не используется и мешает в интерфейсе.
Подготовка конфигурации
Если конфигурация типовая и стоит на поддержке, объекты на замке редактировать нельзя. Возможность изменения включают через Конфигурация → Поддержка → Настройка поддержки. Учтите: после этого обновления типовой пойдут через сравнение и объединение, это заметно сложнее.
Удалять объекты типовой конфигурации не рекомендуется. Для типовых лучше подходят альтернативы из раздела ниже.
Порядок удаления
- Откройте Конфигуратор,
Конфигурация → Открыть конфигурацию. - Найдите процесс в ветке
Бизнес-процессы. - Правой кнопкой →
Поиск ссылок на объект. Платформа покажет, где он используется: реквизиты других объектов, роли, подсистемы, формы, модули, параметры функциональных опций. - Уберите эти ссылки: удалите реквизиты нужного типа, поправьте код, где процесс упоминается по имени (
БизнесПроцессы.СогласованиеДоговора), исключите его из подсистем. - Выделите объект и нажмите
Del. Если ссылки остались, Конфигуратор покажет их список и удалять не станет. - Проверьте синтаксис модулей:
Конфигурация → Проверка конфигурации. - Обновите базу:
Конфигурация → Обновить конфигурацию базы данных(F7).
На последнем шаге платформа покажет окно реорганизации со списком изменений, где будет видно, что таблица процесса удаляется. Для обновления структуры нужен монопольный доступ — пользователей заранее выводят из базы.
Все экземпляры удалённого процесса пропадут вместе с таблицей. Если по ним нужна история, выгрузите её до шага 7 (см. раздел про архив).
Что ещё проверить разработчику
- 📌 Задача. Удалённый процесс мог быть единственным, кто использовал свой объект «Задача». Тогда задача станет ненужной — решите, удалять ли и её.
- 📌 Регистры адресации и сведений. Измерения с типом удалённого процесса превратятся в ошибки при проверке конфигурации.
- 📌 Расширения. Если расширение заимствует удалённый объект, оно перестанет применяться. Проверьте
Конфигурация → Расширения конфигурации.
Особенности в Документообороте, ERP и других конфигурациях на БСП
Платформенный механизм один, но прикладная логика добавляет нюансы.
1С:Документооборот. Процессы здесь — основа работы: согласование, исполнение, рассмотрение, комплексные процессы. Через них связаны документы и история согласований. Поэтому:
- активный процесс сначала прерывают или останавливают командой в его карточке;
- удалять процесс, по которому документ уже согласован, обычно не стоит: пропадёт история визирования;
- у комплексного процесса есть подчинённые процессы — помечайте их вместе.
ERP, УТ 11, КА. Бизнес-процессы БСП (задания, задачи исполнителям) используются в органайзере и согласованиях. Здесь чаще чистят старые завершённые задания: пометка + удаление помеченных подходит лучше всего.
БП 3.0, ЗУП 3.1. Механизм заданий из БСП есть, но пользователи им пользуются редко. Если процессов немного, хватает Способа 1.
| Конфигурация | Что обычно удаляют | Рекомендуемый способ |
|---|---|---|
| Документооборот | Ошибочно запущенные процессы | Прервать → пометить → удалить помеченные |
| ERP, УТ 11, КА | Старые завершённые задания | Обработка с пометкой (Способ 2) |
| БП 3.0, ЗУП 3.1 | Единичные задания | Пометка в списке (Способ 1) |
| Своя конфигурация | Неиспользуемый вид процесса | Конфигуратор (Способ 3) |
Чем заменить удаление: архив, отключение и перенос процессов
Удаление — не единственный выход. Часто задачу решают мягче.
Отключить вместо удаления
- 🚫 Убрать права. Снимите право «Старт» и «Добавление» на процесс в ролях. Пользователи не смогут запускать новые процессы, старые останутся для истории.
- 🙈 Скрыть из интерфейса. Исключите процесс из подсистем, и он исчезнет из разделов.
- 🏷️ Префикс «Удалить». Так поступает сама фирма 1С в типовых конфигурациях: устаревший объект переименовывают в
УдалитьСогласованиеДоговора, убирают из интерфейса, а физически удаляют через несколько релизов. Подход удобен для своих доработок.
Сохранить историю в архив
Если процессы нужны для аудита, сначала сохраните их, а потом удаляйте:
- Отчёт или список. Выведите список процессов с колонками (дата, автор, исполнители, результат) и сохраните в Excel через
Ещё → Вывести список. - Копия базы. Сохраните
.dtна дату чистки и подпишите её. При вопросе «что было в процессе от марта» поднимете копию. - Выгрузка XML. Типовая обработка «Выгрузка и загрузка данных XML» переносит процессы и задачи в другую базу той же конфигурации. Возьмите её с диска ИТС под свою версию платформы.
Перенос в другую базу
Перенос бизнес-процессов между базами сложнее, чем документов. Процесс ссылается на задачи, пользователей, адресацию и документы-основания. Переносите его вместе с задачами и проверьте, что в базе-приёмнике есть те же пользователи и роли исполнителей. Иначе процесс загрузится, но маршрут не продолжится.
Проверка базы после удаления бизнес-процессов
После чистки убедитесь, что не осталось битых ссылок и лишнего места.
Поиск битых ссылок
Если удаляли методом Удалить(), найдите задачи с пустой или битой ссылкой на процесс. Простой запрос в консоли запросов:
ВЫБРАТЬ
З.Ссылка,
З.БизнесПроцесс
ИЗ
Задача.ЗадачаИсполнителя КАК З
ГДЕ
З.БизнесПроцесс.Ссылка ЕСТЬ NULL
Обращение к реквизиту через точку даёт NULL, если объекта по ссылке нет. Такие задачи пометьте на удаление и удалите.
Тестирование и исправление
В Конфигураторе: Администрирование → Тестирование и исправление. Отметьте «Проверка логической целостности» и «Проверка ссылочной целостности». Для режима исправления нужен монопольный доступ, поэтому запускайте его в нерабочее время, предупредив пользователей: их сеансы придётся завершить.
Вернуть место на диске
- 💾 Файловая база. Удалённые записи освобождают место не сразу. В «Тестировании и исправлении» отметьте «Сжатие таблиц информационной базы».
- 🗄️ Клиент-серверная база. Место внутри файлов СУБД освобождается, но размер файла не уменьшается. Сжатие делают средствами СУБД (в MS SQL —
DBCC SHRINKFILE, в PostgreSQL —VACUUM FULL), только после резервной копии и в окно обслуживания.
Ошибки при удалении бизнес-процессов и как их обойти
Здесь — ситуации, которые не следуют прямо из шагов выше.
Ещё одна частая ловушка — обмен данными. Если база участвует в распределённой информационной базе (РИБ), удаление объектов уйдёт в подчинённые узлы. Изменение конфигурации в РИБ делают только в главном узле, а подчинённые получают его при обмене.