Разберем распространенную ситуацию, с которой часто сталкиваются пользователи 1С:Управление торговлей 11.5 (и других конфигураций). При попытке объединить задвоенные позиции номенклатуры с помощью стандартной обработки Поиск и удаление дублей, программа успешно производит замену ссылок почти во всех документах. Однако при попытке окончательно удалить помеченный объект возникает ошибка, ссылающаяся на документ УстановкаЦенНоменклатуры. Система требует выбрать действие: заменить номенклатуру или удалить документ, при этом автоматическая замена не срабатывает. Проанализируем эту ситуацию и найдем правильное решение.
Техническая причина этой проблемы кроется во встроенном контроле уникальности записей базы данных 1С. Посмотрим, как это работает изнутри:
Документ УстановкаЦенНоменклатуры при проведении формирует движения в специальный регистр сведений ЦеныНоменклатуры. По правилам логики системы, в одном документе (или на одну конкретную дату) не может быть установлено две разные цены для одной и той же номенклатуры по одному виду цен.
Когда обработка пытается автоматически поменять ссылку с дубля на оригинал в табличной части документа, образуются две абсолютно идентичные строки с одной и той же номенклатурой (оригиналом). При попытке записать такой документ, система блокирует операцию, выдавая фоновую ошибку (так как запись с такими ключевыми полями уже существует). Из-за этого процесс замены прерывается, и дубль остается в базе не удаленным.
Ни в коем случае не удаляйте сам документ установки цен, так как это приведет к потере исторических данных о ценообразовании. Разберем по шагам, как корректно решить проблему штатными средствами:
УстановкаЦенНоменклатуры двойным кликом.В зависимости от конкретной ситуации, вы можете применить и другие методы обхода этого ограничения:
ЦеныНоменклатуры очистятся. Затем повторите замену дубля — она пройдет успешно, так как контроль уникальности записей регистра больше не будет мешать.Рассмотрим другие объекты системы, где контроль уникальности может прервать автоматическое удаление дублей. Вы не сможете автоматически удалить дубликат, если он задействован в других регистрах, где важна уникальность ключевых полей. Посмотрим на примеры:
ШтрихкодыНоменклатуры. Система не даст записать два одинаковых штрихкода для одной карточки товара. В этом случае нужно вручную удалить штрихкод у дубля.В каждом из этих случаев принцип решения остается неизменным: откройте проблемный объект из списка необработанных мест использования, найдите строку с дублем, удалите её вручную, сохраните объект и повторите попытку удаления.