Как в 1С пометить на удаление номенклатуру без цен: подробное руководство

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

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

Метод 1. Использование консоли запросов и обработки результата

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

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

Рассмотрим пример логики запроса:


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    ЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
    И Номенклатура.ЭтоГруппа = ЛОЖЬ

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

После получения списка в консоли запросов используем стандартную функцию «Обработка результата». В алгоритме обработки пропишем установку пометки на удаление:


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

Метод 2. Групповое изменение реквизитов (стандартный функционал)

Если вы не хотите прибегать к написанию кода, рассмотрим стандартную обработку Групповое изменение реквизитов. В современных конфигурациях, таких как УТ 11, ERP или БП 3.0, этот инструмент позволяет строить достаточно сложные фильтры.

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

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

Метод 3. Анализ через Универсальный отчет

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

Настроим отчет следующим образом:

В настройках на закладке Отборы добавим условие Цена = 0. Сформировав такой список, мы увидим товары, по которым цена формально была установлена (создан документ), но ее значение равно нулю. Это тоже кандидаты на удаление. Если же мы хотим найти тех, у кого записи в регистре нет совсем, нам придется вернуться к методу запроса, описанному выше.

Важные технические нюансы и меры предосторожности

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

1. Контроль остатков и оборотов. Это критически важный момент. Нельзя помечать на удаление товар только по отсутствию цены, если по нему есть остатки на складах или движения в текущем периоде. Перед выполнением операции убедимся, что по выбранным позициям:

2. Виды цен. В 1С может быть настроено множество видов цен: Оптовая, Розничная, Закупочная. Выясним причину отсутствия цены: возможно, у товара нет розничной цены, но заполнена закупочная. Удаление такой позиции приведет к потере истории закупок и невозможности корректного формирования аналитических отчетов по прошлым периодам.

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

Автоматизация через расширения и внешние обработки

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

Типовой алгоритм такой обработки обычно включает в себя:

  1. Выбор группы номенклатуры, внутри которой будет производиться поиск.
  2. Выбор конкретного Вида цены, по которому проверяется заполненность.
  3. Дополнительный фильтр по отсутствию остатков (опционально, но рекомендуется).
  4. Кнопка «Пометить на удаление», которая в цикле обрабатывает найденные позиции.

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

← На главную