Как исправить ошибку удаления дублей номенклатуры в 1С:УТ 11.5, ссылающуюся на документ Установка цен?

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

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

Выясним причину возникновения ошибки

Техническая причина этой проблемы кроется во встроенном контроле уникальности записей базы данных 1С. Посмотрим, как это работает изнутри:

Документ УстановкаЦенНоменклатуры при проведении формирует движения в специальный регистр сведений ЦеныНоменклатуры. По правилам логики системы, в одном документе (или на одну конкретную дату) не может быть установлено две разные цены для одной и той же номенклатуры по одному виду цен.

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

Рассмотрим правильный алгоритм действий

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

  1. Запустите стандартную обработку удаления дублей. Если возникает ошибка, программа выдаст статус: «Не удалось заменить дубли на оригиналы в некоторых местах использования».
  2. Обратите внимание на правую часть окна обработки. Там появится список ссылок на проблемные места (раздел Места использования необработанных).
  3. Прямо из этого списка откройте проблемный документ УстановкаЦенНоменклатуры двойным кликом.
  4. В табличной части документа найдите строку именно с удаляемым дублем (позицией, которую вы хотите убрать из базы). В документе уже будет присутствовать строка с правильным оригиналом, поэтому дублирующую строку нужно просто удалить.
  5. Проведите и закройте документ.
  6. Вернитесь в окно обработки поиска и удаления дублей и нажмите кнопку Повторить удаление. После этого программа успешно завершит процесс, так как конфликт уникальности устранен.

Проанализируем альтернативные варианты решения

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

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

Где еще может возникнуть аналогичная ситуация?

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

В каждом из этих случаев принцип решения остается неизменным: откройте проблемный объект из списка необработанных мест использования, найдите строку с дублем, удалите её вручную, сохраните объект и повторите попытку удаления.

← На главную