Script Creator от Microsoft




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

49 Comments

  1. Olga_siberia

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

    Reply ↓
  2. Abadonna

    (0) Krasnoyarsk — rules 😉

    Reply ↓
  3. fAngel

    Спасибо

    подробно расписана утилита

    http://www.samag.ru/art/02.2006/02.2006_02.html

    Reply ↓
  4. andrewalexk

    🙂

    прикольная утилита но куда она в инет-то лезет?

    Reply ↓
  5. AmoreMe

    Для andrewalexk. Специально посмотрел TCPView от Sysinternal … Ни куда она не лезит…

    Reply ↓
  6. Душелов

    (4) Очень часто софт в инет лезет за проверкой обновлений на сайт производителя.

    Reply ↓
  7. hogik

    Не понимаю. На мой взгляд, это должно находиться в разделе «закладки» с ссылкой на http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

    Reply ↓
  8. hogik

    (5)(AmoreMe)

    «Ни куда она не лезит»

    Угрюмо лезет по 84.53.182.96 ;-)))

    Reply ↓
  9. AmoreMe

    (8) Инструмент Whois: 84.53.182.96

    IP: 84.53.182.96

    inetnum: 84.53.128.0 — 84.53.191.255

    org: ORG-AT1-RIPE

    netname: EU-AKAMAI-20041105

    descr: Akamai Technologies

    descr: PROVIDER Local Registry

    country: EU

    admin-c: NARA1-RIPE

    admin-c: NF1714-RIPE

    tech-c: NARA1-RIPE

    tech-c: NF1714-RIPE

    status: ALLOCATED PA

    mnt-by: RIPE-NCC-HM-MNT

    mnt-lower: AKAM1-RIPE-MNT

    mnt-routes: AKAM1-RIPE-MNT

    mnt-domains: AKAM1-RIPE-MNT

    source: RIPE # Filtered

    organisation: ORG-AT1-RIPE

    org-name: Akamai Technologies

    org-type: LIR

    address: C/O Noel Freedman, 8 Cambridge Center

    address: 02142

    address: Cambridge, MA

    address: United States

    phone: +16174444768

    fax-no: +16174444768

    admin-c: NF1714-RIPE

    admin-c: NARA1-RIPE

    mnt-ref: AKAM1-RIPE-MNT

    mnt-ref: RIPE-NCC-HM-MNT

    mnt-by: RIPE-NCC-HM-MNT

    source: RIPE # Filtered

    role: Network Architecture Role Account

    address: Akamai Technologies

    address: 8 Cambridge Center

    address: Cambridge, MA 02142

    phone: +1-617-938-3130

    abuse-mailbox: abuse@akamai.com

    admin-c: NF1714-RIPE

    admin-c: JP1944-RIPE

    tech-c: NF1714-RIPE

    tech-c: JP1944-RIPE

    tech-c: APB15-RIPE

    nic-hdl: NARA1-RIPE

    mnt-by: AKAM1-RIPE-MNT

    source: RIPE # Filtered

    person: Noam Freedman

    address: Akamai Technologies

    address: 8 Cambridge Center

    address: Cambridge, MA 02142

    phone: +1-617-938-3130

    abuse-mailbox: abuse@akamai.com

    nic-hdl: NF1714-RIPE

    mnt-by: AKAM1-RIPE-MNT

    source: RIPE # Filtered

    % Information related to ‘84.53.182.0/23AS20940’

    route: 84.53.182.0/23

    descr: Akamai Technologies

    origin: AS20940

    mnt-by: AKAM1-RIPE-MNT

    source: RIPE # Filtered

    Reply ↓
  10. AmoreMe

    Но у меня такого не наблюдается 🙂 Молчит как партизан на допросе! И ни куда не лезет! Ещё раз проверил…

    Reply ↓
  11. AmoreMe

    (7) Это то так конечно, но думаю новичку простительно. Разберётся!

    Scriptomatic2 на мой взгляд организован получше и языков поддерживаемых больше (добавлены Perl, JScript, Python) а вот С# и VB.NET отсутствуют… Это кое кому не подойдёт в принципе! Да и расширение .hta многих может не устроить.

    Reply ↓
  12. coder1cv8

    А у меня говорит: «Ошибка при инициализации приложения» (

    Reply ↓
  13. Olga_siberia

    (12)Во первых хотелось бы увидеть скрин диалогового окна с кодом ошибки, во вторых не понятно о чем идет речь о Scriptomatic2 или о той утилите которую выложила я. Раз не ясно ни то ни другое, остается только предпологать если это речь идет о .hta то многие антивирусные программы «очень настороженно» относятся к этому расширению и могут не давать этому приложению норм загрузиться…Предположим у вас стоит(или стоял) Daemon Tools,тогда вместе с собой он прописывает драйвер sptd.sys который активно мешает норм работе отладчикам режима ядра и многим др.системным утилитам. Ну это только предположения т.к. никакой точной инф. вы не выдали…

    Reply ↓
  14. Olga_siberia

    agentz, Legavaz, Евген_1С, Unstoppable, kitminsk, artbear, Rebelx, kitt, tormozit, halushka, fAngel, Abadonna, cs25, PeRom, wer_alex, Tempus, Душелов, coder1cv8, AmoreMe- спасибо за поддержку!!!!!!!!!!!!!!!

    Reply ↓
  15. Душелов

    (12) А мой любимый .Net Framework стоит? 🙂

    Reply ↓
  16. coder1cv8

    (13)

    Речь идет о WMICodeCreator.exe, вот скрин ошибки: http://www.picamatic.com/view/1429479_Error/

    ОС: Win XP Prof SP2

    Антивирус: Symantec

    Какие ещё параметры надо, спрашивайте…

    Reply ↓
  17. Душелов

    (16) Так ему, если я не ошибаюсь, фреймворк 1.1 требуется 😉

    Reply ↓
  18. Душелов

    INSTALLATION AND USE RIGHTS. You may install and use any number of copies of the software on your devices for your use solely with .NET Framework, version 1.1 or later.

    Reply ↓
  19. coder1cv8

    +(16) Если нужен .Net Framework то напишите в заголовке, пожалуйста.

    Reply ↓
  20. Душелов

    (19) Давно пора использовать мелкософтские фреймворки 😉

    Reply ↓
  21. coder1cv8

    (20) Мои взгляды в этом вопросе совпадают со взлядами Джоэла Сполски: http://russian.joelonsoftware.com/Articles/PleaseSirMayIHaveaLinker.html

    😉

    Reply ↓
  22. Olga_siberia

    Программа написана на С# (WindowsForms ) требуется Framework 1.1 (17) Прав!

    Reply ↓
  23. Olga_siberia

    Пожалуйста, лови!!!(19)

    Reply ↓
  24. Душелов

    (21) Есть такой линкер, только зачем мне выкладывать со своими 50кб-шными разработками в архиве еще 4-6 мегов, когда мне просто указать версию фреймворка и все 🙂 Благо, в той же висте 2 фреймворк уже стоит, да и виндус апдейты его ставят 🙂

    Reply ↓
  25. Abadonna

    (19)> Если нужен .Net Framework

    В Киевской поликлинике после Чернобыля:

    — Девушка, а где тут рентген-кабинет?

    — А у нас теперь везде рентген-кабинет!

    coder1cv8, щас почти везде фреймворк требуется, особенно с легкой руки Душелова :))))))))))

    Reply ↓
  26. O-Planet

    Собственно, из-за этой дурацкой тенденции мелких все завязывать на свои библиотеки, которых может и не быть у нормального юзера, не использую MVC++, Builder рулит!

    Reply ↓
  27. Душелов

    (26) Мелкие они такие… Они даже на свою ОС много чего завязали :))))) Понапридумывали фреймворки и директиксы всяческие…

    Reply ↓
  28. Abadonna

    (26,27) Builder стопудов завязан на API, а это, однако, kernel32.dll — ядро виндов 😉

    Другое дело, что Борланд прикомпилирует к исполняемому файлу большинсво кода оттуда — остюда несколько увеличенный размер файла, зато лично я всегда уверен, что заработает в любой винде и всегда

    Reply ↓
  29. Olga_siberia

    (28)ядро состоит из набора функций в Ntoskrnl.exe,а kernel32.dll- это систем.библиотека функции которой вызываются в пользовательском режиме…

    Reply ↓
  30. Olga_siberia

    Молчание — единственная вещь из золота, не признаваемая женщинами.

    Reply ↓
  31. fAngel

    Еще одно место выпрашивания фоток 🙂

    Вам рекламы мало

    Reply ↓
  32. AmoreMe

    (32) О какой рекламе речь идёт? Ну да ладно… А на счёт минуса, это забавно у вас получилось! Возвращать не буду. Так как в рейтинги не верю! И опять же помяну добрым словом господина (hogik) с которым мы однажды сцепились и рука то у него зудилась не меньше чем у вас. Однако вот и разница! Удачи!

    Reply ↓
  33. Olga_siberia

    фото уже есть,я как человек открытый приветствую себе подобных, мне скрывать нечего!!!Фото и имя реально

    Reply ↓
  34. stol6

    Все бы хорошо, но троян в архиве.

    Reply ↓
  35. Olga_siberia

    Так так ребята не надо войны, вам делить пока нечего никаких минусов!!!! Я насчет вируса проверь свой комп дорогой stol6

    Reply ↓
  36. Душелов

    Троянов нет.

    Reply ↓
  37. tormozit

    (37) Там где их нет, они могут когда то появится. Даешь ссылки на оффсайты!

    Reply ↓
  38. Atheist

    На сайте Microsoft эта програмулька в открытом доступе, правда она на C#. Нужно становить Visual C# и скомпиллировать файл и никаких заморочек с вирусами.

    Reply ↓
  39. Душелов

    (39) Так может быть вирус на c# в коде! :)))))

    Reply ↓
  40. Olga_siberia

    ОК(39)

    Reply ↓
  41. Abadonna

    (31)>но если бы ты выложила свою фотографию

    Пооблизывайся 😉 Девушка-то нашенская, красноярская 😛

    Reply ↓
  42. Olga_siberia

    м-да,а главное в тему

    Reply ↓
  43. tormozit

    (39) В таком случае конечно спасибо автору за выложенный скомпилированный вариант.

    Reply ↓
  44. Душелов

    Немного доработал: http://infostart.ru/profile/3975/projects/3004/

    Reply ↓
  45. Froloid

    Симпотная штучка. Душелову +

    Reply ↓
  46. Froloid

    Пардон, промазал (закрылось окно, в истории открыл не ту ссылку) ;0)

    Reply ↓
  47. Olga_siberia
  48. OptimusMaximus

    Реальная, вешь 😉

    Reply ↓
  49. andrewPt

    Так ему, если я не ошибаюсь, фреймворк 1.1 требуется

    Reply ↓

Leave a Comment

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