<?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='\
идея хорошая
«Не смог реализовать перетаскивание из поля табличного документа. Ни кто не делал?» Вся проблема в том что ты не смог реализовать по причине бага в документации по самой платформе, в частности в описании методов табличного поля НачалоПеретаскивания и прочих.
В доке написано что для табличного поля данные методы будут работать только при установленном значении ТОЛЬКО ПРОСМОТР = ИСТИНА, на самом деле это небольшая ложь, убираешь признак только просмотра и все начинает работать, табличное поле сразу же начинает вести себя адекватно в плане того, что оно является как источником так и приемником для перетаскивания.
Вот метод проверки на то что бы не наложить одну область на другую, здесь надо прикинуть как удобнее, скорее всего надо при окончании перетаскивания проверять по регистру есть ли записи с данным промежутком времени.
Заработало. Спасибо. В моей очень толстой книжке ещё указано что «Защита» тоже должна быть «Истина». Оказывается тоже нельзя устанавливать «Защита», иначе событие «ПроверкаПеретаскивания» не срабатывает.
А еще если бы ты сделал компоновку граф немного иначе например сверху бы вывел название помещения чуть ниже всех кто там принимает это было бы вообще супер, да и график на неделю было бы правильнее смещать не вниз а в с торону, а так идея реально супер.
А я вот че замутил:http://infostart.ru/projects/4619/
MaxiSoft (4). Упорство юзеров не отходить от привычного представления данных «как в экселе» переломить тяжело. А в нём было именно вниз. Хотя я и сам не задумался об этом. 🙂
molot (5). Поначалу я все сделал на Ганте. За основу брал готовый отчет из конфигурации CRM_Проф. Но пользователи приняли в штыки, да так рьяно охаяли, что пришлось забыть о диаграмме.
А если щелкнуть по белому полю (свободному внемени) создается документ занятости?
(7) Пока этого нет, новый документ создается при нажатии контекстного меню. Но было бы практичнее сделать именно клик по ячейке и тогда предложить тип документа или еще что!
Обновил отчет. Теперь работает перетаскивание. информация выводится не 5-минутными интервалами, а часовыми. Изменения оформил новым отчетом, сохранив старый. Ещё раз спасибо to MaxiSoft, заказчик очень хотел перетаскивание, а с такими глюками в документации… М-да.
Только не получается драг-н-дроп — просто тупо ячейки выделяются
Спасибо за функционал…
Я делал, у меня перетаскиваетсяhttp://infostart.ru/public/139090/