Поздравления с 8 Марта! (4.2.0.1)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *