Запрос. Нарастающий итог. Как «я» его понимаю.




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

38 Comments

  1. I_G_O_R

    насмешил 😀 , какая следующая статья будет «… как его понимаю» ❓

    Reply
  2. Mazaloff

    а ослик на картинке причем?

    Reply
  3. anig99

    гыы…все ссылки уже помечены как прочтенные (:

    Шепот, на самом деле показан очень конкретный пример… Вместо больше равно может быть и меньше равно… в зависимости от целей…

    Но для тех кто изучает сложное на примерах (как я например (% ) зер гуд…

    Я очень рад, что моя статья вызвала-таки наконец ряд статей по теме.

    А то если что и есть в инете, то только основы. Мне пришлось очень долго копаться прежде чем нашел упоминание об ограничении нарастающих итогов в запросах — большие объемы данных начинают существенно тормозить.

    А уж метод обхода этого ограничения — это был вообще алес… ограничить выборку…

    З.Ы. Предлагаю название изменить… Двухпальцевые нарастающие итоги и нумерация строк в запросе… Всё-таки если быть последовательным и логичным, то «понимаешь» ты в статьях, а вот обработки у тебя «двухпальцевые». Это без иронии.

    Reply
  4. anig99

    (2) а ослик, потому что «душераздирающее зрелище» эти нарастающие итоги в запросе….

    Reply
  5. Шёпот теней

    … БОЛЬШОЕ видится на расстоянии, а начинается с МАЛОГО …

    … если ВЫ умеете делать это в МАЛОМ то сделаете это и в БОЛЬШОМ …



    п.с.

    Около ста пятидесяти лет назад возникла новая область научного знания — учение о подобии явлений.

    Гениальное предвидение этой науки было высказано Ньютоном в 1686 г. Но только в 1848 г. Член французской академии наук Жозеф Бертран впервые установил основное свойство подобных явлений, сформулировав первую теорему подобия, теорему о существовании инвариантов подобия.

    Подобными называются явления, происходящие в геометрически подобных системах, если у них во всех сходственных точках отношения одноимённых величин есть постоянные числа.

    … писать «нарастающие итоги» — это доставать кость попавшую в горло через задний проход …

    … при помощи простого Запроса+ТаблицаЗначений = Результат любой сложности … эффективнее и проще и предсказуемо …

    … ВОТ …

    Reply
  6. anig99

    (5) хранение информации в текстовом виде намного проще и предсказуемо.

    Уже было говорено, что абсолютно эффективных решений не бывает.

    Reply
  7. Ish_2

    (6), (1) Шепот прав в одном — что опубликовал свое мнение по поводу нарастающих итогов.

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

    Шепот схватил это — и молодец !

    Весь вопрос в том , как лучше подать материал о элементарном и с примерами и иллюстрациями :

    «Запросы … как я их понимаю» или проще «Чайник — для чайников»

    где просто и доступно было объяснено «на пальцах» ( а кого стесняться?):

    1. Внутреннее соединение

    2. Полное соединение

    3. Левое…

    4. Правое..

    5. Соединение по неравенству+ Нарастающие итоги.+ соединение по двойному неравенству и т.д.

    6. Сумма с условием , Оператор Выбор и т.д.

    Т.е. на мой взгляд полезен будет целый цикл статей . Шепот — молодец !

    Что касается самой обработки — я её пока не смотрел. Но посмотрю обязательно.

    Reply
  8. Шёпот теней

    …хм…

    … итоговая сложность расчёта результата не должна быть выше самой максимально простой операции используемой при вычислении этого результата …

    … вопрос знатокам «нарастающих итогов»:

    например, требуется вычислить 2*3 = …

    как ВЫ ? думаете ? как компьютер получит результат … ?

    … вооот …

    Reply
  9. Ish_2

    Продолжаю. Теперь о недостатках.

    Считаю недостатком отсуствие иллюстраций — рисунков.

    Две Простенькие таблички — и стрелками показано какая строка из первой талицы соединяется со строками из второй таблицы. И тогда вся суть соединения по неравенству была понятна даже непосвященному.

    Считаю недостатком отсуствие текстов запросов в самой статье.

    Текст должен быть на рисунке и разбит на секции :

    Поля выборки, условия соединения и т.д.

    Т.е. такие статьи для начинающих нужно делать максимально подробными и иллюстрированными.

    Перечисленные шаги 1-5 мало ,что дают непосвященному.

    Т.е. если бы я был изучающим, я бы твоей статьей не заинтересовался.

    Надеюсь след. статья о запросах будет подробной и иллюстрированной.

    Давай , Шепот ! Жми !

    Reply
  10. Ish_2

    (8) Шепот , ты не увиливай.

    Давай обсудим текст твоих запросов. Чуть позже.

    Reply
  11. Шёпот теней

    Ish_2 …

    декларативный язык запросов — один из самых «дурацких» языков программирования …

    придумывался как «для всех» — оказался для «посвщЁнных» …

    объснить его работу, словами, по-этапно — не возможно … в лучшем случае картинками … т.к. построение запросов это не язык «логики» а язык «желания» …

    .. увиливаешь обычно ТЫ … ответь на (8) …

    Reply
  12. Ish_2
    объснить его работу, словами, по-этапно — не возможно … в лучшем случае картинками … т.к. построение запросов это не язык «логики» а язык «желания» …

    Так ведь в корень смотришь !

    Именно так и нужно : диаграммки и картинки.

    Я ж тебя подбиваю…

    декларативный язык запросов — один из самых «дурацких» языков программирования …

    придумывался как «для всех» — оказался для «посвщЁнных» …

    не вижу темы для обсуждения.

    .. увиливаешь обычно ТЫ … ответь на (8) …

    Шепот я пришел к тебе в тему . По-честному.

    Обсуждаю ТОЛЬКО содержание ТВОЕЙ статьи.

    Тема : Запросы.

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

    Не-а. Не затащишь.

    Только текст ТВОЕЙ статьи. Только текст ТВОИХ запросов.

    Обработку не скачал . Скачаю дома .

    Угрожаю : долбить буду по -взрослому.

    Reply
  13. Шёпот теней

    Ish_2 … ты меня удивляешь …

    1. по взрослому мне бы хотелось в твоих статьях …

    2. я же уже высказался по поводу нарастающих итогов в запросах -в серьёз это обсуждать можно только в философских поисках о границах языка запросов но не для практики … или приведи примеры …

    3. именно поэтому и придумали «новые» костыли в виде — СКД … соединив запрос и ТЗ …

    4. рисовать рисунки и чертить схемы на такие примеры — уж совсем дело последнее …

    5. понимание в запросах приходит только через «ручки», в основном …

    … вот …

    всЁ таки, мне гораздо интереснее (8) …

    … вотТАКмнеОЧЕНЬкажется …

    Reply
  14. Ish_2

    Долбежка откладывается. К сожалению.

    1. Страраюсь.

    2. Статья Anig99 как раз и переводит фил.вопос о границах использования языка запросов в практический вопрос : Как правильно использовать язык запросов для вычисления нарастающих итогов ? Именно в ней и говорится о том, что «в лоб» применять запрос для таких вычислений не стоит.

    Нужно применять вычисление нарастающих итогов для небольших таблиц.

    Как последовательно получать эти небольшие таблицы сказано сначала у Anig99 , потом у меня.

    Шепот , ты этого просто не понял.

    3. Нет . Шепот, СКД придумали совсем не для этого. И проблему трудного вычисления нарастающих итогов СКД НЕ РЕШАЕТ.

    4. Жаль

    5. Согласен.

    6. Не заманишь, хитрец…

    Reply
  15. Ish_2

    (15)

    1. Ага.

    2. Прочитай статью Anig99 там есть ссылка на реальный отчет который работает в конкретной базе 120Гб.

    3. В частности. СКД позволяет делать то , что не позволяет делать постоитель отчета — произвольное группирование колонок отчета, произвольное количество таких группировок.

    Пример : В БП 1.6 есть отчет «Обороты счета» и сделан он «вручную» с тяжкими преобразованиями. В СКД такой отчет делается гораздо проще.

    СКД — не костыли , а требование времени.

    4. Умничаешь ?

    5. Умничаешь ?

    6. фундаментальные вопросы так не формулируются.

    Впрочем , ты же у нас бравируешь отрицанием важности формы, тебе же главное -содержание. Про единство формы и содержания мы поговорим в другой раз.

    Reply
  16. Шёпот теней

    (16)

    1. … слова … слова … слова … как много в них НЕ сделанного …

    2. … нууу … онанизм — пусть даже и цифровой то же кому-то приятен …

    3. любая ТЗ позволяет группировать — и вдоль — и поперЁк — и «о-боже» даже по-диогонали …

    4. нет …

    5. ага …

    6. чем фундаментальнее вопрос — тем ОН проще … например, почему Земля крутится ? …

    п.с. НЕсогласен.

    … я говорю о единстве, о гармонии — «формы» и «содержания» … вот …

    Reply
  17. Ish_2

    1…

    2….

    3. Шепот , СКД надо изучить.

    4. Да.

    5. То-то.

    6. Твоя статья — про запросы.

    P.S. Ну вот и хорошо.

    Reply
  18. Шёпот теней

    (18)

    3. ну… ну, да … да … «я эту книгу не читал но по поводу её содержания могу сообщить следующее … » …

    4. уломал …

    5. ага …

    6. ??? … моя статья — срубить «плюс»-ов по лЁгкому …

    … но, как видишь … «нарастающие итоги» нафигникомуненужны … ))) …

    Reply
  19. Ish_2

    Ты просто не умеешь их готовить.

    Reply
  20. Шёпот теней

    (20) .. нууу конечно же … кто жжжеее спорит ….

    назвать надо было типа:

    1. Пять шагов постижения …

    2. Запросы и нарастающие итоги …

    3. Метдика решения нарастающих итогов в запросах …

    .. ну и ещё всякой були-були поднаписать … и обязательно указать много-много ГБайт, жути нагнать рисунками и графиками … и обязательно должны быть непонятные слова типа «глбоко-детальный анализ показывает», «после использования ограничения выборки в таблицах», » скорость получения таблиц результатов при использовании данного метода увеличена в 4-5 раз», привести кучу таблиц с замерами …

    … ага … ага …

    Reply
  21. larisab

    (21) Кухню свою раскрываешь 😉

    (19) По легому срубить не получается, как видишь. 🙂

    Reply
  22. artbear

    (0) Слабовато, для начинающих этого мало 🙁

    Минусую

    Reply
  23. annak2980

    Простой вопрос: на какую категорию пользователей ИС ориентирована сия статья?

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

    Reply
  24. Шёпот теней

    (24) … хм …

    вопрос: «на какую категорию пользователей ИС ориентирована сия статья? »

    ответ1.

    … явно для вас …

    ответ2.

    … явно не для них…

    ответ3.

    … ну ни шмог, ни шмог «я» …

    ответ4.

    … затрудняюсь ответить …

    ответ5.

    … другое …

    п.с. выберите ответ который вам подойдЁт …

    … вотРиторическийОтветнаНеМенееРиторическийВопрос …

    Reply
  25. anig99

    (24)(25) И тем, и тем это интересно.

    Новичкам — как сделать. Опытным — а на фуа это собственно надо.

    Reply
  26. Шёпот теней

    (26) … зАстрелил … ))) … (: …

    Reply
  27. Ivon

    Занимательно, но очень долго отрабатывает. Для программиста — не оптимизировано. Для пользователя — быстрее вставить результат отчета в Ексель и там пронумеровать строки. Полностью согласен с (26).

    Reply
  28. Шёпот теней

    (28) … уписаться можно … ииии с чем ВЫ собственно согласны в (26) и почему ? …

    …рекомендую посетить ветки товарищей: anig99, Ich_2, I_G_O_R по теме запросов … там есть и мои комментарии по поводу и нарастающих итогов в том числе …

    … вопрос не в том что долго или быстро … вопрос можно или нельзя … и зачем это нужно … ???

    ответ: — можно НО не нужно …

    … вообщем за что боролся на то и напоролся … ))) … это о себе …

    … нуууу тогда бы и оптимизировали бы заодно ужжжж … и нам бы показали …

    … нуууу или свой «нарастающий итог» напишите …. нам покажите …

    … вот …

    Reply
  29. Ivon

    (29)

    Новичкам — как сделать. Опытным — а на фуа это собственно надо.

    Вот с этим согласен. Я не говорил, что статья никому не нужна и абсолютно бесполезна и не говорил, что нельзя, потому что долго. Для каждой задачи есть своя реализация, зависящая от необходимого результата. Можно — и это хорошо, но в данном случае каждый уже выберет НУЖНО это ему или нет. Вы проделали работу и показали результат и как его добиться. Я всего лишь высказал свое мнение по поводу нюансов при выполнении такого запроса.

    Reply
  30. Шёпот теней

    (30) … принято .. спасибо … вот …

    Reply
  31. ILM3

    Сломайте пожалуйста кнопку с точкой у Шёпота теней. Пожалуйста!

    Или пусть Dushelov напишите ему драйвер клавиатуры, который будет троекратные нажатия кнопки «точка» заменять на однократное нажатие.

    Я не понимаю зачем нужно писать так коментарии:

    … бла-бла … бла-бла …

    … бла-бла … бла-бла …

    … бла-бла … бла-бла …

    … ВОТ!!! …

    Учитесь уважать своих читателей.

    Спасибо за внимание.

    Reply
  32. anig99

    (32) тут многие пытались…даже банить хотели. Только смысл? Уж лучше он так пишет, чем матом ругается или имена коверкает.

    Reply
  33. Шёпот теней

    (32) … у всЕх свОи тАрАкАны … простите ужжж и Вы мои … вОт …

    Reply
  34. anig99

    (33) я его не провоцирую

    Reply
  35. tango

    сказали поставить +

    http://www.infostart.ru/public/62105/?PAGEN_1=1#comm332007

    Reply
  36. truba

    … Через четверть года идея пригодилась в одном интересном решении, спасибо.

    Reply
  37. Збянтэжаны Саўка

    Обобщение по шагам — это всегда результат большой предварительной работы на практике.

    Люблю я такие обобщения вначале документов, ибо сразу видны трудозатраты и естественно повышается ценность и желание поглубже вникнуть в смысл статьи особенно для новичка который пока не ориентируется в мире 1С.

    Прошепчу спасибо, чтобы не нарушить покой теней Ж)

    Reply
  38. Шёпот теней

    (39) … очень рад если каким-то образом помогло … вот …

    Reply

Leave a Comment

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