Сервисная обработка для работы с РИБ




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

25 Comments

  1. Fominro

    Спасибо, полезная штука 🙂

    Reply
  2. lexxgiga

    Пишет при проверке GUID:

    Поле не найдено «Спр.Код» Спр.<<?>>Код,

    Reply
  3. gnataly

    (2) Предполагается, что у справочника должен быть реквизит «код», во всех типовых конфигурациях он есть. Какой справочник пытаетесь анализировать?

    Reply
  4. lexxgiga

    Реквизит Код есть всегда :)) Это обязательный реквизит справочника. Странно, посмотрел код обработки — должно работать, найду причину — отпишусь

    Reply
  5. ТвояСовесть

    Вещь полезная, помогает понять принцип этих обменов, спасибо

    Reply
  6. MatveyIgor

    а какое практическое применение??? не вижу полезного ничего

    Reply
  7. gnataly

    (6) О практическом применении написано в описании. Если полезного не видится,

    никто скачивать не заставляет :).

    Reply
  8. MatveyIgor

    специально скачал, перед тем как писать комент, и так и не понял че делать с ее помощь, одно только полезное увидел — удаление записей в регистрах если нету ссылок, но когда они быают??? если конфа криво написана, тогда да или план обмена тоже также составлен…

    Reply
  9. MRAK

    Типовая помощней будет. Единственно, что отвязывать главный узел не умеет.

    Типа этой:

    http://infostart.ru/projects/2639/

    Reply
  10. NtS

    спасибо, очень помогло при обмене глюк исправить

    Reply
  11. Hron

    плюс авансом 🙂 надеюсь работает как описано, очень нужная вещь 🙂

    Reply
  12. brato4karik

    Скачал и опробовал обработку для разъединения РИБ большого объема, обновления каждой почки независимо и последующее объединение. Интерфейсная часть выполнена приемлемо, все возможности обработки доступны и легко используются

    Reply
  13. Andrew_flyer

    авансом плюс! Удачи!

    Reply
  14. Honesty

    Спасибо, очень полезная штука. Помогла в критический момент

    Reply
  15. Grey_D

    Регулярно пользуюсь, благодаря динамическим обновлениям и их глючности )

    Часто после применения изменений на удаленных узлах, центральный отказывается принимать обмен пока не накатишь cf-ник в ручную.

    Reply
  16. iskinn

    Очень нужные обработки, т.к. штатными средствами это сделать намного труднее.

    А тут весь функционал, за пару нажатий — все можно сделать, отсоединить-присоединить. Установить Главный узел и прочее.

    Спасибо!

    Reply
  17. Rodnaya

    Хорошая нужная обработка. Очень проста в использовании, решает сложные ситуации с РИБ. Спасибо

    Reply
  18. vprus

    Спасибо, очень помогла! А как насчет доработки функционала?

    Reply
  19. gnataly

    (18) vprus, какие будут пожелания?

    Reply
  20. Elis_VP

    Спасибо!

    Reply
  21. communist

    год уже 2014

    обработка стоит дата 2013, платформа 8.1. Кому она нужна сейчас, если она не работает на 8.2

    Reply
  22. gnataly

    (21) communist, Все легко конвертируется и работает также в 8.2, откройте файл в конфигураторе…

    Reply
  23. targetov74

    При открытии выдает «ошибка подключения внешних метаданных, внешние метаданные не могут быть прочитаны». 1Розница, редакция 2.0.8.12, поатформа 1С:Предприятие 8.3 (8.3.5.1428) . Открываю Файл-открыть. Она не подходить или я что то не так делаю? Сделал конвертацию через Конфигуратор. Теперь при открытии пустая форма.

    Reply
  24. targetov74

    Разобрался, переключил пользователя в обычное приложение

    Reply
  25. element

    у Вас в арсенале не будет такой же для 8,0 / ут 10.2 ?

    если что пишите element_ooo@mail.ru

    Reply

Leave a Comment

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