<?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. Состав комиссии выбирается в таблицу значений и оттуда попадает в отчет.
2. Насчет добавления документов по комментариям вопрос спорный, хотя сделать можно.
Приказ добавлю, сейчас просто мало времени.
Спасибо за комментарии.
Можно в таблицу накладных добавить несколько реквизитов документов, ответственного или счет и статью затрат (если не на закладке материалы). На случай, если хочется, например, распечатать акт на весь списанный бензин за выбранный период (месяц). Или всю канцелярию и т.п. В этом случае нужна возможность строки удалять.
Супер!!!!!
Хорошая обработка!
Спасибо за обработку! Сконвертил под 8.2, под БП 2.0 работает прекрасно. Именно то, что было нужно.
Спасибо за обработку! Очень пригодилась. Немного переделала и для документа «Передача инвентаря в эксплуатацию».
не могу скачать, но интересно, как решается вопрос с нумерацией при печати? по идеи это же должен быть документ…как мне кажется.
Автор, добавь скриншоты в публикацию,пожалуйста.
Очень нужная обработка, долго искал, автору огромное спасибо.
нашлааась! спасибо автору!
Нужная вещь для тех, у кого производство. Хорошо бы ещё сделать для УПП 8,2 (ред.1.3).
Полезная обработка, спасибо, только должности не выходят на печать.
Спасибо большое, реальная помощь в работе!!!Единственно верное решение.
Хорошо бы ещё сделать для БП 8.3
Такой обработкой пользовалась в 7.7 , ищу для 3.0 никак. Может кто поможет?
Переписывание для БП 3.0 не планируется.