Как найти партнера по адресу доставки в 1С:Управление торговлей 11.5?

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

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

Постановка задачи и анализ структуры данных

Прежде всего, проанализируем, где именно в системе хранятся данные об адресах. В УТ 11.5 справочник Партнеры имеет табличную часть КонтактнаяИнформация. Каждая запись в этой таблице содержит несколько важных полей:

  1. Тип — определяет категорию информации (адрес, телефон, электронная почта).
  2. Вид — уточняет назначение (например, "Юридический адрес", "Фактический адрес" или интересующий нас "Адрес доставки").
  3. Представление — текстовая строка адреса, которую видит пользователь.
  4. ЗначенияПолей — структурированные данные адреса в формате XML или JSON (в зависимости от версии БСП).

Рассмотрим ситуацию: мы получаем из внешнего файла строку, например: "г. Москва, ул. Ленина, д. 10". Нам нужно найти партнера, у которого в карточке заведен точно такой же адрес доставки.

Решение проблемы с помощью запроса к табличной части

Самый быстрый и очевидный способ, который часто выбирают разработчики — это прямой запрос к табличной части справочника Партнеры. Разберем пример кода, который позволяет получить ссылку на объект по текстовому совпадению представления адреса.


ВЫБРАТЬ
    ПартнерыКИ.Ссылка КАК Партнер,
    ПартнерыКИ.Представление КАК Адрес
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКИ
ГДЕ
    ПартнерыКИ.Представление ПОДОБНО &АдресСтрока
    И ПартнерыКИ.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресДоставкиПартнера)

В данном примере мы используем оператор ПОДОБНО. Если мы уверены в полном совпадении строк, можно использовать оператор равенства =. Однако, как показывает практика, в строках могут присутствовать лишние пробелы или невидимые символы, поэтому ПОДОБНО с использованием спецсимвола "%" иногда бывает надежнее, хотя и медленнее.

Важный нюанс: Обратите внимание на использование группировки. В исходном обсуждении на форуме предлагалось использовать СГРУППИРОВАТЬ ПО, однако, если вы ищете уникальную ссылку и фильтруете по конкретному виду контактной информации, группировка может быть избыточной. Достаточно использовать ВЫБРАТЬ РАЗЛИЧНЫЕ, если у одного партнера по ошибке заведено несколько идентичных адресов.

Профессиональный подход: использование функций БСП

Современные конфигурации 1С строятся на базе Библиотеки Стандартных Подсистем (БСП). Разработчики БСП уже предусмотрели механизмы для работы с контактной информацией. Вместо написания "сырых" запросов к табличным частям, рекомендуется использовать программный интерфейс общего модуля УправлениеКонтактнойИнформацией.

Рассмотрим, почему это лучше:

  1. Обновляемость: Если фирма "1С" решит изменить структуру хранения КИ (например, вынесет её в отдельный регистр сведений, что уже сделано в некоторых версиях), ваш код на БСП продолжит работать, а прямой запрос к табличной части придется переписывать.
  2. Нормализация: Методы БСП позволяют более корректно сравнивать адреса, учитывая их внутреннюю структуру.

Для поиска владельца контактной информации можно проанализировать функции модуля УправлениеКонтактнойИнформациейПоиск. Типовой подход заключается в получении списка ссылок по заданному представлению.

Проблема производительности и оператор ПОДОБНО

Выясним причину, по которой поиск по адресу может работать медленно. Поле Представление в табличной части не является индексированным. Когда мы выполняем запрос с условием ПОДОБНО %Текст%, СУБД вынуждена выполнить полное сканирование таблицы (Full Scan). Если в базе данных десятки тысяч партнеров, и у каждого по 3-5 записей контактной информации, поиск будет занимать значительное время.

Чтобы оптимизировать этот процесс, проанализируем следующие рекомендации:

Обработка структурированных адресов

В современных версиях 1С:УТ 11.5 адрес — это не просто строка, а сложный объект. Он хранится в поле ЗначенияПолей в формате XML (ФИАС/ГАР). Рассмотрим ситуацию: в файле адрес записан как "Москва г, ул Ленина", а в базе — "г. Москва, ул. Ленина". Визуально это один адрес, но для запроса — разные строки.

Чтобы решить эту проблему, проанализируем ситуацию по шагам:

  1. Приведение к формату: Перед поиском попробуйте нормализовать адрес из файла. Можно использовать функции БСП для разбора строки в структуру адреса.
  2. Поиск по идентификатору: Если во внешнем файле есть уникальный идентификатор ФИАС (GUID дома или улицы), поиск следует вести именно по нему в поле ЗначенияПолей. Это обеспечит 100% точность идентификации.

Использование справочника "Адреса доставки"

В УТ 11.5 существует также отдельный справочник АдресаДоставки. Важно понимать разницу: контактная информация партнера — это его общие реквизиты, а справочник АдресаДоставки часто используется для хранения конкретных точек разгрузки, связанных с конкретными соглашениями или заказами. Если ваша задача — найти конкретную точку отгрузки, поиск стоит направить именно на этот справочник, а не на табличную часть партнера.

Разберем пример запроса к справочнику адресов доставки:


ВЫБРАТЬ
    АдресаДоставки.Владелец КАК Партнер,
    АдресаДоставки.Ссылка КАК АдресДоставкиСсылка
ИЗ
    Справочник.АдресаДоставки КАК АдресаДоставки
ГДЕ
    АдресаДоставки.Наименование ПОДОБНО &АдресИзФайла
    И НЕ АдресаДоставки.ПометкаУдаления

Резюме и рекомендации

Подведем итог нашего анализа. Для разового поиска партнера по адресу в небольшой базе вполне достаточно простого запроса к табличной части КонтактнаяИнформация с фильтром по Виду и Представлению. Однако для надежных и высоконагруженных систем следует придерживаться следующих правил:

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

← На главную