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

16.08.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

В современных конфигурациях есть встроенный хороший механизм, способный с небольшой доработкой на стороне 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) поймет любые безумно сложные крези-адреса!

КЛАДР ФИАС

См. также

Перенос данных 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    23436    62    39    

36

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

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

3588 руб.

29.07.2021    22277    14    22    

15

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

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

8400 руб.

17.03.2021    15914    5    13    

6

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

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

18000 руб.

29.09.2020    13758    2    0    

5

SALE! 10%

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

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0 | Продукт является развитием и исправлением ошибок стандартной обработки для выгрузки данных из 1С Бухгалтерии 7.7 в Бухгалтерию 3.0 | Перенос из 7.7 является сложным, и на рынке сложно найти специалистов 1С по "семерке" - сотрудники помогут вам выполнить переход в рамках техподдержки предлагаемого переноса данных!

50722 45650 руб.

26.05.2020    34887    10    71    

16

Файловый обмен (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    63457    72    ksnik    5    

44

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

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

3000 руб.

19.06.2017    50321    9    26    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. markers 277 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 592 16.08.19 07:55 Сейчас в теме
(1)
поставить кучу СтрЗаменить вообще без условия

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

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


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

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


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