<?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. При создание новой позиции и характеристики. Дублируются позиции и характеристики. Не происходит поиск.
например. загружаем сразу две строки. Номенклатуры такой нет. арт1 майка 1размер. арт1 майка 2размер. создаются две позиции номенклатуры. хотя одна с разными характеристиками. И создаются новые характеристики. Они уже заведены. Сделайте повторный поиск при заведение новой позиции. и поиск по характеристикам.
2. Загрузка доп. реквизитов и сведений. Например у номенклатуры добавлены доп реквизиты модель, сезон, пол, и др. вот бы сразу бы погружать при создание. Цены бы обработке не было)
3. Вынести отдельной кнопкой создание штрих кода.
Сейчас
(1)Спасибо, рассмотрю возможность доработки
(0) не поделитесь кодом запроса, из модуля менеджера документа? А то у меня проблема с сопоставлением номенклатуры по ШК. И количество не заполняется почему то.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
ВЫРАЗИТЬ(ШтрихкодыНоменклатуры.Владелец КАК Справочник.Номенклатура) КАК Номенклатура,
ШтрихкодыНоменклатуры.Характеристика КАК Характеристика,
ШтрихкодыНоменклатуры.Упаковка КАК Упаковка
ИЗ
РегистрСведений.Штрихкоды КАК ШтрихкодыНоменклатуры
ГДЕ
ИСТИНА
И &ШтрихкодыТекстУсловияОтбор
И ШтрихкодыНоменклатуры.ТипШтрихкода = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ТипыШтрихкодов.EAN13)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Номенклатура.Ссылка КАК Номенклатура,
ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ПОМЕСТИТЬ НомХар
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
И НЕ Номенклатура.ПометкаУдаления
И Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
И &ТекстУсловияОтбор
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Номенклатура.Ссылка,
ХарактеристикиНоменклатуры.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ПО (ВЫБОР
КОГДА Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры)
ТОГДА Номенклатура.Ссылка
КОГДА Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ОбщиеДляВидаНоменклатуры)
ТОГДА Номенклатура.ВидНоменклатуры
ИНАЧЕ НЕОПРЕДЕЛЕНО
КОНЕЦ = ХарактеристикиНоменклатуры.Владелец)
ГДЕ
Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик <> ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
И НЕ Номенклатура.ПометкаУдаления
И НЕ ХарактеристикиНоменклатуры.ПометкаУдаления
И &ТекстУсловияОтбор
(4) Спасибо!
(4)
Подскажите, что вы отбираете по этому условию?
(6)
и это.
(6) (7) Планировал сделать отборы по типу номенклатуры. По-умолчанию, передаются след параметры: ТекстУсловияОтбор = «ИСТИНА»;
ШтрихкодыТекстУсловияОтбор = «ИСТИНА»; Можно эти отборы спокойно убрать.