Загрузка адресов произвольного формата (КЛАДР и нестандартных "грязных" адресов) в ФИАС современных конфигураций из 1С 7.7

16.08.19

Интеграция - Загрузка и выгрузка в Excel

Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!

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

Наименование Файл Версия Размер
Загрузка адресов произвольного формата (КЛАДР и нестандартных грязных адресов) в ФИАС современных конфигураций из 1С 7.7: СформироватьАдресДляФИАС.ert
.ert 113,50Kb
17
.ert 113,50Kb 17 Скачать

В современных конфигурациях есть встроенный хороший механизм, способный с небольшой доработкой на стороне 1С 7.7 удовлетворить требования по переносу адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3. Несколько раз я начинал преобразовывать адреса 1С 7.7 в адреса 8.3 не зная о нем, что я только не перекачал и не перечитал, даже с помощью интернет-сервисов качественного резутьтата загрузки некачественных адресов с разложением по полям ФИАС "область, город, улица, дом, корпус" в ERP добиться так и не смог, попытки доработать чьи-то заготовки сразу глубоко погружали меня в дебри кода ERP и манили к всяким внешним веб-сервисам налоговой, карт яндекса и Гугли - как стало ясно результат в них от нас не зависит и зачастую не достижим. Кидание в стороны потому что нет результата очень погружает и выматывает.

Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается по полям без единого веб-сервиса само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С! На следующем скрине показан фрагмент модуля функции синтактического анализатора "Функция РазложитьАдресДляФИАС(Адрес)", код - под спойлером.

 
 Функция РазложитьАдресДляФИАС(Адрес)

Предлагаемый синтаксический анализатор очень прост и не затейлив, опробован на загрузке адресов базы данных крупной торговой компании. Дает самый лучший результат из всего что я смог пощупать собственными руками и додумать. Если адрес не может разложиться, он сохраняется встроенным механизмом ERP как есть в виде представления, но не разложившихся адресов получается совсем не много. Единственное скажу - если адрес сильно замусорен, нестандартные головоломные значения попадают в поле "Корпус".

На стороне 1С 7.7 от нас требуется получить табличку вот такого вида:

Пример кода, который получает данную табличку - под следующим спойлером.

 
 Процедура АдресаКонтрагентов()

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

Пример кода для выгрузки адресов торговых точек прилагается под спойлером.

 
 Процедура АдресаТорговыхТочекКонтрагентов()

На всякий случай служебная функция, которая готовит список контрагентов для дозаполнения адресов - у помеченных элементов контрагентов и точек не должно быть адресов, чтобы отсечь путаницу у транспотрной логистики. Сами контрагенты и точки переносились ранее по правилам КД2 все без исключений (так как они могут быть в переносимых документах), процесс начального заполнения контрагентов и точек описан ранее в //infostart.ru/public/1100236/

 
 ***** глСформироватьТаблицуКонтрагентыЮрФизЛица *****

Теперь к самому главному - о том, как загрузить полученные адреса в современную конфигурацию на примере ERP.

Настраиваем соответствие полей

Выбираем поля по которым будет найден элемент для обновления адреса - сопоставить надо по совпадающему между 7.7 и ERP полю, например по коду 7.7 или по наименованию.

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

Обратите внимание, нет предела совершенству! При наличии свободного времени не сложно дописамь мою обработку так что ФИАС современной конфигурации (например ERP) поймет любые безумно сложные крези-адреса!

КЛАДР ФИАС

См. также

SALE! 10%

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Бухгалтерия 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Переход с 1С:Бухгалтерии 7.7 на 1С:Бухгалтерию предприятия 8, редакция 3.0, через стандартную обработку является сложным процессом, требующим определенной подготовки. Во время выполнения этого перехода возникает множество проблем и ошибок (примеры ошибок ниже), которые могут затруднить его успешное выполнение. В разработке учтены и исправлены все ошибки.

50722 45650 руб.

26.05.2020    33849    10    66    

16

Конфигурация "Информационный киоск". Обработки выгрузки товаров для ТиС 9.2, УТ 10.3, УТ 11 (обмен данными с любой конфигурацией 1С 7.7, 8.х)

Оптовая торговля Розничная торговля Обмен между базами 1C Сканер штрих-кода Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Управленческий учет Платные (руб)

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

1800 руб.

21.12.2014    59208    8    21    

20

Выгрузка данных из 1С 7.7. в формате EnterpriseData 1.6 (универсальный формат обмена) в конфигурации 8.3

Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 руб.

18.05.2020    22655    59    39    

35

Загрузка банковской выписки для 1С 7.7 любой конфигурации

Банковские операции Загрузка и выгрузка в Excel Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет Платные (руб)

Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.

3588 руб.

29.07.2021    20511    13    22    

14

Переход с 1С:Комплексной 7.7 на 1С:УТ 10.3

Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 1С:Управление торговлей 10 1С:Комплексная 7.7 Россия Управленческий учет Платные (руб)

Начните вести учет в УТ 10.3! Перенесите все свои данные в УТ 10.3 в любом месяце года и продолжите вести учет! Программа перенесёт любое количество баз с документами и остатками в больших количествах. Обработка выгрузки выполнит проверку исходных данных и сформирует отчет о найденных ошибках в справочниках и документах. Партии переносятся с себестоимостью. Штрихкоды номенклатуры загружаются. Цена переносится. Автор консультирует.

8400 руб.

17.03.2021    15523    5    13    

6

Обмен данными ЗУП 3.1 - Бухгалтерия 7.7

Зарплата Обмен между базами 1C Бухгалтерский учет 7.7 Сложные периодические расчеты 1С:Бухгалтерия 7.7 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Как известно, Бухгалтерия 7.7 не имеет штатной возможности для обмена с ЗУП 3.1. Данная разработка пригодится тем, кто перешел с ЗиК 2.3 на ЗУП 3.1, но вынужден по каким-то своим причинам оставаться на Бухгалтерии 7.7.

18000 руб.

29.09.2020    13575    2    0    

5

Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv7 Россия Абонемент ($m)

Воспользоваться современным средством переноса данных "Конвертация данных 3.0.5.3" можно только выгрузив из системы - источника данных XML в формате обмена данными EnterpriseData. В этой публикации можно скачать приемы выгрузки из 1С 7.7 универсального формата обмена для Конвертации данных 3. Выполняем перенос данных из «1С:Предприятие 7.7» в «1С:Предприятие 8.3». Используем Конвертацию данных КД 3.0 из 1c 7.7 --> 1С 8.3. На первой стадии еще не опубликовано иного способа подложить файл для Конвертации данных 3 кроме как сформировать его вручную, постараемся решить данную проблему.

1 стартмани

26.02.2018    62742    69    ksnik    5    

44

ЭВОТОР: выгрузка и загрузка в онлайн кассу в соответствии с требованием 54-ФЗ (54ФЗ). 1С: 7.7 ТиС

Загрузка и выгрузка в Excel ККМ Платформа 1С v7.7 1С:Торговля и склад 7.7 Управленческий учет Платные (руб)

Выгрузка из 1C версии 7.7 ТиС (Торговля и Склад) в EXCEL для дальнейшей загрузки в кассы ЭВОТОР, с помощью обработки обмен через EXCEL ( которая выбирается на сайте ЭВОТОР в магазине приложений). Полная версия без ограничений. Демоверсия позволяет выгружать только 5 строк номенклатуры(группы товаров). Демоверсия обладает такими же характеристиками что и полная за исключением того, что выгружает 5 строк неважно чего группы или номенклатуры (текст обработки зашифрован). Если у вас одна позиция номенклатуры или 5 позиций без групп, тогда Демоверсия для Вас. Если вдруг выскакивает ошибка по запуску обработки попробуйте запустить 1с с правами администратора

3000 руб.

19.06.2017    49795    9    26    

14
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. markers 274 16.08.19 06:36 Сейчас в теме
Действительно, нет предела совершенству...
Простите, а вот такие портянки
Если (Лев(АдресКонецТрансляция3,1)="0")
ИЛИ (Лев(АдресКонецТрансляция3,1)="1")
ИЛИ (Лев(АдресКонецТрансляция3,1)="2")
ИЛИ (Лев(АдресКонецТрансляция3,1)="3")
ИЛИ (Лев(АдресКонецТрансляция3,1)="4")
ИЛИ (Лев(АдресКонецТрансляция3,1)="5")
ИЛИ (Лев(АдресКонецТрансляция3,1)="6")
ИЛИ (Лев(АдресКонецТрансляция3,1)="7")
ИЛИ (Лев(АдресКонецТрансляция3,1)="8")
ИЛИ (Лев(АдресКонецТрансляция3,1)="9") 
Показать
Зачем? И так несколько раз у вас. Разве нельзя написать так
КодСимвола = КодСимвола(Лев(АдресКонецТрансляция3,1));
Если КодСимвола >= 48 и КодСимвола <= 57 Тогда
Или на худой конец, преобразовать в число и уже его проверить. Я уже молчу про это:
Если (Найти(нрег(Адрес),", кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ", кв.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),", Кв.")>0) Тогда
   Адрес = СтрЗаменить(Адрес, ", Кв.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),", КВ.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ", КВ.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),",кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",кв.",",квартира ");
ИначеЕсли (Найти(нрег(Адрес),",Кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",Кв.",",квартира ");
ИначеЕсли (Найти(нрег(Адрес),",КВ.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",КВ.",",квартира ");
Показать
часть условий бессмыслено так как везде стоит "нрег" и они не выполнятся ни когда. Можно было вместо этого списка сделать такую проверку
Если (Найти(нрег(СтрЗаменить(Адрес, " ", "")),",кв.")>0) Тогда
И дальше парсить (что лучше) или на худой конец поставить кучу СтрЗаменить вообще без условия. И если я не ошибаюсь (а я с 77 почти не работал) всё это можно и в ней.
2. ksnik 578 16.08.19 07:55 Сейчас в теме
(1)
поставить кучу СтрЗаменить вообще без условия

Вот это точно негодное предложение, смысл проделанной работы не в том чтобы что-то тупо заменить, а в том, в какой последовательности. Суть предложения не в том, чтобы блеснуть своим хитро-микро-думо-мудро-программированием, а чтобы поделиться простым решением сложной проблемы. Спасибо, подумаю над первой частью, но перенос данных уже произошел, главное чтобы сделать качественный перенос данных. Оно работает достаточно быстро и понятно и без того.
3. markers 274 16.08.19 07:59 Сейчас в теме
(2) Ну так вашем случае часть условий не выполнима. То что делать чисто СтрЗаменить, согласен не лучший вариант (ибо можно заменить что-то в другом месте). Лучший вариант (на мой взгляд) это парсинг. Нашли через "Найти" точку отправления и от неё уже двигаться до запятой, этот кусок между отправной точкой и запятой, можно спокойно перевести в нижний регистр, удалить пробелы и сделать один СтрЗаменить и прибавить полученный результат к результирующей строке
4. ksnik 578 16.08.19 08:11 Сейчас в теме
(3) Мне лично нравится более наглядный код даже если я потеряю производительность, возможно это специфика моего взгляда на жизнь. Более медленный и наглядный код не хочется менять даже на более оптимальный но менее читаемый, пусть даже речь будет не об одной лишней секунде работы программы.
КодСимвола = КодСимвола(Лев(АдресКонецТрансляция3,1));
Если КодСимвола >= 48 и КодСимвола <= 57 Тогда
будет сложнее читать в контексте АдресКонецТрансляция3.
За совет по оптимизации спасибо!
5. markers 274 16.08.19 08:15 Сейчас в теме
(4) Речь не столько о производительности, сколько о том что часть условий ни когда не выполнится, вот посмотрите внимательно
ИначеЕсли (Найти(нрег(Адрес),", Кв.")>0) Тогда
ИначеЕсли (Найти(нрег(Адрес),", КВ.")>0) Тогда
ИначеЕсли (Найти(нрег(Адрес),",Кв.")>0) Тогда
ИначеЕсли (Найти(нрег(Адрес),",КВ.")>0) Тогда
В условии идет перевод в нижний регистр. И нрег(",КВ.") не будет равно ",КВ.". Может конечно 77 на регистр плевать при поиске....
6. ksnik 578 16.08.19 08:16 Сейчас в теме
(5) согласен с (4), нрег в этом случае помешало сохранить регистр источника и достаточно первой ветки отквоченного условия, остальные не нужны.
Вот это:
СтрЗаменить(Адрес, " ", "")
очень плохая идея. Правильный вариант будет такой:
Если (Найти(нрег(Адрес),",  кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",  кв.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),", кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ", кв.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),",кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",кв.",",квартира ");
7. markers 274 16.08.19 11:13 Сейчас в теме
(6) и то можно сократить до такого:
Адрес = СтрЗаменить(Адрес, " 
 ", " ");
Если (Найти(нрег(Адрес),", кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес), ", кв.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),",кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",кв.",",квартира ");
я если честно не вижу ситуации, где двойной пробел был бы важен и его нельзя было убрать.
11. CheBurator 3119 16.08.19 13:38 Сейчас в теме
(7)
Адрес = СтрЗаменить(Адрес, " ", " ");

также, надо понимать что такой код при, например, 4 пробелах подряд никогда не заменит 4 пробела на один пробел... или три пробела на 1 пробел
8. insurgut 207 16.08.19 11:18 Сейчас в теме
(6)
Правильный вариант будет такой


А в данном случае не достаточно двух условий?

Если (Найти(нрег(Адрес)," кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, " кв."," квартира ");
ИначеЕсли (Найти(нрег(Адрес),",кв.")>0) Тогда
    Адрес = СтрЗаменить(Адрес, ",кв.",", квартира ");


Ну и перед проверкой не лишним будет сразу избавиться от двойных/тройных/четверных/пятерных пробелов
Адрес = СтрЗаменить(Адрес, "     ", " ");
Адрес = СтрЗаменить(Адрес, "    ", " ");
Адрес = СтрЗаменить(Адрес, "   ", " ");
Адрес = СтрЗаменить(Адрес, "  ", " ");
9. ksnik 578 16.08.19 11:41 Сейчас в теме
(8) по цитате 1 - только в совокупности с решением по цитате №2, по цитате 2 да, но в адресе могут быть не только пробелы с кодом 40. Благодарю!
10. CheBurator 3119 16.08.19 13:36 Сейчас в теме
(4) ну, все-таки исходим из того что код будет читать какой-никакой программист, а не менеджер
на крайняк можно юхать для читабельности чтото типа
Найти("0123456789",СимволИзСтроки)
12. ksnik 578 16.08.19 14:10 Сейчас в теме
(10) безусловно все советы дельные, и это легко всё добавить в код, хоть мне в голову сразу не пришло. Спасибо!
Оставьте свое сообщение