Заполнение данных контрагентов по ИНН (Управляемые формы + Обычные формы (УПП 1.3))




Принцип обмена данными из 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='\

23 Comments

  1. w.r.

    (1) maxim4566, номер релиза напишите, пожалуйста

    Reply
  2. w.r.

    (1) maxim4566, Бухгалтерия предприятия, редакция 3.0 (3.0.42.73) — последняя доступная версия на 11.11.15. Обработка работает

    Reply
  3. maxim4566

    Я прошу прощения не туда коммент записал. Он к вам не относиться.

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

    Но не заполняет адреса. Если после вашей обработки зайти в контрагента то там адрес (Что юр. что факт.) будет пуст. Если нажать на кнопку в самой карточке контрагента «Заполнить по ИНН» то адреса заполняются. Исправьте пожалуйста.

    Релиз 3,0,42,46 (8,3,6,2390)

    где взять «последняя доступная версия на 11.11.15» тут от 30,10,15

    Reply
  4. w.r.

    (4) maxim4566, исправил

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

    Reply
  5. maxim4566

    (5)

    Обновил конфигурацию до релиза 42,74 результат прежний:

    Адреса не заполняет ваша обработка

    Reply
  6. maxim4566

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

    В последней версии обработки на релизе Бухгалтерия предприятия 3,0,42,74 все работает корректно.

    Reply
  7. if74

    Добрый день!

    Управление торговлей, редакция 11.1 (11.1.10.180)

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

    Можно ли открыть другим способом?

    Reply
  8. yelena-ppm

    Добрый день! А для Бух 2.0 есть такая обработка?

    Reply
  9. w.r.

    (9)

    Здравствуйте! Пока нет, в планах есть сделать обработку и под обычные формы, в том числе и для БП 2.0

    Reply
  10. rigrigash

    Доброго времени суток!

    УПП 1.3.92.2

    {ВнешняяОбработка.ЗаполниеКонтрагентовПоИНН.МодульОбъекта}: Переменная не определена (ДанныеЕдиныхГосРеестров)

    Reply
  11. w.r.

    (11)

    Добавил обработку с поддержкой обычных форм (УПП 1.3). Подробнее в ЛС

    Reply
  12. archyonemore

    вот такая картина в 1с упп 1.3.93.1 http://clip2net.com/s/3NgB1F1

    Reply
  13. archyonemore

    и по обоим ссылкам одинаковые обработки!

    Reply
  14. Andruhin

    Не работает (1С:Предприятие 8.3 (8.3.10.2252), УПП 1.3.96.1, )

    {ВнешняяОбработка.ЗаполниеКонтрагентовПоИНН.МодульОбъекта}: Переменная не определена (ДанныеЕдиныхГосРеестров)

    Reply
  15. bahcha8

    Добры день, а будет ли работать обработка на УТ 10.3?

    Reply
  16. dins

    Добрый день. При нажатии кнопки «Заполнить данные» появляется ошибка ({ОбщийМодуль.ДополнительныеОтчетыИОбработкиКлиент.Модуль(144)}: Некорректное значение параметра «ДополнительнаяОбработкаСсылка»:

    Передан тип «Строка», ожидался «Дополнительный отчет или обработка».

    ВызватьИсключение ТекстОшибки;)

    1С Управление торговлей 11 релиз (11.2.3.202) платформа 8.3.10.2580

    Reply
  17. w.r.

    (15)

    ДанныеЕдиныхГосРеестров

    На типовой версии УПП 1.3.96.1 обработка работает

    Reply
  18. w.r.

    (17)

    Добрый день. При нажатии кнопки «Заполнить данные» появляется ошибка ({ОбщийМодуль.ДополнительныеОтчетыИОбработкиКлиент.Модуль(144)}: Некорректное значение параметра «ДополнительнаяОбраб

    Здравствуйте! Протестировал на

    Управление торговлей, редакция 11.2 (11.2.3.202) (http://v8.1c.ru/trade/)

    Copyright © ООО «1C-Софт», 2003-2016. Все права защищены

    (http://www.1c.ru)

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

    Добавляли обработку как дополнительную?

    Reply
  19. w.r.

    (16) напишите свою версию УТ. Скажу точнее

    Reply
  20. AloneCorsar

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

    {ВнешняяОбработка.ЗаполниеКонтрагентовПоИНН.МодульОбъекта(119,26)}: Переменная не определена (ДанныеЕдиныхГосРеестров)

    Reply
  21. w.r.

    (21)

    Напишите, пожалуйста, конфигурацию и версию

    Reply
  22. buy_sale

    На КА 1.1 не работает.

    В обычной форме нет кнопки ОБновить, проверка не работает, так как в Контрагентах поля Загружать нет.

    В управляемой+обычная в КА 1.1 ошибк

    {ВнешняяОбработка.ЗаполниеКонтрагентовПоИНН.МодульОбъекта}: Переменная не определена (ДанныеЕдиныхГосРеестров)

    а

    Продаете за 5 и 8 стартмани (175 и 280 руб), а код закрыт.

    Reply
  23. w.r.

    (23)

    Здравствуйте! Видимо у вас была очень старая версия БСП, где еще не было этого модуля. Исправил обработку: перенес функционал модуля ДанныеЕдиныхГосРеестров в модуль обработки чтобы она могла работать и со старыми версиями БСП 1

    Reply

Leave a Comment

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