Поздравление с Новым Годом 2010




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

54 Comments

  1. Abadonna
    Идея не моя. Я лишь доработал поправил картинку и немного текст.

    Ну и положи тогда в раздел Life.

    Reply
  2. vovan519

    Заголовок не хочешь откорректировать?

    Reply
  3. kenshin

    сори о печатался

    Reply
  4. Abadonna

    плюс за правильную реакцию на (1) 😀

    Reply
  5. Доня

    Красиво и глаз от цифр отдыхает, а можно побольше прикольных картинок

    Reply
  6. kenshin

    можно, но только весить оно будет больше, каждая картинка это дополнительных 180 кб -200кб

    Reply
  7. bav

    Че-то с переменными напутано немного:

    НадоПоздравитьс8марта=Нет; Переменная не определена (Нет)

    НадоПоздравитьс8марта=Да; Переменная не определена (Да)

    И анекдоты старенькие))

    А так, конечно, плюс: остальное всё новенькое, да и вообще раньше всех в этом году спохватился)

    Reply
  8. Tatitutu

    +7

    это должна быть или переменная или перечисление ДА или НЕТ

    а вот размер можно было и поменьше сделать в 5 РАЗ посмотри

    всего 499 кб и не в архиве

    Reply
  9. kenshin

    bav 27.11.2009 17:35:55

    Че-то с переменными напутано немного:

    НадоПоздравитьс8марта=Нет; Переменная не определена (Нет)

    НадоПоздравитьс8марта=Да; Переменная не определена (Да)

    Может быть

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

    Reply
  10. kenshin

    Спасибо за + кто поставил 😀

    Reply
  11. Solo1

    А у меня не работает 🙁 С переменными чего-то

    Reply
  12. kenshin

    Solo что за ошибку пишет напиши

    Reply
  13. lukas

    Эх, такую бы разработку да под 8.1… Тоже хочется поздравить 😉

    Reply
  14. kenshin

    если успею напишу для 8 ки

    Reply
  15. AlexBugs

    А как вы такие картинки вставили в отчет?

    хочу вырезать из картинки «AfalinaSoft», но не получается сохранить картинку в отчете 🙁

    Reply
  16. galyna

    Понравилось.

    Reply
  17. mayka

    Спасибо! 😀

    Reply
  18. marina4183

    Спасибо, очень понравилось 🙂

    Reply
  19. громозека

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

    Reply
  20. kenshin

    AlexBugs 02.12.2009 07:37:21

    Просто вставь туда текст или кнопку какую со своим логотипом и все ))

    Reply
  21. NatMar

    Ошибочку выдает 🙁 НадоПоздравитьс8марта=Нет<<?>>;

    Reply
  22. kenshin

    Убрал Логотип

    Reply
  23. Nicholas

    Раз уж указываете платформу 1С: Расчет 7.7 как поддерживаемую, то будьте добры проверить работоспособность в типовой конфигурации 1С: Зарплата и Кадры.

    НадоПоздравитьс8марта=Нет<<?>>;

    {D:1C CALCEXTFORMSОБРАБОТКИ АЙТИШНЫЕПОЗДРАВЛЯЕМНОВЫЙГОДПОЗДРАВЛЯЕМНОВЫЙГОД.ERT(49)}: Переменная не определена (Нет)

    НадоПоздравитьс8марта=Да<<?>>;

    {D:1C CALCEXTFORMSОБРАБОТКИ АЙТИШНЫЕПОЗДРАВЛЯЕМНОВЫЙГОДПОЗДРАВЛЯЕМНОВЫЙГОД.ERT(53)}: Переменная не определена (Да)

    Если НадоПоздравитьс8марта=Нет <<?>>Тогда

    {D:1C CALCEXTFORMSОБРАБОТКИ АЙТИШНЫЕПОЗДРАВЛЯЕМНОВЫЙГОДПОЗДРАВЛЯЕМНОВЫЙГОД.ERT(55)}: Переменная не определена (Нет)

    Нет таких переменных в типовой конфигурации. Чтобы заработало, надо все это дело исправить или хотя бы закомментировать.

    В целом идея хорошая, хоть и не Ваша.

    Reply
  24. kenshin

    NatMar 02.12.2009 10:49:38

    //НадоПоздравитьс8марта=Нет;

    //ПредупредитьЗаДней=10;

    //ДатаСКоторойПоздравлять=»24.11.»+Строка(ДатаГод(ТекущаяДата()));

    //Если (НомерДняГода(ДатаСКоторойПоздравлять)-(НомерДняГода(ТекущаяДата()))<ПредупредитьЗаДней) и (НомерДняГода(ДатаСКоторойПоздравлять)-(НомерДняГода(ТекущаяДата()))>=0) тогда

    // НадоПоздравитьс8марта=Да;

    //КонецЕсли;

    //Если НадоПоздравитьс8марта=Нет Тогда

    // Форма.Закрыть(0);

    // СтатусВозврата(0);

    //КонецЕсли;

    за Комментируй это в конфигураторе и будет счастье

    Reply
  25. kenshin

    Nicholas 02.12.2009 10:56:55 я это написал в шапке что идея по заимствованная

    Reply
  26. kenshin

    подправил

    Reply
  27. AlexBugs

    kenshin 02.12.2009 10:29:36

    Хочу картинку почищенную от логотипа ставить. И так много всяких кнопочек… Подскажите как, pls…

    Reply
  28. kenshin

    я уже выложил почищенную от логотипа

    Reply
  29. AlexBugs

    kenshin 02.12.2009 12:03:18

    Спасибо! за чустую картинку 🙂

    а все-таки… расскажи как их вставлял…

    Reply
  30. kenshin

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

    Reply
  31. irina_ph

    Спасибо. Порадуем бухов

    Reply
  32. Veduin

    Довольно таки интересная затея… Колективу понравилось!

    Спасибо!

    Reply
  33. pavlo

    то, что картинка не разворачивается на весь экран вместе с отчетом и загружается очень долго — не айс.

    а так прикольно!

    Reply
  34. Craig

    (30)Что то быстро пропадают сообщения фокусника (( что делать???

    Reply
  35. support

    Напомните, где шутка про сканер отпечатка пальца на мониторе.

    Reply
  36. nixoli

    Прикольно! Спасибо! 😀

    Reply
  37. Shaman100M

    (35) у чебура?

    Reply
  38. kenshin

    народ отпишите, как вам и что под редактировать в дальнейшем, какая реакция бухгалтеров 717 скачало уже ))

    Спасибо за Спасибо ❗

    Reply
  39. len2304

    а написать, что для обработки надо установить spchapi и движок Дигало, не надо было? 🙂 или это все знают? 😳

    Reply
  40. kenshin

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

    Reply
  41. vlas

    В Новогодней зимней стуже

    Пусть согреет Вашу кровь :

    Елка, горка, добрый ужин

    И взаимная любовь!

    Reply
  42. dobraleks

    УЛЫБНУЛО! 😀

    +1 от меня!

    Reply
  43. dobraleks

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

    Автор порекомендовал бы Вам на кнопку повесить не просто стрелочки «>>» а добавить к примеру так » ЕЩЕ>>».

    Не каждый сразу догадается что можно еще раз нажать на кнопку и будет продолжение, а так к примеру :

    «Поздравляем» — «Поздравляем! ЕЩЕ>>» — «Поздравляем! ЕЩЕ>>» —-«Поздравляем!».

    Я думаю Вы меня поняли что я имел ввиду!

    🙂

    Reply
  44. Littleboy72

    Подскажите новичку, как заставить обработку автоматически загружаться при входе пользователя, плизззззз 🙂

    Reply
  45. kenshin

    Процедура ПриНачалеРаботыСистемы()

    ПредупредитьЗаДней=12;

    ДатаСКоторойПоздравлять=»31.12.»+Строка(ДатаГод(ТекущаяДата()));

    Если (НомерДняГода(ДатаСКоторойПоздравлять)-(НомерДняГода(ТекущаяДата()))<ПредупредитьЗаДней) и (НомерДняГода(ДатаСКоторойПоздравлять)-(НомерДняГода(ТекущаяДата()))>=0) тогда

    НадоПоздравитьс8марта=Да;

    КонецЕсли;

    Если НадоПоздравитьс8марта=Да Тогда

    ОбработкаПоздравление=КаталогИБ()+»extformsПоздравляем.ert»;

    Если ФС.СуществуетФайл(ОбработкаПоздравление)=1 тогда

    ОткрытьФорму(«Отчет»,,ОбработкаПоздравление);

    КонецЕсли;

    КонецЕсли;

    КонецПроцедуры;

    Reply
  46. artbear

    Выложил свой вариант поздравлялки для 8.1

    http://infostart.ru/public/63428/

    моя версия основана на данной обработке + серьезная переделка кода и т.п.

    Подробнее на странице моей разработки.

    ЗЫ долго ждал, пока кто-нибудь сделает для 8.1, но народ не спешил, пришлось самому заняться 🙂

    Reply
  47. bav

    В общем в старой комплексной (2.6) после запуска обработки — проявляется следующий глюк:

    В гм следующие переменные:

    Да=Перечисление.Булево.Да;

    Нет=Перечисление.Булево.Нет;

    До поздравлялки, соответственно: в отладчике Да=Да Нет=Нет

    После запуска: Да=»» Нет=»»

    Оказалось в обработке тоже эти переменные есть.((

    А я уж на агента стал грешить.

    Reply
  48. kenshin
    Выложил свой вариант поздравлялки для 8.1

    http://infostart.ru/public/63428/

    моя версия основана на данной обработке + серьезная переделка кода и т.п.

    Подробнее на странице моей разработки.

    Я НАЧИНАЛ ДЕЛАТЬ НА 8-ке но как написано очень много переделки а времени свободного нет так что молодец что сделал народ надо баловать

    Reply
  49. kenshin

    НУ что какой следующий праздник делать 😉 💡

    Reply
  50. a237

    Ставим юзерам- все довольны (и мы тоже) спасибо.

    Reply
  51. a237

    (47) artbear,

    полезно

    Reply
  52. artbear

    (52) Спасибо лучше всего выразить плюсом за публикацию из (47)

    Reply
  53. milkers

    (0) Поздравление на управляемых формах https://infostart.ru/public/960899/

    Reply

Leave a Comment

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