<?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='\
не было у вас случаев, когда часть надо удалить, а часть перекинуть? Например по одному сотруднику часть документов удаляем, а парочку хотим к другому сотруднику перепривязать. Возможно было бу удобно к вашей идее сделать и такой механизм?
Беру. Плюс.
не было у вас случаев, когда часть надо удалить, а часть перекинуть? Например по одному сотруднику часть документов удаляем, а парочку хотим к другому сотруднику перепривязать. Возможно было бы удобно к вашей идее сделать и такой механизм?
(3) rasswet, были, но для подобных случаев есть более подходящие средства. Например более «тяжёлая» разработкаhttp://infostart.ru/public/175028/ . Или предварительная обработка иными средствами (их много) перед запуском моей утилиты. Я не зря написал в описании «хотелось чего-то с одной стороны простого в работе, но максимально эффективного». Призвание данной обработки — быстрый и удобный поиск, анализ найденных ссылок и возможность рекурсивной зачистки. Превращение этого средства в «Инструменты разработчика» не предполагалось.
Илюстрация класная, и главное «в тему». Практически не было пользователя, на моей памяти, который бы не задал вопроса: «Почему я не могу удалить помеченный на удаление объект?» Многим очень тяжело объяснить эту премудрость. С вашего разрешения буду пользоваться впредь этим доходчивым рисунком.
(5) DAnry, конечно пользуйтесь. Абсолютно не возражаю.
Илюстрация — то что надо)
Подскажите пожалуйста, как добавить и запустить эту внешнюю обработку? Платформа 8.3.4.389
Документооборот 1.3.1.5
Пытаюсь запустить эту обработку ДрагНДропом и через Файл->Открыть, открывается пустое окошко, работает только вывод справки, что я делаю не так?
(9)Вы пытаетесь открыть обработку из под интерфейса управляемых форм (УФ) без режима совместимости с «обычными» формами. К сожалению чисто технологически это невозможно, т.к. конфигурация 1С:Документооборот одна из первых, которая написана исключительно под УФ. Единственный вариант — это завести пользователя, для которого будет запускаться режим «обычных» форм (см. настройки пользователя БД через Конфигуратор).
подскажите, что-то не могу начать работать с ней. Она заточена под УТ 11,1???
(11) KreditNIK, обработка сделана в неуправляемых формах, запускать её на УТ 11 нужно под пользователем с режимом запуска = «Обычное приложение».
Не виден бегунок в Управление производственным предприятием, редакция 1.3 (1.3.52.1)
(13) gull22, обработка совершенно самостоятельная, поэтому от конфигурации или её версии совершенно не зависит видимость элементов. Могу посоветовать сбросить персональные настройки основной формы обработки. Для этого нужно установить фокус на любом элементе формы и нажать Alt+Shift+R или кликнуть правой кнопкой мыши на заголовке формы и выбрать «Восстановить положение окна».
Шикарная обработка! Спасибо. Из пожеланий могу добавить разве что возможность задавать несколько ссылок.
Не нашел ,на УФ работает?
(15) check2, спасибо за признание труда. Всегда приятно услышать приятное, и плевать на тавтологию! ))
С несколькими ссылками неоправданно усложняется логика работы, поэтому отказался от этой идеи.
Но там включена возможность открыть ссылку из списка в новом окне для параллельной работы.
(16) pavelyar, под УФ адаптировать обработку пока не стал, т.к. УФ накладывает много ограничений на подобные вещи.
Для УФ могу посоветовать пользоваться ключом стартера /RunModeOrdinaryApplication для запуска приложения в режиме ОФ.
Мне обработка понравилась. Очень помогла при удаление элемента справочниками с большим количеством ссылок.. Однозначно рекомендую.
Добрый день. В Документообороте версии 2.1.7 не работает — не удаляет, пометки на удаление тоже не ставит — выходит ошибка:
{ОбщийМодуль.ОбменСМобильнымиСервер.Модуль(27,39)}: Переменная не определена (ОбменСМобильнымиСерверПовтИсп)
УзелОбменаДляРегистрацииВсехДанных = <<?>>ОбменСМобильнымиСерверПовтИсп.ПолучитьУзелДляРегистрацииДанных();
{ОбщийМодуль.ОбменСМобильнымиСервер.Модуль(790,15)}: Переменная не определена (ОбменСМобильнымиСерверПовтИсп)
УзелОбмена = <<?>>ОбменСМобильнымиСерверПовтИсп.ПолучитьУзелДляРегистрацииДанных();
{ОбщийМодуль.ОбменСМобильнымиСервер.Модуль(188,11)}: Переменная не определена (ОбменСМобильнымиDMXСервер)
Возврат <<?>>ОбменСМобильнымиDMXСервер.ОбработатьВходящееСообщение(МобильныйКлиент, Сообщение);
В нижнем окне пишет:
{ВнешняяОбработка.МастерПоискаУдаления.Форма.Форма.Форма(172)}: Ошибка при вызове метода контекста (Удалить): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {РегистрСведений.ДополнительныеСведения.МодульНабораЗаписей(14)}: Ошибка при вызове метода контекста (ОбщийМодуль): Попытка передачи мутабельного значения результата метода ОбщийМодуль ().
Объект «00-00000000000000000000000000000000000000000000001» не удален!