<?php // Полная загрузка сервисных книжек, создан 2026-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) Troha, Ну так попробуй на стандартной обработке ИТС, сделать отбор нескольких документов по одинаковым реквизитам, да еще по любым свойствам реквизитов.
Для особо торопливых, дополнительно разместил флажок «Перезаполнить…» на форму «Отбор по документам»
Наверное зря не написал,… плюсуем…комментарии оставляем…а так то скачивают активно …
извините если туплю. в типовой (УПП) есть возможность отбора для нескольких видов документов по реквизитам, имеющимся одновременно в каждом виде отбираемых документов. пожалуйста, подскажите, в Вашей обработке чем функционал расширен. ещё раз извините, можно как бы «на пальцах для чайника» объяснить, так как написанное в коменте, реализуется в стандартной, по крайней мере ещё 3-4 года назад было в УПП 1.2 а за тем и в УПП 1.3 (как сейчас, увы не знаю). Спасибо.
(5)не функционал расширен, а добавлена возможность отбирать несколько видов документов для дальнейшей обработки (т.е хотим отобрать, по контрагенту и договору и организации и .. сразу и накладные и документы движения ден.средств и т.д.). В стандартной, можно отобрать только один вид, или ПКО или Прих.Накладную и т.д.
в стандарте для разных видов документов можно делать отбор только по «Виду документа, ссылке, дате, проведен, пометка удаления», Все.
применений в результате можно море придумать, например… найти все документы где засветилась определенная номенклатура или ее характеристика, или валюта, или что угодно …
(6) пожалуйста, ещё раз извините, не понял. в типовой как раз есть такая возможность отбирать одновременно несколько видов разных документов и устанавливать для них различные фильтры (отборы) по любым реквизитам, которые присутствуют в каждом виде из выбранных документов, пожалуйста, посмотрите на прикреплённый файл, это скринчик с примером типовой встроенной обработки. Может быть, вы имеете ввиду что-то другое, описывая свою обработку, пожалуйста, проясните. Спасибо.
извините, возможно Ваша обработка позволяет сначала указать условия отбора, а затем автоматически выбираются все виды документов, в которых есть такие реквизиты, и из них отфильтровываются те, у которых значения таких реквизитов как Вы указали в отборе. теперь я Вас верно понял?
(10)Да, и да, практически то же самое, как в (9),но без предварительного фильтра по совместным реквизитам. В (9) нужно пробежать по всем интересующим документам, а затем после автофильтра реквизитов, выставлять отбор.
В списке документообоорот — а в нем не работает.
(12)сожалею, такой конфы нет на предприятии.
А в этой обработке тоже лимит на 256 таблиц в запросе?