Быстрый ввод контрагентов и организаций по данным ФНС




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

71 Comments

  1. qwinter

    Делал для себя получение с сайта: http://www.fedresurs.ru/ , там по сути все то же, что и на egrul.nalog.ru, но без капчи. Добавляйте в вашу обработку.

    скачать

    Reply ↓
  2. iov

    (0) а где остальные комментарии?

    Reply ↓
  3. Sirruf

    (9) qwinter, спасибо, добавлю!

    (10) iov, потерты администрацией)

    Reply ↓
  4. qwinter

    (11) что же здесь было, что потерли?

    Reply ↓
  5. Sirruf

    (12) qwinter, Небольшая дискуссия по поводу использования «авторских прав» на эту гениальную идею)

    Reply ↓
  6. gull22

    (10) iov,

    За халяву всегда +. Осталось на УТ11 перейти.

    Reply ↓
  7. Sirruf

    (9) qwinter, добавил в обработку http://www.fedresurs.ru/

    Reply ↓
  8. yelena-ppm

    Эххх… жалко, что у меня ни одной УТ нету…А так бы с удовольствием и потестила, и отплюсовала, и коммент предметный написала 🙂 В любом разе — спасибо. ПОдписалась на Ваши новости. Как подцепите Бухгалтерию 8.2 — отпишите, это моя темочка 🙂

    Reply ↓
  9. Sirruf

    (16) yelena-ppm, Бухгалтерию 3.0 подцепил, можете скачивать обработку и проверять 🙂

    Reply ↓
  10. tadem

    а в комплесной пойдет?

    Reply ↓
  11. olesechka

    В бухгалтерии 8.2 не идет ((( жалко (((

    Reply ↓
  12. Sirruf

    (19) olesechka, что конкретно не идет? У вас редакция 3.0?

    Reply ↓
  13. olesechka

    Нет, 2.0

    Или я что-то не так делаю?

    Прицепила к внешним обработкам…

    Reply ↓
  14. Sirruf

    (21) olesechka, Да, на данный момент обработка есть только для управляемых форм.

    Reply ↓
  15. olesechka

    (22)

    Жаль (((

    Буду ждать )))

    Reply ↓
  16. Sirruf

    (18) tadem,

    В комплексной тоже не пойдет, так как она не на управляемых формах.

    В ближайшее время сделаю обработку для обычных форм.

    Reply ↓
  17. Sirruf

    (23) olesechka,

    Сделал обработку для обычных форм 🙂

    Reply ↓
  18. Sirruf

    (18) tadem,

    В комплексной теперь тоже должна работать (версия для обычных форм)

    Reply ↓
  19. bnw

    Для обычных форм с сайта ФНС не загружается…

    Reply ↓
  20. Sirruf

    (27) bnw,

    Что пишет? Цифры с картинки правильно ввели?

    Reply ↓
  21. Saengmyung

    Действительно полезная обработка!

    Оптимизирует затраты времени!

    Reply ↓
  22. Cybersant

    Будет работать в конфигурации УНФ?

    Reply ↓
  23. Sirruf

    (30) Cybersant, Должна работать

    Reply ↓
  24. Bacemo

    А к ДОКУМЕНТООБОРОТУ КОРП ПОДКЛЮЧИТЬСЯ через доп обработки?

    Reply ↓
  25. wolwip

    Прекрасно работала, сейчас {Форма.Форма.Форма(1944)}: Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (WinHttp.WinHttpRequest): Время ожидания операции истекло

    Куда смотреть ?

    Reply ↓
  26. Sirruf

    (33) wolwip, у Вас какие-то проблемы с интернетом, возможно появился прокси сервер?

    Reply ↓
  27. bnw

    При попытки получить с сайта ФНС пишет:

    {

    «namul»: [

    «Не указано наименование юридического лица»

    ]

    }

    С сайта Контур-Фокус вообще ничего

    Reply ↓
  28. Sirruf

    (35) bnw, Обновил обработки. Скачайте свежую версию.

    Reply ↓
  29. ligan

    (36) Контур-Фокус так и не работает!

    Reply ↓
  30. Sirruf

    (37) ligan, да, пока не работает

    Reply ↓
  31. wolwip

    Прокси нету. Работает только с сайта ФНС, с контура не берет и с федреестра. Фнс не очень удобен, по ИНН в отдельности не ищет

    Reply ↓
  32. maksa2005

    Ошибка

    Reply ↓
  33. maksa2005



    ОШИБКА!!!

    Reply ↓
  34. Bacemo

    Как ни хотим ФНС, в Бухгалтерии 3 используют именно её

    Reply ↓
  35. victory1985

    Скачала, стоит 8.3.5.1146 КА 1.1.51.2

    При нажатии на кнопку зарегистрировать выдает: «{Форма.ФормаКонтрагента.Форма(24)}: Значение не является значением объектного типа (ПолучитьОбъект)

    ОбъектКонтрагент = СсылкаКонтрагент.ПолучитьОбъект();

    »

    Почему и как исправить?

    Reply ↓
  36. bashirov.rs

    (25) Очень актуальная тема. При возможности обязательно скачаю — протестирую. На данный момент пользуюсь только ресурсом fedresurs.ru. Вопрос откуда актуальнее брать данные? Неужели необходимо перебирать столько ресурсов?

    Reply ↓
  37. gull22

    Конфигурация КА.Заводил для поиска только ИНН своей организации

    По ФНС нашло.

    По Контуру не нашло

    По сайту Федреестра по ИНН -выдало ошибку

    {Форма.ФормаКонтрагента.Форма(231)}: Поле объекта не обнаружено (ADRESTEXT)

    Адрес = ВыбранныйКонтрагент.ADRESTEXT;

    .

    Reply ↓
  38. _qqq

    (43) victory1985,

    реквизит обработки СсылкаКонтрагент имеет тип Строка, надо изменить на СправочникСсылка.Контрагенты.

    И Реквизит СсылкаОрганизация тоже имеет тип Строка, его тоже можно поменять на соответствующий.

    Reply ↓
  39. _qqq

    При поиске по Контуру результат ResponseText:

    <html><head><title>Object moved</title></head><body>
    <h2>Object moved to here.</h2>
    </body></html>
    Reply ↓
  40. myzza2006

    Через веб интерфейс обработка не запускается.

    Reply ↓
  41. IsiKosta

    ИП не ищет, пришлось доделывать. Спасибо!

    Reply ↓
  42. mnemchinov

    гыг.. в 8.3.6:

    Ошибка инициализации модуля: Форма.Форма.Форма

    по причине:

    Процедура или функция с указанным именем уже определена (ЗаписатьJSON)

    Reply ↓
  43. myzza2006

    А можно ли данную обработку открыть в web версии 1с 3.0?

    Reply ↓
  44. ako

    УТ 11, платформа 8.3.6.2041. При запуске выдает {Форма.Форма.Форма(258,9)}Процедура или функция с указанным именем уже определена .ПрочитатьJSON) .Не работает, а жаль (

    Reply ↓
  45. korvin76

    (52) ako,

    Переименуйте процедуру, например в «ПрочитатьJSON1» и ссылки на нее..у меня заработало

    Reply ↓
  46. saint07

    Появилась ошибка:

    {Форма.Форма.Форма(575)}: JSON: Некорректный формат числа «<» в позиции 6.

    ВызватьИсключение ИсключениеНекорректныйФорматЧисла(Начало, Сред(Значение, Начало, Индекс — Начало));

    Кто подскажет куда копать ?

    Reply ↓
  47. feel_deep

    (54) saint07, присоединяюсь…

    Reply ↓
  48. java66

    (54) — Присоединяюсь!

    Reply ↓
  49. saint07

    тишина …

    Reply ↓
  50. amiralnar

    (54) saint07,

    (55) feel_deep,

    (56) java66,

    Надо в адресе запроса поменять http на https

    ГетЗапрос.Open(«POST», «https://egrul.nalog.ru/», 0);

    Так работает.

    Reply ↓
  51. saint07

    (58) amiralnar, спасибо !

    Reply ↓
  52. tatiannna

    в бухгалтерии базовой будет работать?

    Reply ↓
  53. Muhin555

    (45) В модуле «Форма» найти Процедуру НайтиФедРесурс() и в ней за комментировать второе объявление «ВыбранноеЗначение». Должно выглядеть так:

    Отказ = Ложь;

    //ВыбранноеЗначение = Новый Структура;

    ПолучитьДанныеФедРеестр(ВыбранноеЗначение, url, Отказ);

    Reply ↓
  54. v3n7

    (9) qwinter, не поделитесь описанием API для получения данных?

    Reply ↓
  55. pvlunegov

    Спасибо за обработку. После исправлений в коде работает как надо

    Reply ↓
  56. pvlunegov

    (9) qwinter,

    Не вводите в заблуждение людей.

    В вашей обработке идет запрос на сайт http://www.fedresurs.ru. Этот ресурс хоть и государственный, НО! В нем публикуются только некоторые сведений о юр. лицах.

    Многие ИП-шники на этом ресурсе не значатся.

    Таким образом, значительная часть организаций, действующих МНОГО ЛЕТ в виде ИП (всякие мелкие конторы, заводики и т.п. ИП хозяйства в глубинке и в городах области)

    на этом ресурсе не значатся и не видятся вашей обработкой.

    НАпример ИП Аристов Юрий Алексеевич 661100051911

    Этот косяк очень значительный, именно поэтому НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ГОС. ресурс http://www.egrul.nalog.ru

    Reply ↓
  57. shur52

    (9) qwinter, А не подскажите, как по федресурсу ИП искать? IsiKosta тут написал в (49), что доработал. Скачал я его код. ИП он так же не ищет.

    Get-параметр ?filter= не работает для страницы http://www.fedresurs.ru/IndividualEntrepreneurs. Подобрать правильный GET-параметр я не смог. Может, вы его подскажете?

    Reply ↓
  58. shur52

    (64) pvlunegov, Скорее всего, вы ошибаетесь. Ваш пример ИП Аристов Юрий Алексеевич 661100051911 находится по федресурсу: http://www.fedresurs.ru/individualEntrepreneurs/64F648BB5392C78A5184A2CA5098173A . Попробуйте воспользоваться поиском на странице http://www.fedresurs.ru/individualEntrepreneurs/IsSearching. Проблема тут в другом. Обработка (9) может распарсить только ветку http://www.fedresurs.ru/Companies, но не ветку http://www.fedresurs.ru/individualEntrepreneurs. Это связано с тем, что разработчики сайта заложили Get-параметр ?filter= для страницы http://www.fedresurs.ru/Companies, но этот параметр не работает для страницы с реестром ИП. А вот подобрать Get-параметр для ИП пока не удается никому, насколько я понимаю. Возможно, его разработчики сайта не заложили в своем коде.

    Reply ↓
  59. shur52

    Я разобрался с http://www.fedresurs.ru. Ветку http://www.fedresurs.ru/individualEntrepreneurs/ я распарсил. Посмотрел через браузер содержимое post-запроса для поиска ИП — и использовал такой же post-запрос в своем коде 1с. Get-запрос так и не подобрал, но это уже мне и не нужно. Всем спасибо. Если кому-то будет надо распарсить ИП на федресурсе — пишите, помогу.

    Reply ↓
  60. serpent

    (67) shur52,

    пиши сюда, интересно

    Reply ↓
  61. capitan

    С ЕГРЮЛ не загружает.

    А задумка очень хорошая.

    Reply ↓
  62. capitan

    (58) amiralnar, спасибо !

    Автор, поправь обработку, тогда можно будет смело плюсовать

    Reply ↓
  63. madonov

    Версия на обычных формах с ЕГРЮЛ не работает!

    Reply ↓
  64. frolovmiham

    При запуске в УТ10,3 (10.3.41.1)

    1С:Предприятие 8.3 (8.3.8.2197)

    выдает ошибку:

    {ВнешняяОбработка.ВводКонтрагентовПоДаннымФНС_ОФ.Форма.Форма.Форма(260,9)}: Процедура или функция с указанным именем уже определена (ПрочитатьJSON)

    Функция <<?>>ПрочитатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь)

    {ВнешняяОбработка.ВводКонтрагентовПоДаннымФНС_ОФ.Форма.Форма.Форма(282,9)}: Процедура или функция с указанным именем уже определена (ЗаписатьJSON)

    Функция <<?>>ЗаписатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь)

    {ВнешняяОбработка.ВводКонтрагентовПоДаннымФНС_ОФ.Форма.Форма.Форма(2408,14)}: Обращение к процедуре как к функции (ЗаписатьJSON)

    Сообщить(<<?>>ЗаписатьJSON(Значение));

    {ВнешняяОбработка.ВводКонтрагентовПоДаннымФНС_ОФ.Форма.Форма.Форма(2408,14)}: Недостаточно фактических параметров (ЗаписатьJSON)

    Сообщить(<<?>>ЗаписатьJSON(Значение));

    Reply ↓
  65. frolovmiham

    Разобрался, как указано выше, надо внести два изменения:

    1. Поменять ЗаписатьJSON на ЗаписатьJSON1 и ПрочитатьJSON на ПрочитатьJSON1

    2. Надо в адресе запроса поменять http на https

    ГетЗапрос.Open(«POST», «https://egrul.nalog.ru/», 0);

    Так работает!

    Reply ↓
  66. 27272

    (73)

    ГетЗапрос.Open

    В Бухгалтерия государственного учреждения, редакция 1.0 (1.0.48.6), после исправления Максим 2 раза, запускается, но после ввода капчи ошибка:

    {ВнешняяОбработка.ВводКонтрагентовПоДаннымФНС_ОФ.Форма.ФормаКонтрагента.Форма(241)}: Поле объекта не обнаружено (ЮрФизЛицо)

    ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;

    Reply ↓
  67. saint07

    {«ERRORS»:{«query»:[«Не заполнено обязательное поле «Поисковый запрос»»]}}

    у кого такие же проблемы ?

    Reply ↓
  68. dynamicsystems

    (76) подтверждаю проблему. Придется раскуривать этот вопрос на днях… иначе коллеги сожрут за нерабочий ергюл

    Reply ↓
  69. chkurs

    (76)

    {«ERRORS»:{«query»:[«Не заполнено обязательное поле «Поисковый запрос»»]}}

    Надо изменить на:

    ПоисковыйЗапрос = «query=»+СокрП(ИНН); Ошибка исчезает, но ответ какой-то не тот, короткий и не удается его распарсить.

    Reply ↓
  70. dynamicsystems
    Reply ↓
  71. chkurs

    (80)

    писалось на коленке

    : В тестовом примере обработки замени, пожалуйста, «ADRESTEXT» на «ADR_TEXT», а то адрес не подтягивается. Спасибо за решение проблемы! Доброте твоей нет предела!

    Reply ↓

Leave a Comment

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