Конфигурация ФИАС для 1С 8.1 и 8.2




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

53 Comments

  1. stoskin

    А обработки ввода информации и загрузки ФИАС сами где?

    Reply
  2. dgonson

    Извиняюсь. Перезалил. :)Дайте почту, скину отдельно.

    Reply
  3. Зеленоград

    Не в тему разработки, но —

    Чем ФИАС для пользователя информационной системы лучше КЛАДР? Какой объём занимают таблицы, достоверней ли КЛАДРа, есть ли точное взаимное соответствие, как обновляется этот классификатор?

    (Вариант «это требует налоговая» не интересен, может им существовать осталось n малое секунд).

    Reply
  4. AKV77

    Автор, дорогой, где же ты раньше был ? Сами переходим на Сафари, убил кучу времени, чтобы прикрутить к торговой конфигурации этот самый ФИАС.

    Reply
  5. dgonson

    (3) Зеленоград,

    ФИАС vs КЛАДР 🙂

    http://kladr.ws/fias-dlya-programmista

    Reply
  6. dgonson

    (4) AKV77, Сами в процессе внедрения… Может тем кто будет после нас, будет легче, раз нам Сафари помочь не хотят… 🙂

    Reply
  7. chmv

    А зачем? kladr легче найти

    Reply
  8. dgonson

    🙂 Кому это надо, тот воспользуется, а на нет, как говорится и суда нет :).

    1С же свою БП перевели на ФИАС. Они уж точно ничего просто так делать не будут 🙂

    Reply
  9. chmv

    А ПФР не перевел свою программу на ФИАС и проверяет kladr

    1с перевел на ФИАЛ только затем, чтобы увеличить количество продаж ИТС

    Reply
  10. wees

    Возможно ли сделать загрузку dbf фиас из 8,1?

    Reply
  11. dgonson

    (10) wees, К сожалению, в 1С 8.1 не удалось прочитать данный формат обновления, поэтому обновление в 8.1 осуществляется из конфигурации ФИАС 8.2.

    Reply
  12. diso

    Разобрался

    Reply
  13. MSConfig

    Огромное спасибо!

    Проделана большая и очень нужная работа.

    Reply
  14. ture

    Короче, скачал я твоё творение, чтоб заюзать на 82 УФ, но был жестко обломан. Не загрузку я у тебя откуммуниздил на ура и был рад, что не пришлось вникать. Но с очисткой пришлось потрошить типовую, как и с формой выбора ибо у тебя нетуть почти всего фунгционала. А исчо ты все регистры по своему назвал.

    Reply
  15. dgonson

    Частично наименования объектов пересекались с именами моей конфигурации — пришлось переименовывать все, что бы было понимание, что к чему относится…

    Reply
  16. ilyap

    Добрый день!

    Очень пригодилась обработка!

    Единственное НО, существуют адреса, в которых отсутствует улица, например: деревня Такая-то, д. 1. В этой обработке завести такой адрес не получается. Можно-ли что-то придумать??

    Reply
  17. dgonson

    Если честно давно уже ей не пользовался, но насколько я помню, Вы можете просто внести улицу наименование улицы с клавиатуры,а не выбирать ее…

    Reply
  18. ilyap

    Добрый день!

    Ситуация такая: существуют адреса, которые не содержат улицу, например: Вараксино с, Завьяловский р-н, Удмуртская Респ, дом 2 (это реальный адрес, в деревне нет улицы — сразу номер дома). При попытке набрать такое в обработке происходит ошибка: {Обработка.ВводКонтактнойИнформацииФИАС.Форма.ВводАдреса(785)}: Значение не является значением объектного типа (Идентификатор) СписокЗданийДомовУлицы=АдресныеОбъектыФИАС.ЗданияСооруженияУлицы(УлицаСтруктура.Идентификатор).

    Ну очень надо побороть такую проблему!

    Reply
  19. ImHunter

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

    Вероятно, нужно обновить конфу.

    Reply
  20. dgonson

    Перезалил файл конфигурация ФИАС 8.2

    Reply
  21. ilyap

    (20) БОЛЬШОЕ СПАСИБО !

    Reply
  22. Dmitrii D

    (20) единственная разработка для ФИАС на обычных формах!

    Не подскажете, а есть доработанная форма ввода адреса, чтобы как в БСП. выбор улиц, городов в отдельных формах))?

    Reply
  23. ivprovotorov

    Спасибо за разработку. Нужно было привязать в УП ЖКХ справочник зданий к ФИАС.

    Reply
  24. fjay69

    На сайте ГНИВЦ информация, что выгрузка в формате КЛАДР будет доступна до конца года. После — только ФИАС. Так что разработка весьма актуальна.

    Reply
  25. vovchella2

    Добры день,

    Скачал конфигурацию для 8.2, при попытке загрузить ФИАС (взял только 77 регион для быстроты) — получил ошибку Illegal array index when decoding EII.

    Подскажите пожалуйста, как решить и с чем связана может быть?

    Reply
  26. vovchella2

    Коллеги, разобрался — видимо ошибка платформы была, на другом релизе 8.2 заработало.

    Reply
  27. гаврюша

    Скачала конфигурацию 8.2. При попытке загрузить адреса выдается ошибка:

    IIIegal array index when decoding EII

    Платформа 8.2.19.130

    Reply
  28. гаврюша

    (26) Подскажите, пожалуйста, какая ошибка платформы? Скачала конфигурацию. Получила такую же ошибку. Но платформа у меня 8.2.19.130. Это последняя на текущий момент платформа по 8.2.

    Какая у Вас платформа и как решилась данная ситуация?

    Reply
  29. гаврюша

    Работает на платформах 8.2.18… или 8.3

    Reply
  30. Tegord

    Подойдет ли для 1С УПП 8.3? Формы НЕ управляемые

    Reply
  31. vovchella2

    (28)

    форма у меня 8.2.19.130. Это последняя на текущий момент платфор

    У меня заработало на 8.2.17.169

    Reply
  32. гаврюша

    (30) При запуске данной (скачанной обработки) под платформой 8.3. (у нас 8.3.9.2170) загрузка в данную конфигурацию отрабатывает нормально. А потом в любую конфигурацию, запущенную под 8.2 загрузить обработкой «ВыгрузкаЗагрузкаДанныхXML82.epf». Обработка работает для выгрузки и для загрузки данных, несмотря на то, что запущена конфигурация под 8.3. Это проверили.

    Если у Вас «1С: УПП» работает под 8.3, то сразу должно грузиться без ошибок…

    Reply
  33. el_nov

    Процедура или функция с указанным именем не определена (ПолучитьИндексПоУлицеДомуКорпусу)

    ИндексУлицы = <<?>>ПолучитьИндексПоУлицеДомуКорпусу(Улица, СтруктураЗаписи.Поле7, СтруктураЗаписи.Поле8)

    Процедура или функция с указанным именем не определена (ПолучитьАдресныйЭлемент)

    Улица = <<?>>ПолучитьАдресныйЭлемент(СтруктураЗаписи.Поле6, 5, РодительИндекса.Код);

    А откуда эти процедуры? (Это при попытке запуска обработки)

    Reply
  34. CaSH_2004

    Что-то ни в инете ни тут не нашел ответа на вопрос, а как быть если нужно в старую конфигурацию (УТ 10.3, БП 2.0, ЗУП 2.5) загрузить вместо старого КЛАДР данные из ФИАС? Естественно не меняя конфигурацию, ведь если я даже внесу данную конфу и загружу адреса они не будут подбираться например в карточке контрагента

    Reply
  35. user766260

    (33) Тоже не получается открыть ровно с такими же ошибками. Не удалось найти эти функции?

    Reply
  36. el_nov

    (35)УправлениеКонтактнойИнформацией.ПолучитьАдресныйЭлемент Это в ЗУП 2.5, вероятно в других конфигурациях как-то аналогично

    Reply
  37. galuna256

    (36) Да, спасибо. Уже нашла, в УПП тоже в общем модуле УправлениеКонтактнойИнформацией. Единственное, одна из процедур не была экспортной.

    Reply
  38. dgonson

    У нас в УПП 1.3 8.1 я эти поля вносил дополнительно в карточку контрагента. Соответственно и обработку по их заполнению. И в дальнейшем вытаскивал данные из регистров, если надо было выгрузить адрес контрагента в формате ФИАС.

    Reply
  39. Tegord

    Так кода ФИАС нигде нет?

    Reply
  40. гаврюша

    (39) Есть в документах «НачислениеПоБольничномуЛисту» и «ОтпускПоУходуЗаРебенком» из этих документов выгружается…

    Какой у Вас релиз?

    Reply
  41. MakNat

    Да. Для релиза 130 при ручном вводе кода в начислении больничного, данные попадают в реестр ( на форме данные действительно НИГДЕ не отображаются) и реестр выгружается. Переформировывать реестр ( если список отредактирован в ручную ) не обязательно но перевыбрать каждый больничный придется.

    Reply
  42. MakNat

    Поясните, пожалуйста, что именно делает данная конфигурация, позволяет получить код ФИАС без обращения на сайт налоговой? ведь в ЗУП 2.5 нет даже никакого регистра и обработок для получения кода из адреса, всего 2 места занесения документы «НачислениеПоБольничномуЛисту» и «ОтпускПоУходуЗаРебенком».

    В этих документах так же надо будет вносить данные в ручную? Или реализован какой то регистр хранения ФИАС по сотрудникам и необходимо будет доработать документы начисление и отпуск? Спасибо.

    Reply
  43. ANDiv

    Подскажите, данная доработка умеет возвращать уникальный идентификатор номера адреса?

    как это требуется заполнять в реестре сведений фсс

    Reply
  44. dgonson

    Конфигурация позволяет, при внедрении в типовую, загружать классификатор ФИАС и для необходимых справочников, например контрагентов, выбирать адрес из этого классификатора. При этом выбранное значение хранится как в строковом виде как представление, так и в виде xml кода. Данный механизм повторяет механизм 1с бухгалтерии предприятия 3.0. По поводу кода фсс сказать ничего не могу, не сталкивался, конфигурация предназначалась не для этого, но если дадите пример кода фсс могу посмотреть если что нибудь подобное…

    Reply
  45. ANDiv

    в документе «реестр сведений фсс по нетрудоспособности» (например) необходимо помимо указания кладр адреса, указывать еще и уникальный идентификатор номера адреса. Строка в виде — 85042017-****-****-****-AC6F5837CE52 (* — скрытые данные мною). Данный идентификатор, как я понял берется с http://fias.nalog.ru

    И скорее всего тут необходимо реализовывать API запросы — https://dadata.ru/api/clean/#response-address

    Reply
  46. MakNat

    (44)Спасибо за ответ, а в документы Начисление по больничному листу уже каждый может самим организовать заполнение ФИАС правильно? Эти документы не изменялись в предложенном решении?

    Reply
  47. dgonson

    Да, скорее всего

    Reply
  48. alexey.kutya

    Добрый день! В описании указан релиз конфигурации 1С УПП 3.2.1. Возможно допущена опечатка.Скорей всего релиз 1.3.2 или 1.2.3.

    Reply
  49. CagoBHuK

    Вопрос к автору: я правильно понимаю, что конфигурация позволяет хранить в базе данные по GUID домов по ФИАС?

    Reply
  50. CagoBHuK

    (49)Отвечу сам себе. Не стали качать эту конфигурацию, сделали скульную базу полноценную с обновлением на паскале и прямыми запросами из 1С. Скульная база весит 44 гигабайта без индексов, из всех таблиц дома — самая огромная. 1С пошли по пути «кастрации» в типовых конфигурациях, и таблица домов превратилась в строку в хранилище значений, остались только номера. В общем, если конфигурация дернута из типовой БП, то GUID домов Вам не увидеть в ней. Для Сафари не подойдет однозначно.

    Reply
  51. stentor123

    (2)Просьба автору связаться с нами stentor123@mail.ru Существует проблема при переходе на новую версию ФИАС

    Reply
  52. Flynxx

    Жаль что обработку по переносу не включили в саму конфигурацию. Если не сложно можно ее на мыло выслать? Flynxx@gmail.com

    Reply
  53. apatyukov

    http://fias.nalog.ru/Public/DownloadPage.aspx — укзанный ресурс недоступен.

    Есть ссылка на другой ресурс?

    Правильно я понимаю что полный фиас (https://its.1c.ru/download/fias2) ваша обработка не грузит?

    Reply

Leave a Comment

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