<?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) Это мои первые обработки, не кидайтесь тапком сильно 🙂
(2) Учись принимать критику. Лучше начать писать хорошо сразу, чем переучиваться, как это делал я)
(3) Хорошо
(1) Хорошо, одно из ваших пожеланий сделаю в следующей обработке
(1)https://infostart.ru/public/844484/
(2) Я не УПРЁКИ выдавал, а РЕКОМЕНДАЦИИ. Выставляя творение на суд читателей, надо задумываться о полезности ваших трудов. Желательно не отсчитываться о проделанной работе (не всем это интересно), а предлагать «достаточно универсальный», ПОЛЕЗНЫЙ продукт для широкого круга пользователей.
Посему предлагаю, то что не сложно быстро подправить… потом обновить Публикацию.
Ну сделал ты простую примитивную обработку, ну нафига ее публиковать. Бесполезный мусор же.
(7) Я это всё учту. Спасибо
(8) Этот «Бесполезный мусор» уже понадобился людям…
Я подобные обработки пишу по 10 штук в день и все они у меня начинаю название с префикса «Разовая_», догадайся почему ?
(11) Повторюсь, что данная обработка может пригодиться людям(хоть и разово)
(12) Повторюсь: мусор. Обработка, которую может написать любой школьник знакомый с 1С недостойна публикации.
(13) Если вас задела моя публикация, вы смело можете написать мне в ЛС и там обсудить. Если у вас нарушена психика, можете обратиться к специалистам
Вкратце суть обработки, вдруг кому-то пригодится:
НоменклатураОбъект = Выборка.Номенклатура.ПолучитьОбъект();
НоменклатураОбъект.Наименование = НаЧтоЗаменяем;
НоменклатураОбъект.Записать();
(15)Почти. Запросом получаем наименования номенклатуры, соотвествующие условию.
и это не верно. Таким образом ты изменишь всё наименование номенклатуры, а не только часть наименования
(16)ну функции работы со строками я не стал описывать, простите.
Скачивал тк написано что для управляемых форм.
Но управляемой формы похоже нет, эта обработка для обычных форм.
Понятно что можно открыть базу в режиме обычных форм, но это не значит что «обработка для управляемых форм». Думаю нужно поправить описание.