Как правильно установить пометку удаления элемента справочника в регламентном задании 1С?

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

При автоматизации рутинных процессов в 1С часто возникает задача программного изменения статуса объектов, например, установки пометки удаления для неактуальных позиций. Разберем, почему простой подход с изменением реквизита может не работать и как правильно реализовать эту задачу в рамках регламентного задания.

Почему не срабатывает прямая запись реквизита?

Многие разработчики совершают типичную ошибку: пытаются установить пометку удаления через прямое присваивание значения Объект.ПометкаУдаления = Истина. В системе 1С ПометкаУдаления является не просто полем таблицы, а системным признаком. При такой записи не срабатывают встроенные механизмы контроля, проверки прав и подписки на события. Чтобы изменения корректно зафиксировались в базе данных, необходимо использовать специальный метод объекта УстановитьПометкуУдаления(Истина).

Разбор алгоритма решения задачи

Рассмотрим по шагам, как построить логику обработки во внешней обработке, которая вызывается регламентным заданием.

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

Пример программной реализации

Посмотрим на структуру кода, который необходимо разместить в процедуре вашей обработки:


Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    // Проверяем условия перед обработкой
    Если Выборка.ЗаблокироватьДляЗаявокНаПриобретениеТМЦ И НЕ Выборка.ПометкаУдаления Тогда
        ВариантНоменклатуры = Выборка.Ссылка.ПолучитьОбъект();
        Если ВариантНоменклатуры.ЗаблокироватьДляЗаявокНаПриобретениеТМЦ Тогда
            // Используем корректный метод установки пометки
            ВариантНоменклатуры.УстановитьПометкуУдаления(Истина);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Особенности работы в регламентных заданиях

Помните, что регламентные задания выполняются на стороне сервера в фоновом режиме. Это накладывает определенные ограничения:

Как проверить работоспособность решения?

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


ВариантНоменклатуры = Справочники.ВариантыНоменклатуры.НайтиПоКоду("000000001").ПолучитьОбъект();
Если Не ВариантНоменклатуры.ПометкаУдаления Тогда
    ВариантНоменклатуры.УстановитьПометкуУдаления(Истина);
КонецЕсли;

Если после выполнения этого кода пометка в интерфейсе появилась — значит, проблема была именно в использовании неправильного метода. Если же пометка не ставится даже при выполнении кода в консоли, проверьте наличие подписок на события, которые могут блокировать изменение объектов данного справочника.

Используя предложенные рекомендации, вы сможете наладить работу вашего регламентного задания, сделав его предсказуемым и надежным инструментом автоматизации.

← На главную