<?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='\
Будет ли работать на УТ 11.3?
(1) На ERP 2.2.4 работает, значит и на УТ 11.3 тоже работать будет.
В УТ 11.3.4.103 не производит поиск номенклатуры по артиклу
(3) Точно, была опечатка в коде, поправил. Спасибо что подсказали.
(4) Все работает, спасибо за оперативность
Добрый день,
Скачал обработку, у меня у номенклатуры два дополнительных реквизита
1 кратность, тип значения строка, загрузил значения без проблем.
2 сайт, тип строка и стоит галочка — выводить в виде гиперссылки, и вот здесь столкнулся с проблемой, не пойму как залить адрес ссылки и представление.
(6) Добрый день, в этой обработке нет загрузки и установки «представлений» загружаемых значений. По-идее не так сложно доработать при необходимости. Насколько помню текстовые представления значений есть только у дополнительных реквизитов и хранятся в реквизите «ТекстоваяСтрока» соответствующей табличной части
(7)Прошу сообщить стоимость доработки
Добрый день. За 1500р сделаю.
Пока себе это так вижу: Добавится в настройках реквизит с номером колонки содержащим представление и представление подгружается если оно заполнено в соответствующей колонке (т.е. указан номер колонки и ячейка не пустая и у доп реквизита установлена галочка «выводить в виде гиперссылки» ) ,
Если вам нужно что то иное то опишите точнее.
Доброго дня! Меня интересует загрузка перечня допреквизитов к справочнику номенклатуры. Использую КА 2.4.3.170. Ваше решение позволяет загружать несколько допреквизитов к одному элементу номенклатуры одновременно?
(10) Для этих целей как раз и создана эта обработка. Посмотрите внимательно скриншоты, в первой таблице в колонках идут значения доп реквизитов/ сведений, которые будут загружены для каждой позиции номенклатуры найденной по заданным условиям поиска
Может ли обработка загружать доп реквизиты к характеристикам номенклатуры ?
(12) Нет, на данный момент загружает только для справочника номенклатуры. Но переработать для загрузки в в справочник характеристик номенклатуры вполне возможно.
Добрый день. А сколько это будет стоить ?
Добрый день!
Нужно что бы обработка загружала несколько доп реквизитов для одной номенклатуры через точку с запятой, например артикул 12345 у этой номенклатуры есть три доп реквизита «мягкий» «жирный» «зеленый», если я укажу в колонке три раза артикул 12345 и справав следующей колонке укажу три доп реквизита разных то сможет обработка все три доп реквизита загрузить в эту номенклатуру? Мне нужно что бы в доп. реквизите получилось вот так: мягкий; жирный; зеленый
(15) Именно так эта обработка и делает (Только зачем через точку с запятой когда есть колонки? ). Для каждой позиции номенклатуры указанной в строках таблицы будут загружены доп реквизиты описанные в колонках загружаемой таблицы, ну а на пересечении соответственно значения доп реквизита для номенклатуры (Посмотрите на прикрепленные к обработке скриншоты).
Обработка может загружать произвольное количество доп реквизитов их состав указывается в колонках Таблицы , а настройка создания (если требуется) нового доп реквизита производится в таблице «Настройка колонок и свойств»
Вам нужно привести свои данные к виду таблицы с колонками:
Нименование или Артикул | Твердость | Жирность | Цвет
где колонки «Твердость | Жирность | Цвет» как раз и будут доп реквизитами.
В целом хорошо, на КА 2 работает.
1. Неудобно переставлять таблицу при большом листе, можно было бы загрузку все же сделать )).
2. В некоторых случаях сбивается загрузка значений — заголовок берет из одной колонки, а значение из предыдущей.
3. Если колонку загружать не нужно, то вариант только создания допсвойства, нужно добавить возможность пропуска.
Но все это легко поправляемое.
Спасибо за отзыв.
1) «Переставлять таблицу при большом листе» не понял какое именно действие неудобно.
2) Это возможно только в случае «не перезаполнения» таблицы «настройка колонок свойств», о чем обработка предупреждает и предлагает сделать автоматически
3) подразумевалось что ели не загружаем то и не создаем (просто удаление свойства из таблицы настройки колонок свойств), но это уже нюансы.
(18)
1. В листе для загрузки 40 тысяч строк и 65 колонок )) Выделите и вставьте с первого раза, не всегда получается.
2. Это возможно например когда часть колонок не являются доп свойствами, их можно было бы пропустить, но счетчик сбивается.
3. Совместно со 2-м пунктом )
(19)
1. 65 колонок не проблема, а вот 40тыс строк согласен )) просто перешел на загрузку с табличного документа, после того как надоело бороться с пользователями у которых объединенные колонки в xls файле и они это отказываются замечать и доказывают что обработка работает не правильно.
2. Если колонка не является доп свойством ее просто удаляем из нижней таблицы настройки свойств и все. там нет счетчика, все работает через имена соответствий которые устанавливаются в момент инициализации. а вот если подредактировать состав колонок в табличном документе и не перезаполнить состав свойств , тогда да, собьется (но об этом идет предупреждение).
(20) По 2. Не совсем. Колонку подтягивает верно (доп свойство), а значение берет из другой. Там счетчик именно на получение значения из поля.