<?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='\
ссылка на Google табличку —Расчет окупаемости
Дико извиняюсь, но имхо, приведенный пример не сильно отличается от «2 + 2».
Сгенерировалась какая-то обработка, но как её использовать дальше в конфигурации — совершенно непонятно.
И не превратится ли разработка стройного внутреннего устройства (архитектуры) решения в тупое рефлексирование сиюминутных хотелок заказчика в индусо-спагетти-стайл?
Вот эта вот магия и непонятна.
Из вашего же примера первый шаг — «Клиент Контрагент хочет оплатить сумму 2000 рублей». Как фиче-плеер это обработает? Он как поймет, что это надо создать банковскую выписку или ПКО с нужным контрагентом и поставить там сумму 2000? Тут какая -то магия сработает или как-то это надо особо интегрировать со своей конфигурацией и учить фиче-плеер этому?
По поводу «Выполнено», «Не выполнено» и «В ожидании реализации»
Если я напишу реализацию в виде
Процедура ФормируетсяПроводкаАвансаПоСчетуТрамПамПам()
Сообщить(«Реализовано. Честно-Честно»);
КонецПроцедуры
она зелёненьким засветится в отчёте?
Или какой-то магией поймёт, что результатом должно быть появление проводки и её таки нету?
То есть как от фич перейти к конкретным натурным тестам?
@orefkov вы как будто выпали из всего потока информации по VB.
2) Запускать и проверять поведение, очевидно
3) Фича-плеер отработает то, что написано в фиче. Никакой магии тут нет. Есть библиотечные шаги, которые кликают по раз
(4) orefkov, да, честность реализации — это и есть главное правило. Но даже когда есть описание шагов, уже более ясно, что ожидается от системы, т.к. чаще всего сталкиваемся с задачами устно или «вот тут на 5 минут, а через пол года уже никто и не вспомнит».
(5) nixel,
По началу статьи создалось впечатление, что её цель как-раз таки помочь «войти в поток».
Так это и надо описывать. А то в начале статьи пишется, что в геркине немного ключевых слов, а требования пишутся в свободной форме. А оказывается для того, чтобы магия заработала, требования надо писать не в свободной форме, а попадая в библиотечные шаги. Привести список таких библиотечных шагов, которые уже есть и заработают из коробки.
То есть я понял, что мне не хватило в статье — реального примера, что пишется в процедуре реализации шага вместо ВызватьИсключение.
И как потом это состыковать с обработкой проведения например.
(7) orefkov,
http://infostart.ru/webinars/537546/
Ни в какие библиотечные шаги попадать не надо.
Саш, посмотри мой вебинар по VB, многие вопросы пропадут.
Эта статья обзорная. Больше практики ищи в видео.
Хорошо когда задачка такая маленькая.
В реальности проблемы возникают не в разговоре на разных языках, а в объёмах информации.
13 на 6 многие легко перемножат, что совсем не означает, что также легко они перемножат 324655 и 348.
Отсюда вытекают проблемы тестирования, параметров — много, а сочетания параметров — очень много.
Например, IDEF0 как раз помогает сложную задачу декомпозировать на легкие задачи, которые понятны и заказчику, и программисту.
Вспомнил пример преподавателя на предмете моделирование:
— Вам табуретку с какой точностью сделать?
— С лучшей. (прямо как в статье, сейчас мы вам все протестируем)
Какая там лучшая сейчас точность? Микрометры? Точно нам нужна табуретка с такой точностью?
Больше практических примеров, больше кода!
Пока это из серии «тем временем в параллельной вселенной» — не верится, что где-то это реально работает, но выглядит очень круто.
(10) Приходите на мой доклад на инфостарте. Будут и примеры и ещё более «крутые» штуки.
(8)Сложновато осилить с первого раза. Больше пауз, богу пауз! ЭЭЭ.. нууу.. эммм… нуууу…. собственно… ну давайте…. постоянно в неограниченном количестве, мб имеет смысл написать сценарий и сверяться с ним со второго монитора? Постоянно примеры «давайте напишем простой сценарий, который не будет иметь ничего общего с реальностью и никаким образом не будет демонстрировать как все должно происходить» мб я не дожил (осилил первые40 минут только) до нормальных примеров? Как насчет нормальных примеров запилить? Похожих на обычную разработку? Не хочется обижать Леонида, он наверняка старался, но как то не бодро совсем получилось, в видео на канале чуть бодрее, но там тоже примеры «из воздуха».
(12)Буду стараться развиваться как ведущий.
Не совсем понятно что такое «нормальные» примеры.
Вебинар обзорный, по конкретному инструменту. Показывает как им пользоваться.
Как я понял суть: предлагается способ динамического формирования ToDo листа, который разработчик предоставляется заказчику на понятном бизнесу языке (в виде таблицы) и воспроизведением демонстрационной последовательности действий прямо на форме 1С.
Почему не рассмотрен механизм обратной связи, где бизнес либо соглашается с реализация, либо нет и высказывает недовольства (в том же каталоге обработок).
Подскажите Vanessa-Behevior только для 8.3.9 и выше? Для 8.2 будет работать?
xUnit и СнегоПат работает и для 8.2
Думаю еще многие на 8.2.19 сидят
Да, для 8.2 работает.
Просто для 8.2 нет, например, авто-тестирования форм и кнопочек, которое появилось только в 8.3
Все остальное работает
(10)
Реально работает. Непонятно пока не попробуешь сам, раза со второго, третьего начнет приходить понимание. VB не может заменить полного функционального тестирования, но может покрыть тестами рутину, на которую тратится много времени и дать ответ на вопрос «что сломалось после данной разработки, а что нет». Несправедливо предъявлять требования к обзорной статье как полноценному курсу обучения.
Просто космос
Вот статья с похожим подходом — только про мобильные приложения
https://habrahabr.ru/company/alfa/blog/335278/