<?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='\
Мы применяем и наблюдаем положительный эффект.
Эта работа с тестами нужна чтобы выявить косяки разработки?
(1) Evil Beaver, А как вы тестируете отчеты (табличные документы)? Если я рисую табличный документ заранее то он отличается от уже признаком «макет» и отсутствием имен полей. В конце концов я пришел к тому что сначала добиваюсь правильного внешнего вида отчета, сохраняю его в файл и загружаю файл в макет. В результате малейшее изменение требований (изменить формат даты в заголовке) приведет к падению всех тестов.
Молодец, что юзаешь наш продукт xUnitFor1C.спасибо за статью.
Только почему не указываешь прямую ссылку на проект?
И почему мало о нем знаешь? 🙂
есть сообщество, есть пользователи, есть разработчики, в тч и я, который фактически productOwner продукта.
есть много многолетнего опыта в тестировании для 1С
(2) Xershi, работа с тестами конечно занимает время — но это время окупается сразу за счет отладки (при таком подходе отладка не нужна). Плюс на выходе получается код покрытый тестами, который проще сопровождать.
(4) artbear, ссылку на проект указал. Сообщество (обсуждения) не нашел. Прочитал вики на сайте проекта. Пожалуй эта вся информация которую я смог найти. Не нашел сквозных примеров использования а без них мне непонятно как этим всем пользоваться.
(6) По тестированию и ТДД есть мое старое выступление с Инфостарт 2012 — статьяhttp://infostart.ru/public/326820
http://infostart.ru/public/328695/
Также есть видео-обучение от Алексея Лустина и Евгения Павлюка
Также есть мое выступление с Инфостарт 2013 — где я рассказываю про xUnitFor1C
Примеры есть в самом репозитарии.
Конечно, я соглашусь, что информации маловато и нужно больше популяризовать.
(0) На мисте я периодически отвечаю на темы по тестированию
http://www.forum.mista.ru/topic.php?id=730184 или http://www.forum.mista.ru/topic.php?id=710900
Например,
(6) Что такое «сквозной пример использования» ?
Еще какие вопросы есть?
Пиши вопросы по тестированию.
Готов ответить.
Можно в личку hangouts «aartbear@gmail.com» или skype «aartbear»
(5) Дешево, быстро, качественно — выбирай любые два.
(8) artbear, возможно после просмотра видео вопросов станет меньше. Сквозной пример — статья в которой демонстрируется написание обработки через тестирование. С использованием всех возможностей xUnitFor1C и с освещением типовых задач тестирования (модули, формы, отчеты, обмены, …).
(6) я тоже не нашел примеров. У меня свои наработки:Универсальное тестирование конфигурации (обычные и управляемые формы). Часть 1 . Скоро выйдет в свет новая часть.
(11) ZhokhovM, из описания не понятно можно ли вашей обработкой тестировать внешние обработки. У xUnitFor1C есть тесты_ОткрытиеФормКонфигурации.epf — формирует тесты на открытие всех форм и если в конфигурации есть синтаксические ошибки то часть тестов упадет. Правда на УПП 1.3 в лоб использовать её у меня не получилось — многие формы «не предназначены для открытия» =)
https://github.com/xDrivenDevelopment/xUnitFor1C/tree/develop/Tests/CommonA pp .
Примеры «нашлись»
(12) после первого запуска вы можете прописать себеисключения форм, которые не могут работать просто так.
(12) я исключаю формы или предупреждения с помощью cmdow, а так моя публикация проверяет формы: получает объекты форм и открывает форму. А ошибки я копирую из окошка «Информация для технической поддержки», т.к. там показывают полные ошибки чем ошибки в ЖР.
(10) 1. К сожалению, Это слишком общая формулировка примера. описание будет слишком длинным и специализированным к конкретной конфигурации и задаче, и наверняка будет много лишних деталей, неинтересных читателям.
2. можно тестировать не отдельно модули, формы, отчеты, обмена, а делать тесты в целом под задачу. часто это бывает проще и эффективнее. Это разделение на юнит-тесты и на приемочные тесты.
(11) Ты там схитрил и удалил старые и полезные комментарии 🙁
Как я уже писал в комментариях к публикации, слишком много общих задач решаешь в своей одной работе.
Фактически ты проверяешь не только конфигурацию (т.е. работу разработчика), но и конкретную ИБ и конкретные данные, что не всегда хорошо.
У тебя в разных ИБ с одной конфигурацией будут выдаваться разные ошибки, что вредно для тестирования, т..к тесты везде должны вести себя одинаково.
были и еще замечания, но ты их потер 🙁
(16) artbear, нет, там были ошибки в редактировании публикации после отказа заключения договора с отделом продаж, поэтому я её удалил и перенес всю информацию на новую, меня просто не устраивал стартмани 1$m.
(8) artbear, люди хотят больше реальных примеров.
Помнишь тему, чтобы сделать примером разработки через тестирование на типовых конфах?
От себя добавлю, что тоже использую xUnitFor1C в повседневной разработке.
Наша команда разрабатывает конфу, которой уже 7 лет. И только недавно перешли на разработку через тесты. По полной столкнулись с проблемами рефакторинга, легаси кода и т.д.
Итого — бояться тут нечего. Всё решаемо. Билд сервер крутится, отчет о прохождении тестов приходит.
(16) artbear, пока я изучу тесты и реализаций Тесты_ОткрытиеФормКонфигурации.epf и возможно у себя переделаю.
Большое спасибо за статью, позволяющую быстро понять как освоить технику и инструмент.
Подскажите, пожалуйста, каким образом, можно написать тест на процедуру проведения документа? Ведь в ней могут вызываться другие связанные функции и процедуры.
Можно ли где-то посмотреть пример тестирования кода проведения документов?
Подскажите существует ли форум где можно задавать вопросы, обсуждать приемы использования xUnitFor1C?
(20) gorokhov.vladislav, полагаю нужно после проведения получить коллекцию движений документа и сравнить её с эталоном.
почему бы не инфостарт?
(21)
Спасибо за ответ. Я не могу понять как создать/зафиксировать эталон движений, где он должен сохраниться.
При тестировании отчета формирую его, создаю макет «Эталон», копирую в него табличный документ, получаю эталон с правильным результатами.
В «1С:Сценарное тестирование» для этого есть специальное действие «Сравнить движение документа с эталоном», которое снимает «слепок» с эталонной базы, сохраняет все значения в сценарий и затем при прогоне сверяет с тем, что получилось.
А как зафиксировать эталон для движений в xUnitFor1C?
(22) magnetto72,
у «Генерация макета на базе реальных данных для xUnitFor1C» есть «СоздатьМакетДанныхНаОснованииЗапроса». Думаю можно выбрать запросом движения документа, создать макет, сохранить его как эталон. В тесте создавать макет на основании запроса и сверять с эталоном.
(20) gorokhov.vladislav,
http://infostart.ru/public/326820/ (Методики и механизмы разработки/тестирования в 1С)
https://github.com/xDrivenDevelopment/xUnitFor1C/issues
По xUnitFor1C предложение и обсуждение удобнее всего вести в одном из 2 вариантах:
1. Можно на Инфостарте в комментах к моей статье
или
2. Можно на Гитхабе
(22) Ответил в комментах к моей статье.
Было бы неплохо поработать над документацией, так как инструмент добротный, а вот порог вхождения для пользователей такой, что нужно код читать, чтобы понять как этим пользоваться.
(26) Задача такая есть. Подключитесь, помогите с этим
(26) Соглашусь с коллегой.
У нас появилась задача интеграции в наш механизм тестирования юнит тестов автора. Вот с написанием и особенно отладкой тестов что-то не совсем заладилось.
Простой тест 2+2<>4 написали без проблем, а вот реальный тест проверки формирования по входным документам набора выходных документов пока тяжко.
(28) Насколько я понимаю, авторы (команда разработчиков) внедряют решения с помощью этих своих разработках за деньги (что логично и понятно), поэтому ждать понятной «для любителя» документации, думаю, не стоит.
(29) Не совсем так.
Вики xUnitFor1C
С документацией всегда сложно, разработчики ее не любят делать 🙂
Тут процесс итерационный, документация набирается постепенно.
пробовали на Вики проекта xUnitFor1C заходить, там накоплено много информации
(30) Лично я заходил и некоторая информация мне оттуда помогла, бесспорно. Но там много устаревшей и не актуальной информации. Да и утверждение моё о документации было связано с порогом вхождения: я два дня потратил чтобы найти, вычленить нужную мне часть, отбросить лишнее (устаревшее и нерабочее) и прийти к выводу, что времени только на понятие и практику применения ушло в десятки раз больше, чем на другие инструменты. Конечно, я не отрицаю того факта, что я просто тупой.
Не хватает также демонстрации реальной (боевой) практики применения инструмента на реальных проектах. Что закрыло бы много вопросов, как мне кажется.
(7)
Добрый день!
За проект большое спасибо, идея замечательная, реализация (наверное) тоже.
Один огромный минус — читал Ваши материалы и тут, и на Гитхабе — очень сумбурно, не понятно, где входы, где выходы, с чего начать. Поэтому автору большое спасибо за доступное объяснение.
У меня вопрос — правильно ли я понимаю, что данный проект реализует только тест кода? И никаких возможностей тестировать интерфейс (открыл форму, выбрал значение, щёлкнул по кнопке), кроме коллекции глюков от 1С под названием Автотестирование, нет?
(32) Есть, раньше называлась vanessa-behavior
https://github.com/silverbulleters/add
Насколько я понимаю, актуальная версия разрабатывается тут
Простой способ её получить:
— установить onescript
— выполнить в консоли opm install add
В каталоге библиотеки будет файл bddRunner.epf, его открыть в 1С в режиме предприятия, в нем открыть справку.
(33) (32) Да, проверка поведения системы для управляемого приложения есть вhttps://github.com/silverbulleters/add
очень развитые возможности по тестированию интерфейса.
(31) Мы бы не развивали продукты, которые не используются.
Продукты как раз и развиваются, т.к. это нужно как нам, так и нашим пользователям/организациям/клиентам.
По практике применения — у нас большинство примеров как раз основано на реальном применении.
Из последних — посмотри описание доклада Глеба Стального (ПервыйБит) для Инфостарт 2018https://event.infostart.ru/2018/agenda/
Его команда активно запустила набор инженерных практик.
В рамках доклада расскажу о процессе и результатах перехода 3 scrum-команд на использование современных инженерных практик (разработка через поведение, ночные сборки, непрерывный анализ качества кода) на проектах 1С.
— Почему мы всегда готовим EPC-диаграммы, и как они помогают нам проектировать не только систему, но и все интеграции (да, мы на проектах, как правило, используем RabbitMQ);
— Как мы разрабатываем фичи (BDD), как структурируем, чтобы сохранить читаемость на больших проектах (когда BDD-сценарии занимают 10 тысяч строк) и как мы смогли отказаться от постановок задач в других форматах (кроме задач по обмену, там xsd);
— Зачем гит консультанту;
Рассмотрю полный цикл работ на примерах конкретных проектов. Также покажу какие инструменты и как мы используем (Slack, Zoom, Jira, Confluence, JSD, Bitbucket, Vanessa Behavior, Jenkins, SonarQube, Allure и т.п.)
(31)
Расскажи, какой именно демонстрации тебе не хватает.
Каких примеров не хватает?
Как я уже писал, хорошей документации всегда не хватает.
Мы открыты любым предложениям по улучшению наших бесплатных и открытых продуктов
(37) Между сообщениями год. TDD и CI активно используются в промышленных форматах. 🙂
(38) Твое сообщение пропущено, т.к. оно не находится в официальных каналах общения 🙁
и его тупо не заметили.
как раз при промышленных масштабах нет времени изучать все источники, хватает и официальных.
Спасибо огромное за такое пояснение!!! Все понятно и одновременно ничего лишнего!
Мне очень помогло!