При интеграции 1С с внешними системами или обработке файлов выгрузки (Excel, CSV, JSON) часто возникает задача идентификации контрагента или партнера по косвенным признакам. Одним из таких признаков является адрес доставки. В конфигурации 1С:Управление торговлей 11.5 (УТ 11.5) контактная информация хранится в специализированных табличных частях, что требует особого подхода к написанию запросов. В этой статье мы подробно разберем, как найти ссылку на партнера, имея лишь текстовую строку адреса.
Прежде всего, проанализируем, где именно в системе хранятся данные об адресах. В УТ 11.5 справочник Партнеры имеет табличную часть КонтактнаяИнформация. Каждая запись в этой таблице содержит несколько важных полей:
Рассмотрим ситуацию: мы получаем из внешнего файла строку, например: "г. Москва, ул. Ленина, д. 10". Нам нужно найти партнера, у которого в карточке заведен точно такой же адрес доставки.
Самый быстрый и очевидный способ, который часто выбирают разработчики — это прямой запрос к табличной части справочника Партнеры. Разберем пример кода, который позволяет получить ссылку на объект по текстовому совпадению представления адреса.
ВЫБРАТЬ
ПартнерыКИ.Ссылка КАК Партнер,
ПартнерыКИ.Представление КАК Адрес
ИЗ
Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКИ
ГДЕ
ПартнерыКИ.Представление ПОДОБНО &АдресСтрока
И ПартнерыКИ.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресДоставкиПартнера)
В данном примере мы используем оператор ПОДОБНО. Если мы уверены в полном совпадении строк, можно использовать оператор равенства =. Однако, как показывает практика, в строках могут присутствовать лишние пробелы или невидимые символы, поэтому ПОДОБНО с использованием спецсимвола "%" иногда бывает надежнее, хотя и медленнее.
Важный нюанс: Обратите внимание на использование группировки. В исходном обсуждении на форуме предлагалось использовать СГРУППИРОВАТЬ ПО, однако, если вы ищете уникальную ссылку и фильтруете по конкретному виду контактной информации, группировка может быть избыточной. Достаточно использовать ВЫБРАТЬ РАЗЛИЧНЫЕ, если у одного партнера по ошибке заведено несколько идентичных адресов.
Современные конфигурации 1С строятся на базе Библиотеки Стандартных Подсистем (БСП). Разработчики БСП уже предусмотрели механизмы для работы с контактной информацией. Вместо написания "сырых" запросов к табличным частям, рекомендуется использовать программный интерфейс общего модуля УправлениеКонтактнойИнформацией.
Рассмотрим, почему это лучше:
Для поиска владельца контактной информации можно проанализировать функции модуля УправлениеКонтактнойИнформациейПоиск. Типовой подход заключается в получении списка ссылок по заданному представлению.
Выясним причину, по которой поиск по адресу может работать медленно. Поле Представление в табличной части не является индексированным. Когда мы выполняем запрос с условием ПОДОБНО %Текст%, СУБД вынуждена выполнить полное сканирование таблицы (Full Scan). Если в базе данных десятки тысяч партнеров, и у каждого по 3-5 записей контактной информации, поиск будет занимать значительное время.
Чтобы оптимизировать этот процесс, проанализируем следующие рекомендации:
Вид. Это значительно сократит количество анализируемых строк, так как система сразу отсеет телефоны, email-адреса и другие нерелевантные типы данных.В современных версиях 1С:УТ 11.5 адрес — это не просто строка, а сложный объект. Он хранится в поле ЗначенияПолей в формате XML (ФИАС/ГАР). Рассмотрим ситуацию: в файле адрес записан как "Москва г, ул Ленина", а в базе — "г. Москва, ул. Ленина". Визуально это один адрес, но для запроса — разные строки.
Чтобы решить эту проблему, проанализируем ситуацию по шагам:
ЗначенияПолей. Это обеспечит 100% точность идентификации.В УТ 11.5 существует также отдельный справочник АдресаДоставки. Важно понимать разницу: контактная информация партнера — это его общие реквизиты, а справочник АдресаДоставки часто используется для хранения конкретных точек разгрузки, связанных с конкретными соглашениями или заказами. Если ваша задача — найти конкретную точку отгрузки, поиск стоит направить именно на этот справочник, а не на табличную часть партнера.
Разберем пример запроса к справочнику адресов доставки:
ВЫБРАТЬ
АдресаДоставки.Владелец КАК Партнер,
АдресаДоставки.Ссылка КАК АдресДоставкиСсылка
ИЗ
Справочник.АдресаДоставки КАК АдресаДоставки
ГДЕ
АдресаДоставки.Наименование ПОДОБНО &АдресИзФайла
И НЕ АдресаДоставки.ПометкаУдаления
Подведем итог нашего анализа. Для разового поиска партнера по адресу в небольшой базе вполне достаточно простого запроса к табличной части КонтактнаяИнформация с фильтром по Виду и Представлению. Однако для надежных и высоконагруженных систем следует придерживаться следующих правил:
СокрЛП и удаляйте лишние символы из строки поиска.Выбрать() и проверяйте Количество()).Таким образом, мы рассмотрели как базовые, так и продвинутые методы решения задачи. Совместное использование стандартных запросов и механизмов БСП позволит вам создать отказоустойчивый механизм идентификации партнеров в 1С:УТ 11.5.