Почему стандартная обработка «Поиск и удаление дублей» не переносит договоры при объединении контрагентов в 1С:УТ 11.5?

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

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

Анализ проблемы и ожидаемое поведение обработки

Стандартная обработка «Поиск и удаление дублей» в типовых конфигурациях 1С, включая УТ 11.5, спроектирована таким образом, чтобы при объединении дублирующихся элементов справочника (например, контрагентов) все ссылки на дубль в документах, регистрах и других объектах базы данных были автоматически заменены на ссылки на выбранный нами "правильный" или оригинальный элемент. После успешной замены ссылок, дубль помечается на удаление. Это означает, что если у нас есть два контрагента — один «Короткое название» (оригинал) и другой «Длинное название» (дубль), и у дубля есть привязанные договоры, то при корректной работе обработки эти договоры должны быть перепривязаны к контрагенту «Короткое название».

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

Почему это происходит? Согласно информации из форума, для версии УТ 11.5.11.96 зарегистрирована ошибка под номером 00-00534485. Наличие зарегистрированной ошибки подтверждает, что данная проблема является известной и связана с некорректной работой самой конфигурации или ее стандартных механизмов в конкретном релизе. Это может быть связано с особенностями обработки определенных типов ссылок или спецификой данных, приводящей к сбою в логике переноса.

Альтернативные решения проблемы с дублями

Учитывая, что стандартная обработка в данном релизе работает некорректно из-за известной ошибки, нам потребуется использовать альтернативные методы для объединения дублей и переноса связанных данных. Рассмотрим несколько подходов.

1. Использование обработки «Поиск дублей и замена ссылок ИР» из подсистемы «Инструменты разработчика»

Одним из наиболее мощных и гибких решений является использование внешней обработки «Поиск дублей и замена ссылок ИР», которая входит в состав подсистемы «Инструменты разработчика», разработанной Сергеем Старых. Эта подсистема значительно расширяет возможности работы с данными в 1С и часто используется разработчиками и опытными пользователями для решения сложных задач по работе с базой.

  1. Что такое «Инструменты разработчика»?

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

  2. Где найти и как установить?

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

  3. Преимущества использования:
    • Гибкость поиска: Мы можем настраивать правила поиска дублей по множеству критериев, включая неточное совпадение строк (похожие слова).
    • Детальный анализ ссылок: Обработка позволяет нам проанализировать все объекты, которые ссылаются на дубль, и контролировать процесс замены ссылок.
    • Выборочная замена: Мы можем выбирать, в каких объектах и регистрах производить замену ссылок, что дает нам полный контроль над процессом.
    • Устойчивость: Эта обработка часто оказывается более надежной в сложных случаях, чем стандартные механизмы, особенно при наличии специфических ошибок конфигурации.
  4. Пошаговая работа с обработкой «Поиск дублей и замена ссылок ИР»:

    Давайте рассмотрим общие шаги, как мы можем использовать эту обработку для решения нашей проблемы:

    1. Подготовка: Перед началом работы обязательно создайте полную резервную копию вашей информационной базы. Это критически важно, так как некорректные действия могут привести к потере данных.
    2. Запуск обработки: Откройте обработку «Поиск дублей и замена ссылок ИР». В 1С:УТ 11.5 мы можем найти ее в разделе «Администрирование», если она установлена как расширение.
    3. Настройка поиска дублей:
      • Выберите тип объекта, который мы хотим обработать – в нашем случае это справочник Контрагенты.
      • Укажите критерии поиска дублей. Обычно это наименование, ИНН, КПП. Мы можем использовать различные комбинации и алгоритмы сравнения.
      • Запустите поиск. Обработка предоставит нам список найденных потенциальных дублей.
    4. Выбор оригинала и дублей:
      • Из предложенных вариантов мы должны четко определить, какой из элементов является оригиналом (например, «Короткое название»), а какие – дублями («Длинное название»).
      • Отметьте дубли, которые мы планируем объединить с оригиналом.
    5. Анализ ссылающихся объектов:
      • Обработка предоставит нам возможность просмотреть все объекты (документы, регистры, другие справочники), которые ссылаются на выбранные дубли.
      • Мы должны убедиться, что среди этих объектов отображаются наши договоры, привязанные к дублю.
    6. Замена ссылок:
      • После проверки и подтверждения мы инициируем процесс замены ссылок. Обработка заменит все ссылки на дубли в выбранных объектах на ссылки на оригинал.
      • В процессе замены мы можем увидеть прогресс и потенциальные проблемы.
    7. Проверка результата: После завершения замены необходимо тщательно проверить, что все договоры, ранее привязанные к дублю, теперь корректно отображаются у контрагента-оригинала. Мы можем открыть карточку контрагента-оригинала и просмотреть список его договоров, или сформировать отчеты по договорам.
    8. Пометка на удаление: Если замена ссылок прошла успешно, дубли, как правило, автоматически помечаются на удаление. Если нет, мы можем сделать это вручную.

2. Обходной путь через обработку «Удаление помеченных объектов»

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

  1. Пометка дубля на удаление:

    Мы должны вручную пометить контрагента-дубля на удаление. Для этого откроем карточку дубля, найдем кнопку «Еще» или «Действия» и выберем пункт «Пометить на удаление / Снять пометку». Необходимо убедиться, что дубль именно помечен на удаление, а не удален.

  2. Запуск обработки «Удаление помеченных объектов»:

    Перейдем в раздел «Администрирование», найдем пункт «Удаление помеченных объектов» и запустим его. Мы можем выбрать режим «Выборочное удаление» и указать, что хотим удалить помеченные объекты типа «Контрагенты», чтобы не удалять лишнее.

  3. Проверка переноса ссылок:

    Обработка попытается удалить помеченные объекты и, в процессе, перенести все оставшиеся ссылки. После завершения работы обработки мы должны тщательно проверить, перенеслись ли договоры на оригинал. Если проблема с ошибкой 00-00534485 связана именно с этим механизмом, то успех не гарантирован.

  4. Важные замечания:
    • Этот метод является скорее обходным путем и не гарантирует успешного переноса всех ссылок, особенно когда есть известная ошибка в логике конфигурации.
    • Мы должны быть готовы к тому, что после выполнения обработки, некоторые ссылки могут все равно остаться «висячими» или быть неперенесенными. В таком случае потребуется ручная корректировка или использование более мощных инструментов.

3. Разработка собственной обработки

В случае, если ни один из вышеуказанных методов не приводит к желаемому результату, или если мы сталкиваемся с очень специфическими требованиями к переносу данных (например, необходимо перенести не только договоры, но и специфические регистры сведений или изменить данные в документах по определенным правилам), нам, возможно, придется прибегнуть к разработке собственной внешней обработки. Это требует наличия квалифицированного программиста 1С.

Программист сможет:

  1. Написать запрос, который выберет все документы и регистры, ссылающиеся на дубль.
  2. В цикле обойти найденные объекты и программно заменить ссылку на дубль на ссылку на оригинал. Для этого мы будем использовать методы объектов 1С.
  3. При необходимости, внести дополнительные корректировки в данные.
  4. Обеспечить транзакционность операции для сохранения целостности данных.

Пример концепции кода (без учета всех нюансов и ошибок):


// Предполагаем, что "ДубльКонтрагента" - это ссылка на дублирующий контрагент
// "ОригиналКонтрагента" - это ссылка на оригинальный контрагент

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ДоговорыКонтрагентов.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    |    ДоговорыКонтрагентов.Владелец = &ДубльКонтрагента";

Запрос.УстановитьПараметр("ДубльКонтрагента", ДубльКонтрагента);

Выборка = Запрос.Выполнить().Выбрать();

НачатьТранзакцию();
Попытка
    Пока Выборка.Следующий() Цикл
        ОбъектДоговор = Выборка.Ссылка.ПолучитьОбъект();
        ОбъектДоговор.Владелец = ОригиналКонтрагента;
        // Мы можем также изменить другие реквизиты, если это необходимо,
        // например, если в договоре есть явное поле "Контрагент", а не только "Владелец".
        ОбъектДоговор.Записать(); 
    КонецЦикла;

    // После переноса договоров, мы можем пометить дубль на удаление
    ОбъектДубль = ДубльКонтрагента.ПолучитьОбъект();
    ОбъектДубль.ПометкаУдаления = Истина;
    ОбъектДубль.Записать();

    ЗафиксироватьТранзакцию();
Исключение
    ОтменитьТранзакцию();
    Сообщить("Ошибка при переносе договоров: " + ОписаниеОшибки());
КонецПопытки;

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

Общие рекомендации и меры предосторожности

Независимо от выбранного метода, существуют общие правила и рекомендации, которые мы должны соблюдать при работе с удалением и объединением дублей в 1С:

  1. Всегда создавайте резервные копии:

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

  2. Тщательно проверяйте результат:

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

    • Проверку карточки контрагента-оригинала на наличие всех перенесенных договоров и других связанных документов.
    • Формирование отчетов по взаиморасчетам, отгрузкам, оплатам, чтобы убедиться, что финансовые показатели не искажены.
    • Просмотр документов, которые ранее ссылались на дубль, чтобы убедиться, что ссылки в них теперь ведут на оригинал.
  3. Сообщение «Не удалось заменить дубли на оригиналы в некоторых местах использования»:

    Если после работы обработки мы видим такое сообщение, это означает, что в каких-то объектах (документах, регистрах) ссылка на дубль не была заменена. В этом случае нам нужно будет вручную найти и исправить эти ссылки. Обычно, обработка указывает, в каких именно объектах возникли проблемы.

  4. Окончательное удаление помеченных объектов:

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

В нашем случае, учитывая зарегистрированную ошибку в УТ 11.5.11.96, наиболее надежным и контролируемым решением будет использование специализированных инструментов, таких как «Поиск дублей и замена ссылок ИР» из подсистемы «Инструменты разработчика». Эти инструменты предоставляют нам гораздо больше контроля над процессом замены ссылок и позволяют избежать проблем, связанных с некорректной работой стандартного функционала.

← На главную