[РАСШИРЕНИЕ] Заполнение данных контрагента по ИНН в 1С: Бухгалтерия и 1С: УНФ




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

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

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

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

64 Comments

  1. TMV

    В заголовке укажите, что это DaData. Этих заполнялок уже выше крыши.

    Reply
  2. DNMit

    Спасибо. Работает. посмотрим на сколько хватит этого сервиса.

    Reply
  3. rpgshnik

    Хорошо указывать на основание какого сервиса сделано.

    Reply
  4. Anton64

    (5) В анонсе публикации указано.

    Reply
  5. rpgshnik

    (6) не заметил)

    Reply
  6. CnupT

    Получает адреса индивидуальных предпринимателей?

    Reply
  7. Anton64

    (8) Нет, дадата по ИП не возвращает точный адрес, только в виде «область город».

    Reply
  8. CnupT

    Перепробовали кучу разных заполнялок, ни одна не показывает адрес ИП.

    Только штатная, 1Совская. Не понимаю, они-то тогда откуда берут данные?

    Reply
  9. Anton64

    (10) Я думаю все берут данные из ФНС. А вот в какой детализации — это наверное зависит от финансовых возможностей запрашивающей стороны (могу ошибаться)

    Reply
  10. 2028202@mail.ru

    Подскажите, пожалуйста, для Управление нашей фирмой, редакция 1.6 (1.6.13.48) БУДЕТ РАБОТАТЬ???

    Reply
  11. Anton64

    (12) Здравствуйте!

    Проверю Вашу редакцию УНФ и отпишусь позже.

    Reply
  12. legmv

    РАСШИРЕНИЕ] Заполнение данных контрагента по ИНН в 1С: Бухгалтерия и 1С при обновлении в автоматическом режиме через сайт 1с это расширение останется

    Reply
  13. Anton64

    (14) Здравствуйте! Да, должно остаться.

    Reply
  14. user748451

    Добрый день! На последней УНф работает корректно, но немного неудобно. Нужно сначала заполнить ИНН и Представление в программе и Записать карточку и только потом можно запустить заполнение по ИНН. Нельзя ли брать ИНН из какого-либо поля формы до записи?

    Reply
  15. Anton64

    (16) Здравствуйте! Подскажите, пож-та, какая у Вас версия платформы?

    Посмотрел на платформе 8.3.10 УНФ версии 1.6.13 не обнаружил такого поведения. А вот то же самое на платформе 8.3.11 не отрабатывает нажатия кнопок. Пришлось внести изменения. Выложил файл для УНФ 1.6.13 с платформой 8.3.11.

    Reply
  16. Anton64

    (16) Дело в том, что ИНН как раз берется из поля формы. Надо разбираться почему в Вашем случае возникает такое поведение. Возможно дело в платформе 1С.

    Reply
  17. Anton64

    (12) Здравствуйте! Если Ваша УНФ работает на 8.3.10, тогда файл для 1.6.11 будет работать. Если платформа 8.3.11, тогда качайте другой файл, для 1.6.13 (платформа 8.3.11)

    Reply
  18. user748451

    Платформа 8.3.10.2699.

    До записи карточки при нажатии на вашу кнопку предлагает подключитьс к ИТС, после записи — уже работает как надо.

    Reply
  19. user748451

    Добрый день, Антон.

    Скачал новую версию расширения.

    К сожалению, на платформе 8.3.10.2699 работает тоже некорректно. Теперь расширение успешно берет данные из поля ИНН формы и отрабатывает без записи карточки. Однако каждый раз вылетает сообщение о том, что «для продолжения нужно подключиться к ИТС», приходится нажимать отмену и только со второго раза заполняется.

    Можно ли как-то это исправить без обновления платформы?

    Reply
  20. Anton64

    (21) Здравствуйте, Илья! Посмотрю, можно ли отключить через расширение эту стандартную проверку.

    Reply
  21. user748451

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

    Все равно удобнее, чем каждый раз отказываться от ИТС отдельным кликом:)

    Reply
  22. Anton64

    (23) Согласен, спасибо! Проверю оба варианта решения.

    Reply
  23. Anton64

    (23) Илья, отключил стандартную проверку, теперь окно про итс не должно появляться.

    Reply
  24. user921389

    На сколько заполнений будет работать ? А то получится, что 100 контрагентов заполнишь — и будет недоступно…

    Reply
  25. Anton64

    (26) 10 тыс запросов в сутки бесплатно

    Reply
  26. AlexO

    Чем ваше расширение отличается вот от этого:

    Автозаполнение реквизитов контрагентов по ИНН для БП3.0, ERP2.4, УТ11.4, КА2.2?

    Reply
  27. Anton64

    (28) Я этим расширение не пользовался, по судя по тексту публикации отличается сервисом на базе которого работает заполнение (там это КонтурФокус, а здесь дадата), адрес в моем решении разбивается на поля (если загружен ФИАС соответствующего региона) , там похоже он сохраняется строкой; у меня только по ИНН заполняются данные, там еще ищутся совпадения по наименованию.

    Reply
  28. AlexO

    (29) а это сертифицированный «заполнятель»? Или они так, качают базы сами отовсюду? Почему остановились именно на «dadata.ru»?

    Reply
  29. Anton64

    смотря, что вы имеете ввиду под «сертифицированным». Насколько я знаю, они берут данные напрямую из ФНС.

    Почему дадата — понятное API, большой лимит бесплатных запросов.

    Reply
  30. ssn5810

    почему нельзя сделать запонение по инн уже существующих контрагентов

    Reply
  31. ssn5810

    «…отключил стандартную проверку, теперь окно про итс не должно появляться» ПОЯВЛЯЕТСЯ !!!!

    что не так ?

    Reply
  32. natakov79

    Подскажите пожалуйста будет ли работать ваше расширение на Бухгалтерия предприятия, редакция 3.0 (3.0.64.28)1С:Предприятие 8.3 (8.3.12.1567)

    Reply
  33. Anton64

    (34) Добрый день! К сожалению, нет сейчас такой версии под рукой, чтобы проверить.

    Reply
  34. VKuser15680667

    Всем доброго времени суток, никто на ERP 2.1 не проверял? Работает?

    Reply
  35. kydesniklesa

    Доброго времени суток! Сегодня обновила Бухгалтерию предприятия на релиз 3.0.56.69 расширение перестало работать. Выдает ошибку: Критичная: Значение контролируемого свойства РежимСовместимости у объекта не совпадает со значением в расширяемой конфигурации. Скриншот прилагается. Платформа 8.3.12.1616.

    Reply
  36. Anton64

    (37) Здравствуйте! В ближайшее время доработаю расширение под новую платформу. Ждите обновления.

    Reply
  37. Anton64

    (37) добавил файл для платформы 8.3.12. Протестировано на версии Бухгалтерии 3.0.65.69

    Reply
  38. kydesniklesa

    Добрый вечер! Скачала файл для Бухгалтерии 3.0.65.59 и платформы 8.3.12 расширение отлично работает. Благодарю.

    Reply
  39. virs

    Под Бухгалтерией предприятия, редакции 3.0 (3.0.65.80) работает?

    Reply
  40. Anton64

    (42) Последний проверенный релиз лично мной — 3.0.65.69. На 3.0.65.80 еще не проверял, как будет возможность — проверю и отпишусь.

    Reply
  41. virs

    Так и не понятно работает под Бухгалтерией предприятия, редакции 3.0 (3.0.65.80) и выше, где адреса по муниципалитетам?

    Reply
  42. kydesniklesa

    Проверяла расширение работает на релизах Бухгалтерия предприятия 3.0.65.80 и на 3.0.66.53 и на платформе 8.3.13.1513.

    Reply
  43. Anton64

    (45) Большое спасибо за информацию!

    Reply
  44. user921389

    После перехода на УНФ 1.6.16.120 — перестала работать. Платформа 8.3.13.1513.

    Хотя еще совсем недавно даже на 1.6.15.65 — работала хорошо. (((

    Reply
  45. user610877_lecogor

    В последнем релизе бухгалтерии 3.0 заполняет адреса в соответствии с классификатором ФИАС,

    или только представление?

    Reply
  46. Anton64

    (48) У меня заполняет в соответствии с классификатором.

    Никакой информации по поводу наличия изменений по работе с адресами в новых релизах у меня нет, поэтому предполагаю, что заполнение должно работать как и раньше.

    Reply
  47. klima

    Добрый день! а в базовой версии Бухгалтерии 3.0 будет работать?

    Reply
  48. Anton64

    (50) Добрый день! К сожалению, нет базовой версии, чтобы проверить, но если в ней в принципе работают расширения, то и это будет работать.

    Reply
  49. user921389

    На новой УНФ так и не заработало. (

    Reply
  50. Palmer1976

    Чем отличаются файлы расширений УНФ 1.6.13 для платформа 8.3.12 (1.0.1) и для платформа 8.3.10 (1.0.2) ? Какой лучше скачать для УНФ 1.6.16 на платформе 8.3.13 и заработает ли расширение на ней?

    Reply
  51. Palmer1976

    (52)

    Версия этого расширения для УНФ 1.6.16 опубликована там

    Reply
  52. Palmer1976

    Расширение для актуальной версии УНФ 1.6.16 можно скачать в

    публикации № 1000798

    Reply
  53. user929766

    добрый день, на 3.0.67.74 не работает((

    Reply
  54. yelena-ppm

    Бух 3.0.67.67 тоже не работает :(((

    Reply
  55. user970589

    (57)на предыдущем работало?

    Reply
  56. Anton64

    (56) Добрый день. Посмотрю в ближайшие пару дней в чем проблема.

    Reply
  57. Anton64

    (57) исправим, отпишусь позже

    Reply
  58. evg111

    Добрый день! Никто не пробовал на Бухгалтерии 3.0.65.91

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

    Reply
  59. yelena-ppm

    исправили?

    Reply
  60. Anton64

    (62) загрузил файл «Заполнение данных контрагента по ИНН в 1С Бухгалтерия 3.0.65.69. Платформа 8.3.12» в Бухгалтерия 3.0.67.74 платформа 8.3.13.1644 — нет никаких ошибок, всё работает без внесения изменений. Напишите, пожалуйста, какая именно ошибка у вас возникает?

    Reply
  61. Anton64

    (56) Здравствуйте! Проверил файл «Заполнение данных контрагента по ИНН в 1С Бухгалтерия 3.0.65.69. Платформа 8.3.12» на версии Бухгалтерии 3.0.67.74 платформа 8.3.13.1644 — всё штатно работает. Какая у вас платформа и что конкретно не получается?

    Reply
  62. Anton64

    (61) Добрый день. Вам должен подойти файл файл «Заполнение данных контрагента по ИНН в 1С Бухгалтерия 3.0.65.69. Платформа 8.3.12».

    Reply
  63. Palmer1976

    Расширение для актуальной версии УНФ 1.6.17 можно скачать в

    публикации № 1000798

    Reply
  64. vechiy

    в erp2.4 заработает?

    Reply

Leave a Comment

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