Как найти и объединить дубли номенклатуры в 1С с переносом остатков и сохранением истории?

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

В процессе работы с большими базами данных (от 15 000 позиций и выше) часто возникает ситуация, когда один и тот же товар заводится в справочник несколько раз под разными именами. Это происходит из-за человеческого фактора: один поставщик присылает накладную с названием «Молоко 1л. 2.5% Простоквашино», а другой — «Молоко Простоквашино 1 литр 2,5%». В результате возникают «пересортица» в отчетах, неразбериха с остатками и сложности при продаже на кассе.

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

Механизм работы объединения: замена ссылок

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

Рассмотрим этот процесс подробнее: когда мы указываем системе «Оригинал» (то, что останется) и «Дубль» (то, что нужно убрать), программа обходит всю базу данных. Она находит все упоминания дубля в документах ПоступлениеТоваровУслуг, РеализацияТоваровУслуг, ЧекККМ и в регистрах сведений (цены) и накопления (остатки). Затем она просто подставляет в эти места ссылку на оригинал. Таким образом, документ остается неизменным по дате и сумме, но «смотрит» теперь на правильный товар.

Шаг 1. Подготовка и поиск дублей

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

Разберем, как найти дубли:

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

Система проанализирует справочник и выдаст список групп похожих товаров. Проанализируем ситуацию: программа может ошибиться и посчитать похожими «Молоко 2.5%» и «Молоко 3.2%». Нам нужно вручную просмотреть список и отметить галочками только те позиции, которые действительно являются одним и тем же товаром.

Шаг 2. Выбор оригинала и объединение

После того как дубли найдены, нам нужно назначить «Главный» товар. Обычно выбирается та карточка, у которой наиболее полное и правильное название или которая чаще всего использовалась в последнее время.

Нажмем кнопку Отметить как оригинал для выбранной позиции. Все остальные товары в группе станут «дублями». После нажатия кнопки Удалить дубли программа запустит процесс пересчета ссылок. Выясним причину, почему это может занять время: 1С должна проверить каждую таблицу базы данных. Для 15 000 позиций и накопленной истории продаж это может занять от 20 минут до нескольких часов. Рекомендуется проводить процедуру, когда в базе нет активных пользователей. Для ускорения процесса при работе с MS SQL можно воспользоваться инструментом для быстрого поиска и замены дублей средствами SQL.

Шаг 3. Перенос остатков и работа с регистрами

Многих волнует вопрос: перенесутся ли остатки? Да, остатки перенесутся автоматически. В 1С остатки хранятся в регистрах накопления в разрезе измерений, одним из которых является Номенклатура. Когда обработка меняет ссылку в записи регистра с «Дубля» на «Оригинал», общее количество товара на складе по «Оригиналу» суммируется.

Посмотрим на пример с ценами. Если у дубля была цена 100 рублей, а у оригинала — 105, в регистре сведений ЦеныНоменклатуры могут возникнуть конфликты на одну и ту же дату. Стандартная обработка умеет «схлопывать» такие записи, оставляя актуальную информацию.

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

Шаг 4. Бухгалтерские нюансы (для 1С:Бухгалтерия)

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

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

Шаг 5. «Закрываем кран»: предотвращение новых дублей

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

  1. Контроль уникальности штрихкодов. В настройках параметров учета (раздел Администрирование — Номенклатура) включите проверку уникальности штрихкодов. Если штрихкод уже есть в базе, система просто не даст создать вторую карточку с таким же кодом.
  2. Запрет на дублирование наименований. Во многих современных конфигурациях (Розница 3.0, УНФ) можно включить запрет на создание товаров с одинаковым наименованием.
  3. Использование «Номенклатуры поставщиков». Это самый правильный метод работы с ЭДО и загрузками из Excel. Вместо того чтобы переименовывать свои товары под каждого поставщика, создайте записи в регистре НоменклатураПоставщиков. Программа будет знать, что «Молоко от Поставщика А» — это ваше «Молоко Простоквашино», и при загрузке документа сама подставит нужную ссылку.

Использование дополнительных инструментов

Если стандартного поиска недостаточно (например, нужно найти товары с переставленными словами «Молоко Простоквашино» и «Простоквашино Молоко»), можно воспользоваться доработками. Для этого часто применяют алгоритмы нечеткого поиска, такие как расстояние Левенштейна. Для этой задачи можно использовать инструмент для аудита базы и нечеткого поиска дублей по алгоритму Левенштейна.

В коде это может выглядеть примерно так (фрагмент для разработчика):


// Пример использования функции сравнения строк для поиска дублей
Для Каждого СтрокаНоменклатуры Из ТаблицаТоваров Цикл
    СтепеньСходства = СтрПодобие(СтрокаНоменклатуры.Наименование, ИскомоеНаименование);
    Если СтепеньСходства > 0.8 Тогда // 80% совпадения
        Сообщить("Найден потенциальный дубль: " + СтрокаНоменклатуры.Наименование);
    КонецЕсли;
КонецЦикла;

Заключение

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

← На главную