Изменение периода журнала расчетов




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

32 Comments

  1. WiseSnake

    И что в нем нового?

    Здесь намного больше возможностей http://infostart.ru/profile/15778/projects/2059/

    Reply
  2. alexk-is

    (1) зато «всем», безвозмезно (т.е. даром) и без ошибок…

    помощь в доработке, равно как и сама доработка не требуется. фунционал полностью соответствует описанию…

    …и вообще надо же с чего-то начинать…

    Reply
  3. WiseSnake

    (2) Тоже верно, только не вижу смысла начинать с того что уже есть и давно и несколько таких обработок от разных авторов, не в обиду, но зачем плодить одинаковые обработки к тому же состоящие из 3 строчек кода?

    Reply
  4. poppy

    Обработка, состоящая из 3 строчек кода, давно написана http://infostart.ru/projects/908/

    Reply
  5. su_mai

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

    Reply
  6. Душелов

    Так надо с перенумераторов начинать, как все. Чего велосипеды-то изобретать?

    Reply
  7. Душелов

    (5) А начинать надо с работы…

    Reply
  8. su_mai

    Уважаемый Душелов! Скажите Вы свои разработки где нибудь применяли? (Тут тема была в блогах, но её чего то не видно). Мне например намного ближе какой нибуди перенумератор или обработка типа этой потому что она может действительно где то пригодиться. Я ничего против Вас не имею, но мне не понятна Ваша позиция. Почему Ваши обработки ценные, а эта вот не ценная? Ну и что, 3 строки тоже может быть полезно. В типовом ЗиК 77 вообще ничего нет. Перерасчет перерасчета автоматически не перерасчитывается и т.д. На мой взгляд, решение проблемм типовых конфигураций это самое необходимое. Опять же, прошу у Вас прошения. Это просто моя позиция.

    Reply
  9. Душелов

    (8) А я-то тут при чем?

    Reply
  10. Душелов

    А если уж меня взять, то я пишу для программистов, а не для пользователей.

    Reply
  11. su_mai

    Да ладно, проехали… Чего то меня зацепило, простите. 🙁

    Автору, в качестве расширения функционала, могу предложить реализовать функцию смены периода по произвольной дате. На практике бывает утомительно скакать по периодам например с даты 01.01.0000. 🙂

    Reply
  12. Душелов

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

    Reply
  13. WiseSnake

    (11) Вот, дельное предложение (хотя это и реализовано, но на инфостарте я не видел или не заметил). Если была выложена обработка с таким функционалом не вопрос, уже понятно зачем. И вообще я просто спросил зачем по мнению автора он ее выложил на что, кстати, автор раскритиковал мою обработку даже не посмотрев (уверен на 90%) это тоже цепляет. А еще цепляет когда что нить ищешь, а тебе в ответ 10 страниц вылетает из которых 8 не по теме, а 1 то же самое что и на 2 причем все раскидано равномерно по всем 10 страницам…. Это моя точка зрения… А вообще 3 плюса уже есть значит это кому нибудь нужно. Молодец автор.

    Reply
  14. WiseSnake

    +13 и вообще судя по плюсам на обработках чем проще обработка тем лучше, желательно чтобы на ней была одна кнопка ))))))))

    Reply
  15. su_mai

    (13, 14) Полностью с Вами согласен. К сожалению люди в ответ начинают тоже пресовать, а цивилизованно за себя заступиться не хотят в перделах своей темы. Но, видимо, это по неопытности. К вопросу о 10 страницах обработок, я тоже с Вами согласен, это трудно.

    Reply
  16. Ёпрст

    Просто людям не знакомо свойство Поиск… вот и лепят лисапеды… и такая дребедень каждый день …

    Reply
  17. su_mai

    Уважаемый Ёпрст! С вашей стороны высказывать такие вещи, просто провокация! На форуме есть правила (http://infostart.ru/rules.php/) и они не ограничевают права пользователей выкладывать обработки, которые здесь уже есть! Если выкладывать их, с вашей точки зрения не правильно, то (ИМХО) обратитесь к администрации форума с предложениями об изменении правил. Не надо тратить свои силы на навязывание своей индивидуальной точки зрения другим людям (видимо, что-то надо подправить в консерватории…).

    Reply
  18. Ёпрст

    (17) Мне абсолютно фиолетово, что лисапеды плодятся как мухи, это всего лишь следствие того, что люди не умеют (не хотят) пользоваться поиском вообще. Хотя-бы ради того, чтоб посмотреть, как сделано у других и что можно улучшить.

    Вместо этого лепят клоны одинаковых решений с одними и теми же ошибками.

    Reply
  19. su_mai

    (18) «Вместо этого лепят клоны одинаковых решений с одними и теми же ошибками. »

    Это прямое следствие того, что «новоначальному» программисту никто не помогает развиваться.

    Сообщений от общественности вообще нет или это просто грубоватые фразы общего характера. Отсутствует обучающий элемент в общении.

    Я об этом и говорил в самом начале, что (ИМХО) надо бы вежливо указывать разработчикам на их недоделки и по возможности предлагать свои решения.

    Тогда разработчик будет «рости», а на форуме пропадут недоделанные разработки.

    Reply
  20. vkr

    Уважаемый Ёпрст! Вообще-то, прежде чем жить чужим умом, нормальный программер хотя бы _попробует_ написать программу сам.

    А уж если не получается — пойдет искать чужого опыта.

    А по Вашему методу мы так и получим тысячи очередных индийских кодеров, только в области 1С… 🙂

    Reply
  21. Shaman100M

    (20) с точки зрения програмера самому написать конечно намного интереснее чем воспользоваться поиском, ну, а с точки зрения работодателя это будет выглядеть как неумение рационально использовать оплачиваемое рабочее время (правда, в редких случаях работодатель об этом узнает, — поэтому, чтоб заполучить в програмере единомышленника, лучше платить сдельно 🙂 ).

    Reply
  22. Ёпрст

    (20) Брехня. Никто не говорит про «чужой» ум. Просто нежелание/нехотение/неумение пользоваться поиском… ничего более.

    Вообще, в 7-ке сложно что-то написать оригинальное, всё уже давно написано.

    Reply
  23. Душелов

    Написать — хорошо, а воспользоваться наработками других еще лучше. Почитайте «Совершенный код» С. Макконнелла, много интересного узнаете, хотя бы то, что не стоит изобретать велосипед, а использовать шаблоны и из них уже делать конфетку.

    Reply
  24. su_mai

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

    Только такой форум нужен будет — копия «Клуб профессионалов 1С». Там все жестко… Не член клуба, все «Гуляй Вася вдоль забора». А заваливать простые обработки своими упреками это все неверно (ИМХО).

    Reply
  25. Душелов

    (24) > выкладывать копии обработок имеющихся на форум

    Выкладывают, с ссылкой на автора, с описанием того, что доработано.

    Reply
  26. su_mai

    (25) А вот это да, правильно. Но в чужом коде тоже надо уметь разобраться. Возможно это кому-то будет сложно. Но, в целом, это замечание правильное (плюсую). Незнаю, заглядывают ли сюда «Суппорта», хорошо бы им это предложить.

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

    Например, как на том же «клубе профессионалов», помешать обработку на рассмотрение и каждый «протестивший» должен написать свое мнение. Но главное (ИМХО) избежать такой же закрытости форума как на «клубе профессионалов».

    Reply
  27. su_mai

    +(26) «Но в чужом коде тоже надо уметь разобраться.» — Пока будут разбираться — будут учиться. Так же имеется возмжность автору вопросы задавать. На лицо обучающий эффект!

    Reply
  28. WiseSnake

    http://infostart.ru/projects/2059/#comm7 (7)

    Во первых это не тиражный продукт.

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

    В третьих на 100% не работает ни одна обработка, просто если у Вас она работает на 100% то Вы просто не наткнулись на ошибки.

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

    В пятых, мне даже интересно стало, кто Вы? Если уже опытный программист, то почему выкладываете такие обработки, если же новичек, то исходя из какого опыта учите других писать код? )))) (p.s. не в обиду, просто мысли)

    Reply
  29. WiseSnake

    http://infostart.ru/projects/2059/#comm8 (8)

    Вы знаете я тоже не хотел Вас обидеть, по этому не надо просто воспринимать все в штыки, а то что Вы хотели дискредитировать то да, мне так показалось… но если Вы говорите что не хотели то я вам верю.

    А что касаемо кода, то разницы между Вашим и своим я не вижу, за исключением отсутствия в Вашем коде комментариев ))))). И к слову сказать оформлять код я всегда ПЫТАЮСЬ как положено, выходит как вышло, так что не судите строго.

    А что касается чем закончится… предлагаю закончить спор. То что я хотел узнать в (1) я узнал, сделал для себя вывод.

    Reply
  30. nickVZ

    Какой там код… Примитивщина.

    Только вот выкладывать ЭТО не стоит. Причина номер раз: скачать может юзер. А за пользование таким механизмом расчетчику нужно руки обрывать до жопы. Это я вам как старый «зарплатник» говорю.

    Причина номер два: если программер не в состоянии ЭТО написать, ему нЕфиг это в руки довать. Рано.

    P.S. У меня стоят переключатели на ЖР 😉

    Reply
  31. Rockman

    Спасибо. Очень полезная вещь.

    Reply
  32. maxim305

    Спасибо, полезно

    Reply

Leave a Comment

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