Обучение: Учимся строить запросы




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

40 Comments

  1. GSoft

    а сколько у нас учетных систем до сих пор на базе семерки работают?

    пока еще довольно много

    Reply
  2. Filipp_inf

    И еще долго будут работать в 7.7, особенно там, где самостоятельно доработанные конфигурации под особенности учета.

    Reply
  3. GSoft

    я знаю конторы которые на 6ке работают

    в свое время в начале 2000х работал в фирме которая еще 2.0 для доса использовала

    Reply
  4. adakabo

    отличная работа брат :thumbs up (законный +)

    странно что раньше не нее не натыкался

    Reply
  5. Shaman342

    (1) козу еще из носа достань и об пиджак вытри!

    Reply
  6. venger

    (1) Неужели восьмерку надо учить, прежде, чем там ваять?:-)))) Доставая козу из носа и вытирая о дырявые и засаленные семейные трусы сидя на кухне и почухивая рукой в трехнедельной щетине:-)))))

    Reply
  7. AS108

    (1) Учим-учим, спасибо большое автору за полезный материал, у нас ГБ в бюджете про восьмёрку даже слышать не хотят, а вот настроенная под них семёрочка всех устраивает, привыкли уже, да и обкаталась она за столько лет, ошибок практически нет, не то что в 8 🙂

    Reply
  8. GSoft

    если будет желание выложу практические материалы: конфигурации по каждому занятию курса обучения по базовым объектам и всем трем компонентам. Пример можно увидеть http://www.infostart.ru/projects/826/ — в архиве практические задания по компоненте Бух. учет

    Reply
  9. GSoft

    (5) не натыкался — потому что я ее только вчера выложил))))))

    как то и забыл что такое есть в арсенале)

    Reply
  10. GSoft

    Добавил краткое описание работы механизма запроса

    Reply
  11. O-Planet

    (1) Кто не знает 7.7, того и программистом 1С сложно как-то именовать 😉

    Reply
  12. o.nikolaev

    Очень качественно проделанная работа.

    Reply
  13. alexandrlevitsky

    Знать неплохо было б и 7.7, и 8.1, ИМХО. Использование инструмента (7.7 или 8.1) диктуется поставленной задачей. Ведь нельзя говорить, что большой молоток однозначно лучше, круче и «современней», потому что если дать сапожнику большой молоток вместо маленького, то обуви он сделает немного… да и пальцев себе отобьет немало.

    Так же и ЧП или небольшое предприятие, у которого каждая копейка на счету, не особо нуждается в 8.1 с необходимым (возможно и недешевым) апгрейдом компьютера. Ему лучше построить учет используя более скромный иснтрумент.

    Reply
  14. Поручик

    Страшно и подумать о возврате или каких-то работах на 7.7. За два года реструктуризация образа мышления необратимая. Как я буду работать на 7.7 без восьмёрочных наворотов?

    Reply
  15. AS108

    (9) Желание есть! Выкладывайте, будем очень признательны 🙂

    К сожалению, курсы по программированию в 1С 7.7 не проводят в самой 1С,

    думаю, по понятным причинам. А специалисты востребованы, особенно в бюджете —

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

    переучиваться на программиста, потому как не было специалиста

    на внедрение ЗиК, а в декабре 2008 года ввели НСОТ в бюджете,

    работы — непочатый край. (НСОТ — новая система оплаты труда, раньше была ЕТС — единая тарифная сетка, которую отменили). Это я так, для справки 🙂

    Reply
  16. SvetikND

    Спасибо за материал. Сейчас у многих фирм нет возможности по материальным причинам переходить на восьмерку. Очень актуально!

    Reply
  17. elan

    Лишней дока не бывает. Часто узнаеш новое даже там где вроде бы все уже знаеш. А 1Совский язык запросов весьма мудрен и непонятен в отличие от SQL (нафига было изобретать велосипед). Работаем на семерке, есть определенные неудобства, но на восьмерку переходить не собираемся цена вопроса не соответсвует стоимости проблем. А все навороты восьмерки всего лишь запоздалое повторение уже давно имеющихся в других средах возможностей, преподносимых кстати как революционный прорыв. Маркетинг твою его. А кто хвалит восьмерку как правило зарабатывает на ее продаже.

    Не совсем в тему может кто объяснит механизм работы запросов 1С на SQL базе. 1C что на SQL свои звпросы переводит что ли? Это же какой тормоз получается?

    Reply
  18. Hamlet

    Однозначно +

    И семерка еще пару лет своих проживет.

    Reply
  19. Boxa

    7 жива и будет жить, точно: дока лишней не бывает

    Reply
  20. napala@

    (1) а у вас уже весь город и на ОС Vistа першел? и компутеры в конторах готовы к полету в космос? Нет, вы не правы, старое, доброе НЕЛЬЗЯ так не уважать! В 7.7 еще много возможностей, и еще больше для творчества 😉

    + за автора!

    Reply
  21. GSoft

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

    Reply
  22. larisab

    (23) А что за проблемы у 77 под Вистой, кроме кодовой страницы?

    Reply
  23. Арчибальд

    (24)ВК не хотят вызываться. Категорически. Даже если вся защита отключена напрочь.

    А что там с кодовой страницей? Не замечал проблем.

    Reply
  24. larisab

    Текущая установка

    Reply
  25. GSoft

    (24) я имел ввиду что проблемы с массовым наступлением и отсутствием выбора

    Reply
  26. larisab

    Текущая кодовая страница

    Reply
  27. larisab

    (27) Ааа, я сначала тоже сопротивлялась, а потом решила попробовать и понравилось, теперь что ХР, что офис 2003 кажутся неудобными, не первый раз перепривыкаю к ОС:)

    Reply
  28. valbir

    ++++

    работает и будет работать!

    люди (ю_звери) довольны! 99 прОцентов даже и не знают что такое 6, 7 или 8!

    накладная, чек, приходник знают!

    у меня 10 разных контор (реальная работа, не бюджетные крысы) на моих настройк

    Reply
  29. GSoft

    это верно, сам знаю пару контор работающих на 6ке, причем далеко не маленьких

    Reply
  30. Ish_2

    Прочитал :

    «Идея запроса заключается в том что он как бы собирает данные не последовательно, как при переборе, а параллельно. То есть запрос это некое сито, размер и форма которого определены переменными и условиями. А результат выполнения запроса — это те «крупинки» информации проходящие сквозь сито, и пригодные для дальнейшего использовния. »

    С точки зрения преподавателя — этот текст доходчив для начинающих пользователей 77 ? Вопрос спорный.

    Попытки образно объяснить механизм запросов к БД для пользователей 77 редко бывают удачными . И нужно ли это делать (образно объяснять) — тоже вопрос.

    Reply
  31. Ish_2

    В (32) речь идет , разумеется , лишь о способе подачи материала.

    Reply
  32. GSoft

    я преподавал три года и перепровобовал массу вариантов

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

    Важно было сохранить баланс — небольшое время на пояснениеположительное восприятие материала

    А это тот пример который прижился)) и проверен на большом количестве людей.

    Тел пять назад задавался вопросом о работе механизма в 7ке — ничего тогда толком и не нашел, а потом как то и не надо было.

    Reply
  33. Ish_2

    Ок

    Reply
  34. mihos

    (20) Думаю, поболее…

    Многие от 8-ки в шоке… Типа, сыровата ещё… А в 7.7 есть все, что нужно буху.

    Reply
  35. оао

    у кого-то семерочка вчерашняя, но прочная, а у кого-то понты восьмерочные…

    не стоит семерку списывать со счетов, а знание никому не мешает… спасибо автору..

    Reply
  36. Арчибальд

    (30) Цитата неверна.

    Этот принцип («Бритва Оккама») сформулировал еще Аристотель («Принцип достаточного основания»).

    Reply
  37. oskar

    очень интересно, для начального програмировая очень полезна +

    Reply
  38. NOVOPRO

    Хорошая разроботка посмотрим всегда есть чему научиться новому.

    Reply
  39. b-dm

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

    Reply
  40. Nazim

    Отличная весчь

    Reply

Leave a Comment

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