<?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='\
хотел сделать бесплатной но что то инфостарт не позволил
вроде статя но внутри пусто =(
(2) Всмысле обработка пустая?
бывает такое что на одном и том же товаре разные штрих коды, про названия я вообще не говорю. Как вы будете их фильтровать?
(4) это то над чем я сейчас думаю, уже сделан, но еще невыложен ввиду некоторых ошибок вариант сохранения из одной базы розницы нескольких штрихкодов в одну запись номенклатуры, не определился пока как быть с тем вариантом когда в одном магазине есть штрихкод №1 и №2 а во втором есть №2 и №3
(4) Только что определился, сделаю на след неделе
(4) Если в первой базе есть штрихкод 1 и 2 а во второй 2 и 3, то через штрихкод №2 будет установлена связь между ними, но если в первой базе 1 и 2 а во второй 3 и 4 тогда в этом случае будет новая номенклатура
(0)
Для получения данных с помощью штрихкода использовали
https://ean13.info и говорят вот это тоже работало https://barcodes.olegon.ru/(но я не пробовал)
(8) Обработка написана тогда когда нужно было в срочном порядке запускать несколько магазинов с более ли менее одинаковым ассортиментом, те что привели вы видел, полезные сервисы но все таки платные, хотя 600 рублей за 5000 запросов не так уж много, тут немного по другому там вы создаете все равно поштучно (насклько я понял) а здесь сканируете товары подряд создавая массив из штрихкодов и нажатием кнопки создаете «пачку» номенклатуры
(9)
Ну ean13info я парсил. Это было бесплатно, Правда были проблемы, когда видели кучу запросов с одного ип. Народ говорит даже как то решал этот вопрос с помощью прокси сервисов .У меня получилось обойтись подручными средствами.
(9)
Так вроде это просто выгрузка номенклатуры со штрихкодами, здесь же это… конвертация или даже выгрузка-загрузка данных если конфигурация одинаковая, зайдет идеально, писать ни строчки кода не надо, или нет?
(10) Про подручные средства можно поподробнее?
(10)
Если база одинаковая то да, но рассмотрите такой вариант, в одном магазине один ассортимент, во втором другой и тд. открывается новый магазин со своим ассортиментом в котором не нужен весь список номенклатуры из прошлых магазинов, используя обработку можно «накапливать» свою базу штрихкодов и выполнять начальную забивку уже нового магазина. Обработка не претендует на звание лучшей, просто может кому пригодится
(11)
Перезагрузка роутера — получение нового ип, капча не беспокоит. Но так работало только у нас. У коллег, то-ли ип не менялся, то-ли капча все равно не пропадала, не помню.
(11)
Не то, что бы я говорил, что она плохая или хорошая, просто добавил, что в целом проще было бы использовать штатные средства. Но если вам так удобнее… главное, что бы магазин запустился, на остальное в целом…
(12) Может мы не совсем понимаем друг друга, в файле в итоге образуется большая база штрихкодов, и при необходимости можно вытягивать отдельные записи
(13)Да понял, я тебя прекрасно. Я тоже делал, что то похожее. Выгрузил нужные данные о номенклатуре вместе с штрихкодами в текстовый документ, в момент оприходования(первоночального вноса остатков), мы взяли сканер, пикали по товару, он искал в базе, потом искал в интернете, потом, искал в текстовом файле и когда не мог найти вообще нигде, открывал специальную форму где можно было быстро внести основную информацию о товаре и товар сразу добавится в документ.
Насчет выгрузкизагрузки, да если надо загрузить из xml пачкой но не все, код писать придется. Причем даже не уверен, что это будет просто.
(14)Случайно не осталась обработка? Хотелось бы взглянуть, да и многим пригодилась бы
(15)Да там не обработка. Там дописана функция, которая ищет товар по штрихкоду и сообщает, если не нашла, в этот момент вместо того, что бы сообщить, что такого товара нет, функция идет в инет и ищет товар, следующим образом
Показать
Сейчас говорят там https и еще что-то переделали, надо писать заново. Ну или смотреть. Ну и был момент поиска в текстовом файле. Это у вас уже есть. Форму для создания нового элемента справочника, тоже выкладывать не имеет смысла. Ее в целом может каждый набросать за несколько минут под свою специфику и как ему удобно.
(16) Спасибо
В текстовой файл ничего не записывается. По инструкции нет кнопки «Прочитать» и «Сохранить ШК из БАЗЫ», это видно даже на скрине автора.