<?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='\
Что-то я не понял: если вы всё равно храните данные во временных коллекциях, зачем было привязываться к пометке удаления? Изврат же.
А зажать ctrl и мышкой выделить нужные документы, потом все действия, действие — не вариант?
(1) > Изврат же.
Ну да. По другому не удалось галочки пропихнуть в список. Такой вот обходной маневр.
(Изменение пометки на форме на документ ни как не влияет).
(2) > выделить нужные документы
Множественное выделение это хорошо. Но иногда нужно по другому.
Ну и хотелось что бы добавленный функционал не сломал типовую программу, а это может произойти если включить множественное выделение, там где его не было.
(3) Извините, но можно было легко обойтись безо всяких пометок удаления. Подумайте на досуге, задача решается гораздо проще.
(4) Возможно можно и обойтись. Возможно подумаю
(4) Поразмыслил.
Собственно да, без использования данных документа «Пометка удаления» сделал. Решение чуточку отличается, при той же логике. Размер идентичный. Выложу новый вариант чуть позже, если ни от кого не поступит вариантов по сокращению кода.
>бойтись безо всяких пометок удаления
И да, в чем криминал?
И ещё, если надо хранить связку между ссылкой на документ и некой пометкой, делайте соответствие и по факту наличия ссылки в нём определяйте, есть ли эта пометка. Быстрее будет, чем список и массив.
(7) Согласен, быстрее, по этому сразу так и сделал. Название переменной наверное ввело в заблуждение.
(2) Art1387, да, я тоже об этом подумал. Но видать или автор, или его пользователи до сих пор живут в парадигме 1С 8.0.
(2)(9) Если что, в парадигме обычных форм по умолчанию нет выделения Ctrl и мышкой и хоть защелкайся больше одного не выделить.
Статья не о выборе способа, а о конкретном способе отметки галочками.
Не агитирую, просто показал, как это можно сделать, если именно так нужно.
(10) в типовой конфигурации может и нет, а вот если поставить режим выделения множественный, то вполне. Кроме того про групповую обработку не стоит забывать, если уж хочется совсем без доработок.
(11) Ну групповую обработку пользователю не дашь…
(9) SiAl, (11) Art1387,Помоему вы сильно не правы. Пример делаю групповую печать документов Реализация товаров и услуг. Допустим у компании 1000 документов нужно напечатать 40 из них. Мне кажется пользователю будет не очень удобно помечать их зажатым контролом. Нет тут ни каких парадигм просто действительно удобнее. Автору спасибо!
Второй способ не вполне рабочий. Если перемещаться по ячейкам колонки «Флажок1» с помощью клавиш, то будут открываться документы, даже если это запретить в процедуре выбор.
Операторы, которые постоянно работают с большими списками, обычно работают с клавиатуры, перемещаются по строчкам и пробелом ставят отметку.
При множественном выборе с ctrl часто бывает что палец с ctrl соскальзывает и выбор приходится повторять по новой.
За первый способ спасибо, очень помог, т..к теперь не надо список документов загонять в таблицу значений. И главное можно использовать отборы которые предоставляет список документов.
Спасибо автору, очень полезная информация.
Спасибо автору. Использовала это в своей доработке ЖурналОператораСклада. Хочу еще сделать кнопки командной панели «СнятьФлажки» и «УстановитьФлажки» для быстрого выбора/снятия всех флажков. Не могу сообразить как обойти все документы из журнала…
(16) Подскажите, на каком релизе платформы делали? Я пыталась сделать тоже в форме списка справочника — не получилось…платформа 8.3.9.2170
Форма списка справочника — это динамический список и у него уже нет метода ПриПолученииДанных