<?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='\
Отбор по метаданным бы!
Обработка одназначно заслуживает внимания.
Особенно для обновления очень переписанных конфигураций.
Подкоплю денег и скачаю.
И поддерживаю Jetoo отбор по метеданным было бы хорошо сделать.
Отбор по метаданным можно добавить. Если так нужно, будет время — добавлю 🙂
Да, нужная вещь. Делали для себя нечто подобное. Смотрю — есть возможность проверять из форм документов запуск внешних печ.форм. Тогда, может быть, можно и по другим внешним обработкам пройтись? Ясно, что полностью проверить в автоматическом режиме не получится. Но хотя бы запускается/не запускается проверить.
Среди внешних обработок/отчетов могут быть и опасные и/или необратимо меняющие данные, так что можно дать возможность выбора — какие обработки проверять, а какие не трогать.
Хотел было предложить — если найдется время на развитие, то можно добавить возможность тестирования под неполными правами. (Скажем, выбирать профиль полномочий, для которых нужна выборочная проверка по отдельным метаданным). Но это на самом деле не требуется. Если обработка делает все это под правами текущего пользователя, то нужно зайти в базу под нужным пользователем и запустить проверку.
Ну проверять обработки можно добавить.
Но по правам пользователя… Там на форме вообще забито предупреждение, что запускать обработку и проверять следует только на копии, а там я думаю полные права себе найдете:
Во-первых: Изменение данных, Во-вторых: Увеличение регистраций объектов в обмене, в объектах доступа, версионировании, так же еще много чего может случится. Так что запускать в центральной работающей базе не рекомендуется.
(5) firma-modul, иногда проявляется вариант, когда не работает именно под пользователями с неполными правами. Возможно это имелось в виду.
Ну тогда точно нужен отбор по метаданным
Все это уже было когда-то реализовано в конфигурации 1С «Автоматизированная проверка конфигураций» — там можно что-нибудь еще почерпнуть, идею подсмотреть.
Спасибо. смотрели, черпали) Но ее там очень долго и сложно настраивать…
Вещь конечно полезная.. но просто брать просто одни какой то документ…., я думаю не достаточно (особенно для проверки проведения) т.к. алгоритмы проведения зависят от очень многих факторов (например «Вид операции» документа или признаки отражения в учете). Может попасться документ который например проводится только по упр. учету, при этом не будет проверяться бух. учет. тоже самое например с видами операций…
Для печатных форм я думаю также будет полезно проверить документы с разными значениями реквизитов составного типа (например в «Реализации товаров и услуг» реквизит сделка может быть разных типов и очень часто программисты дорабатывая печатную форму обращаются к какому либо реквизиту (в данном случае сделки)через точку просто забывают что там может быть совершенно другой объект метаданных)
А так вещь как я уже сказал должна быть хорошая…
Ну для детальной проверки нужно подключать конфигурацию по тестированию. Это сложно и затратно по времени. А так лучше проверить хоть так, чем вообще никак.
Любопытно. Возможность фильтра по метаданным и набор различных документов для тестирования была бы хороша.
В подсистемеИнструменты разработчика реализован мощный инструмент
Тестирование метаданных — автоматическая проверка метаданных
Все операции выполняются в отменяемых транзакциях, что позволяет запускать тестирование на рабочей базе
Опция тестирования форм путем их создания, открытия и закрытия
Опция тестирования элементов форм как обычных так и управляемых (меньше), включающая
Интерактивное изменение полей ввода
Интерактивное добавление, редактирование, завершение строки в табличных полях и таблицах формы
Переключение страниц панелей и групп страниц
Тестирование прикладных объектов путем их создания, копирования, записи, проведения, отмены проведения
Тестирование внешних метаданных из выбранного каталога
Отображение результатов в виде полного имени операции и чистого описания ошибки, при выборе которого выполняется переход к строке модуля в конфигураторе
в эту бы обработку еще АПДЕКС — индекс производительности прикрутить простейший, цены бы не было
Хорошая обработка !
Проверка печатных форм для обычных форм не универсальная, много ошибок в обработке, не качайте!