<?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='\
Зачем используются англоязычные ключевые слова вперемешку с переменными на русском?
(1) Тут другое, если ты пишешь на православном ООП, то почему условный оператор написан не по канону!?
if (_ПолеПорядка=fld) then ….
🙂
(2) А как же стандарты?
Реально глаза режет когда смотришь на текст, в котором перемешены два языка
(4) Это, наверно мое кривое восприятие. Мне трудно читать код, когда ключевые слова написаны кириллицей.
(2) Если кто-то, будет в тестовом задании, такое делать, при трудоустройстве, то 100% пойдет мимо моей организации. Ну мне так удобней. Так же пойдет лесом человек неоправданно использующий «_» и однобуквенные переменные. Это если кто дошел из новичков до комментариев и решил, что код крутой.
(6) К счастью или сожалению я не буду соискателем места в вашей компании. Представленный код не претендует на образец для подражания. Вам удобней отправлять лесом людей, не подходящих под ваши представления, a мне удобней
Ключевая строка оказалась в конце
А нужно ли его формировать? Любопытно, что быстрее будет работать. Формирование нового отчёта или перестановка строк в уже сформированном.
(8) Если я правильно понял, вы предлагаете просто переставить строки в табличном документе «Результат». Этот вариант я не рассматривал.
(6)в языках программирования мы также использовали «_» , только на 1с это как то считается плохим
(7) У меня в компании люди код пишут для коллег и себя, а не для ЧСВ,
(10) Префикс «_» в Си зарезервирован для служебных переменных.
(11)
Ошибочная оценка, не соответствующая реальности.
Просто тогда нужно и всё остальное на английский переводить. И соблюдать стандарты по большим буквам и вообще названиям (без _).
превращается в
… и получится неплохой индусский код…
(14) Попробую объяснить свой подход. Наверно в большинстве языков условный оператор это if, т.е. такое обозначение является мировым стандартом (может у китайцев по другому). В языке 1С объектная модель реализована на русском языке, поэтому названия объектов логично писать на этом языке, но для ключевых слов существует общий стандарт, который, для меня имеет приоритет над стандартом 1С. Если вы работаете в разных языковых средах, мне кажется проще, использовать ключевые слова из общего стандарта. Заглавные буквы — это должна делать сама среда разработки, как например в VS. Подчерки — здесь чтобы отличать переменные от системных объектов, при совпадении наименований.
Работал как то с тру кодерами, которым нужно было написать обработку в 1С. Так у них вообще все было на английском, потому, что им так удобнее и привычнее. С такой точки зрения это оправдывает использование английского в 1С, но,
достойно премии всем известного сайта
В целом разработка интересна с точки зрения научного интереса, но, я думаю, многим проще и быстрее в настройках СКД задать свою сортировку.
Поиск ячейки по заголовку группировки — это здорово и просто, но совсем не универсально.
(7) Удобно чесать ЧСВ и показывать «крутость». Сишные понты. Я бы тоже лесом отправил.
(16)
Нет, как справедливо отмечено в (14) это будет выглядеть довольно странно, почти также как писать русские слова латинскими буквами.
Все еще проще. В СКД отчетах есть контекстное меню, где среди прочих присутствует команда «Упорядочить».
Нормальный код. Еще бы переменные на латинском языке были обозваны — вообще бы зачот! )))
ЗЫ: я бы лучше такого программера на работу взял, чем того, кто с кучей сертификатов, а программировать не умеет. У нас есть один умелец — он запросы пишет как матерый SQL-щик с SEL ECT FR OM LEFT JOIN WHERE GROUP BY … — чё он там творит никто не знает, но все работает )))
А говорят у прогеров нет времени. Вон сколько потратили на срач в каментах )))