<?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) ну да, читерство
но платформа сама не умеет отделять предлоги от аббревиатур (см. приложение)
поэтому логично написать это как исключения. Можно, конечно, анализировать первый символ аббревиатуры на предмет его принадлежности к какой-нибудь заранее определенной группе предлогов («С», «В», «К» и др.), но ведь есть аббревиатуры, начинающиеся с этих букв («СЗВ», к примеру). Тогда получится БланкСЗВ → Бланк с ЗВ.
Полный перечень аббревиатур тоже не хочется заводить, потому что он в любом случае будет неполный.
Все она умеет, просто подход знать надо (см. приложение).
На правах рекламы: в обработкеОтладчик запросов в главном модуле есть такая процедура:
Показать
(0)
некрасиво как-то. переформулируйте.
(5) Ок.
Вот, сравнил результаты всех наших функций на деле:
(6) Вы не поняли. Цитата а-ля «я д’Артаньян».
За проделанную работу плюс. Похвально.
(6) А почему моей функции из комментариев к той же публикации нет?? Она самая короткая! И работает «по платформе»
Показать
Добавьте к своей таблице число строк в записи функций.
И еще с цифрами должны быть обязательно тесты.
(6) Хорошо, сейчас протестирую вашу функцию тоже
Но я считаю, что длина функции в данном случае не играет большой роли
Чтобы преобразования с цифрами были тоже корректны, поменял строку
На
Вот новые результаты сравнения функций:
У нас появился юный плагиатор, значит идея интересная.
http://infostart.ru/public/196029/
(11) Ну, что делать)
Если у нас уже есть четыре функции, то почему бы не быть еще пятой)
Кстати, функция от ildarovich из (8) судя по таблице и правда работает точно «по платформе». Разве что нижние подчеркивания не учитывает. Но встроенная платформенная функция тоже не идеал. Так уж повелось, что разработчики типовых решений (а за ними и все остальные) каждого новое слово в наименовании начинают с большой буквы, даже если это слово идет за аббревиатурой. Например,
РегламентированныйОтчетНДССправкаОДебиторскойЗадолженности
а не
РегламентированныйОтчетНДСсправкаОдебиторскойЗадолженности
А создатели платформы, наверное, думали, что в ходу будет именно второй вариант
Так что просто слепо следовать платформе тоже не стоит
Функция для тех кому лень или некогда разбираться, но нужен результат — спасибо автору)
(12)в вашей функции есть опечатка «Передача В ПФР» если судить по скрину
Спасибо автору! Пригодилась.