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: //infostart.ru/public/61447/ и //infostart.ru/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 сразу открываются на чтение при открытии формы обработки (готовьте оперативную память), но ошибок блокировки при одновременном вводе адресов различными пользователями и из разных баз не выявлено.

Заключение

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

12 Comments

  1. madonov
    Вот так, с помощью нехитрых приспособлений буханку белого (или черного) хлеба можно превратить в троллейбус… но зачем?

    Плюс за усердие)

    Reply
  2. Хряк

    Браво! Очень полезная весчь! Спасибо.

    Reply
  3. kapustinag

    Сложные чувства…

    С одной стороны — да, базы и бэкапы распухают из-за КЛАДР; да, надо периодически подгружать новый КЛАДР.

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

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

    Reply
  4. Chastiser

    (3) kapustinag, данное решение действительно больше для самописных (обидно когда КЛАДР занимает в базе столько же места, сколько учетные данные солидной торгово-производственной компании за 5 лет). Но поскольку вход и выход для внешнего КЛАДРа это всего лишь одна строчка кода с передачей (можно во внешнюю обработку) заполняемого элемента формы, то изменения типовых не такие уж и критические для дальнейшего обновления.

    Reply
  5. nistelrock

    Может кому пригодится, вот тут можно подписаться на обновления КЛАДР

    Reply
  6. hibico

    (+) за решение.

    Жаль, что поздно увидел публикацию.

    Сам прикручивал Классификатор по принципу Типовых на регистре.

    Был шокирован, когда после загрузки Классификатора объем базы вырос почти на 1.5 гига при объеме DBF-ов в 300 метров.

    Посмотрел демку. В моем случае переделка будет достаточно трудоемка. Но в будущем может пригодиться.

    Reply
  7. zzz_natali

    Совершенно несъедобный подход. Зачем править типовую конфу? Если на то пошло, то идти по пути некой базы(внешней обработки)-сателлита, которая могла бы вводить адрес со всеми существующими штатными вкусностями: на лету фильтровать и предлагать вводить наименования по первым буквам и копировать в буфер обмена, из которого уже можно копировать в рабочую базу, не трогая регистр сведений адресный классификатор

    Reply
  8. CrazyIgi

    Идея интересная, взял на вооружение.

    Планируется ли реализация на управлямых формах?

    Reply
  9. Chastiser

    (8) Спасибо. На управляемых формах делать пока нет надобности. Тут показан только сам подход, а оформление каждый сам доработает под себя при желании.

    Reply
  10. CeHbKA

    Спасибо Вам большое

    Reply
  11. AleksLeo

    Все Ок! Но есть проблема. При наборе по буквам не высвечивается список выбора и затирается сразу первая набранная буква. Что это?

    Reply
  12. user819046

    А можно сразу использовать dadata.ru. Поддерживается и КЛАДР и ФИАС (очень поможет при переходе, когда в 2018 году КЛАДР перестанет поддерживаться). Есть 10 000 бесплатных запросов в сутки.

    Reply

Leave a Comment

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