При внедрении автоматизации, переносе данных или интенсивном ручном вводе пользователи 1С часто сталкиваются с появлением дублирующихся элементов в справочниках. Ситуация значительно осложняется, когда речь идет о подчиненных справочниках, таких как Характеристики номенклатуры. Обычные инструменты поиска дублей без правильной настройки могут сопоставить характеристики разных товаров, что приведет к фатальной путанице в учете.
В этой статье мы подробно разберем, как с помощью запроса выявить дублирующиеся характеристики одного и того же товара, проанализируем причины этой проблемы и составим пошаговый безопасный алгоритм слияния дублей в конфигурации «1С:Управление торговлей 10.3» (УТ 10.3).
В конфигурации УТ 10.3 справочник ХарактеристикиНоменклатуры является подчиненным справочнику Номенклатура. Это означает, что у каждой характеристики есть обязательный реквизит Владелец. Дублями в данном контексте мы считаем элементы, которые принадлежат одному и тому же владельцу (товару) и имеют одинаковое наименование или одинаковое значение ключевого реквизита (например, даты vl_Дата или свойства).
Простой поиск по наименованию здесь не подходит: у «Товара А» и «Товара Б» вполне законно могут быть характеристики с одинаковым названием «Красный». Наша задача — найти дубли именно внутри каждого конкретного товара-владельца.
Для того чтобы понять масштаб проблемы и увидеть список повторяющихся характеристик, нам потребуется написать запрос в консоли запросов 1С.
Рассмотрим базовый вариант запроса (на основе обсуждения форума), который группирует записи по владельцу и реквизиту (в нашем примере это vl_Дата, но вы можете заменить его на Наименование или другой реквизит) и отсекает уникальные записи с помощью условия ИМЕЮЩИЕ КОЛИЧЕСТВО(...) > 1:
ВЫБРАТЬ
Характеристики.Владелец КАК Владелец,
Характеристики.vl_Дата КАК vl_Дата,
КОЛИЧЕСТВО(Характеристики.Ссылка) КАК КоличествоДублей
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК Характеристики
СГРУППИРОВАТЬ ПО
Характеристики.Владелец,
Характеристики.vl_Дата
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Характеристики.Ссылка) > 1
Этот запрос покажет нам «сводную» картину: какого числа и для какого товара появились дублирующиеся характеристики и в каком количестве. Однако для непосредственного исправления нам нужны не просто цифры, а конкретные ссылки на элементы-дубли.
Чтобы получить детальный список ссылок, мы модернизируем наш запрос. Мы соединим таблицу характеристик со вложенным запросом, который отбирает только дублирующиеся группы. Проанализируем этот пример:
ВЫБРАТЬ
Хар.Ссылка КАК СсылкаНаДубль,
Хар.Владелец КАК Владелец,
Хар.vl_Дата КАК vl_Дата
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК Хар
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
ВнутрХар.Владелец КАК Владелец,
ВнутрХар.vl_Дата КАК vl_Дата
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ВнутрХар
СГРУППИРОВАТЬ ПО
ВнутрХар.Владелец,
ВнутрХар.vl_Дата
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВнутрХар.Ссылка) > 1
) КАК ВложенныеДубли
ПО
Хар.Владелец = ВложенныеДубли.Владелец
И Хар.vl_Дата = ВложенныеДубли.vl_Дата
УПОРЯДОЧИТЬ ПО
Владелец,
vl_Дата
Запустив этот запрос, мы получим четкую таблицу, где дубли будут сгруппированы друг за другом. Это готовый список «кандидатов» на удаление и замену.
Прежде чем приступать к удалению, важно понять, почему дубли появились. Если не устранить источник проблемы, они будут размножаться снова и снова. В практике «1С:Управление торговлей 10.3» наиболее частой причиной является предыдущее слияние элементов номенклатуры.
Давайте разберем типичный сценарий:
Номенклатура и объединили эти две позиции в одну.Если это ваш случай, то появление дублей — разовое следствие наведения порядка в номенклатуре. Если же дубли продолжают появляться каждый день, необходимо проверить код обмена данными или логику работы внешнего оборудования (например, ТСД или касс), которые могут записывать характеристики без предварительной проверки на существование.
Просто запустить обработку поиска дублей и нажать кнопку «Выполнить слияние» в случае подчиненных справочников категорически нельзя. Это связано с несколькими критическими рисками:
А. Риск «перекрестного» слияния характеристик разных товаров.
Если вы используете стороннюю или старую типовую обработку поиска дублей, обязательно убедитесь, что в правилах сравнения жестко задано равенство реквизита Владелец. В противном случае система может посчитать дублями характеристику «Красный» у «Платья» и характеристику «Красный» у «Автомобиля» и заменить их на одну общую ссылку. Это приведет к полному коллапсу складского и финансового учета.
Б. Конфликты в независимых регистрах сведений.
Характеристики номенклатуры в УТ 10.3 активно используются как ключевые разрезы (измерения) в различных регистрах сведений. При замене ссылок вы можете столкнуться с ошибкой неуникальности записей в следующих регистрах:
Штрихкоды: если на каждый из дублей характеристик был назначен свой штрихкод. При попытке переписать штрихкод на одну выжившую характеристику система выдаст ошибку, так как штрихкод должен быть уникальным.ЦеныНоменклатуры: если для обеих характеристик были установлены цены (например, документом «Установка цен номенклатуры»). При замене ссылок возникнет конфликт ключевых полей, поскольку для одной характеристики в одну дату не может быть двух разных (или даже одинаковых) цен.СпецификацииНоменклатуры.В. Проведение документов в закрытых периодах.
Замена характеристик в документах прошлых периодов может потребовать перепроведения этих документов для корректного распределения партий. Если период закрыт для редактирования, стандартные транзакции могут завершиться ошибкой или нарушить последовательность партионного учета.
Рассмотрим по шагам, как правильно и безопасно провести процедуру слияния дублирующихся характеристик в «1С:Управление торговлей 10.3»:
.dt) или архивную копию SQL-базы.ЦеныНоменклатуры и Штрихкоды. Найдите записи, содержащие дублирующиеся характеристики. Если для дубля установлена цена или штрихкод, удалите эти записи вручную (или перепишите их на оригинальную характеристику заранее), иначе обработка замены завершится аварийно из-за конфликта уникальности записей.Администрирование -> Тестирование и исправление.... Выберите пункты «Проверка ссылочной целостности» и «Реорганизация информации». Это гарантирует, что в базе не осталось «битых» ссылок вида <Объект не найден...>.Соблюдение этого алгоритма позволит вам быстро навести порядок в справочнике характеристик, не нарушая работу пользователей и сохраняя полную консистентность данных в вашей базе 1С.