<?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) можно попробовать в расширении добавить общий модуль и там процедуры те написать, и перехватить модуль подключаемых команд, я делала это давно когда расширения еще не перехватывали процедуры, надо будет попробовать, тут уже на Ваш вкус, как говориться))
(1) я не помню просто в 8.3.9 проблема была с общими модулями, поэтому если сделаю в расширении, то добавлю сюда
Сказать, что это удивительно
— ничего не сказать…
Добавить нужный модуль в расширение, создать там процедуру
и все дела… А то как — то смысл заголовка «не снимая документы с поддержки» смазывается…
(5) этот вариант точно работает, можете попробовать в расширении перехватить
(5) там же не написано не снимая конфы с поддержки, там только про документы, так что не придирайтесь)
(7) Да я и не придираюсь, просто удивляюсь, что сказав «А» Вы говорите что «Б» не бывает))))
ЗЫ а в (6) это что? вопрос, пожелание, утверждение?
ЗЫЫ вообще-то я Вам помочь хотел — вернуться на поддержку полностью (в чём, собственно, ИМХО, суть расширений). А то как у Ширвинта — «тут играем, тут пропускаем, тут мы рыбу заворачивали»)))))
(8) ахах))))) полностью не вернемся на поддержку там общий реквизит надо вставлять, расширение позже будет)
(9) Дополнительное сведение спасёт
отца русской демократииситуацию не дожидаясь выхода релиза в режиме совместимости с 8.3.11…понимаю, что с ДС работать чуть сложнее, чем с добавленным реквизитом (кстати, что есть общий реквизит просветите пожалуйста, как создаётся, с чем едят?), но снятия с поддержки тут ни разу не нужно…(10) согласна, придется заморочиться с ДС, у меня конфа давно снята с поддержки, поэтому общий реквизит не мешает) в отличие от ДС общий реквизит можно создать один раз и указать в каких объектах будет участвовать, удобно и быстро)
(11) ДС тоже разные бывают, общие в том числе…
(1),
Как только данные расширения «глючить» перестанут и будут поддерживать полный функционал изменения типовой конфигурации, тогда будет можно говорить, как про инструмент изменения типовых конфигураций.
А так можно все менять непосредственно в конфигурации, при этом спокойно обновляя на последующие релизы.
Расширения больше нужны для Freshа.
(12) ок я посмотрю)
s/снять с поддержки/разрешить редактирование с сохранением поддержки/ 😉
Очень интересное решение!!!
Показать
Пока смотрел публикацию, думал о том, что ведь правда в ссылке хранится дата создания объекта. В (17) привели пример. Считаю, решение более корректно и повлиять никто не сможет на эту дату. Недостаток только в том, что в форму списка это не получится вывести.
(18) это да, с формой списка заморочка)
(17) (18) Вы же понимаете, что дата создания документа в конкрентой базе и дата из GUID могут быть различные (такое возможно например при обмене при синхронизации по guid)
Только идентификаторы не стоит начинать с нижнего подчеркивания…https://its.1c.ru/db/v8std#content:2149184103:hdoc , п.3