Общий файл шаблонов




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

21 Comments

  1. dobrynin.i.s

    Тут http://infostart.ru/public/19343/ высказывалась просьба:

    «Автору надо все это «добро» сложить в откомпилированный chm или html и тогда будет однозначно большой ПЛЮС».

    Я выложил этот файл, поскольку не нашёл на данном ресурсе этого хелпа в формате chm и считаю что в формате файла шаблонов будет удобнее использовать заготовки кода.

    Мой файл шаблонов пока сырой, но я его буду обновлять.

    Если мы будем совместно его создавать, то файл шаблонов будет богаче и быстее создан.

    Reply
  2. Dimka74

    А что за расширение st?

    Reply
  3. artbear

    А почему 8.0? ведь уже давно есть версия для 8.1?

    Reply
  4. dobrynin.i.s

    (2) .st — расширение для файла шаблонов.

    (3) Уже 8.2. Читайте внимательнее название «Файл шаблонов на основе книги А.П. Габец, Д.И. Гончаров 1С:Предприятие 8.0 Простые примеры разработки»», в теме присутствует число 8.0. Не думаю что есть смысл делить на 8.0, 8.1, 8.2. Можно вставлять комментарии перед кодом (8.х)

    Reply
  5. provnick

    Зарегестрированным урезано скачивание, наверное эта информация для ГУРУ, раз всем закрыто, только в сутки раз, вот гуру пусть качают и учатся, да…уж. Понимаю, что пополнять должны профи, но как же начинающим то учится? Хотя конечно каждый в праве распоряжаться «своим» добром.

    Reply
  6. dobrynin.i.s

    (5) для ГУРУ «Только для разработчиков с рейтингом больше 3-х. «.

    Поставил свободное скачивание.

    Кто ставит минусы просьба оставлять комментарии. Чтобы я знал, в чем я не прав.

    Reply
  7. artbear

    (4) Нифига не понял.

    Данный шаблон из книги для 8.2 или все-таки для 8.0 ?

    все-таки есть разница 🙂

    Если 8.2, то измени описание и заголовок на 8.Х

    Reply
  8. provnick

    Вот теперь большое русское мерси+, давайте развивать мысль, а как добавлять? просто скидывать описание полезняшек сюда или как? и по темам или только 8.1;8.2 или только недокументированные? Не ёрничаю, а хотелось бы действительно полезный для всех (особенно чайникового периода) help.

    Reply
  9. dobrynin.s.s@mail.ru

    Шаблон будем делать для 8.Х. Предлагаю скидывать мне на мыло dobrynin.i.s@mail.ru код, ссылки на полезные книги,…

    Я буду сортировать материал и вносить изменения в файл шаблонов. Если код предназначен под конкретную версию платформы будет пометка //8.Х.

    Желательно описание кода и наличие указания на авторство (страна должна знать своих героев)

    (7) Данный шаблон из книги для 8.0, но там не только из этой книги код.

    Я отвечал на вопрос (3) «А почему 8.0? ведь уже давно есть версия для 8.1?» Я не так понял вопрос (artbear имел ввиду книгу, а я платформу)

    (8) Любой грамотный код, без извратов. Если кому-то покажется код в файле корявым, предлагайте свой вариант в письме и обоснования, если не очевидна оптимизация.

    Участники редактирования файла могут вносить предложения по улучшению файла шаблонов. Лучше это делать в этом топике, чтобы народ обсуждал.

    Reply
  10. dobrynin.i.s

    Извините сообщение (9) написал я (system_fatal_error) на компе залогинился мой брат (я это не заметил).

    Reply
  11. dobrynin.i.s

    Обновил файл шаблонов.

    тут http://www.chistov.spb.ru есть файл шаблонов от Павла Чистова. Не стал добавлять его шаблон в свой.

    Думаю развивать ветку «На спеца» для тех кто готовится на спеца.

    Добавил шаблоны из книг

    Радченко «Практическое пособие разработчика 8.1» и «Энциклопедия разработчика».

    Reply
  12. TbSasha

    Скажите а можно как то делать поиск по файлу шаблона?

    Reply
  13. dobrynin.i.s

    (12) Кроме как открыть с помощью блокнота и искать в тексте идей нет.

    тут http://infostart.ru/public/13864/ тема «Редактор шаблонов языка для конфигуратора 1С 7.7. Генерация шаблона.»

    Можно сделать аналог для 8ки и в нём предусмотреть нужный функционал.

    Передумал развивать ветку «На спеца», так как шаблоны кода будут заточены под каркасную конфу, как решаются задачи можно посмотреть тут http://www.chistov.spb.ru.

    Reply
  14. dobrynin.i.s

    добавил в шаблон чужой подшаблон расчетные задачи на сдачу спеца по платформе.

    Reply
  15. frc

    А что за обман с отдельным файлом «Расчетные задачи»? Там практически пустой файл (с одним символом). И как теперь вернуть одну попытку скачки7

    Reply
  16. sfe

    (15) Отдельный файл не нужен, всё есть в главном.

    Сам только что обнаружил. что он пустой.

    Извините, что потратил драгоценную попытку скачки (никак теперь не вернеш попытку)

    Сейчас удалю ненужный файл.

    Reply
  17. dobrynin.i.s

    (16) пост мой. Как видите чтобы иметь несколько попыток скачек нужно несколько аккаунтов.

    Давно не был тут поэтому не вспомнил аккаунт нужный.

    Не могу удалить 2 ой файл. Нужно админов просить.

    Reply
  18. dobrynin.i.s

    Допетрил как файл удалить, но на ссылке посмотреть и скачать все файлы (1), а как заходиш 2 файла. Наверно потом удалится.

    Не качайте файл «Расчётные задачи»

    Reply
  19. BalVlad

    Спасибо, попробую использовать в своей практике.

    Reply
  20. SANILLA

    Спасибо, давно искал 🙂

    Reply
  21. Myskyl

    я тоже качаю, пригодится…

    Reply

Leave a Comment

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