Тюнинг Бух 7.7.: Справка о зарплате.




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

39 Comments

  1. Доня

    Спасибо, все выдает на пять +

    Reply
  2. gutentag

    Ура !

    Reply
  3. Арчибальд

    (2) Ну ты сказал 😮

    Reply
  4. gutentag

    и уже подредактировал для УСН-77 (см.ниже — прикрепленный файл)

    Reply
  5. Арчибальд

    (4) Все равно пристанет. Не найдет в Лайфе 😐

    Reply
  6. Ish_2

    Арчибальд всё донкихотствует . По заказу дам.

    Reply
  7. Арчибальд

    Отнюдь. Я не дон Кихот. Просто благородный дон.

    Отчего бы благородным донам не сыграть в кости там, где им этого хочется!

    © Стругацкие. Трудно быть богом.
    Reply
  8. Доня

    (6) А самому-то слабо!

    Дам боимся :{}

    Reply
  9. Арчибальд

    (8) Пристыди его в личке дополнительно 😉

    Reply
  10. Ish_2

    (8) Доня , Вы должны знать .

    Я развлекаю дам умными разговорами — Арчибальд развлекает дам ВПФ.

    Другого рода развлечения может представить Абадонна.

    Вместе мы сила !

    Reply
  11. Арчибальд

    (10) Вместе ? 😳

    Вряд ли Абадонна будет сотрудничать 😀

    Reply
  12. Ish_2

    (11) Почему не будет ?

    Вперед пустим Абадонну , потом я развлеку умной шуткой и как финал -ВПФ от Арчбальда.

    Хм.. вот это настоящая презентация печатной формы от Арчибальда.

    Уверяю , кавалер «три в одном» должен даме понравиться.

    Твой же подход : «нате вам ВПФ !» смотрится местечково, провинциально и без изюминки.

    Reply
  13. Abadonna
    Уверяю , кавалер «три в одном» должен даме понравиться.

    Если появляюсь я — там уже кавалеры не требуются 😀

    Наоборот, надо еще дам подтягивать 😀 😀 😀

    Reply
  14. Abadonna

    Арчи, жаль, что в лайф. А то можно было сделать еще:

    просто запрос к бухитогам по 10 счету

    просто запрос к бухитогам по 50 счету

    просто запрос к бухитогам по 51 счету

    просто запрос к бухитогам по 25 счету

    просто запрос к бухитогам по …………..

    РЕЙТИНГ бы набрал ❗ 😉

    Reply
  15. Abadonna

    Дамы, открою страшную тайну, где-то у меня валяется моя универсальная

    Просто запрос к бухитогам по любому счету, с разворотом по всем субконто, какие есть у счета 😉

    Reply
  16. Арчибальд

    (13) Вот что-то подобное я и имел в виду в (11) 😐

    (14) Бухгалтеры — это наша среда обитания. Их лелеять надо (здесь не уточняй 😉 ❗ )

    Reply
  17. Арчибальд

    (15) Не прокатит 😀

    Ты бы еще универсальный бух отчет с ИТС предложил 😉

    Reply
  18. Abadonna

    (17)не прокатит, точно! это была моя функция для внутреннего потребления, возвращала ТЗ заполненную, а самое страшное — ничего не печатала красиво. и не было форм цвета хаки 😉

    Reply
  19. Арчибальд

    (18) А в использовании купоросного цвета тебя замечали 😉

    Reply
  20. Abadonna

    (19) зато там, на купоросе, ни единой красной строчки 😉

    Reply
  21. Ish_2

    (13),(14),(15) Ага !

    Арчибальд , а ты заметил , что в (10) употреблено слово «представить» , а не «предоставить» ?

    Reply
  22. Abadonna

    (21) Кого на ламера пингуешь? 😀 😀 😀 😀 😀 😀 😀

    Reply
  23. Ish_2

    (22) А того и пингую..

    Чую завалишь ты «тройную» презентацию. Не дотерпит она до Арчибальда.

    Скажи честно … ведь перво -наперво скажешь даме :»А те двое за мной — полные чмошники.. !» .

    Reply
  24. Abadonna

    (23) Не прав! Я свято чту мужскую солидарность 😉

    Reply
  25. Ish_2

    (24) Ок !

    Reply
  26. Maks_Alexey

    Вас читать — сплошное удовольствие 🙂

    Reply
  27. Арчибальд

    (26) Это мы еще не в ударе 😎

    Reply
  28. larisab

    (27) Ты в личку заглядываешь когда нибудь?

    Reply
  29. Арчибальд

    (28) ❓ ❓ ❓

    Reply
  30. Доня

    А дамы молчат!

    Эй, где дамы? 😮

    Кавалеры оказались разговорчивее.

    Reply
  31. Alav

    И эти люди запрещают мне ковыряться в носу? (с)

    Ни внятного описания ни внешнего вида. Что за кот в мешке? Не конечно если рассматривать инфостарт, как файлопомойку, то тогда пойдет

    Reply
  32. Ish_2

    (31) Так и есть. Запрещаю .

    Это Life . Даме понравился «кавалерский» отчетик — и это главное.

    Reply
  33. Karina

    Оличная штука, спасибо ставлю+

    Reply
  34. kainis

    Спасибо!А нельзя ли сделать расшифровку сумм прописью? 😳

    Reply
  35. Арчибальд

    (34) Это в каком же месте?

    Reply
  36. ctpek03a.ctpek03a

    Спасибо! Отчетик +. А если бы столбик «Начисления» расшифровывался в том числе и по Видам начисления, было бы очень здорово. Если можно, доработайте пожалуйста.

    Reply
  37. hfz13

    Спасибо огромное за такой отчет! Постоянно выписываем такие справки, очень нужная обработка!

    Reply
  38. PastorNak

    Спасибо большое очень выручили.

    Reply
  39. nanulya

    классная штука, давно хотела написать спасибо, но вот с опазданием

    Reply

Leave a Comment

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