Полезняшка: Библиотека пиктограмм (более 1500 пиктограмм)




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

40 Comments

  1. CheBurator

    Напишите, плиз, как ее интегрировать в конфигурацию.

    Reply
  2. fedor40

    Качество очень низкое.

    Reply
  3. GSoft

    (2) — качество скриншота — 50% от оригинала(да еще и сконвертированная в jpg), так что по ней судить не стоит

    Reply
  4. Sergey K

    «Для интеграции в конфигурацию переименуйте в «ImageCol.bmp»»

    а потом, при выборе картинки надо выбрать этот файл на акладке «»подбор из файла-коллекции» — так?

    Reply
  5. coder1cv8

    Спасибо! Пригодится…

    Reply
  6. ded00786

    $)

    Reply
  7. GSoft

    (4) тут два варианта — если вы хотите чтобы библиотека постоянно присутствовала — тогда надо переименовать и скопировать в каталог ИБ (см. описание). А если библиотека нужна на время текущего сеанса работы с конфигуратором то ее действительно можно выбрать подбором из файла-коллекции при редактировании панели инструментов интерфейса

    Reply
  8. andrewalexk

    🙂

    неплохо..

    а нет подборки иконок для всех типов файлов?

    а то делаю БД для каталогизации ВСЕХ типов файлов

    на основе одной разработки с проклаба и надо бы визуализировать…

    Reply
  9. GSoft

    (8) в чистом виде по типам файлов нет, хато есть метров 700 всяких разных иконок)))))

    Reply
  10. Altair777

    (7) Вы уверены?

    В для SQL-версии? У меня нет в катологе ИБ этого файла, но картинки есть 🙂

    Reply
  11. GSoft

    (10) в случая отсутствия этого файла отображается системная палитра

    если она вас устраивает то и файл не нужен, а если нет идет подмена

    с SQL версией не пробовал, но подозреваю что принцип тот же самый

    Reply
  12. personazh

    Что-то у меня пиктограммки со сдвигом вниз на несколько пикселей 🙁 в итоге верх от одной, а низ от другой..

    Reply
  13. GSoft

    (12) а сучайно не картинку-скрин качали?

    Reply
  14. Gavroch.v

    Огромное спасибо за Ваш труд!А я уже так нарисовался…

    Reply
  15. coder1cv8

    А в восьмерке её можно использовать как-то, кроме как вырезая нужную иконку в графическом редакторе?!…

    Если указать этот файл в качестве файла коллекции — границы иконок съезжают… (

    Reply
  16. GSoft

    я боюсь что у 8ки(сам не проверял) размер иконок другой

    для семерки он 15*16

    Reply
  17. coder1cv8

    (16) Ну конечно! В восьмерке — 16х16

    Все в этой семерке через ж… сделано! 🙁 Размер иконок и тот не стандарт!

    Reply
  18. Ужас бухгалтера

    К сожалению, это в восьмерке через ж… сделано. Стандарт для Вин — 16х15:

    The size can be set only before adding any bitmaps to the toolbar. If an application does not explicitly set the bitmap size, the size defaults to 16 by 15 pixels.

    © MSDN

    Так что, это в восьмерке размер иконок и тот не стандарт! 😛

    Reply
  19. coder1cv8

    (18) А как же общепринятые форматы??? Везде 16х16, первый раз слышу о таком формате для Вин… Да вот хотя бы: http://ico.brush.ru/?work=2

    Reply
  20. Ужас бухгалтера

    16х16 — это стандартный размер ИКОНКИ. А здесь речь идет о размере изображения для кнопки панели инструментов.

    Reply
  21. GSoft

    (16) ошибся — Х:16 У:15

    (20) полностью согласен — «подмена понятий»

    Reply
  22. BIGMAG

    Не могу интегрировать в базу.

    Сделал всё как написано по инструкции.

    Потом создал новую базу (с пустого каталога), беру свойство метаданных, «Библиотека картинки», а картинок нет….

    Если редактировать меню (панели), да выбрать картинки можно, а если нужно на кнопочках в документах или справочниках нарисовать, тогда как?

    Reply
  23. GSoft

    в 7ке библиотека не предназначена для использования на кнопках

    попозже выложу обработку с набором иконок для кнопок и опишу как интегрировавать

    Reply
  24. мх

    В этой же теме выложите набор иконок для кнопок?

    Скоро? (хотелось бы увидеть)

    Reply
  25. GSoft

    (24)

    Выложил пока черновой вариант

    http://infostart.ru/projects/4169

    Reply
  26. rdv

    Ребята, выложите где нибудь отдельно, хоть на файлообменник ImageColFull.bmp и Библиотека пиктограмм для кнопок v.2, или вышлите на мыло rdv собака pisem точка нэт

    Reply
  27. FIZIK

    В набор… спасибо.

    Reply
  28. Евгения Сон

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

    Reply
  29. admin5

    Большое спасибо, очень пригодились

    Reply
  30. skillu

    а есть такое же, но под интерфейс 8.2 ?

    Reply
  31. navic

    Спасибо, пару раз использовала уже.

    Reply
  32. LN

    Спасибо, именно это я искала. Как же хорошо, что есть такой ресурс, как infostart!

    Reply
  33. vpozitive

    Полезняшки и впрямь оказались полезняшками)) не арадуюсь, где еще такую красоту скачаешь)))

    Reply
  34. kostya23

    Спасибо, очень много иконок «прикрутили» к своей конфигурации….

    Reply
  35. SnegAvik

    Нормальная подборочка)))несколько иконок позаимствовал)))

    Reply
  36. goodman12

    прикольно

    Reply
  37. kozorez

    Спасибо, очень хорошо! Ждем обновления!

    Reply
  38. sunny_5

    только недавно читала статью про парня, который на этом млн.долларов заработал)))

    Reply
  39. Floory

    Полезная штука для разработчика 🙂

    Reply
  40. Rockman

    Замечательная подборка. Несколько прикрутил, теперь не нарадуюсь. 🙂

    Reply

Leave a Comment

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