Предыстория
Создавая различные заказные конфигурации «с нуля» на платформе 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.
Демо-конфигурация
Для демонстрации примера подключения и правил работы с внешним адресным классификатором была создана чистая конфигурация, включающая только объекты, которые понадобятся для эффективного подключения обработки к вашей базе. Скачиваемая конфигурация абсолютно открыта, не использует защиту и внешние компоненты, полностью готова к использованию и возможной доработке.
- Создайте новый каталог, например C:\DataBase\ExtDb, и скопируйте в него файлы KLADR.DBF, STREET.DBF и DOMA.DBF, скачав их с сайта ГНИВЦ ФНС (остальные DBF-ки из архива можно удалить) или скопировав из каталога ExtDb рабочей базы «1С: Бухгалтерия 7.7».
- Создайте пустую базу на платформе 8.2 (толстый клиент) и загрузите в неё файл конфигурации KLADR.cf из данной публикации.
- Откройте новую базу в режиме «Предприятие», заполните константу «Путь к КЛАДР» каталогом п.1, нажмите внизу кнопку «Записать», при первом выборе значения константы «Типовой адрес» запустится индексация файлов КЛАДР (статус процесса в строке состояния) и откроется диалог ввода адреса.
- При заполненной константе «Путь к КЛАДР» на старте системы будет открываться уже не форма констант, а список демонстрационного справочника «Адреса», состоящего из одного реквизита неограниченной длины «Адрес». В модуле формы элемента данного справочника собраны все полезные приёмы работы с адресами формата ФНС.
- Описание прочих объектов конфигурации: общие модули «БСП» и «КЛАДР» содержат необходимые типовые процедуры и функции для обработки ввода адреса, из константы «Типовой адрес» подставляется значение при вводе нового адреса (можно ввести туда адрес до вашего города и начинать ввод сразу с улицы) и сама обработка «ВводАдреса» (проверяет и создает индексы, разбирает и собирает адрес через «9 запятых» - в общем смотрите и пользуйтесь).
- Выбираемые из списков элементы КЛАДР дополнительно подсвечиваются одним из трех цветов: черный - наименованию объекта ещё не сопоставлен код из базы (такое бывает при начале редактирования старого адреса или вводе наименования объекта вручную), синий - наименование объекта успешно идентифицировано в базе КЛАДР, красный - выбранный ранее из классификатора объект исправлен (такое бывает при ручном исправлении выбранного наименования или измении вышестоящего элемента адреса при уже выбранных нижестоящих).
Я знаю что...
Данная обработка осознанно отличается по своему поведению от типовых механизмов 7.7 и 8.2 в следующих аспектах:
- Более жёсткая работа с полем «Индекс»: заполняется только если найден в домах или улицах (нет подбора ближайшего).
- Количество индексов и размер CDX-файлов максимально сокращены (своя индексация с префиксом «8»), избыточные заменены на переборы строк с условием, что практически незаметно на современных компьютерах и серверах.
- Убран подбор городов и населенных пунктов среди всех районов выбранного региона: только прямое подчинение по структуре кодов КЛАДР (можете доработать, включая анализ и обработку поля «STATUS»).
- Рекурсия по объектам адресации разорвана и структурирована в угоду читабельности и лёгкости доработки кода.
- Версии обработки на управляемых формах нет и не планируется, клиент-сервер встанет без особых доработок.
- Файлы ALTNAMES.DBF и SOCRBASE.DBF не используются: только актуальные адреса, только DOS-кодировка КЛАДР.
- Используемые файлы KLADR.DBF, STREET.DBF и DOMA.DBF сразу открываются на чтение при открытии формы обработки (готовьте оперативную память), но ошибок блокировки при одновременном вводе адресов различными пользователями и из разных баз не выявлено.
Заключение
Данный проект безусловно будет шлифоваться и дорабатываться, поэтому прошу без лишней необходимости не клонировать данную публикацию при добавлении мелких улучшений, лучше обратитесь к автору и вышлите мне ваше видение каких-либо моментов. Я обязательно их включу в новую версию обработки и выложу для общего использования в данной публикации.