Загрузка классификатора банков РФ из файла (Управляемая форма)(OFF-Line). БП 3.0




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

20 Comments

  1. sgirg

    Roin2512, а конфигурация у тебя где крутится? Почему, передавая управление серверу, ты пытаешься обратиться к файлу, находящемуся на клиенте?

    Reply
  2. Roin2512

    Обновления производить на сервере. Т.к. я не стал заморачиваться с реализацией возможности обновления на клиенте. Нужно было быстро накидать обработку. которая работала бы )))

    Reply
  3. rohini

    При запуске пишет «Метод объекта не обнаружен (ОбновитьБанкиИзКлассификатора)»

    Reply
  4. toxavich

    после последнего релиза БП 3.0, ошибка:

    {Форма.ЗагрузкаКлассификатора.Форма(842)}: Метод объекта не обнаружен (ОбновитьБанкиИзКлассификатора)
    РаботаСБанкамиПереопределяемый.ОбновитьБанкиИзКлассификатора(ПараметрыЗагрузкиФайловРБК[«СписокИзмененныхБанков»], 0);
    Reply
  5. Roin2512

    Забыл залить новую версию. Сейчас залил новую.

    rohini, toxavich, кидайте майл вам вышлю на почту.

    Reply
  6. Roin2512

    Скачавать скачавают, а звездочки не ставят )

    Reply
  7. N111

    Обработка пишет ошибку пробую в БП 30.41.64

    Скачала файл bnk/Zip с рбк, Обработка пишет Возникла проблема с файлом классификатора банкав…

    Файл не найден D:\bnk.zip файл там есть что делаю не так?

    Reply
  8. Roin2512

    (7) N111, Попробуйте проделать тоже самое именно на сервере

    Reply
  9. toxavich

    (8) добрый день

    {Форма.ЗагрузкаКлассификатора.Форма(842)}: Метод объекта не обнаружен (ОбновитьБанкиИзКлассификатора)
    РаботаСБанкамиПереопределяемый.ОбновитьБанкиИзКлассификатора(ПараметрыЗагрузкиФайловРБК[«СписокИзмененныхБанков»], 0);
    

    на версии 3.0.42.88

    Reply
  10. Roin2512

    (9) toxavich, залил обновленную версию. Пробуйте

    Reply
  11. Stety

    Супер. Для полной красоты в свойствах элемента формы Декорация2 хорошо бы добавить событие нажатия, например:

    &НаКлиенте
    Процедура Декорация2Нажатие(Элемент)
    ПерейтиПоНавигационнойСсылке(«http://cbrates.rbc.ru/bnk/bnk.zip»);
    КонецПроцедуры

    Чтобы «дома» zip скачать, а потом принести, положить в папочку и загрузить…

    Reply
  12. Roin2512

    (11) Stety, Учём такой ход )

    Reply
  13. espero

    Блин, для БГУ 2.0 не подошло. Придется допиливать…

    Reply
  14. sohoware

    Будет ли работать с УНФ (Управление нашей фирмой, редакция 1.6) ?

    Reply
  15. Roin2512

    (14)Не пробовал, но думаю, что нет. Нужно допилить будет

    Reply
  16. Roin2512

    Обновил обработку

    Reply
  17. deman_ru

    Не работает обработка, получаю вот такое сообщение: http://prntscr.com/hyikoj

    Релиз бухгалтерии: 3.0.55.16

    Reply
  18. Roin2512

    Обработка обновлена. Сорри за задержку. Бываю на сайте очень редко

    Reply
  19. Чужой

    День добрый. Скачивал в 2015 году. Пригодилась. Сейчас новую версию заново скачивать или можете на почту выслать?

    Reply
  20. Roin2512

    (19) Если не критично, скачайте снова, пожалуйста

    Reply

Leave a Comment

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