Подключение классификатора ФИАС формата DBF к 1С 7.7







Обработка позволяет вводить адрес из внешнего классификатора ФИАС формата dbf, возвращает значения выбранных объектов: ГУИД, Наименование, ОКТМО, ОКАТО, почтовый индекс, ГУИД владельца, флаг актуальности, ГУИД замещающего объекта (при выборе неактуального объекта), Кадастровый номер (если есть в классификаторе)

Сделал на основе 1С обработок ВводАдреса и ВыборИзКлассификатораАдресов. Работает на всех конфигурациях под платформой 1С 7.7

Загрузка классификатора в БД 1C не требуется. Классификатор в формате DBF скачивается с официального сайта Налоговой службы.Используются файлы ADDROB*.DBF, HOUSE*.DBF, ROOM*.DBF. При первоначальном обращении к классификатору производится его индексация.

Обработки можно оставить внешними, можно включить в конфигурацию как есть.

Одномоменто позволяет работать с объектами одного региона, переключение на другой регион — в настройке выбираем папку с файлом ADDROB*.DBF нужного региона.

Не преобразует имеющийся текстовый адрес в формате ФНС от КЛАДР в формат ФИАС. Примеры того, что возвращает обработка -ТестФИАС.ert

Распространяется как есть. Доработки и улучшения — по договоренности.

 

Достоинства

Не требуется загрузка классификатора в базу 1С.

Легко встраивается в любую конфигурацию на платформе 7.7

17 Comments

  1. Looking

    что-то никто не приобретает? своими руками аналогичное реализовали?

    Reply
  2. DimanZ

    (1)Вот кстати когда писал не поинтересовался, может 1С уже сами сделали для 7-ки?

    Reply
  3. Looking

    Вопрос — есть ли актуализация классификатора, то есть чтобы пользователь нажал кнопку «Обновить классификатор», и классификатор обновился с сайта ФНС?

    Reply
  4. DimanZ

    Нет, такая задача не стояла.

    Делал для самописной конфигурации учета расчетов с абонентами РСО, чтобы в ГИС ЖКХ выгружать данные, т.е. необходимость в кодах ФИАС замыкается на нескольких населенных пунктах. Пока мне проще скачать вручную.

    Reply
  5. AndKovalchuk

    (3)

    Вопрос — есть ли актуализация классификатора, то есть чтобы пользователь нажал кнопку «Обновить классификатор», и классификатор обновился с сайта ФНС?

    1с 77 не умеет работать по протоколу Https, поэтому врядли сама сможет вытащить классификатор

    Reply
  6. zarius

    (3) Обновлять из 1С по кнопке «Обновить классификатор» — это значит скачивать более 4,5Gb в архиве, затем все это куда то распаковывать (более 35Gb). В общем сомнительное удовольствие делать это напрямую из 1С.

    Reply
  7. DimanZ

    Сегодня загрузка по ADSL каналу полного классификатора выдала мне 14 часов….

    Пришлось нарисовать обработку по обновлению/дополнению из Дельта данных.

    Reply
  8. zarius

    (7) у себя в ФИАС для 7.7 пока специально не стал делать обновление через дельту — т.к. судя по этой информации не всегда обновление через дельту приводит к нужному результату. Хотя там конечно данные от 2012-2014 годов, может что то уже изменилось в лучшую сторону.

    Reply
  9. DimanZ

    (8) Меня убило время загрузки полного классификатора (до этого по отоволоконной линии качал — более менее, а ADSL не реально), вчера скачал дельты с сентября до последней, загрузил — юзеры сказали, что увидели новые адреса.

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

    Reply
  10. DimanZ

    (8) Вот только не разобрался — судя по всему грузить обновления нужно последовательно, а архивы с дельтой и называются одинаково и внутри не содержат сведений о себе: как узнать от какой они даты?

    Reply
  11. zarius

    (10) Логично что нужно грузить последовательно, соответственно необходимо хранить какая дельта и с каким статусом была загружена в БД. Ибо пропуск какой либо дельты ни к чему хорошему не приведет. Это при условии что дельты корректные.

    Имхо проще и надежней было бы отдельным решением выкачивать полную БД и распаковывать в отдельный каталог — чтобы в этом каталоге всегда была самая «свежая» БД. А уже из этого каталога при необходимости брать данные для рабочей БД.

    Reply
  12. DimanZ

    (11) Тогда смысла нет полную где-то отдельно хранить (только если в свою бд закачивают — но это другая тема), сразу в работу, реиндексация много времени не отберет…

    Reply
  13. zarius

    (12) Смысл есть если несколько баз 1С используют свои отдельные каталоги БД ФИАС. А так да — если выводить скачивание и распаковывание БД ФИАС каким нибудь регламентным заданием в нерабочее время — вполне можно сразу в рабочий каталог (хотя тут есть опасность что в ходе распаковки что то пойдет не так, к примеру, место закончилось, и БД ФИАС окажется в нерабочем состоянии).

    Reply
  14. DimanZ

    (11)

    соответственно необходимо хранить какая дельта и с каким статусом была загружена

    Вот вопрос — как определить, какая? — Файлы архивов одинаково называется от любой даты, внутри архива этих сведений тоже нет, или плохо ищу?

    Reply
  15. zarius

    (14) все зависит от того как вытягивать дельты с fias.nalog.ru — если не руками, то есть информация от какого числа БД ФИАС и соотв. дельты. Проще всего парсить http://fias.nalog.ru/DataArchive.aspx — там вся история с датами — соотв. имея последнюю дату дельты — ищем следующую, загружаем, грузим в БД ФИАС, меняем тек. дату дельты, повторяем парсинг до победного.

    Reply
  16. DimanZ

    Пример использования:

    .

    Размещаем на форме, где планируется получать адрес, кнопку, под нее код

    Процедура ПоКнопкеВводаФИАС()
    Параметры = СоздатьОбъект(«СписокЗначений»);
    
    Если ПустоеЗначение(КодФИАС)=0 Тогда
    //КодФИАС — это Ваш реквизит, называете как нравится — передаем его в обработку, если уже заполнен,
    //чтобы Ввод адреса открылся на ранее выбранном в реквизите объекте
    // Неважно, ГУИД какого это объекта: Регион, Район, квартира и т.д.
    // Обработка ввода сама определит
    Параметры.Установить(«Код объекта»,СокрЛП(КодФИАС));
    КонецЕсли;
    
    //б) Обработки встроены в конфигурацию либо во внешнем файле
    //Вариант вызова
    
    ВнешняяОбработка = КаталогИБ()+»ExtFormsFIASfias.ert»; // можно под свои предпочтения либо где-то хранить в настройках/константах
    Если ФС.СуществуетФайл(ВнешняяОбработка)=1 Тогда
    ОткрытьФормуМодально(«Отчет»,Параметры,ВнешняяОбработка);
    ИначеЕсли Метаданные.Обработка(«ВводАдресаФИАС»).Выбран() = 1 Тогда // это если в Конфигурацию включили
    ОткрытьФормуМодально(«Обработка.ВводАдресаФИАС»,Параметры);
    КонецЕсли;
    
    //Обработаем полученные из Ввода Адреса сведения
    Если ТипЗначенияСтр(Параметры) = «СписокЗначений» Тогда
    
    ЗначОбъектов = Параметры.Получить(«СписокОбъектов»);
    Если ТипЗначениястр(ЗначОбъектов ) = «СписокЗначений» Тогда
    Улица = ЗначОбъектов.Получить(«Улица»); //Указали, что нужны сведения по Улице
    ОКТМО = Улица.Получить(«ОКТМО»); //Можем забирать в свои Реквизиты
    КодФИАС = Улица.Получить(«Код»);
    АдресФИАС = Параметры.Получить(«Адрес»);
    
    КонецЕсли;
    КонецЕсли;
    
    
    КонецПроцедуры

    Показать

    Reply
  17. DimanZ

    По сути все есть в комментариях в модулях Обработок,

    fias.ert (При включении в конфигурацию назовите ВводАдресаФИАС)

    //Параметры
    // Если на входе указан Код объекта — заполняем поля ввода по нему
    
    // возвращеает адрес строкой в Параметр «Адрес»
    // и СписокОбъектов (Регион,Район,Город,НасПункт,Улица,Дом,Помещение), содержащий их значения
    //Код
    //Наименование
    //Индекс
    //ОКТМО
    //ОКАТО
    //Владелец
    //ГУИД
    //Актуальный;
    //ЗаменныйГУИД
    

    Показать

    fiasВыборизБД.ert ( При включении в конфигурацию назовите ФИАСВыборИзБД )

    Reply

Leave a Comment

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