<?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='\
(0)
Прикрутить formex к конфе — одна строчка в ГМ.
http://infostart.ru/public/74232/
После этого используй себе в ДопГМ
ПослеОткрытия(Контекст) и, например, Процедура ПриНажатииКнопкиКлавиатуры(Контекст,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Волшебное слово Контекст как раз будет содержать объект со всеми потрохами.
Все «на лету», вызывай что хочешь. В предложенном решении на каждую нужную форму надо положить кнопку, а это уже приличные изменения конфигурации
Пользователям именно кнопка на форме нужна 🙁 . Так они выдрессированы. Нет кнопки — считай, что нет обработки. До этого я иконку в пользовательский интерфейс вставлял — не видят. А на форме — так пожалуйста, всё в порядке. Пользуются и не жужжат.
кстати да, сколько раз замечал, что пользователи в принципе не замечают кнопок на панелях инструментов. Им обязательно подавай кнопки на формах! Даже в нашей базе учета оргтехники, я сделал удобные панели со всем самым необходимым. Нет! Не пре… Даже клавиатурные сокращения не используются.
Однозначно лучше было бы:
Расширенные настройки для отчетов )
Формекс + ПослеОткрытия + Дополнительная Вкладка (или программно создаваемая кнопка, например как тут:
Вроде бы видел такое решение на инфостарте — не могу найти 🙁
(2),(3) Это смотря как учить. У меня большинство пользователей не могут жить безБыстрый доступ к отчетам и HotKey Менеджер для 1С
Подправил и обновил конфигурацию.
Добавил отчетик — реестр прикреплённых файлов. В отчет выводится список файлов и объектов программы (документы, элементы справочников), к которым эти файлы прикреплены с возможностью открытия формы.
И еще. Если у пользователя название прав «Администратор» и у него отключен контроль прав, то на обработке прикрепления файлов, справа вверху будет видна кнопка [files]. При нажатии на неё откроется окно с прикреплёнными файлами.
способ неплохо подходит скажем для написания документооборота в любом виде спасибо автору 🙂
Используем, с большим успехом после небольшой доработки. Очень нужная вещь в условиях удаленной работы главного бухгалтера.
Неплохое решение. Используем. посмотрим как на большом объеме будет работать. Способ формирования структуры каталогов для хранения на мой взгляд чудной, но вполне работоспособный.
Очень понравилась обработка, спасибо автору огромное!!! Удобно хранить всяческие сканы. Поддерживаю про кнопку на форме. Нет излишней информации о всех хранящихся файлах, доступны файлы только для данного элемента.
Да! Пользуюсь очень давно.
Просто супер!!!
++++++++++++
Спасибо. Но нужно будет доработать под собственные нужды.
Возможно ли сделать, чтобы обработка переименовывала прикрепляемый файл? В моём случае с номенклатурой, например так: код_наименование.jpg
Можно и с переименованием файла сделать. Лишь бы не получилось файлов с одинаковыми именами в одной папке.
(14) Как? Можно ещё дату добавить в имя файла, чтобы избежать совпадения имён, хотя в моём случае с номенклатурой это не нужно, поскольку коды уникальны.
Много лет лежала в закладках, наконец внедрил 😉
Полезная вещь, такую лдавным-давно хотел сделать, и что хорошо — структура хранения точно как я и хотел.
Обработка не без «шероховатостей» (за счет простоты), но вполне себе!
Добавил пару строк — кнопку можно вешать на любой список (журнал, форму справочника).
При правильном допиле — можно вообще кнопку хоть на ТЗ повесить, хоть на список значений — при получении параметра анализировать контекст и далее — как угодно…
(16)
Можно по-подробнее про «журнал»
напишите пжл «эти пару срок» здесь
очень надо!
Спасибо