Конфигурация для подготовки к экзаменам на профессионала




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

20 Comments

  1. LavS

    архивы с базой в процессе загрузки…

    Reply
  2. LavS

    К сожаленью по правилам форума тесты загружать нельзя, поэтому загрузил только конфигурацию для работы с этими тестами…

    Reply
  3. LavS

    К сожаленью 1С с января 2009 изменил формат файла Data.cab и поэтому единственным способом загрузить тесты с дисков ИТС — является непосредственное открытие каждого теста с отключением макросов и сохранением его в файл Excel:) Или есть другие варианты?

    Reply
  4. manan

    Уважаемый LavS! Не стыдно напоминать о плюсах, если конфигурация в основе своей не Ваша? Посмотрел вот немного — в сравнении с конфигурацией Максимова Романа у Вас по-хорошему добавлен лишь регистр сведений с данными о правильных и неправильных ответах и соответствующий отчет. Главные вещи — загрузка тестов, обработка тестирования к Вам НИКАКОГО отношения не имеют!

    Громкие заявления «и доработана Лавровым Сергеем aka LavS» тоже можно было бы придержать при себе. Доработки минимальны и с трудом вообще могут называться таковыми.

    Желающим же подготовиться к экзамену 1с профессионал предлагаю использовать мою разработку, которая не является переделкой и написана с нуля, поэтому в ней есть некая общая идея, не размытая такими «доработчиками».

    К конфигурации Максимова Романа отношусь очень хорошо, так как она была написана ранее других и на хорошем уровне. Моя разработка «Конфигурация Тестрирование 1С Профессионал» отличается тем, что там есть возможность избавиться от дублей вопросов (их, как известно много на дисках ИТС), а также в обработке тестирования при каждом новом запуске вопросы случайно выбираются из базы (у Романова вообще используется на выбор одна анкета, т.е. вопросы из одного файла .xls).

    Собственно, пользуйтесь качественным (и бесплатным) продуктом:

    http://www.infostart.ru/projects/4210/

    Reply
  5. LavS

    (4) Спасибо за замечание. Честно говоря я собирался выложить сюда базу с тестами с мая 2005 по ноябрь 2008 — это было главной идеей. Но оказалось, что на форум нельзя выкладывать тесты 1С:Профессионал, поэтому выложил хотя-бы конфигурацию. Постарался все права соблюсти. А по поводу доработок… согласен, что доработки минимальны. Помимо отмеченных вами ещё следующие доработки:

    -исправлены ошибки, которые возникают при загрузке некоторых тестов

    -в форму тестирования добавлены кнопки для перехода к определенному вопросу

    -добавлен полнотекстовый поиск

    -добавлен кнопочный интерфейс

    -и ещё несколько более мелких доработок

    Базу на основе этой конфигурации активно используют в нашей фирме для подготовки к экзаменам. Предложений по доработке не поступало, да и некогда мне этим заниматься, т.к. загружен работой по поддержке 2х отраслевых решений.

    Reply
  6. LavS

    (7)Так и у меня есть заполненая билетами. Я создавал пост именно, чтобы выложить заполненую билетами, но это запрещено правилами сайта. В итоге, чтобы пост не удалять просто выложил конфу…

    Reply
  7. 1981ink

    Блин а как её заполнять то, пытаюсь загрузить билеты указываю директории с тестами он материтсья. Ну указан раздел тестов что может быть такое

    Reply
  8. LavS

    (9)А как именно ругается? Что пишет? Почитай справку, всё ли ты правильно сделал? И что именно у тебя лежит в указанной директории? Там должны лежать xls файлы с дисков ИТС. Причём эти файлы не должны быть «пройдены»(т.е. если ты открывал файл с включенными макросами — то из этого файла автоматически удаляется часть важной информации). И ещё, ты подключал библиотеку cClipBoardObject.dll — она необходима для загрузки из xls, в которых есть картинки.

    Чем подробней опишешь проблему — тем точнее и подробнее я смогу ответить.

    Reply
  9. 1981ink

    Библиотеку зарегистрировал, загрузил в пустую конфигурацию. Зашал как обычно, без ошибок выбираю пункт, импорт тестов . Выбираю папку с тестами «Тесты по платформе 8.1», открываю её. Врубаю импортировать на обработке пишет «Не указан раздел тестов». Пробовал отдельно скачаные архивы с папками (вних ексель), так же пробывал с .дат (которые на ИТС). То же самое.

    Reply
  10. LavS

    Теперь-то понял, в чем проблема. Привык я, что в базе уже в справочнике «Тесты» есть нужные папки… А ведь в конфигурации этих данных нет…

    Короче тебе нужно сделать следующее:

    1.Нажать кнопку «Вопросы» в интерфейсе(чтобы перейти в справочник «Вопросы») и создать там папку под каждый экзамен, к которому ты будешь готовиться. Например, создать папки «Платформа 8.1», «Бухгалтерия» и т.п.

    2.Когда начнешь импортировать тесты, то под путем к папке будет список папок, введенных на 1м этапе(причём только папок лежаших на верхнем уровне и у которых не стоит флаг «не показывать в списке»)

    3.Указываешь путь к папке с xls файлами, выбираешь формат картинок и нажимаешь кнопку «Выполнить»

    А по поводу файла Data.сab — с января 2009 года в этих файлах заменен первый шеснадцатеричный символ и чтобы получить из него файлы с тестами — нужно открыть файл в шеснадцатеричном редакторе, поменять первый английский символ «I» на английский символ «M» (на мисте подробней: http://www.forum.mista.ru/topic.php?id=385520)

    Reply
  11. 1981ink

    Всё попёрло, и последний вопрос есть ли тут возможность, просматривать ответы, на тесты. Они выводяться как нибудь

    Reply
  12. LavS

    (13)Если в константах(которые можно вызвать, нажав кнопку «Настройки») включить «Вести учет ответов», то ответы будут записываться в регистре «Ответы пользователя» и их можно будет просматривать через «Отчет по обучению»

    Reply
  13. 1981ink

    Ещё небольшой вопросик, существует ли лимит базы. ПРосто просто у мня шас при попытке загрузить что то новое пишет ипорт завершон (месяца 3 — 4 я уже вбил в базу)

    Reply
  14. LavS

    (15) Никаких ограничений нет(в моей базе загружены все тесты профессионала по платформе 8 и всем конфигурациям на 8 с 2005 года по ноябрь 2008 — всё времени нет загрузить за 2009) и никаких проблем не возникало при загрузке.

    Более того, в конфигурации — нет закрытых модулей, а это значит, что вы можете свободно дорабатывать и дописывать конфигурацию так, как вам хочется:)

    Reply
  15. manan

    доброго времени суток. есть более расширенная конфигурация для подготовки к профу:

    http://www.infostart.ru/projects/4210/

    правда, не совсем бесплатная теперь.

    Reply
  16. LavS

    (14)manan — ты уже про свою конфигурацию здесь говорил!

    Reply
  17. manan

    (18) прошу извинить за назойливость. просто в отношении моей разработки «Тестирование 1С: Профессионал» произошло очень много изменений. я очень сильно ее переделал и она доступна для бесплатного скачивания с 9 сентября 2009 года. Кому интересно, смотрите здесь:

    http://www.infostart.ru/public/20107/

    Reply
  18. BelkinAlex

    Обработка «ИмпортТестовПо1С» Реквизит «ПутьКФайлуСТестом» установлена длина 100 переменная, лучше сделать неограниченной длины, а то не работает импорт, если путь длиннее 100.

    Спасибо за конфигурацию.

    Reply
  19. LavS

    BelkinAlex — спасибо за комментарий. Я всегда загружал с рабочего стола и мне хватало 100 символов))) Не уверен, что неограниченной длины подойдёт(нужно будет проверить, не используется ли этот реквизит в запросах), лучше сделаю ограничение в 1000 символов — думаю этого хватит:) На следующей неделе, если будет время — выложу обновленную конфигурацию.

    Reply
  20. DimDimych

    удобная вешь для подготовки

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *