Как внести улицу, которой нет в КЛАДР?

Использование адресного классификатора позволяет быстро и, самое главное, правильно заполнять российские адреса. Рассмотрим подсистему подробнее.

Предназначение подсистемы
Кладр и фиас
Настройка подсистемы
Загрузка адресного классификатора
Очистка адресного классификатора
Процедуры и функции для работы с адресным классификатором
Роли для работы с адресным классификатором

Предназначение подсистемы

Адресный классификатор используется для заполнения контактной информации с типом Адрес. Функционал подсистемы обеспечивает загрузку, хранение и предоставление информации о российских адресах.

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

Кладр и фиас

На текущий момент наиболее известными базами данных с адресными классификаторами являются КЛАДР и ФИАС.

КЛАДР (классификатор адресов России) — ведомственный классификатор ФНС России. Описание и обновления базы находятся на сайте ФГУП ГНИВЦ.

ФИАС (федеральная информационная адресная система) — единый государственный адресный реестр. В соответствии с Федеральным законом от 28.12.2013 № 443-ФЗ (действует с 1 июля 2014 года) все государственные и муниципальные организации обязаны использовать ФИАС в качестве единой базы адресов. Описание и обновления базы находятся здесь.

Свежие версии БСП (Библиотека стандартных подсистем) используют в качестве источника данных базу ФИАС.

По сравнению с КЛАДР ФИАС позволяет хранить дополнительные уровни и ориентиры адресных объектов: округ, внутригородской район, ОКАТО, ОКМО, территориальный код ФНС и др. Заполнение ФИАС производилось на основании данных из КЛАДР, поэтому все ошибки и неточности были перенесены в новый адресный классификатор.

В связи с обязательным использованием ФИАС в качестве адресного классификатора, ФНС приняло решение прекратить поддержку КЛАДР с 31 декабря 2017 года.

Настройка подсистемы

Настройка подсистемы «Адресный классификатор» осуществляется в разделе НСИ и Администрирование ⇒ Поддержка и обслуживание ⇒ Адресный классификатор. В некоторых конфигурациях вместо раздела «НСИ и Администрирование» используется «Администрирование«. Здесь можно:

  • Выбрать вариант работы подсистемы;
  • Загрузить/обновить адресный классификатор;
  • Очистить адресный классификатор.

Существует два варианта работы подсистемы:

  • С использованием Web-сервиса;
  • Загрузка данных в базу 1С.

При наличии постоянного устойчивого соединения с Интернет возможно не загружать в базу адресный классификатор, а использовать для ввода и проверки адресов Web-сервис, предоставленный фирмой 1С. Для использования этой возможности необходимо указать регистрационные данные подписки ИТС.

Как внести улицу, которой нет в КЛАДР?

Загрузка адресного классификатора

Загрузить адресный классификатор ФИАС в базу 1С можно:

  • С Web-сайта 1С (необходима подписка на ИТС);
  • Из папки на диске.
  • Как внести улицу, которой нет в КЛАДР?
  • Загрузить файлы ФИАС на свой компьютер можно с:
  • При загрузке адресного классификатора можно выбрать только те регионы, которые будут использоваться.
  • После нажатия кнопки «Загрузить адресные сведения» сначала будет выведено окно с отображением процесса загрузки, а после окно с результатом загрузки.
  • Как внести улицу, которой нет в КЛАДР?Как внести улицу, которой нет в КЛАДР?

Очистка адресного классификатора

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

Как внести улицу, которой нет в КЛАДР?

Процедуры и функции для работы с адресным классификатором

Приведу некоторые основные процедуры и функции для работы с адресным классификатором.

  1. // Проверка загруженности адресного классификатора
    // Возвращает Истина, если загружена информация хотя бы по одному региону
    Результат = АдресныйКлассификатор.КлассификаторЗагружен();
  2. // Возвращает количество регионов с загруженными данными
    Результат = АдресныйКлассификатор.КоличествоЗагруженныхРегионов();
  3. // Возвращает таблицу значений с информацией обо всех субъектах РФ (как загруженных, так и нет)
    Результат = АдресныйКлассификатор.КлассификаторСубъектовРФ();
  4. // Возвращает код региона по наименованию
    Результат = АдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеРегиона);
  5. // Возвращает наименование и сокращение региона по коду
    Результат = АдресныйКлассификатор.НаименованиеРегионаПоКоду(КодСубъектаРФ);
  6. // Открывает форму загрузки адресного классификатора
    АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(Параметры);

Описаны далеко не все методы работы с адресным классификатором, а только основные. Методы анализа адреса здесь не описаны, т.к. относятся к подсистеме «Контактная информация«.

Роли для работы с адресным классификатором

Для работы с адресным классификатором используются роли:

  • Чтение базовой НСИ — дает право просмотра и подбора адресных сведений в объектах программы;
  • Добавление и изменение адресных сведений — дает право изменения адресных сведений.

Остались вопросы?
Спросите в х к статье.

Смотри также:

Добавление документа в отчет «Связанные документы»
Как хранить пароли в базе 1С
Библиотека стандартных подсистем

Как легко заполнить адрес без ошибок? Интеграция с сервисом kladr-api.ru | Статья

Опубликовано: 26 октября 2018 в 12:30

24 5

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

Процесс заполнения адреса может быть довольно трудоемким. Дополнительно существует риск, что адрес будет внесен ошибочно в следствие человеческого фактора. Это обуславливается отсутствием централизованной базы адресов, вроде ФИАС или КЛАДР, в поставке DIRECTUM.

К счастью, в интернете существует довольно много сервисов, которые предоставляют возможность подбирать адрес по ключевым словам. Одним из таких является сервис kladr-api.ru. Он дает возможность производить поиск города, улицы, номера дома. Также сервис является бесплатным для некоммерческого использования.

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

Читайте также:  Может ли ИП на ПСН заключить договор комиссии на реализацию товара?

Как внести улицу, которой нет в КЛАДР?

Рисунок 1 Выбор улицы

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

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

Остается только чуть доработать под необходимую пользователю логику, например, подстановку в реквизит.

Как внести улицу, которой нет в КЛАДР?

Рисунок 2 Выбор номера строения

Бесплатная версия сервиса имеет ограничение – 100000 запросов в день. Разработчики объясняют это заботой о производительности системы. Помимо этого, в ходе работы над диалогом я выяснил, что в запросе возвращается не более 400 строк. Поэтому список номеров строений может быть не полным. В этом случае пользователь может ввести номер строения самостоятельно.

Как внести улицу, которой нет в КЛАДР?

Рисунок 3 Результат работы.

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

Прикреплен файл: Интеграция с kladr-api_ru.zip

Алгоритм привязки строк к КЛАДР

   Рассмотрим подробнее условие предыдущей задачи: нужно разработать алгоритм привязки адресной информации, набранной пользователями вручную как попало — к фиксированному классификатору адресов КЛАДР.

   Для того, чтобы вы лучше представили себе качество исходных данных, приведу пример из строчек, которым я нашел соответствие вручную:

Текстовые данные Соответствующая запись КЛАДРа
г Елец УЛ МАРКСА 34 399774 Липецкая обл, Елецкий р-н, г Елец, ул К.Маркса
Г ЛEБEДЯHЬ ЕЛЕЦКАЯ Здание магазина 399610 Липецкая обл, Лебедянский р-н, г Лебедянь, ул Елецкая
Добринский район Талицкий Чамлык — ул. Советская д 46 399450 Липецкая обл, Добринский р-н, с Талицкий Чамлык
ЛИПЕЦКАЯ ОБЛАСТЬ ИЗМАЛКОВСКИЙ Р-Н СЕЛО ПРЕОБРАЖЕНИЕ 399012 Липецкая обл, Измалковский р-н, с Преображенье
Липецк г. район Цемзавода 398000 Липецкая обл, г Липецк
ДОБРОВСКИЙ Р-Н.С Б ХОМУТЕЦ 399148 Липецкая обл, Добровский р-н, с Большой Хомутец (не путать с Малым Хомутцом)
ЛИПЕЦК Г ,ПОБЕДЫ ПР,21 398024 Липецкая обл, г Липецк, пр-кт Победы (не путать с площадью Победы)

   Итак, каким же образом столь корявой, хаотичной, иногда избыточной, иногда недостаточной информации можно поставить в соответствие единственную правильную строчку из справочника? Вот такой алгоритм напрашивается изначально:   Алгоритм 1.

   0. Приводим все строчки к одинаковому регистру букв (строчному и заглавному).

   1. Сначала надо разобраться со знаками препинания. Как показывает практика, запятые и точки в адресах ставятся как попало, зачастую они заменяют и друг дружку, и пробел. Например «Г.ЛИПЕЦК,УЛ. НЕДЕЛИНА«. То же самое с некоторой натяжкой можно сказать и про дефис.

Однако, если мы просто удалим точки и запятые из строк — слова сольются и у нас получится «ГЛИПЕЦКУЛ НЕДЕЛИНА» — поэтому вместо удаления, заменяем их на пробелы: «Г ЛИПЕЦК УЛ__НЕДЕЛИНА» А чтобы после такой замены не было разночтений, заменям в строке все сдвоенные пробелы на одинарные: «Г ЛИПЕЦК УЛ НЕДЕЛИНА«.

   2. Теперь надо очистить строки от мусора — то есть, от тех элементов, которые будут мешаться сравнению. В первую очередь, это адресные идентификаторы «с«, «село«, «г«, «ул» — и другие.

Они мешаются, потому что мы никогда не сможем упорядочить, чтобы «ул» стояло перед своим названием, в не после него. Тот же самый «район» можно написать как «район«, «р-он» или «р-н«.

Каким же образом можно выделить из строк «мешающиеся» элементы?

   Вариант 2.1 — завести перечень адресных сокращений, и удалять совпадающие с ними части строк. Правда, как этот перечень составить? Например, официальный классификатор, поставляющийся вместе с КЛАДРом содержит только единственный вариант написания слова «район»: «р-н«.

Читайте также:  Порядок расчёта взносов ИП на УСН Доходы минус расходы пересмотрят

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

   Замечу, что просто так «вслепую» удалять сокращения из строк нельзя — надо производить удаление только целых слов, в том числе расположенных в начале или в конце строки — иначе вы рискуете лишиться всех букв «г» и «с«, встречавшихся в адресе.

   Вариант 2.2 — удалить все слова меньшие определенной длины. Этот вариант хотя и проще (не нужно возиться со справочниками) — но здесь теряется слишком много полезной информации, и остаётся слишком много мусора. Даже если мы удалим все слова, длиной меньше пяти символов, мы напрочь потеряем «ул. 9 мая«, зато оставим слова «район» и «поселок«.

   3. В каждой строке КЛАДРа присутствует индекс (например «398001«), а в исходной адресной информации индекс отсутствует. Значит, перед сравнением строк индекс нужно удалить.

Зато в исходной информации присутствуют номера домов (например «55» или «32А«), которых, естественно нет в КЛАДРе. Значит, номера домов тоже нужно удалить.

Напрашивается решение — удалить все слова, начинающиеся с цифры.

   Правда, это может сделать для нас одинаковыми улицы «ул. 1-я садовая» и «ул. 2-я садовая«. Или улицы «30 лет октября» и «40 лет октября» — да, да, в одном городе! 🙂 Будем считать это погрешностью алгоритма.

   4. Но и это еще не всё. К сожалению, то что принято считать номером дома, не обязательно начинается с цифры. В примерах мы видим, что в качестве номеров домов могут выступать надписи «Здание магазина» или «Район цемзавода«.

Почему они считаются номерами домов? Потому что про них ничего не в КЛАДРе. Текст, который идёт до них — задает общеизвестный населенный пункт, территорию или улицу, а правая часть надписи лишь расшифровывает, уточняет адрес.

Иными словами, текст адреса может содержать справа сколь угодно большой объем дополнительной информации, не привязанной к КЛАДРу.

   К сожалению, про КЛАДР можно сказать то же самое: он может содержать дополнительную информацию слева. И дело даже не в индексе и названии области — «399774 Липецкая обл» — их всегда можно искуственно удалить. Дело в названии района.

Очень часто при вводе данных руками, районные центры указываются без указания района, к которому они относятся — дескать, что тут непонятного?! Вот и получается: у нас «г. Елец«, а в КЛАДРе — «Елецкий р-н, г. Елец«. В то же время, информацию о районе удалять из адресной строки нельзя.

Например, «деревня Ивановка» у нас есть практически в каждом районе области.

   5. Таким образом, мы приходим к выводу, что соответствие нужно устанавливать между левой частью строки адреса и правой частью записи КЛАДРа. Например, для адреса «г. Лебедянь ул. Елецкая — Здание магазина«, это будет соответствие между строкой «лебедянь елецкая здание магазина»

и записью — «липецкая лебедянский лебедянь елецкая

KLADR: Ввод адреса по классификатору адресов КЛАДР (ExtDb для 8.2)

Всё новое — это хорошо забытое старое!
Представляю оригинальную версию обработки для ввода адреса из КЛАДР в конфигурациях 8.2 (только толстый клиент) без использования типового регистра сведений «Адресный классификатор».

Как многим известно, в замечательной программе «1С: Бухгалтерия 7.7» ввод адресов производится из внешних DBF-файлов, свободно скачиваемых с сайта ФНС или диска ИТС в каталог ExtDb рабочей базы.

С помощью данной обработки вы сможете легко подключить и обновлять внешний КЛАДР для неограниченного количества своих баз меньше чем за одну минуту.

Создавая различные заказные конфигурации «с нуля» на платформе v8 я столкнулся с необходимостью подключения адресного классификатора для ввода юридического и фактического адресов фирм и контрагентов, адресов доставки и т.п.

Не изобретая велосипед, я использовал регистр сведений и нужные ему процедуры подсистемы «Адресный классификатор» из типовой конфигурации, загружал файлы КЛАДР в базу и всё работало.

Недостатком такой системы была очень долгая первичная загрузка и еще более длительное обновление данных в регистре сведений «Адресный классификатор», необходимость это делать отдельно в каждой рабочей базе, а также значительное увеличение объема баз и ежедневных архивов за счет данных, не являющихся учетными для предприятия.

Читайте также:  Поставщиков заставят отчитываться о доходах и расходах по госконтрактам

Каждый раз я с ностальгией вспоминал, что в старенькой «семёрке» достаточно было распаковать свежий архив с КЛАДР в каталог ExtDb одной базы, за пару минут проиндексировать DBF-ки, просто раскидать полученные файлы по другим базам и всё работало также быстро и надежно как теперь в «восьмёрке». Безуспешно поискав подобное типовое решение от 1С и не найдя ничего похожего здесь на Инфостарте, я принял решение изучить проблему и всё сделать самому.

Как это было

Для начала была скачана последняя версия КЛАДР и вся техническая документация по нему со страницы ФГУП ГНИВЦ ФНС России (в дальнейшем обновления базы данных классификатора можно тоже качать отсюда).

Документация была изучена, DBF-файлы визуально пощупаны с помощью программы winDBFview (в частности с помощью встроенной функции работы с КЛАДР). Далее были изучены схемы организации ввода адреса в типовых «1С: Бухгалтерии 7.7 ред. 4.

5» и «Библиотеке стандартных подсистем ред. 2.1». Огромную благодарность выражаю авторам обработки альтернативного ввода адреса для 7.7: //expert.chistov.pro/public/61447/ и //expert.chistov.pro/public/82114/ (некоторые идеи были взяты для каркаса моей разработки).

В итоге собрав всё лучшее и отбросив наиболее непонятное была создана предлагаемая вашему вниманию обработка под 8.2.

Демо-конфигурация

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

  1. Создайте новый каталог, например C:DataBaseExtDb, и скопируйте в него файлы KLADR.DBF, STREET.DBF и DOMA.DBF, скачав их с сайта ГНИВЦ ФНС (остальные DBF-ки из архива можно удалить) или скопировав из каталога ExtDb рабочей базы «1С: Бухгалтерия 7.7».
  2. Создайте пустую базу на платформе 8.2 (толстый клиент) и загрузите в неё файл конфигурации KLADR.cf из данной публикации.
  3. Откройте новую базу в режиме «Предприятие», заполните константу «Путь к КЛАДР» каталогом п.1, нажмите внизу кнопку «Записать», при первом выборе значения константы «Типовой адрес» запустится индексация файлов КЛАДР (статус процесса в строке состояния) и откроется диалог ввода адреса.
  4. При заполненной константе «Путь к КЛАДР» на старте системы будет открываться уже не форма констант, а список демонстрационного справочника «Адреса», состоящего из одного реквизита неограниченной длины «Адрес». В модуле формы элемента данного справочника собраны все полезные приёмы работы с адресами формата ФНС.
  5. Описание прочих объектов конфигурации: общие модули «БСП» и «КЛАДР» содержат необходимые типовые процедуры и функции для обработки ввода адреса, из константы «Типовой адрес» подставляется значение при вводе нового адреса (можно ввести туда адрес до вашего города и начинать ввод сразу с улицы) и сама обработка «ВводАдреса» (проверяет и создает индексы, разбирает и собирает адрес через «9 запятых» — в общем смотрите и пользуйтесь).
  6. Выбираемые из списков элементы КЛАДР дополнительно подсвечиваются одним из трех цветов: черный — наименованию объекта ещё не сопоставлен код из базы (такое бывает при начале редактирования старого адреса или вводе наименования объекта вручную), синий — наименование объекта успешно идентифицировано в базе КЛАДР, красный — выбранный ранее из классификатора объект исправлен (такое бывает при ручном исправлении выбранного наименования или измении вышестоящего элемента адреса при уже выбранных нижестоящих).  

Я знаю что…

Данная обработка осознанно отличается по своему поведению от типовых механизмов 7.7 и 8.2 в следующих аспектах:

  1. Более жёсткая работа с полем «Индекс»: заполняется только если найден в домах или улицах (нет подбора ближайшего).
  2. Количество индексов и размер CDX-файлов максимально сокращены (своя индексация с префиксом «8»), избыточные заменены на переборы строк с условием, что практически незаметно на современных компьютерах и серверах.
  3. Убран подбор городов и населенных пунктов среди всех районов выбранного региона: только прямое подчинение по структуре кодов КЛАДР (можете доработать, включая анализ и обработку поля «STATUS»).
  4. Рекурсия по объектам адресации разорвана и структурирована в угоду читабельности и лёгкости доработки кода.
  5. Версии обработки на управляемых формах нет и не планируется, клиент-сервер встанет без особых доработок.
  6. Файлы ALTNAMES.DBF и SOCRBASE.DBF не используются: только актуальные адреса, только DOS-кодировка КЛАДР.
  7. Используемые файлы KLADR.DBF, STREET.DBF и DOMA.DBF сразу открываются на чтение при открытии формы обработки (готовьте оперативную память), но ошибок блокировки при одновременном вводе адресов различными пользователями и из разных баз не выявлено.

Заключение

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

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *