<?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) dr.death, Для этого прийдется делать еще один шаг добавляя свойство характеристике. Да и непонятно как это сработает при выгрузке на Битрикс…
Свойства характеристикам — типовой функционал. На битриксе всё это учитывается при выгрузке, просто в xml ваши данные будут в других тегах. нужно будет на сайте настроить что откуда брать в карточку товара
Чего вы добьетесь, установив текст в таб. части? З.Ы. вы добавили обязательный реквизит в процедуру, которая вызывается если не из всех, то из БОЛЬШИНСТВА документов системы, вы все эти вызовы переписали? Ради того, что в документе видеть текст, который не попадет на печать?
(4) Lyns_owner, а чет там менять то? Глобальная замена в помощь!
(5) это была шутка? менять все вызовы…я уж молчу, что лучше тогда просто лишний параметр сделать по умолчанию Неопределенно и все. Решение в статье сомнительное. Нет, даже постановка задачи сомнительная. Ну изображения понятно, а артикулы здесь причем?
(6) cool.vlad4, ладно… Мне эти артикулы стока минингита не доставляют как изображения… Теперь не знаю как нормально на Битрикс все таки выгружать… Одни так говорят … другие так… 🙁
Здорово!
мучает один вопрос, чем ПВХ свойства объектов не угодило?? на мой взгляд сомнительное удовольствие вносить столько изменений.
(9) jigourt, А Как в СВОЙСТВО Вы бы картинку записали?
(10) добавляете справочник изображений в тип значения характеристики и вуаля
вообще в принципе прочитал публикацию. справочник характеристик подчинен номенклатуре, а вы добавляете артикул подчиненному элементу. в вашем случае, я бы характеристики перенес в свойства и наплодил бы нужное кол-во номенклатур с нужными артикулами. в вашем случае вы ломаете всю природу справочника Характеристики номенклатуры и как следствие у каждого элемента своя картинка
(11) jigourt, а как складской учет вести в разрезе свойств?
(12) а зачем вам это делать если у вас один артикул это определенный набор свойств?
судя по картинкам, у вас будет свойство Цвет с неким значением, а артикул переедет к артикулу самой номенклатуры
(13) Ну да. По характеристикам мы ведем только по цветам. И там свойства одинаковы. А вот для ноутбуков например, разный артикул — это и разные свойства. Но модель может быть одна и та же самая. Мы больше это делали для битрикса. Так как там в таком случае непонятно как связать такие товары в предложения. Когда есть одна модель но с разными свойствами. У нас это отдельные товары. 🙁 (отдельная номенклатура)
(14) дак количество свойств может быть какое угодно, они интерактивно добавляются, просто каждого свойства по одному значению для одной номенклатуры
(13) jigourt, один артикул это определенный набор свойств.
Тогда какой смысл вобще в характеристиках? Раз и свойства разные , то по характеристикам нефиг вести.
(16) ну например у нас в характеристиках хранятся размеры, потому что у нас артикул у всех размеров одинаковый. а вот различные модификации номенклатуры где есть модель, тип и т.п. это разные артикулы, т.е. разные элементы справочника Номенклатура
(17) jigourt, тодЫ ж я правильно все решил! Что вы меня путаете?
(18) как правильно, когда вот это
противоречит тому, что я сказал