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

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 не будет опубликован. Обязательные поля помечены *