<?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='\
За первый вариант ..
Я к этому вопросу подхожу чисто практически. )
Всегда использую второй вариант, потому как он состоит из 4 символов, против первого, который в 2 раза длинее. ) Если кто-то скажет что второй вариант требует переключения раскладки, то хочу заметить, что лично у меня это не так )
за второй…
Да уж. Ведь, делать мне нечего, даже взял и замеры произвел :). Разницы во времени исполнения нет.
А использую я обычно второй вариант, букв меньше :).
(2) не понял где в два раза 🙂 это видимо елси только переменные называются именно а и б. А ели переменные зовутся длинно ?
(4) пробовали в ЕСЛИ или условие в запросе ?
(4) Как проверял?
(5) «НЕ()»-четыре символа, «<>»-два символа
Пробовал в «Если». С запросами это дольше, а мне лень.
Кстати, если условие сложные то читабельность первого варианта хуже.
(5) Какая разница как переменные зовуться? ) Главное что бы одинаково для двух вариантов ) Посчитай.
А мне удобней читать вариант Б.
Первый раз слышу такой бред, что «<>» — это две операции.
Конкретно в виртуальной машине 1С конструкция А выполняется именно двумя операциями, конструкция Б — одной (занимался декомпиляцией, знаю). Но заметить разницу во времени выполнения практически невозможно. И на практике каждый пишет, как ему удобней, лично я всегда использую вариант Б.
Если же спускаться до ассемблера, то там вообще всего одна операция сравнения, которая выставляет сразу кучу флагов, и куча разных команд условных переходов.
я гораздо чаще использую НЕ()..
и вообще — паранойя у меня… я не пишу
если док.получитьДокумент()=1
.. я пишу
если док.получитьДокумент()>0
(12).. я пишу если док.получитьДокумент()>0
Циклодол попробуй ;))))))))))
(11) +5
Второй однозначно.
Согласен также с (8) — именно читабельность первого варианта хуже. И вправду — зачем правой рукой через голову чесать левое ухо, если это можно гораздо удобнее сделать левой рукой?
(13) Антиклимакс
(12)(Сhe Burashka)
“я пишу если док.получитьДокумент()>0”
Это не паранойя, а доверчивость. ;-)))
Ф=Док.ПолучитьДокумент();
Если Ф=0 Тогда
Если Ф=1 Тогда
Сообщить(«Ошибка в 1С»);
Вообще конечно и тот и другой вариант не идеальны и оптимальным было бы использование как во многих языках конструкции a != b — и максимально понятно и максимально по русски.
(17) > и максимально понятно и максимально по русски.
Чудненько! Но по-русски все-таки ближе конструкция:
А ФигРавно Б
(2) Достаточно шаблоны настроить и не требует 🙂
Я юзаю <>, привык со школы еще…
Засисит от контекста употребления. Чаще вариант А.
(17) >и вообще — паранойя у меня… я не пишу
>если док.получитьДокумент()=1
>.. я пишу
>если док.получитьДокумент()>0
Хм, а я пишу
Если Док.ПолучитьДокумент() Тогда
Кстати, всё это на ИТС-дисках описано подробно довольно. Сокращения вообще не люблю, типа Док, вот они реально неудобны при чтении.
Как там устроена 1С внутри – фиг его знает.
А<>Б работает быстрее чем НЕ(А=Б), судя по тесту (код ниже):
Показать полностью
В случае "Колво"= 100 млн итераций время:
А<>Б работает 148 сек
НЕ(А=Б) работает 153 сек
з.ы. Налицо ЗНАЧИТЕЛЬНЫЙ прирост производительности. Те, кто пользует конструкцию "НЕаб" — еретики, НПППППППП на них не хватает… разрази их нуралиев!
з.ы.ы. 1с770027, dbf
Тупая ветка. (С) миста.ру
(24) Скажи мне какие ветки ты посещаешь — и я скажу тебе кто ты (с) кто то из классиков 🙂
(23) а наоборот попробуйте 🙂 Ну то есть циклы местами поменять 🙂 И результаты изменятся в обратную сторону
Холивар так холивар.
1. Что подставит 1С или иной интерпретатор или компилятор вместо <> != — неизвестно. Вполне может быть что и подставляет некое НЕ (а=б). Или наоборот, вместо НЕ (а=б) — <>. Не программиста вобщем-то забота.
2. Читабельность у НЕ (а=б) — хуже в реальных случаях. Например сравниваем:
(ПеременнаяА + Переменная21 * 2) <> (ФункцияА(ПеременнаяНадцатая) * 3)
и
НЕ ((ПеременнаяА + Переменная21 * 2) = (ФункцияА(ПеременнаяНадцатая) * 3))
В первом варианте сразу видно что проверяется НЕравенство
А во втором стоит = и уж потом, где-то в начало нужно стрелять глазами чтобы узреть НЕ. Как будто специально запутывается чтение кода.
А если, как часто бывает сцеплено таких проверок через И или ИЛИ ? Причем одни выражения проверяются на равенство, а другие на неравенство? А везде = и где то-там, между сцепками, среди И ИЛИ встречаются НЕ.
<> != придумали для того чтобы читабельность была выше, а значит меньше ошибок совершалось.
Потому что как кем-то сказано:
Код программы читается людьми, и лишь иногда — выполняется компьютером.
Красиво и точно: >> Потому что как кем-то сказано:
Код программы читается людьми, и лишь иногда — выполняется компьютером.
Как-то столкнулся с чужим кодом написанным где-то так:
если этосклад= 1 Тогда
сООбщить(«можно «) ;
else Конецесли
;
Хотел пойти утопиться с моста…