Полезные вкусняшки: 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='\

51 Comments

  1. ineoosaki

    Странно, но у меня работает только на восьмерке.

    Хотя, по-барабану — дорабатываем в семерке последний месяц.

    Однозначно полезная вещь. Автору респект и заслуженный плюсище.

    Reply
  2. vip

    > Странно, но у меня работает только на восьмерке.

    Работает не только на восьмерке, но и везде, где только можно. Даже здесь.

    Но только не в 7.7 :))

    Автор, немедленно исправляй! Вещь хорошая.

    Reply
  3. vladnet

    Спасибо )

    А можно еще исправить «,» на «.» на дополнительной клавиатуре, мне вот запятая там практически не требуется, а вот точка ну очень нужна бывает. И не обязательно для 1с, например для ввода ip адресов.

    Reply
  4. vladnet

    ИМХО лучше бы запятую на точку исправить без каких либо дополнительных клавиш

    Reply
  5. GROOVY

    Запятая на нампаде заменена на точку.

    На 7рке не проверял 🙂

    Reply
  6. vip

    > На 7рке не проверял 🙂

    А ты проверь

    Reply
  7. coder1cv8

    А я вот этой http://1c.proclub.ru/modules/mydownloads/personal.php?cid=116&lid=4434 уже года полтора пользуюсь, очень нравится!…

    Reply
  8. vip

    (7) А вот это работает. :))

    Гибко и удобно.

    Спасибо.

    Reply
  9. Abadonna

    (8) >Гибко и удобно.

    А мне неудобно. Жать правый ALT……….

    Кстати, можно было и под левый сделать

    Reply
  10. GROOVY

    Под левый никак. 8рка его сама использует и перехватывает быстрее ОС. Так что нифига не печатается.

    Reply
  11. GROOVY

    Кому интересно делается это софтиной от мелкомягких: http://www.microsoft.com/downloads/details.aspx?FamilyId=8BE579AA-780D-4253-9E0A-E17E51DB2223&displaylang=en#Overview

    Тока осторожней, не налепите мертвых кнопок 🙂

    Reply
  12. Shaman100M

    еще способ — прописать шаблон на наиболее употребимые: больше — > меньше — <

    Reply
  13. GROOVY
  14. awa

    (10) Проще всего использовать http://www.autohotkey.com/

    там можно произвольно под себя настраивать поведение любых сочетаний клавиш.

    И с левым ALT работает в восьмерке прекрасно.

    Reply
  15. GROOVY

    (14) Я принципиально не хотел использовать дополнительный софт. То что я выложил это просто доп раскладка, а не программа. Все реализуется средствами виндов.

    Reply
  16. tormozit

    ЭЭЭ, а фигурные скобки где??

    Reply
  17. tormozit

    В списке Punto Switcher стандартная и эта отображены одинаково!

    Reply
  18. tormozit

    А как эту раскладку сделать по умолчанию в ОС (стандартную не хочется удалять) ?

    Reply
  19. GROOVY

    (18) Просто сделать ее первой.

    (16) Нафига фигурные скобки?

    Reply
  20. tormozit

    Фигурные скобки вроде в языке запросов (расширениях) используют.

    По крайней мере я их часто использую при работе с построителем и компоновкой данных.

    Reply
  21. GROOVY

    (20) Хм.. Согласен. Куда бы их присобачить?… Может вместо обычных скобок?

    Reply
  22. tormozit

    Как ее сделать первой?

    Reply
  23. GROOVY

    (21) http://chistov.ucoz.ru/_pu/0/s65284.jpg <== Кнопки «Вверх/Вниз»

    Reply
  24. tormozit

    (23) Не хотелось бы удалять русскую стандартную. Мало ли что.

    (22) Да пожалуй хороший вариант.

    Reply
  25. GROOVY

    (24) Так не удаляй, просто сделай это первой. Я картинку привел чтоб показать где это можно сделать.

    Reply
  26. tormozit

    (25) На висте работает — там есть кнопки «Вверх» и «Вниз», а на ХП их нет.

    Reply
  27. GROOVY

    Обновил раскладочку…

    Reply
  28. tormozit

    (27) А обновлять ее себя не научил? =(

    Reply
  29. GROOVY

    (28) Да виндовый установщик этой хрени не знает что такое версии 🙂

    Reply
  30. vasilykushnir

    GROOVY, а для 7.7 никак не «лечится»? Чем же она, зараза, такая особенная?

    Reply
  31. GROOVY

    (30) не поддерживает уникод

    Reply
  32. vasilykushnir

    А жаль…. Вещь хорошая.

    Reply
  33. Шёпот теней

    Такие же удобства и более, есть у программы «Punto Switcher»… кому надо — на все случае жизни….

    В ввеличии и талантах господина GROOVY ни сколько не сомневаюсь… Удачи во всех начинаниях…

    Reply
  34. tormozit

    (33) А как сделать то же самое с помощью Punto Switcher?

    Reply
  35. Шёпот теней

    (34) Лично я сделал всё, что надо изменить через замену… например, два символа — \ «она» мне переводит в | … вот как сеёчас например :)))

    вообщем у кого какая фэнтази…

    удачи… во всём…

    Reply
  36. GROOVY

    (35) а как же вводить адреса вида \192.168.1.1 ?

    А с раскладочкой просто жмешь альт и кнопочку 🙂

    К тому же Punto все же доп софтина. А раскладка — просто доп таблица символов в винде.

    Но в принципе кому как удобнее. Дело привычки и вкуса.

    Reply
  37. Шёпот теней

    (35) Осторожно повторяюсь… : «В ввеличии и талантах господина GROOVY ни сколько не сомневаюсь… Удачи во всех начинаниях… »

    …Написал свою ремарку для сведения… потому, что сам мучился… и она мне попалась — это программа…

    а «\» можно вводить а можно и «|» всё зависит от настройки программы … но это только альтернатива… альтернатив много а GROOVY — один… Удачи!

    Reply
  38. VVi3ard

    Ну что сказать, супер!

    Reply
  39. tormozit

    Еще бы инсталлятор умел апдейт делать, а то просто отказывается ставить поверх. Надо сначала старую сносить.

    Reply
  40. tormozit

    Че то так и не нашел, как NULL вызвать.

    Reply
  41. GROOVY

    (40) AltGr+N = null

    Reply
  42. tormozit

    А где же ТИЛЬДА. Все ищем тильду =)

    Ее конечно очень редко используют, но используют.

    ALT+Ё

    Reply
  43. GROOVY

    Новая версия вышла. Изменений есть чутка! Тильда среди них присутствует 🙂

    Обновил у ся на сайте, как залить новый файл сюда в полчетвертого не соображу 🙂

    Reply
  44. kravius12

    (7) И у меня только на этой заработала, а текущая обработина не работает, правда может дело в ноуте. У него вечно какие нибудь прибамбасы. Например не работает CTR Break:)

    Reply
  45. tormozit

    Не устанавливается в Windows 7! Запускаю as administrator, а она валит NTVDM.EXE

    Reply
  46. GROOVY

    (45) Сборка 7068 x64. Встало и работает без проблем.

    Reply
  47. tormozit

    Я пробовал на 7077 x86

    Reply
  48. GROOVY

    (47) Так как раскладка мелкомяговской тулзой делалась, я думаю что к релизу поддержка будет 🙂

    Reply
  49. tormozit

    (48)

    Качал по этой ссылке с оффсайта http://www.chistov.spb.ru/Files/chistov.exe

    Или недокачалось как то или еще что, но скачал по ссылке отсюда и все установилось ок.

    Reply
  50. Sergey_Murzinov

    Жаль под 7-ой не работает

    Reply
  51. kilokilo

    (50), (48) , (44), (37)

    На правах рекламы 🙂

    Если хочется допилить эту раскладку или создать новую — обратите внимание на http://infostart.ru/public/153401/

    Reply

Leave a Comment

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