Поздравления с 8 Марта! (4.2.0.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='\

58 Comments

  1. marina-na

    Как для всех пользоваелей поставить?

    Reply
  2. AKV77
  3. artbear

    Хорошо.

    Но есть замечания:

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

    2. Пользователей нужно как-то предупредить, что идет слайд-шоу.

    3. Слайд-шоу не всегда удобно 🙁

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

    Добавь, плиз, кнопочки Вперед, Назад, Пауза

    Reply
  4. gutentag

    Ура !

    Reply
  5. alexk-is

    (3) Кнопочки добавил.

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

    Я тоже заметил. Только мне кажется это не скролл-блоки. Это просвечивает предыдущая картинка при перерисовке. На экран изображение выволится не равномерно… 🙁

    Reply
  6. IgorXml

    Для 8 платформы мне больше всего понравилась: http://infostart.ru/public/63428/ — Поздравление с Новым 2010 годом.

    Её легко переделать под любой праздник.

    Моя http://www.infostart.ru/public/66677/ есть почти копия этой обработки. Поэтому я её удалил.

    На работе женщины были очень довольны и в новый год и сегодня.

    Reply
  7. artbear

    (5) Нет, это именно скролл-блоки — горизонтальный и вертикальный.

    Reply
  8. IgorXml

    Последняя версия этой удачная. Жаль что вчера так не работало. Я бы эту своим поставил и не парился.

    Reply
  9. IgorXml

    (7) Цветы бывают разные. Иногда ворованные. В этом есть особый вкус 🙂

    Reply
  10. alexk-is

    (7) Хм… Странно… Попробовал на разных мониторах с различными разрешениями. Везде одинаково. Скролингов нет.

    В 1.2.2.1 есть закомментированные строки. Если с них снять комментарии, то при смене слайдов накрывающие фоновый рисунок элементы будут на время скрываться. Может быть это решит проблему?

    Reply
  11. artbear

    Для 11 года есть заготовки? 🙂

    Reply
  12. alexk-is

    (11) 2011 год — это год кота и кролика. Эта сборка для 2011 года.

    Reply
  13. Tatitutu

    Вот молодец — позитив на лицо. С Новым Годом !

    Reply
  14. alexk-is

    (15) Как скажещь, дорогой.

    Хотя в этой публикации тоже реальные обновления. Теперь слайды формируются на 20% быстрее, а при повторном просмотре на 70% быстрее.

    Reply
  15. Abadonna

    alexk-is, как проггера, я очень даже уважаю. Но прямо руки чешутся поднять вопрос о отнесении слов «Перенумератор» и «Поздравление» с разряду нецензурных и отсекать обработки с такими словами прямо на стадии опубликования. Достало!!!!

    Reply
  16. alexk-is

    (18) Если я соглашусь с таким предложением, то могут расценить как борьбу с потенциальными конкурентами 🙂

    Правда свой «перенумератор» я ещё не опубликовал, а этой публикации уже скоро год будет.

    Reply
  17. albert

    Почему макеты распаковываются в «C:slideshow» ? И обработка реально виснуть начинает через некоторое время…

    Reply
  18. alexk-is

    (20) «C:slideshow» каталог для ImageMagic. У некоторых программных продуктов всё ещё есть проблемы с национальными символами в именах файлов и каталогов.

    Макеты распаковываются в каталоги:

    мКаталогКонвертатора = КаталогВременныхФайлов() + «SlideShowImageMagick»;

    мКаталогСлайдов = КаталогВременныхФайлов() + «SlideShowimg»;

    Начинает виснуть на каком слайде?

    Reply
  19. artbear

    (17) Еще раз: Маньяк, деньги и их заработок — это твои проблемы, а обновления на сайте — личное дело каждого автора.

    Не нужно учить других пользователей, для этого есть другие ответственные люди, ты в их число давно не входишь.

    Делаю предупреждение как МОДЕРАТОР.

    Reply
  20. albert

    (21) У обычных пользователей терминального сервера «обычно» нет доступа к диску «С» ))

    У меня на 14-м слайде фон под кнопками переключения становится черным и картинки далее не переключаются …

    Reply
  21. alexk-is

    (23) Код открыт. Путь можно написать любой. Единственное функциональное ограничение — отсутствие кириллицы.

    По поводу зависания даже не знаю что подумать. Все действия выполняются для всех слайдов одинаковые. Если для 13 слайдов выполнились, то и для 14 тоже должны выполняться, и для остальных слайдов тоже.

    Reply
  22. alexk-is

    Многие спрашивают.

    Добрый день. У Вас эта публикация http://infostart.ru/public/66680. Как там в макеты вставить свои рисунки. Спасибо.
    Есть http://infostart.ru/public/66680/, там поздравление введи слайд шоу. А как там в макетах изменить на свои рисунки.

    С удовольствием отвечаю.

    Чтобы использовать свои картинки для подложки необходимо заменить Макет2. Для этого необходимо создать архив ZIP c картинками JPG и в конфигураторе 1С:Предприятия загрузить этот архив в Макет2.

    Reply
  23. Marina__

    (28) Спасибо. Получилось.

    Reply
  24. voyger_men

    ММММ! какая прелесть, а то наши бедные бухгалтера кроме работы ничего не видят, а тут такой приятный сюрприз! спасибо огромное за идею, и за реализацию!

    Reply
  25. _ink_

    Огромное спасибо. Порадую своих девочек в праздник.

    Reply
  26. MENsa

    Интересно, не за горами этот священный праздник, будет чем порадовать любимых сотрудниц. Спасибо.

    Reply
  27. 1cvirus

    🙂 подготовка к 8 марта идет круглый год

    Reply
  28. haous

    Наконец то наши любимые дамы будут работать в 1С с улыбкой на лице! Спасибо большое!

    Reply
  29. Pterodaptel

    Спасибо огромное! а то поздравления в Outlooke как то приелись))

    Reply
  30. v.l.

    (1), (3), (5), (30) Обратите внимание еще на одну прошлогоднюю поздравлялку.

    в ней реализованы кнопочки «вперёд-назад», генератор случайных чисел, в статье описана интеграция в систему с запуском женщинам (пол физлица).

    http://infostart.ru/public/82288/

    Reply
  31. askoder

    что-то похожее я уже видел тут. Но бухам наверное понравиться

    Reply
  32. Sanek_159

    Огромное спасибо. Собрался сам писать, а тут такое! Порадую свой женский коллектив.

    Reply
  33. takeshi3

    Спасибо за сей труд!В работе пригодится! 😉

    Reply
  34. trumanl

    Бухи порадуются! Спасибо!)))

    Reply
  35. рибак

    что-то похожее уже было. Но жен. понравиться однозначно

    Reply
  36. SanyaGrek

    Спасибо! Качаю. Как раз, то, что надо!

    Reply
  37. trunix

    Спасибо!!! Пусть менеджеры порадуются)))

    Reply
  38. nataon

    Красиво ))

    Reply
  39. Zoomby

    Очень кстати

    Reply
  40. worker1c

    Спасибо за обработку и за проделанную работу. Таким оригинальным способом поздравим наших женщин с их «профессиональным» праздником.

    Reply
  41. worker1c

    Заметили что память, занимаемая 1с-кой растет с каждой новой картинкой на 3-5 Мб. Получается после показа картинки 1С не освобождает память, а все равно держит её в памяти. Даже когда круг пройден, и картинки начинают показываться с самого начала, то память всё равно растет т.е. изображения заново помещаются в память.

    Немного решает вопрос изменение расширения итогового файла с bmp на jpg.

    После показа такого шоу с интервалом 15 секунд, в течение 4 часов и количеством пользователей около 100 терминальный сервер начинает тормозить.

    Это надо учитывать, особенно на слабых серверах 🙂

    P.S. Автору большое спасибо, сразу видно: грамотная работа!

    Reply
  42. Nrk

    Спасибо! Поздравлю бухгалтерию)

    Reply
  43. Murom

    Отличная обработка — поздравление.Сделал у себя автоматический запуск

    1) Вставил обработку в конфигурацию

    2) Прописал в модуле приложения в модуле обычного приложения в конце процедуры ПриНачалеРаботыСистемы()

    Форма = ОБработки.ПоздравленияС8Марта.ПолучитьФорму();
    Форма.Открыть();

    И правда память съедает очень сильно…

    Кто знает в чем дело ?

    Reply
  44. v.l.

    (55) Murom, макеты, формы, временные файлы?

    Жрёт память именно при открытии формы?

    Reply
  45. boggonzikov

    Спб, за поздравление.

    только есть замечание, исправь

    РабочийКаталог = Лев(мКаталогКонвертатора, 3) + «SlideShow»;

    может

    РабочийКаталог = мКаталогКонвертатора + «SlideShow»;

    Получается пишет на диск С:SlideShow, а только не всегда пользователи могут туда писать (работа в терминале), и женщины не увидят поздравлений, программисты снова облажались. У нас так и получилось :).

    Reply
  46. Kamikaze43

    Поддерживаю (57)

    Тоже в спешке тщательно не проверил и на терминале(простой пользователь) получил ошибку при создании папки в корне диска.

    Поправил, но эффект уже не тот =(

    Reply
  47. alexk-is

    (53)(55)(56) Этот эффект наблюдается только в 8.2, в 8.1 всё нормально. Возможно это «особенность» платформы 1С:Предприятия 8.2. Этого не происходит, если закомментировать строку

    Панель.Картинка = Картинка;

    Пока не придумал способа обхода…

    Reply
  48. serpisal

    Всех девушек участников данного ресурса с прошедшим праздником.

    Reply
  49. Murom

    (59)

    Да я тоже это заметил про

    Панель.Картинка = Картинка;

    Пытался перед обновлением картинки присваивать пустую картинку — не помогает. Видно на уровне приложения не происходит освобождение памяти.

    Reply
  50. extrim-style

    1 раз в году обработка особенно актуальна) Спасибо!

    Reply
  51. mevgenym

    Слёзы, сопли, куча радости, от казалось бы такой мелочи, и как то несправедливо не вам они, но пересылаю как могу….

    Reply
  52. Justlink

    Превосходная идея с imagemagick и наложением текста на картинку!

    Но.

    Imagemagick не понимает руских букв. Если профили пользователей названы по-русски, ничего работать не будет.

    И, как сказали выше — обработка пытается содать в корне диска С папку Slideshow, из-за чего у пользователей также ничего работать не будет (если только у них нет прав администратора).

    Так что утро у наших женщин было омрачено сообщениями одинэски «Недостаточно прав» и т.д.

    Да, и еще — у пользователей необходима роль «Право работы с внешними обработками»

    Reply
  53. VNSh

    Обойти проблему с русскими символами можно, получив короткое имя папки. Как-то так:

      FSO = Новый COMОбъект(«Scripting.FileSystemObject»);
    TemporaryPath = FSO.GetFolder(КаталогВременныхФайлов());
    РабочийКаталог = TemporaryPath.ShortPath + «SlideShow
    ab»;
    

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

    Reply
  54. VNSh

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

    Reply
  55. Umix

    Много лет назад, делал подобное для 1с7, можно было получать текстовые сообщения, показывались статичные картинки, а так же флешки, прикольно было наблюдать, как сотрудники бегали к друг-другу смотреть у кого что)))

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

    Reply
  56. anatol.goncearenco

    Добрый вечер,

    Очень заинтересовал Ваш движок для слайд-шоу.

    Но я не часто брожу по форумам и поэтому еще не заработал денег.

    Я сейчас делаю слайд-шоу, используя макет Active Document и презентацию PowerPoint.

    Хочу сделать подобный движок, чтобы все параметры для PowerPoint задавать в 1С, вплоть до формирования из 1С в PowerPoint самой презентации. Т.е., не притрагиваясь «руками» к PowerPoint.

    Если всё-же у Вас будет возможность и желание скинуть на мыло «anatol.goncearenco@mail.ru» Ваш движок, буду очень признателен.

    Анатолий

    Reply
  57. mavom

    Спасибо, красота, порадую женщин.

    Можно ли как то сделать, чтоб один раз проигралось и закрылось?

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

    Reply
  58. silv123

    Спасибо, все хорошо.

    Reply

Leave a Comment

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