Как удалить лишнюю номенклатуру без остатков в 1С:Розница 2.2 с помощью свертки и альтернативных методов?

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

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

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

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

Рассмотрим подробнее механизм работы платформы 1С 8.3. Свертка информационной базы предназначена для сокращения объема данных путем удаления старых документов и формирования документов ввода остатков на определенную дату. Однако свертка не удаляет сами справочники, если на их элементы есть хотя бы одна ссылка в системе.

Документы ценообразования (например, Установка цен номенклатуры) и расчетные документы (Расчет и установка себестоимости) создают записи в независимых и подчиненных регистрах сведений (таких как «Цены номенклатуры» или «Себестоимость номенклатуры»). Даже если сам исторический документ поступления или продажи был удален в процессе свертки, записи о ценах и себестоимости на этот товар остаются в базе данных. Платформа видит эти связи и блокирует физическое удаление карточки товара. Выясним, как обойти эти ограничения и безопасно очистить базу.

Метод 1. Креативный ручной алгоритм через переустановку цен и инвентаризацию

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

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

Метод 2. «Схлопывание» лишней номенклатуры через встроенный поиск дублей

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

Проанализируем этот подход: вместо физического удаления 2500 позиций мы заменим все ссылки на них в старых документах на один-единственный элемент справочника. Для этого выполним следующие действия:

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

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

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

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

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

Метод 4. Перенос остатков в новую чистую базу данных (Best Practice)

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

Посмотрим на алгоритм реализации этого метода:

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

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

Пример программной очистки табличных частей документов от помеченного товара

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


// Пример программной очистки табличной части документа "Установка цен номенклатуры"
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	УстановкаЦен.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦен
    |ГДЕ
    |	УстановкаЦен.Номенклатура.ПометкаУдаления = ИСТИНА";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

Важное предупреждение: Перед выполнением любых операций по удалению данных, свертке информационной базы, схлопыванию дублей или использованию групповых обработок реквизитов, в обязательном порядке сделайте резервную копию вашей базы данных (файл .1CD или выгрузку .dt) и протестируйте весь процесс на копии базы!

← На главную