Как правильно пометить документы на удаление через групповое изменение реквизитов, чтобы удалились движения?

Программист 1С v8.3 (Управляемые формы)
← На главную

В процессе работы с программами на платформе 1С:Предприятие 8.3 часто возникает необходимость массово удалить документы. Казалось бы, типовая обработка Групповое изменение реквизитов должна справляться с этой задачей мгновенно. Однако многие пользователи сталкиваются с неприятной ситуацией: флаг «Пометка на удаление» установлен, но документ продолжает «делать движения», влияя на остатки, взаиморасчеты и финансовый результат. В этой статье мы подробно разберем, почему так происходит и как выполнить групповое удаление правильно.

Анализируем причину проблемы: почему остаются движения?

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

Проанализируем ситуацию с обработкой Групповое изменение реквизитов. Если в настройках этой обработки включены специфические режимы, она может выполнять «упрощенную» запись объекта. В этом случае просто меняется значение булева реквизита, а стандартные обработчики событий (такие как ПередЗаписью или ПриЗаписи), отвечающие за очистку движений, попросту игнорируются.

Решение 1: Проверка настроек «Режима разработчика»

Как выяснилось в ходе обсуждения, наиболее частой причиной «зависших» движений является включенный Режим разработчика в дополнительных параметрах обработки. Рассмотрим подробнее, как это работает.

В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) при включении режима разработчика обработка устанавливает свойство ОбменДанными.Загрузка = Истина. Для платформы это сигнал: «Я просто загружаю готовые данные, не нужно проверять логику, не нужно удалять движения, просто запиши то, что я даю». Это ускоряет процесс, но нарушает целостность учета.

Что нужно сделать:

  1. Откройте обработку Групповое изменение реквизитов.
  2. Перейдите в раздел Дополнительные параметры (обычно находится внизу или в меню «Еще»).
  3. Найдите флаг Режим разработчика и снимите его.
  4. Убедитесь, что флаг Выполнять в транзакции установлен — это гарантирует, что если один документ не сможет пометиться на удаление (например, из-за блокировки), изменения не применятся частично.

После отключения режима разработчика обработка начнет записывать объекты в стандартном режиме, и движения будут очищаться корректно.

Решение 2: Использование возможностей формы списка (для УФ)

Если документов, которые нужно удалить, не сотни тысяч, а несколько сотен или пара тысяч, самым надежным способом будет использование стандартного функционала формы списка. Этот метод гарантированно вызывает УстановитьПометкуУдаления.

Разберем этот способ по шагам:

  1. Откройте список нужных вам документов (например, «Реализации товаров и услуг»).
  2. Настройте список так, чтобы в нем остались только те документы, которые нужно удалить (используйте кнопку Настроить список или быстрые отборы).
  3. Нажмите комбинацию клавиш Ctrl + A, чтобы выделить все строки.
  4. Нажмите клавишу Delete на клавиатуре или выберите в контекстном меню (правая кнопка мыши) пункт Пометить на удаление / Снять пометку.
  5. Подтвердите действие в появившемся диалоговом окне.

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

Решение 3: Программный метод через произвольный код

Иногда требуется более тонкая настройка. В некоторых версиях обработки Групповое изменение реквизитов доступна вкладка «Произвольный код». Мы можем написать небольшой фрагмент на языке 1С, который выполнит задачу максимально корректно. Посмотрим на пример кода:


// В контексте обработки объект доступен как "Объект"
Если Объект.Проведен Тогда
    Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Объект.УстановитьПометкуУдаления(Истина);

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

Решение 4: Специализированные обработки

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

При использовании этой обработки:

Как исправить ситуацию, если документы уже помечены, а движения остались?

Если «беда уже случилась», и вы видите в базе «документы-призраки», которые помечены крестиком, но продолжают отображаться в отчетах, не паникуйте. Рассмотрим алгоритм исправления:

Вариант А (через интерфейс):

  1. Выделите эти документы в списке.
  2. Снимите с них пометку на удаление (они станут просто «непроведенными»).
  3. Снова установите пометку на удаление. При повторной (правильной) установке пометки платформа увидит несоответствие и очистит регистры.

Вариант Б (через Групповое изменение реквизитов):

Если документов очень много, выберите их в обработке и измените реквизит Проведен в значение Ложь. Убедитесь, что Режим разработчика выключен. После этого документы перестанут делать движения, хотя флаг пометки на удаление у них уже стоит.

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

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

  1. Всегда предпочитайте штатное удаление через Ctrl + A в списке документов.
  2. При использовании Группового изменения реквизитов всегда проверяйте, чтобы Режим разработчика был выключен.
  3. Если вы сомневаетесь, попробуйте сначала выполнить операцию на одном документе и проверьте его движения через кнопку Движения документа (Дт/Кт).

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

← На главную