Как правильно удалить номенклатуру в 1С:Розница 2.2, если по ней есть движения

Пользователь 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы в программе 1С:Розница 2.2 пользователи часто сталкиваются с ситуацией, когда определенные товары выводятся из ассортимента. Естественным желанием мерчандайзера или администратора базы данных является очистка справочника от неиспользуемых позиций. Однако стандартная попытка пометить товар на удаление и запустить процедуру «Удаление помеченных объектов» заканчивается неудачей: система сообщает, что объект невозможно удалить, так как на него ссылаются документы прошлых периодов (поступления, чеки ККМ, отчеты о розничных продажах и инвентаризации).

В этой статье мы подробно разберем, почему физическое удаление таких товаров нарушает учет, и рассмотрим безопасные практические варианты решения этой проблемы без вреда для вашей базы данных. Для обеспечения безопасности и автоматического создания архивов перед любыми изменениями в базе применяется программа для фонового обслуживания и архивации 1С.

Почему нельзя просто взять и физически удалить товар с историей

Давайте проанализируем, что происходит при удалении товара. В системе 1С действует принцип ссылочной целостности. Любой документ (например, ЧекККМ или ПоступлениеТоваров) не просто хранит текстовое название товара, а ссылается на уникальный идентификатор (GUID) карточки в справочнике Номенклатура.

Если мы обойдем систему защиты и принудительно удалим карточку товара из базы, во всех исторических документах вместо названия товара появится надпись <Объект не найден> (и далее длинный набор букв и цифр). Это приведет к следующим критическим последствиям:

  1. Вы больше не сможете построить корректные отчетах по продажам за прошлые периоды.
  2. Перепроведение любого старого документа вызовет серьезные ошибки в учете себестоимости и остатков.
  3. Нарушится выгрузка данных в бухгалтерию (синхронизация начнет выдавать сбои). Чтобы обмен оставался стабильным и регулярно выполнялся по расписанию, можно использовать решение для автоматизации обмена данными 1С.

Поэтому удалять ссылки из документов прошлых лет вручную — крайне нерациональная задача. Ниже мы разберем правильные методы скрытия и архивации таких товаров.

Решение 1. Создание папки «Архив» и перемещение товаров

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

  1. Перейдем в справочник Номенклатура.
  2. Создадим новую группу (папку) и назовем ее, например, !Архив или !Не использовать. Восклицательный знак или точка в начале названия автоматически поднимут эту папку в самый верх списка для удобства.
  3. Переместим все ненужные товары в эту папку. Для этого можно выделить несколько позиций в списке с зажатой клавишей Ctrl, нажать правой кнопкой мыши и выбрать пункт «Изменить выделенные» или просто перетащить их мышью в созданную группу.
  4. Установим на все товары внутри этой папки пометку на удаление. Это послужит визуальным сигналом для кассиров и менеджеров о том, что данные позиции использовать нельзя.

Решение 2. Настройка отборов в динамических списках (скрытие из вида)

Чтобы архивные товары не мешали пользователям при подборе в документах и не «болтались» перед глазами, мы можем настроить стандартную фильтрацию. Для этого не требуются услуги программиста:

  1. Откроем справочник Номенклатура.
  2. В правом верхнем углу нажмем кнопку Еще и выберем пункт Настроить список.
  3. Перейдем на вкладку Отбор.
  4. Добавим новое условие: выберем поле ПометкаУдаления, вид сравнения установим в значение Равно, а в поле значения укажем Нет (Ложь).
  5. Дополнительно можно добавить условие: поле Ссылка — вид сравнения Не в группе — и указать нашу папку !Архив.
  6. Нажмем кнопку Завершить редактирование.

После этого все помеченные на удаление и архивные товары мгновенно исчезнут из текущего списка. Эту настройку можно сохранить и скопировать другим пользователям через меню Администрирование — Настройки пользователей и прав — Копирование настроек.

Решение 3. Использование механизма «Поиск и замена дублей» (Слияние карточек)

Если вам критически важно уменьшить физическое количество позиций в справочнике, но при этом сохранить старые документы, мы можем прибегнуть к методу «сжатия» истории. Смысл метода заключается в том, чтобы заменить множество закрытых позиций на одну общую служебную карточку.

Рассмотрим этот алгоритм подробнее:

  1. Создадим в справочнике одну общую карточку, например: Товар (архивный).
  2. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных и откроем обработку Поиск и замена дублей.
  3. В поле «Искать в» выберем справочник Номенклатура.
  4. В качестве дублей выберем все те товары, которые мы хотим навсегда удалить.
  5. В качестве «Правильного варианта» (оригинала) укажем нашу созданную карточку Товар (архивный).
  6. Нажмем кнопку Выполнить замену.

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

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

Решение 4. Очистка скрытых связей для «чистых» товаров

Иногда товар действительно никогда не продавался и не покупался, но программа все равно не разрешает его удалить. Выясним причину этой проблемы. Часто удаление блокируют не документы движения, а сопутствующие регистры:

Решение 5. Непосредственное удаление через код (Крайний случай)

Если вы осознаете все риски нарушения ссылочной целостности и вам требуется удалить карточку физически любой ценой (например, на тестовой базе данных), это можно сделать с помощью программного метода Удалить(). Данный метод полностью игнорирует проверки платформы.

Проанализируем пример кода, который может выполнить администратор или программист через внешнюю обработку:


// Выбираем конкретный товар для удаления
ТоварСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "12345");

Если Не ТоварСсылка.Пустая() Тогда
    // Получаем объектную сущность для манипуляций
    ТоварОбъект = ТоварСсылка.ПолучитьОбъект();
    
    Попытка
        // Непосредственное удаление без контроля ссылок
        ТоварОбъект.Удалить();
        Сообщить("Элемент справочника успешно удален из базы данных физически.");
    Исключение
        Сообщить("Ошибка при удалении: " + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

Внимание: никогда не применяйте метод Удалить() на рабочей базе без предварительного создания резервной копии! Восстановить случайно удаленные данные без копии будет невозможно.

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

Для конфигурации 1С:Розница 2.2 оптимальным сценарием является создание папки-архива с последующей настройкой фильтрации в динамических списках. Это позволяет мгновенно убрать ненужные позиции из рабочего пространства кассиров и товароведов, полностью сохранив при этом историю продаж, финансовую отчетность и стабильность работы механизмов синхронизации данных. В случае необходимости более масштабной очистки, например удаления всех движений по конкретной организации, применяется обработка для выборочного удаления организаций из 1С.

← На главную