<?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)
А я, вроде, понял. 😉
(0)
Думаю, термин «обрыв ссылок» путает читателей.
(3) именно анлокер, а потом без проблем
А чего тут предлагать? Ясно и так на сто рядов
(4) ну устанешь анлокером по одному handle делать. А если юзеров 100?
TurboMD тебе в помощь
(6) убедите меня что он легче, лучше. Мне не понравился.
Зачем убеждать что он легче и лучше. Работаешь в стандартном конфигураторе без плагинов. Кому актуально необходимо просто открыть редактируемый справочник или документ. На внесение изменений тратится несколько секунд. Мне очень нравится. Единственный недостаток ГМ править нет возможности.
Как сеансы пользователей реагируют на отключение от MD?
(9) Не заметил затруднений сеансов. Все работают дальше. При разных типов баз.
А чем не устраивает отключение например через «Управление компьютером»?
Или эта обработка для ситуаций когда пользователи работают на терминальном сервере и база лежит там же?
(8) проблема в том, если много удаленных баз. И всем на сервера чет проблематично удаленно крутить турбоМД. А тут все проще: берем обработку Павла Бычковяка (, орываем ссылки на файл (Handles) конфигурации и правим конфигуратор. Достаточно лишь админских прав на том компе.
(11) Управление компьютером — это когда вышибать пользователей? Не понял немног. Канечно обработку нужно запускать на том компе где лежит база и есть права.
(13) Управление компьютером -> Общие папки -> Открытые файлы.
Там можно закрывать подключение к конкретному файлу.
(14) не знаю, там ни разу не юзал.
(12)
Не понял фразы.
У меня такое чувство, что автор как-то неправильно использовал ТурбоМД. Расскажу в двух словах как это работает:
Например, Заметели, что в модуле формы документа ПКО есть ошибка.
Заходим в конфигуратор, исправляем ошибку, выгружаем модуль (у меня стоит ОпенКонф и я повесил выгрузку текущего модуля/формы на сочетание CTRL+ALT+S)
ВСЁ! Пользоваетелю будет достаточно переоткрыть форму этого документа. (Ес-но, компонента ТурбоМД должна буть загружена)
Что происходит и как это работает:
В каталоге ИБ есть служебный файл turbomd.prm, в котором хранится список модулей, которые необходимо подгружать не из МД. а из каталога «unpack» КаталогаИБ.
В данном случае в turbomd.prm будет одна строка:
Документ.ПКО.Форма.Модуль = unpackДокументПКОФормаМодуль.txt
Как нетрудно догадаться сам модуль будет хранится в файле «unpackДокументПКОФормаМодуль.txt»
Т.о. для «кучи распределенок» будет достаточным скопировать два файла в каталогИБ
хм… храню все модули во внешних файлах… глобальник- да надо чтобы пользователи перезагрузились… но глобальник править редко..
(0) какая наивность удалять анлокером «ссылки» на мд. Юзвери сразу отвалятся с ошибкой.
(10) враньё.