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




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

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