<?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='\
Ошибка получения файла
(1) yaguarrr, попробуйте еще разочек.
Если все равно не скачается — напишу в техподдержку.
а можно сделать так чтоб она просто существующие характеристики перезаписала? или это из другой оперы?
(3) david1915, в каком смысле «перезаписала»? 🙂
(4) ну типа команды (уж не знаю язык) открыть все характеристики, записать и закрыть все характеристики. просто у меня вот такой гемор:
Есть характеристики (100тыс) залитые номенклатуре с помощью мегапрайса. все встало все видит все отлично. с помощю групповой обработки изменено наименование для печати. После этого чтоб мегапрайс увидел эти характеристики(при изменении цен) их надо перезаписать, тоесть открыть характеристику и нажать «записать и закрыть». Тогда обработка все видит, обновляет цены и т.д. если не сдеать то она старые характеристики не увидит и создаст новые. по товарам много движений остатков, так что просто все заменить не хотелось бы. Вопрос в том есть ли какойто безгеморный способ, обработка или код чтоб перезаписать эти характеристики кучей. Пробовал менять наименование, наименование для печати, владельца(назначал нового потом возвращал старого), не помогает, все равно не видит пока не откроешь и не запишешь. я так понимаю что надо в групповой обработке прописать произвольный код типа «открыть все характеристики, записать и закрыть все характеристики. Подскажите кто сведущь пожалуйста.
(5) david1915, если я правильно понял, что вам нужно. То просто надо перезаписать программно все существующие характеристики, это можно сделать например стандартной обработкой подбор и обработка объектов. Возможно надо будет написать код капельку посложней, чтобы открывалась программно форма характеристики и записывалась.
Можете мне написать в скайп (он есть в моем профайле), постараюсь вам помочь.
Добрый день! Скажите, а как обработка кушает свойства, когда тип у него файл? Что-то очень долго висит и ничего не происходит.
(7) bagdenia, приветствую! Обработка может долго работать — это нормально, если много свойств и большое количество номенклатуры.
С обработкой файлов проблем быть не должно, НО на всякий случай можно в коде (код открытый) поставить, чтобы это свойство не участвовало никак в создании характеристик (существенно ускорит процесс создания).
(8) ага, спасибо. у меня просто одну единственная позиция больше часа обрабатывается. и там три свойства с типом файл. логично предположить, что перебирать будет со всеми вариантами файлов, чего совсем бы не надо. т.е. потом имеющиеся характеристики придется умножать на три, по количеству вариантов файлов для свойства (картинка цвета кромки, например. Название файла идет в имя характеристики, а сам файл изображения кромки потом на сайт). Мне кажется, для такого варианта обработка не вполне подходит, да?
(9) bagdenia, ну да, для вашего случае в коде пару строк надо изменить, чтобы файлы не перебирались и будет счастье 🙂
(10) Файлы как раз нужны, они такие же значения свойств, как и другие доп. значения свойств. Ну ладно, спасибо.
(11) bagdenia, да не, я и говорю про то, чтобы в коде дописать, чтобы эти свойства (соответствующие файлам) не участвовали в создании всевозможных характеристик.
(12) а как же не участвовали, если надо чтобы участвовали? Ну вот пример.
Есть у меня стол, у него, в числе прочих свойств для характеристик, есть свойства цвет кромки и цвет поверхности, с типом файл. Причем для каждого из них по несколько вариантов файла, по количеству цветов свойства. Если не создавать автоматом характеристики по каждому варианту комбинаций цвета кромки и поверхности, то потом придется создавать их вручную, а это все, что уже было создано по комбинациям значений остальных свойств (а их тоже ух как немало) умноженное на количество вариантов значений каждого из свойств с файлом. Вручную запаришься.
Если же автоматом — то файлы сами по себе никак не обозначают свою принадлежность конкретной позиции и свойству, и будет создано избыточное количество характеристик. Это только если по одной позиции обрабатывать и в параметрах обработки указывать еще папку файлов для конкретного свойства и для данного элемента ном-ры. Проще никак и не выйдет. Я не права?
(13) bagdenia, то есть свойство цвета имеет тип не строка (например, «синий», «красный» и тд), а тип файл? В котором как я понимаю присутствует этот цвет?
Вы вчера обработку запускали-она прошла? Что в итоге вышло?
(14) именно, файл. Называется файл красный, синий, но это файл, и так надо. Файл потом отправляется на сайт и служит иллюстрацией. Запускала, нет, не доходит до конца, отваливается с ошибкой сервера. И это только по одной позиции. Я смотрела внутрь на алгоритм, он пугающ )
(15) bagdenia, да, алгоритм нетривиальный 🙂
Если не сильно горит, можете написать мне в скайп (есть информации обо мне), попробую Вам помочь на днях.
(16) Бесплатно? )
(17) bagdenia, ну если там не совсем жесткач будет, то да:)
(18) ух ты, крутяк ) Спасибо, напишу.
под Управление торговлей для Украины 3.0 подойдет?
(20) DjPrizrak, если она схожа по структуре с УТ11, то да. Можете при желании выслать мне конфигурацию, я протестирую и скажу вам.
Если даже не подходит-могу для Вашей конфигурации доделать обработку.
Мои контакты в профайле.
Управление торговлей, редакция 11.1 (11.1.10.94) — ничего не выводится!!! Жму заполнить и пусто(
Первый же запрос который перебирает доп реквизиты выдаёт пустоту)
(23) djdiamond, нужно смотреть. Дополнительные реквизиты ХАРАКТЕРИСТИК есть? Именно для них сделана обработка
(23) djdiamond, интересно за что минус поставлен?
В описании четко и подробно написано для чего обработка. Нужно читать наверное перед тем как скачиваешь. Не просто так все описывалось подробно.
И видео так же имеется.
c УНФ 1.6 Совместима?
стоит как раз такая задача, перекрестить все свойства (цвет*размер) и создать тыщу характеристик
(26) Иван, делалась под Ут11, но, думаю, доработки по адаптации под УНФ будут минимальны