<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Ну описания нет ладно. Ну хотя бы картинку привел как это выглядит.
Хм. Как я понял твоя обработка позволяет создавать элементы управления (рамки и надписи), на прикрепленной панели и соответственно обрабатывать по ним одну команду (как у Раруса избранное в CRM сделано)? Честно, говоря, при использовании такого варианта проще применять стандартную ПанельФункций от 1С, которая выводит HTML-панельку с командами и текстом. Гораздо удобнее и возможностей оформления больше.
http://www.infostart.ru/projects/1472
http://www.infostart.ru/projects/3667/
ЗЫ Можешь посмотреть похожие проекты:
(2) Это замена главного меню 1С. Для разных заказчиков оно совершенно разное. А конфа одна. Смотрел ссылки но там либо по метаданным строится, либо пользователь(?) сам чего-то должен рисовать. У меня программист разводит по понятиям.
(3) А чем не устраивает стандартное меню и его настройка по интерфейсам? Только тем, что надо менять конфу и добавлять новые интерфейсы?
ЗЫ В указанных двух обработках можно достаточно просто формировать меню программистом, а пользователям запрещать что-либо изменять.
4+ как кстати и в 1С-кой ПанельФункций — текст на панель задается только программистом.
(5) ПанельФункций перекрывается открытыми окнами или сама их перекрывает что не есть удобно.
(6) Нет, это новый вариант панели функций. Старый был как сейчас «Советы», прикрепляемый. На ИТС даже есть обработка по настройки её содержания.
Мне понравилось, спасибо
Чем моя не понравилась? В ней сам пользователь может настроить пункты для себя.
http://www.infostart.ru/projects/3672/
(9) А зачем козе баян? Пользователь должен пользоваться. Например большая организация Вася ведет штатное расписание, а Петя учет ТМЦ. Петя настроит свои пункты на ведение штатного расписания? По поводу прав доступа. Тогда нужно держать одну конфу для этой организации, и такую же, но с другими правами и ролями, для маленькой фирмочки где все это делает одна Маша. Появляются не нужные проблемы с сопровождением. У меня построение панели вынесено во внешнюю обработку, которая для каждого заказчика своя, а конфа одна для всех
Убрать ненужный скролинг у поля HTML:
ЭлементыФормы.[ИмяПоля_HTML].Документ.body.scroll = «no»;
Во как 🙂
пихай в процедуру «ДокументСформирован(Элемент)» и будет щастие
11,12 Спасибо. Я это поле просто заменил элементом «Надпись». Для часов прицепил обработчик ожидания.