"В лесу родилась ёлочка" в интерпретации 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='\

20 Comments

  1. JohnyDeath

    Будут предложения/замечания?

    Reply
  2. German

    Надо в коментах песню пустить … а то целиком в код погружаешься

    Reply
  3. sterling

    Пока 1=1 Цикл

    Заяц.ЛеваяКоордината = ЛК;

    ЛК=ЛК+1;

    Заяц.НижняяКоордината = ВК + Окр(abs(sin(ЛК*pi/180)*10));

    КонецЦикла;

    тут меня зациклило ))

    Reply
  4. JohnyDeath

    (3) ну да, наверное точнее будет так:

    Код
    Пока (Заяц.Устал()=0) и (Ёлочка.Жива()=1) Цикл
    Заяц.ЛеваяКоордината = ЛК;
    ЛК=ЛК+1;
    Заяц.НижняяКоордината = ВК + Окр(abs(sin(ЛК*pi/180)*10));
    КонецЦикла;

    Показать полностью

    Reply
  5. CheBurator

    поржал реально.. особенно про зайца

    Reply
  6. rutony

    зачот=)

    Reply
  7. script

    зачот. насмешили.

    Reply
  8. Alice
    Код
    Процедура ВыходЕсть(Веревка) Экспорт
      ИнициалиацияВеревки(Веревка.ЭтотОбъект(),Константы.Мыло.Получить());
      Петля= Веревка.ПолучитьФормуПетли();
      Петля.ОткрытьМодально(10);
      Табуретко = ПолучитьCOMОбъект("Furniture.Stool");
      глРазместитьТелоНаПредмете(Табуретко,ВариантРазмещенияТела.Вертикально);
      глТело.Голова.Расположить(Петля.Получитьобласть("ОбластьПетли"));
      Сообщить("В моей смерти винить Б. Нуралиева");
      Табуретко.ShiftAside(3);
      ЗавершитьРаботуСистемы(Ложь);
    КонецПроцедуры

    Показать полностью

    Reply
  9. passerg

    Давно так не смеялся! +!

    Alice, бесподобно!!!

    Reply
  10. leo stopper

    Супер!!! +++

    Reply
  11. Вадимко

    Ацки отожгли, зачот!

    Reply
  12. all_2

    +++, здоровый юмор повышает производительность труда

    Reply
  13. panteranew

    клёво

    Reply
  14. Altair777

    ыыыыыыыыыыы )))

    Reply
  15. Serj1C

    два плюса )

    Reply
  16. Fuego
    Код
    program Елочка;
    Begin
        Лес.елочка.create();
        While not Лес.елочка.dead do
        Begin
        
            лес.елочка.age := лес.елочка.age + 1;
            if зима or лето then
            begin
                лес.елочка.plain := true;
                лес.елочка.color := cl_green;
            end;
            
            метель.filename:="'D:"Music"NSYNC - Bye Bye Bye.mp3"';
            метель.open;
            sleep(1000);
            метель.play;
            мороз.укутать(лес.елочка);
            GetMessage(H, лес.елочка.handle, 0, 0);
            if h.uint = wm_замерзла then
                dead := true;
        end;
        
        лес.заяц.create;
        лес.заяц.трусливый := true;
        лес.заяц.color := cl_gray;
        x := лес.елочка.left;
        y := лес.елочка.top;
        While x
        Begin
            лес.заяц.left := x;
            inc(x);
            лес.заяц.top := y round( abs(sin(x*pi/180)*10) );
        end;
        
        Winexec("'wolf3d.exe /evil"',0);
        лес.елочка.cuttoclipboard;
        Праздник.pastefromclipboard;
        Праздник.елочка.skin.loadfromfile("'нарядная.jpg"' );
        For i:=1 to SizeOf(Праздник.елочка.радость) do
            Праздник.Дети.Настроение Праздник.елочка.радость;
    End. 

    Показать полностью

    Усё это боянчег, но улыбает 🙂 Вчера тоже чёта написал — милости прошу: http://infostart.ru/blogs/310/

    Reply
  17. JohnyDeath

    (16) Да, боянчег, о чём я честно написал в шапке.

    А ты сделал вид, что сам написал 😉 Да… и спасибо за ссылку на этот же блог! )))

    Видать празднование в полном разгаре )))

    Reply
  18. Fuego

    Да не 🙂 Парням ссылку давал, и забыл в буфер свою скопировать :)) http://infostart.ru/blogs/899/ И вид я не делал — я именно по приведенному в комментарии тексту и надумал. От нечего делать вчера 🙂

    Reply
  19. woozee

    Если описывается процесс про прыгание зайца — почему не описывается процесс прихода ёлочки на праздник?:)) а то получается что она «телепортировалась» с места рождения )) У елочки по умолчанию же нету свойства «ходить» )) Надо прикрутить в общем 😉

    Reply
  20. zveruganet

    её вырезали (срубили) и вставили (почти пришла {явилась}) на праздник, так что процесс вполне описан

    Reply

Leave a Comment

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