gifts2017

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

Опубликовал Андрей Зиненко (Chastiser) в раздел Печать - Классификаторы

Всё новое - это хорошо забытое старое!
Представляю оригинальную версию обработки для ввода адреса из КЛАДР в конфигурациях 8.2 (только толстый клиент) без использования типового регистра сведений «Адресный классификатор». Как многим известно, в замечательной программе «1С: Бухгалтерия 7.7» ввод адресов производится из внешних DBF-файлов, свободно скачиваемых с сайта ФНС или диска ИТС в каталог ExtDb рабочей базы. С помощью данной обработки вы сможете легко подключить и обновлять внешний КЛАДР для неограниченного количества своих баз меньше чем за одну минуту.

Предыстория

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

Как это было

Для начала была скачана последняя версия КЛАДР и вся техническая документация по нему со страницы ФГУП ГНИВЦ ФНС России (в дальнейшем обновления базы данных классификатора можно тоже качать отсюда). Документация была изучена, DBF-файлы визуально пощупаны с помощью программы winDBFview (в частности с помощью встроенной функции работы с КЛАДР). Далее были изучены схемы организации ввода адреса в типовых «1С: Бухгалтерии 7.7 ред. 4.5» и «Библиотеке стандартных подсистем ред. 2.1». Огромную благодарность выражаю авторам обработки альтернативного ввода адреса для 7.7: http://infostart.ru/public/61447/ и http://infostart.ru/public/82114/ (некоторые идеи были взяты для каркаса моей разработки). В итоге собрав всё лучшее и отбросив наиболее непонятное была создана предлагаемая вашему вниманию обработка под 8.2.

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

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

  1. Создайте новый каталог, например C:\DataBase\ExtDb, и скопируйте в него файлы 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 сразу открываются на чтение при открытии формы обработки (готовьте оперативную память), но ошибок блокировки при одновременном вводе адресов различными пользователями и из разных баз не выявлено.

Заключение

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Демо-конфигурация
.cf 36,06Kb
19.06.15
109
.cf 36,06Kb 109 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

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

Плюс за усердие)
2. Саша (Хряк) 06.06.13 19:08
Браво! Очень полезная весчь! Спасибо.
3. Александр Капустин (kapustinag) 07.06.13 09:05
Сложные чувства...
С одной стороны - да, базы и бэкапы распухают из-за КЛАДР; да, надо периодически подгружать новый КЛАДР.
С другой стороны - ради внешнего КЛАДР включили возможность изменения конфигурации, и платим за это каждый раз увеличением трудоемкости обновления. Кроме того, дополнительный сетевой ресурс с этим внешним КЛАДРом - туда надо давать права, обслуживать.
В-общем, за все нужно платить. Так как дисковое пространство постоянно дешевеет, то для многих ответ все-таки будет - не трогать типовой КЛАДР. Ну а в самописных или сильно измененных конфигурациях - хорошее решение, согласен.
4. Андрей Зиненко (Chastiser) 07.06.13 10:00
(3) kapustinag, данное решение действительно больше для самописных (обидно когда КЛАДР занимает в базе столько же места, сколько учетные данные солидной торгово-производственной компании за 5 лет). Но поскольку вход и выход для внешнего КЛАДРа это всего лишь одна строчка кода с передачей (можно во внешнюю обработку) заполняемого элемента формы, то изменения типовых не такие уж и критические для дальнейшего обновления.
5. Сергей Денисов (nistelrock) 13.12.13 23:07
Может кому пригодится, вот тут можно подписаться на обновления КЛАДР
xpym-xpym; +1 Ответить
6. Alexandr Kuritsyn (hibico) 15.01.14 13:36
(+) за решение.
Жаль, что поздно увидел публикацию.
Сам прикручивал Классификатор по принципу Типовых на регистре.
Был шокирован, когда после загрузки Классификатора объем базы вырос почти на 1.5 гига при объеме DBF-ов в 300 метров.
Посмотрел демку. В моем случае переделка будет достаточно трудоемка. Но в будущем может пригодиться.
7. Наталия Мастербатова (zzz_natali) 02.02.14 19:05
Совершенно несъедобный подход. Зачем править типовую конфу? Если на то пошло, то идти по пути некой базы(внешней обработки)-сателлита, которая могла бы вводить адрес со всеми существующими штатными вкусностями: на лету фильтровать и предлагать вводить наименования по первым буквам и копировать в буфер обмена, из которого уже можно копировать в рабочую базу, не трогая регистр сведений адресный классификатор
8. Игорь Чинякин (CrazyIgi) 25.03.14 08:14
Идея интересная, взял на вооружение.
Планируется ли реализация на управлямых формах?
9. Андрей Зиненко (Chastiser) 25.03.14 08:51
(8) Спасибо. На управляемых формах делать пока нет надобности. Тут показан только сам подход, а оформление каждый сам доработает под себя при желании.
10. Арсений Прялкин (CeHbKA) 24.09.15 12:09
11. Лео Алекс (AleksLeo) 02.08.16 11:04
Все Ок! Но есть проблема. При наборе по буквам не высвечивается список выбора и затирается сразу первая набранная буква. Что это?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа