В процессе работы в программе 1С:Розница 2.2 пользователи часто сталкиваются с ситуацией, когда определенные товары выводятся из ассортимента. Естественным желанием мерчандайзера или администратора базы данных является очистка справочника от неиспользуемых позиций. Однако стандартная попытка пометить товар на удаление и запустить процедуру «Удаление помеченных объектов» заканчивается неудачей: система сообщает, что объект невозможно удалить, так как на него ссылаются документы прошлых периодов (поступления, чеки ККМ, отчеты о розничных продажах и инвентаризации).
В этой статье мы подробно разберем, почему физическое удаление таких товаров нарушает учет, и рассмотрим безопасные практические варианты решения этой проблемы без вреда для вашей базы данных. Для обеспечения безопасности и автоматического создания архивов перед любыми изменениями в базе применяется программа для фонового обслуживания и архивации 1С.
Давайте проанализируем, что происходит при удалении товара. В системе 1С действует принцип ссылочной целостности. Любой документ (например, ЧекККМ или ПоступлениеТоваров) не просто хранит текстовое название товара, а ссылается на уникальный идентификатор (GUID) карточки в справочнике Номенклатура.
Если мы обойдем систему защиты и принудительно удалим карточку товара из базы, во всех исторических документах вместо названия товара появится надпись <Объект не найден> (и далее длинный набор букв и цифр). Это приведет к следующим критическим последствиям:
Поэтому удалять ссылки из документов прошлых лет вручную — крайне нерациональная задача. Ниже мы разберем правильные методы скрытия и архивации таких товаров.
Это самый простой, безопасный и быстрый способ навести порядок в справочнике. Проанализируем процесс по шагам:
!Архив или !Не использовать. Восклицательный знак или точка в начале названия автоматически поднимут эту папку в самый верх списка для удобства.Ctrl, нажать правой кнопкой мыши и выбрать пункт «Изменить выделенные» или просто перетащить их мышью в созданную группу.Чтобы архивные товары не мешали пользователям при подборе в документах и не «болтались» перед глазами, мы можем настроить стандартную фильтрацию. Для этого не требуются услуги программиста:
ПометкаУдаления, вид сравнения установим в значение Равно, а в поле значения укажем Нет (Ложь).Ссылка — вид сравнения Не в группе — и указать нашу папку !Архив.После этого все помеченные на удаление и архивные товары мгновенно исчезнут из текущего списка. Эту настройку можно сохранить и скопировать другим пользователям через меню Администрирование — Настройки пользователей и прав — Копирование настроек.
Если вам критически важно уменьшить физическое количество позиций в справочнике, но при этом сохранить старые документы, мы можем прибегнуть к методу «сжатия» истории. Смысл метода заключается в том, чтобы заменить множество закрытых позиций на одну общую служебную карточку.
Рассмотрим этот алгоритм подробнее:
Товар (архивный).Номенклатура.Товар (архивный).Программа автоматически найдет все упоминания удаляемых товаров во всех чеках, поступлениях и регистрах за все годы и перезапишет ссылки на единую карточку Товар (архивный). После завершения обработки старые карточки освободятся от связей и их можно будет без проблем удалить стандартным интерактивным поиском удаляемых объектов.
Важно: этот способ исказит историческую аналитику продаж в разрезе конкретных брендов или моделей за прошлые периоды. Используйте его только в том случае, если детальная аналитика прошлых лет вам больше не требуется.
Иногда товар действительно никогда не продавался и не покупался, но программа все равно не разрешает его удалить. Выясним причину этой проблемы. Часто удаление блокируют не документы движения, а сопутствующие регистры:
УстановкаЦенНоменклатуры также блокируют удаление. Нам потребуется зайти в эти документы и удалить строки с целевым товаром.Если вы осознаете все риски нарушения ссылочной целостности и вам требуется удалить карточку физически любой ценой (например, на тестовой базе данных), это можно сделать с помощью программного метода Удалить(). Данный метод полностью игнорирует проверки платформы.
Проанализируем пример кода, который может выполнить администратор или программист через внешнюю обработку:
// Выбираем конкретный товар для удаления
ТоварСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "12345");
Если Не ТоварСсылка.Пустая() Тогда
// Получаем объектную сущность для манипуляций
ТоварОбъект = ТоварСсылка.ПолучитьОбъект();
Попытка
// Непосредственное удаление без контроля ссылок
ТоварОбъект.Удалить();
Сообщить("Элемент справочника успешно удален из базы данных физически.");
Исключение
Сообщить("Ошибка при удалении: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Внимание: никогда не применяйте метод Удалить() на рабочей базе без предварительного создания резервной копии! Восстановить случайно удаленные данные без копии будет невозможно.
Для конфигурации 1С:Розница 2.2 оптимальным сценарием является создание папки-архива с последующей настройкой фильтрации в динамических списках. Это позволяет мгновенно убрать ненужные позиции из рабочего пространства кассиров и товароведов, полностью сохранив при этом историю продаж, финансовую отчетность и стабильность работы механизмов синхронизации данных. В случае необходимости более масштабной очистки, например удаления всех движений по конкретной организации, применяется обработка для выборочного удаления организаций из 1С.