Каждый кадровый специалист или бухгалтер, занимающийся массовым вводом данных сотрудников в программе 1С:Зарплата и управление персоналом (ЗУП) 3.1, сталкивался с рутинным заполнением адресов. В идеальной ситуации достаточно ввести первые буквы названия улицы, и система мгновенно предлагает нужный вариант — для этого подойдёт расширение для быстрого поиска и автоподбора в полях ввода 1С. Однако на практике пользователи часто сталкиваются со странным поведением классификатора: для одних городов улицы ищутся мгновенно, а для других (например, Новокузнецк в Кемеровской области) программа упорно отказывается показывать улицы, пока вручную не будет выбран конкретный внутригородской район или территория.
В этой статье мы подробно разберем, почему возникает такое различие в поведении программы для разных городов одного и того же региона, изучим внутреннюю архитектуру адресных реестров и рассмотрим эффективные практические способы решения этой проблемы, которые помогут значительно ускорить вашу работу.
Для начала давайте выясним причину такого поведения системы. Разница при вводе адресов в разных городах (например, в Кемерово и Новокузнецке) кроется не в ошибках самой конфигурации 1С, а в структуре данных, поступающих из Государственного адресного реестра (ГАР), который полностью заменил старый формат ФИАС.
Сведения в ГАР вносят местные органы власти (муниципалитеты) каждого конкретного населенного пункта. При этом они используют разные подходы к построению иерархии адресных объектов:
В результате для поиска улицы в Новокузнецке кадровику приходится совершать лишнее действие — выбирать район. При массовом вводе десятков сотрудников в день это критически замедляет работу.
Проанализируем первый и самый простой способ исправления ситуации непосредственно в форме ввода адреса. В формате ГАР предусмотрено два типа деления территорий Российской Федерации:
Муниципальное деление в современном реестре ГАР является приоритетным и зачастую проработано местными властями гораздо качественнее. Если при вводе адреса у вас возникают сложности с поиском улиц, выполните следующие шаги:
Если вы загружаете адресный классификатор локально на компьютер или сервер организации, поиск происходит по жестко проиндексированным таблицам вашей базы данных. При этом локальный индекс не всегда оперативно и гибко обрабатывает сложные иерархические связи.
Разберем, как решить эту проблему кардинально с помощью облачных технологий. Фирма «1С» предоставляет отличную альтернативу — веб-сервис для работы с адресами в режиме онлайн. Облачный поисковый движок работает по иным алгоритмам: он поддерживает сквозной полнотекстовый поиск по всей базе ГАР, игнорируя строгую иерархию при первичном вводе.
Чтобы активировать этот режим, нам понадобятся права администратора системы:
После включения веб-сервиса при вводе адреса система начнет обращаться напрямую к серверам «1С». Теперь при вводе названия города и первых букв улицы поисковая машина сама найдет нужную улицу и автоматически подтянет правильный район, избавив вас от необходимости выбирать его вручную.
Если у вас нет возможности включить онлайн-сервис (например, рабочие места изолированы от интернета из соображений безопасности), рассмотрим очень эффективный практический лайфхак. Порядок заполнения полей в форме адреса имеет решающее значение для алгоритмов автозаполнения.
Давайте попробуем выполнить ввод в следующей последовательности:
Enter или перейдите в поле ввода улицы.Что произошло? Программа 1С по введенному индексу мгновенно определяет регион, населенный пункт и, что самое главное, автоматически заполняет скрытое или явное поле «Район» (территорию), к которой привязан данный индекс. После этого вам остается только ввести название улицы и номер дома — ручной выбор района больше не потребуется.
Иногда некорректное поведение поиска связано с тем, что при обновлении классификатора или релиза программы внутренние индексы адресных сведений в базе данных 1С:Предприятие были построены с ошибками. В этом случае мы можем наблюдать зависания программы или полное отсутствие улиц в списке.
Давайте разберем по шагам, как полностью обновить и переиндексировать проблемный регион:
/ClearCache или вручную удалив временные папки пользователя в %AppData%\1C\1Cv8).Если вы хотите глубже понять, как 1С работает с адресными объектами программно, или разрабатываете собственную обработку для загрузки сотрудников, обратите внимание на структуру хранения данных. Вся информация об адресах хранится в регистрах сведений адресного классификатора (например, РегистрСведений.АдресныеОбъекты).
Ниже приведен пример запроса на языке 1С, который позволяет проанализировать подчиненность конкретной улицы в базе данных и выявить, к какому именно родителю (городу или внутригородскому району) она привязана:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АдресныеОбъекты.Наименование КАК Улица,
| АдресныеОбъекты.ТипОбъекта КАК ТипУлицы,
| РодительскийОбъект.Наименование КАК Родитель,
| РодительскийОбъект.ТипОбъекта КАК ТипРодителя
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект
| ПО АдресныеОбъекты.РодительИдентификатор = РодительскийОбъект.Идентификатор
|ГДЕ
| АдресныеОбъекты.Наименование ПОДОБНО &ИмяУлицы
| И АдресныеОбъекты.КодСубъектаРФ = &КодРегиона";
Запрос.УстановитьПараметр("ИмяУлицы", "%Ленина%");
Запрос.УстановитьПараметр("КодРегиона", "42"); // Кемеровская область
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Здесь мы можем проанализировать иерархию в технологических целях
КонецЦикла;
КонецЕсли;
Этот код наглядно показывает, что поиск элементов напрямую завязан на поле РодительИдентификатор. Если в структуре ГАР родителем улицы назначен район города, то при программном поиске без указания этого родительского идентификатора стандартные методы БСП (Библиотеки стандартных подсистем) могут возвращать пустой результат.
Подводя итоги, дадим несколько ключевых рекомендаций для оптимизации работы с адресами в 1С:ЗУП 3.1: