<?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='\
(0) Не скачивал, но подход одобряю. Вещь полезная, даже с учетом минуса.
Были же менеджеры обработок внешних или я ошибаюсь? (правда для 8.1, но их переделать можно)
(2) Были. Но и эта не помешает. Всё же лучше, чем очередной перенумератор или консоль запросов. Ах да, забыл про статистику по документам.
Полезная вещь! Спасибо!
(3) Про накопление статистики мысль, конечно, была. Можно даже было бы сделать список «Часто используемые обработки» для каждого пользователя. «За последний месяц Вы открыли эту обработку 12 раз. Перенести её в панель Избранного?» Но показалось пока не особо актуальным.
(0) Смотрю скриншоты, вижу, что нет удобного поиска по наименованию
Совет — сделай поиск по части наименования
Полезная вещь, одобряю.
А мы просто в меню вставили открытие справочника внешних обработок, научили пользователей кликать только если вид обработки отчет или обработка — и ОК.
(8) ПОделитесь секретом дрессировки юзверей. А то вот одного приучил пользоваться консолью запросов — теперь этот гад только так и может. К
лоткузакрывать корректно программу еле приучил.(9) Не понял, а какая связь между консолью запросов и корректным закрытием программы?
Терпение, терпение и еще раз терпение… и все с начала по нескольку раз… А мы консользапросов еще с ними не проходили…
(11) kondrashka,
Ну и зря, очень полезная штука для тех кто мозгами шевелить умеет! Остальных правда вгоняет в ступор!
Пользователи главное чтобы пользовались! Для них ведь это все пишется
Если много пользователей юзают доп.функционал самое то. +1 🙂
УТ 10.3. При первом запуске получаем
{Форма.ВидимостьГруппФорма.Форма(168)}: Метод объекта не обнаружен (ЗаписатьНабор)
ОбщегоНазначения.ЗаписатьНабор(НаборЗаписей);
{Форма.ВидимостьГруппФорма.Форма(168)}: Метод объекта не обнаружен (ЗаписатьНабор)
ОбщегоНазначения.ЗаписатьНабор(НаборЗаписей);
УТ 10.3.12
Да, поддерживаю! Столько стало этих отчетов и обработок, что сам стал в них путаться, не то что обычные пользователи. Идея очень хорошая! Попробую, потестирую
спасибо! думаю пригодится
Качаю. Некоторые юзеры ругаются, что обработки так «далеко» расположены.
+
Нужная вещь,
(15), (16). Пожалуйста, скачайте обновленную версию (1.1). В старой были ошибки — использовались процедуры общих модулей, отсутствующие в ряде конфигураций, в том числе и в УТ.
Плюс! Полезная обработка ибо тонем во внешних отчетах
Спасибо за доработку. Потестим!
Немного не по теме. Скажите,а то что при повторном скачивании 1$ снимают это нормально? Пытаешься помочь автору улучшить разработку. Скачиваешь каждую новую версию, а с тебя за это ПОСТОЯННО мани снимают…. Может я что не понял 🙁
(6) Работает поиск по вводу с клавиатуры. Что имеется в виду под «поиском по части наименования»? Это не одно и то же?
У нас проблема видимости большого списка внешних обработок решается ограничением доступа на уровне записей к справочнику внешние обработки: грубо — у каждого отдела/направления своя папочка в справочнике, доступ элементам в группе, если нужен отчет/обработка из другой группы — эксклюзивно добавляем права и на него.
То что доступ к справочнику лежит далековато(Сервис — Дополнительные отчёты и обработки->…) согласен. Поскольку у нас полно самописных интерфейсов, то часто используемые вещи выносим в главное меню.
(24) Снимается снова — проверено (((
одобрям…одобрям…вещь полезная
В целом очень неплохо придумано только такие моменты — слева тоже неплохо бы дерево, и как быть с отчетами и обработками находящимися в корне?
еще раз спасибо…очень пригодилось
А еще необходима кнопка раскрытия сразу всех папок
(28) Слева линейный список сделан специально — подразумевается, что много избранного быть не должно, и к нему должен быть максимально быстрый доступ. Дерево же не подходит для быстрого доступа. Для структурирования информации — подходит, но не для скоростного выбора.
Отчёты и обработки в корне не выводятся по определению. Были определенные технические сложности, и в конце концов решили считать это не багом, а фичей 😉 Вам ведь ничего не мешает переместить их из корня в папку? 😉
(4),(18),(29)
Пожалуйста! 🙂
(26) Извините, не понял?
(30) Принято. Доработаем.
и колонка в которой видно что это отчет или обработка, привычки пользователей все равно останутся и вопрос а это в каком месте лежит???
только для управляемых форм, я правильно понимаю?
(35) Наоборот, только для обычных форм.
Полезная штука
+ автору за отличный инструмент в моем арсенале
Еще немного и вот оно управляемое приложение:)))
Спасибо, хорошая обработка. Хотелось бы, чтобы при открытии был только список избранного, а форма настройки этого списка открывалась бы по кнопке «настройка» или на другой закладке. А то очень отвлекает полный список…
Да, вещь стоящая. Надо скачать и потестировать. Обработок пока что немного, но в перспективе, полагаю, их число будет расти и расти.
Интересует, правда, вот что: учитываются ли права доступа в этой обработке? Ну, т.е. обработок, скажем, пара десятков, но одни из них должны использовать только, допустим, расчётчики, и не использовать кадровики, и наоборот?
(40) ir_en,
Знаете, а у нас многие сотрудники совсем не используют Избранное, только в правой панели работают. Более того, изначально была только правая панель, потому что была цель уйти от разделения отчетов и обработок. А Избранное добавили потом. Но ваш подход тоже имеет место, я подумаю, как красивее его реализовать 🙂
(41) Boroda,
Права доступа учитываются на уровне RLS, то есть если сотруднику недоступна обработка, он её и не увидит. Но тут есть одна особенность. Если у пользователя нет прав на использование обработки, то она удаляется из Панели избранного. То же самое и с видимостью групп.
Пример. Предположим, у вас есть группа обработок «Для расчетчиков». И кадровики к ней доступа не имеют. Вы настроили видимость этой группы. После этого, если Панелью будут пользоваться только расчетчики, группа будет видна. Но, когда Панель откроет любой кадровик, группа исчезнет из списка видимых, причем для всех пользователей.
Резюме. Разделение по правам в том виде, в котором вы хотите, не реализовано. Поддерживается только недоступность обработок на уровне RLS.
Идея хорошая. Но в ЗБУ выдает ошибку
{Форма.ВидимостьГруппФорма.Форма(106)}: Ошибка при установке значения атрибута контекста (ТипЗначения)
Элемент.ТипЗначения = Новый ОписаниеТипов(ТипЗначения);
по причине:
Тип не является подмножеством типа значений плана видов характеристик
(44) silver-747, что такое ЗБУ?
ЗБУ это Зарплата бюджетного учреждения
У меня вопрос к разработчику — каким образом «панель обработок» добавлена в врехнее меню?
(47) Mag_LI, для этого, безусловно, придется разрешить изменения в конфигурации и добавить обработку в нужные интерфейсы.
Вот у меня что-то и не получается добавление, не могу найти, как или где это сделать. Не подскажете?