Монитор заказов поставщикам




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

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

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

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

16 Comments

  1. Re:аниматор

    Сделай пжл для 8.1 а то обработка под паролем. Ругается на функцию ЗначениеНеЗаполнено

    Reply
  2. molot

    Значение не заполнено! Пора уже об этом методе забывать, или код открывайте!

    Reply
  3. VitaliySm

    To Molot:

    1. ЗначениеНеЗаполнено — это функция а не метод.

    2. Ваши рекомендации по тому как мне писать программы я не принимаю, и мне они не интересны.

    3. Обработка делалась для конфигурации УТ 10.2, в ней даже после перехода на 8.1 должна быть функция ЗначениеНеЗаполнено (смотри рекомендации на дисках ИТС). Если нужна была обработка под конфигурацию УТ 10.3 — достаточно было просто попросить. Я считаю, что это не повод для отрицательного голосования, т.к. никакой ошибки нет.

    Reply
  4. German

    Да очень даже ничего ..

    Только «понотов» бы поменьше .. типа «бегающая строка»

    А так еще не плохо бы документы взаиморасчетов или кнопку на открытие ведомости по взаиморасчетов по текущим параметрам

    Reply
  5. VitaliySm

    to German: спасибо за комментарий, пожелание по отчетам принял к сведению, будем добавлять

    Reply
  6. fedor40

    1. Все через 1С написано. Товара в Заказе 6шт, получено 5. Пишет «50% Получено частично».

    2. Структура подчиненности заказа интересно для чего нужна. Чтобы базу повесить? А, не, я понял, чтобы СКЛ продать.

    3. Я всегда знал, что никто в документе долг смотреть не будет. И вот свершилось !!! Написали обработку для просмотра долга в документе !!! САП в панике !!!

    П.С. А почему она называется АСП-Днепр, а не АСП-Днепр-Волга-Тигр-Ефрат. Пожалуйста исправьте название.

    Reply
  7. Sixti

    НЕ могли бы Вы подсказать обработка платная? У меня ни одного заказа не отображается.

    Reply
  8. VitaliySm

    обработка платная, но в этой версии должно показываться 10 заказов.

    Reply
  9. Sixti

    У меня ничего не отображается. Почему бы Вам не сообщить стоимость обработки и не указать как ее приобрести здесь?

    Reply
  10. VitaliySm

    потому что те кому обработка нужна, обычно в приват обращаются с такими вопросами. Продавать через infostart не собираюсь.

    Reply
  11. O-Planet

    Минус однозначно за «обработка платная … Продавать через infostart не собираюсь». Вообще, рекомендовал бы суппорту такое удалять без колебаний. Те, кто такое пишет, либо кидалы, ищущие нубов, либо жмоты, боящиеся кинуть пару wmr на развитие портала, который их пиарит.

    Reply
  12. VitaliySm

    (нулевой планете)можешь удалять, твое мнение мне глубоко … а делать наценку на обработку ради вашей прибыли я не буду. У меня не одна компания купила монитор заказов, и никого я не кидал. и ты бы про пиар помолчал.

    Reply
  13. AlikK

    Класная обработка, спасибо пригодилась!

    Reply
  14. vasvas

    kak to vse pusto

    Reply
  15. gecrby

    Сколько стоит, куда оплачивать?

    Reply
  16. VitaliySm

    по вопросам покупки пишите на vsmokvin@gmail.com

    Reply

Leave a Comment

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