Как безопасно решить проблему дублей номенклатуры в «1С:Управление торговлей 11»?

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

Задвоение номенклатурных позиций в информационных базах 1С — классическая проблема, с которой рано или поздно сталкивается любое торговое предприятие. В старых конфигурациях 1С (например, «Управление производственным предприятием» редакции 1.3) эта задача решалась относительно просто: запускалась стандартная обработка «Поиск и замена дублей», ссылки объединялись, а лишние элементы удалялись. Однако в современных конфигурациях, работающих на платформе 1С:Предприятие 8.3 с управляемым интерфейсом (таких как «Управление торговлей, редакция 11», «Комплексная автоматизация 2» и «1С:ERP»), бездумное автоматическое слияние карточек гарантированно приведет к разрушению базы данных и невозможности корректно рассчитать себестоимость.

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

В чем главная опасность автоматического слияния? Понятие ключей аналитики

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

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

Рассмотрим подробнее, что происходит при использовании стандартной обработки «Поиск и замена дублей»:

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

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

Способ 1. Использование профессиональных инструментов разработчика (ИР)

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

В составе этого комплекса есть мощнейший инструмент — обработка «Поиск дублей и замена ссылок». Рассмотрим алгоритм работы с ней:

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

Способ 2. «Мягкий» административный метод вывода дублей (без изменения истории)

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

В такой ситуации разберем по шагам стратегию мягкого вывода дублей из текущего торгового оборота:

  1. Выберем из двух дублирующихся позиций одну «правильную», которая будет использоваться в дальнейшем. Второй карточке (дублю) изменим наименование, добавив в начало префикс, например: "НЕ ИСПОЛЬЗОВАТЬ_Лампа настенная".
  2. Переместим все ошибочные карточки в специально созданную архивную группу номенклатуры (например, папка «Архив_Дубли»).
  3. В текущем (открытом) периоде необходимо полностью обнулить остатки на дублирующихся позициях. Для этого проанализируем остатки на складах и воспользуемся документом ПересортицаТоваров. Спишем остатки с позиции "НЕ ИСПОЛЬЗОВАТЬ_Лампа настенная" и оприходуем их на правильную карточку "Лампа настенная". Таким образом, на складах зависших остатков по дублям не останется.
  4. Пометим архивные карточки на удаление. Физически удалить их система не позволит (так как есть движения в прошлых периодах), но они будут визуально выделены для пользователей.

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

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

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


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт
    
    // Если выбор происходит в документах, наложим фильтр
    СтандартнаяОбработка = Ложь;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |	Номенклатура.Ссылка КАК Ссылка,
        |	Номенклатура.Наименование КАК Наименование
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |	НЕ Номенклатура.ПометкаУдаления
        |	И НЕ Номенклатура.ЭтоГруппа
        |	И НЕ Номенклатура.Наименование ПОДОБНО ""%НЕ ИСПОЛЬЗОВАТЬ%""
        |	И Номенклатура.Наименование ПОДОБНО &СтрокаПоиска";
        
    Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
    
    ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
    
    СписокВыбора = Новый СписокЗначений;
    Для Каждого Строка Из ТаблицаРезультата Цикл
        СписокВыбора.Добавить(Строка.Ссылка, Строка.Наименование);
    КонецЦикла;
    
    ДанныеВыбора = СписокВыбора;
    
КонецПроцедуры

Этот код отсекает при интерактивном поиске любые карточки, помеченные на удаление или содержащие в своем наименовании стоп-слова, предотвращая новые ошибки ввода.

Системная профилактика: как навсегда забыть о появлении дублей?

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

Выполним следующие системные настройки в режиме 1С:Предприятие:

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

← На главную