Палитра внешних отчетов и обработок v1.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='\

33 Comments

  1. JohnyDeath

    Ну хотя б скрины чтоль

    Reply ↓
  2. sytkosa

    Видимо скрины вылаживать щас не в моде

    Reply ↓
  3. php5

    Автор, в чем преимущество перед -> http://infostart.ru/projects/3114/ ?

    Reply ↓
  4. tomvlad

    Да, очень интересно, в чем преимущество перед моей?

    Reply ↓
  5. manserg

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

    Reply ↓
  6. DeepDiver

    Интересно!

    Когда на этом сайте перестанут появляться обработки бесплатные!!!???

    ВСЁ К ТОМУ И ИДЁТ?

    Reply ↓
  7. manserg

    Никто и не спорит о полезности вышеозвученной обработки, но прочтите внимательно еще раз ее описание «…сканируется каталог, в котором находится обработка и рекурсивно перебираются каталоги и файлы…»?!

    Где хоть слово сказано про Дополнительные отчеты и обработки самой базы?

    Относитесь уважительно к любому труду! А право выбора у Вас к счастью всегда есть!

    Reply ↓
  8. zzerro

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

    Reply ↓
  9. manserg

    (4) Мда… Стоило сказать «Где хоть слово сказано про Дополнительные отчеты и обработки самой базы?» негодующему автору аналогичной обработки про их принципиальные различия, как он тут-же «Релиз 1.0.004 от 16.04.2009 1. Добавлены возможность использования в качестве источника справочник «Внешние обработки»» добавил в свою функционал данной обработки… Ну мы ответим тем-же, в данной версии добавлена возможность формирования списка отчетов и обработок вне инф. базы! В следующем обновлении будет список часто используемых обработок! В перспективе будет реализован механизм СКД…

    Reply ↓
  10. tomvlad

    Да ради бога, малыш. Никто и не думал негодовать, мне все равно кто и как использует функционал типовых решений (даже выдавая его за свой). Можешь добавлять чего хочешь, никто тебя в плагиате обвинять не станет. Это не «функционал» как ты выражаешься, а небольшая доработка, тем более, что скриншот формы настройки твоего «шедевра», где в заголовке написано «Настроки: Палитра внешних отчетов и обработок v1.0.1», а настройки исключаемых путей содержат 3 пути, вместо того, чтобы сделать хотя бы табличную часть для их хранения, выдают руку студента, работающего год, максимум 2 с 1cv8. Я тебе уже предлагал закончить меряться, если это твое решение — выносить всю грязь на обсуждение — твое право. В любом случае, решать пользователям, которые могут свободно и бесплатно скачать лучшее по функционалу решение здесь: http://infostart.ru/projects/3114/

    Reply ↓
  11. manserg

    =-) Ха дядя, давно не ведемся на высказывания индивидумов не гнушащимся плагиатничать… Быть может тогда скажежешь, почему такой крутой спец как ты, у которго конечно за плечами лет 20 работы с 1С 😉 делает такие ляпы и гордо выставляет их на всеобщее п

    Reply ↓
  12. Totoro

    Вообще эти проекты, по моему мнению, гораздо удобнее для работы с внешними обработками (и бесплатные к тому же):

    http://www.infostart.ru/projects/1472

    http://www.infostart.ru/projects/3667

    Reply ↓
  13. tomvlad

    Слушай, студент, реально достал. Отвяжись уже, не смешивай хобби с работой.

    Reply ↓
  14. manserg

    Да, все проекты имеют право на жизнь, тем более хорошо реализованные, чего нельзя сказать о проекте Дяди Тома-а =-) у которого ляпов в разработке больше чем функционала…

    Кстати в моем проекте тоже используется построитель, так вот вопрос, может кто(речь не о дяде томе) подскажет как можно в построителе запросом сформировать дерево по файлам системы, не нашел способв кроме СКД?!

    Дядя Том, не доставай студента, скоро на пенсию, нервы нужно беречь…

    Reply ↓
  15. tomvlad

    Плохо смотрел, там есть и дерево значений.

    Reply ↓
  16. manserg

    Дядя, Том, не путай сдудента, ну раз такая пьянка, то скажи, а лучше продемонстрируй =-)) как построителем создать дерево по файлам?! А то умничать все горазды…

    Reply ↓
  17. tomvlad

    Не работает построитель с файлами — учи матчасть. Можешь взять дерево значений с путями к файлам и использовать его в качестве источника построителя — это уже не раз обсуждалось.

    Reply ↓
  18. manserg

    И призадумался дядя Том, а как же правда сформировать запросом дерево по файлам… =-)) Жду с нетерпением варианта решения!

    Reply ↓
  19. manserg

    =-)) и даже вариант решения есть?

    Reply ↓
  20. manserg

    (13) Спасибо за ссылки, очень интересные разработки, вот только не очень красиво свою там перечислять, ну да ладно, обработка действительно хорошая…

    Reply ↓
  21. manserg

    Пять баллов «модераторам», вот так взять и обрезать интересную ветку обсуждения! Все больше и больше убеждаюсь в нездоровой коалиции и сговоре владельцев ресурса…

    Reply ↓
  22. manserg

    22 беру обратно свои слова, пока никто не обрезал, просто движек сайта сбойнул повидимому у меня…

    Reply ↓
  23. Abadonna

    (0) А чего демо-то? Думаешь так сложно закомментировать, например,

    ЭлементФормы = Форма.ЭлементыФормы.Добавить(Тип(«Надпись»),»НадписьDEMO»,Истина);

    ЭлементФормы.Заголовок = «DEMO»;

    Reply ↓
  24. manserg

    (39) Abadonna — при желании все что угодно можно взломать, тем более, что ты именно это и сделал причем с помощью чужой обработки по декомпиляции защищенного модуля… Есть чем гордиться!

    Думаю самая лучшая защита 1С разработок от таких как ты — это сложность разработки для понимания таких индивидумов. Потому как найти в интеренте всякие прсеры и ломалки не составит труда не занимающимся ничем полезным людям а посему имеющим массу свободного времени для самовозвышения своего эго… =-))) Пора взлослеть! Обещаю следующие разработки создавить невозможными для понимания кода таким индивидумам.

    Всех благ…

    Reply ↓
  25. Abadonna

    (41) Да уж, где уж нам уж выйти замуж…

    Reply ↓
  26. manserg

    =-))) from «manserg» to «Александр Иванов: Вы внесены в черный список» 2009-04-22 05:41:59

    Во дети… Высказать глупость и чики-домики…

    Reply ↓
  27. manserg

    (41) А ты вместо комментов глупых предоставь свою разработку — или только поливать грязью чужие горазд?

    Reply ↓
  28. Арчибальд

    (43)Автор! В дурь-то переть не надо! Прилично надо себя вести!

    Reply ↓
  29. Abadonna

    (43)>А ты вместо комментов глупых предоставь свою разработку

    А в профайл заглянуть трудновато?

    Reply ↓
  30. coder1cv8

    А можно сделать произвольное число исключаемых путей?…

    Reply ↓
  31. manserg

    =-)) Прикалываешься? Я читал твои разработки по кодированию, думаю ты и сам понимаешь что можно. Я решил это на СКД делать с откупом на пользователя любых всевозможных настроек…

    Reply ↓
  32. manserg

    (44) При всем уважении, готов отвечать за все что делаю, а просто заниматься демогогией некогда…

    Reply ↓
  33. lees

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

    Reply ↓

Leave a Comment

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