Низкоуровневая отладка веб-клиента 1С




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

37 Comments

  1. sikuda

    1. Сам в свое время офигел, что все так просто. Это сейчас верно для всех браузеров.

    2. Лезть в код 1С — дело неблагадарное, они так полные хозяева и могут изменитьвсе что захотят. И работоспособность будет большой головной болью…

    3. Но самая большая проблема 1С и IE, то что стандартная 1с web клиент в IE работает в режиме соместимости и это пока не изменилось в 8.3. http://sikuda.ru/internet-explorer-10-dlya-windows-7-vyishel/

    Reply
  2. awk

    (0) Статья из разряда «У осла был отладчик javascript»?

    Reply
  3. Elisy

    (2) awk,

    Спасибо, очень приятно начинать день с таких многозначительных комментариев, как ваш. Спамить, переходить на личности лучше на Мисте — это их фишка. Этот ресурс лучше сохранить для конструктивного общения, не переводя в помойку. Есть что по делу сказать?

    Reply
  4. Zas1402
    Но самая большая проблема 1С и IE

    Встретились два чуда софта)) Вороде как обкщяли в 8.3 прикрутить WebKit.

    Reply
  5. a-novoselov

    (4) Под *nix только прикрутили, под виндой не работает(

    Reply
  6. awk

    (3) Ты не понял. Осел — в простонародье веб программистов IE. У многих браузеров есть отладчики и что с того? Мяса в статье хочется — мяса.

    Reply
  7. Evil Beaver

    Но какой изо всего этого следует вывод? Можно подробнее — что вы там выяснили такого в интересного отладчике яваскрипта?

    Reply
  8. Elisy

    (6) awk,

    Извини, я не понял. Мясо есть в 2х черновиках новых статей. Могу выслать для предварительного просмотра и критики.

    Темы такие: Внешнее воздействие на веб-клиент 1С, когда клиент помещается в IFrame

    Некоторые системы подключения html-страниц внутри УФ

    Сейчас работа ведется над связкой Html-JS-1СSOAP. Надеюсь, что результат будет и получится статья.

    Reply
  9. Elisy

    (7) Evil Beaver,

    Но какой изо всего этого следует вывод? Можно подробнее — что вы там выяснили такого в интересного отладчике яваскрипта?

    1. Весь фреймворк веб-клиента 1С, объекты, стили , события доступны из поля HTML, встроенного в УФ.

    2. Весь фреймворк веб-клиента 1С, объекты, стили , события доступны для html-контейнера, если в него поместить через IFrame веб-клиент.

    Неясные выводы: из поля HTML-документа, помещенного на УФ скорее всего доступен вызов серверных методов и методов формы. Это решит проблему интеграции HTML c УФ.

    Код 1С обфусцирован, разбирать его чрезмерно сложно.

    Reply
  10. B2B

    (9) М-да. В век быстрых процессоров мы обфусцируем код, чтобы приложение выполнялось не так быстро…

    Reply
  11. webester

    Ух ты! Отлично кэп! мы теперь умеем отлаживать, javascript прямо в браузере, правда тут такое дело… когда понадобилось, я загуглил как это делается, где то минут за 3-5. Причем, что javascript разбирал третий или четвертый раз. Или я что то недопонял и статья не про это?

    Reply
  12. Elisy

    (11) webester,

    Ух ты! Отлично кэп! мы теперь умеем отлаживать, javascript прямо в браузере, правда тут такое дело… когда понадобилось, я загуглил как это делается, где то минут за 3-5. Причем, что javascript разбирал третий или четвертый раз. Или я что то недопонял и статья не про это?

    Поразительное умение пользоватья Гуглом. Вы за 3-5 минут нашли статью о том, как заглянуть и зайти внутрь исходников 1С? Вы заглядывали внутрь 1С? Если заглядывали, то что можете сказать о структуре объектов и какую пользу получили?

    Я заглянул и, как следствие появилась эта статья:

    http://habrahabr.ru/post/183016/

    А чтобы не забыть, каким путем туда заглядывать и каждый мог повторить путь, написал эту очевидную на ваш взгляд статью.

    Reply
  13. webester

    (12)за 3-5 минут нашел как отлаживать javascript в браузере. Имхо это просто. Статья же от этом? А внутрь какого кода вы заглядываете, что то меняет? Не в плане полученных вами знаний(в статье об этом ни слова) а в плане отладки, то есть в данном конкретном случае? Как можно забыть нажать f12?

    ps конечно, конечно, респект вам и уважуха в полном объеме за то что вы что то там раскопали и поделились этим с сообществом хабра, я вот ниче не раскопал, но отладку java скрипта это не делает менее кэповской.

    Reply
  14. Kuzja_R

    Публикация откровенно дохлая. Не тянет на статью.

    Reply
  15. PiccaHut001

    Автор успешно открыл отладчик в IE и продемонстрировал нам окошко с тоннами js-копрокодома, все эти hPZ,hQ0,hQ1,hQ2,hQ3,hQ4…. что они даёт нормальному человеку?

    Reply
  16. Elisy

    (14) Kuzja_R,

    Публикация откровенно дохлая. Не тянет на статью.

    (15) PiccaHut001,

    Автор успешно открыл отладчик в IE и продемонстрировал нам окошко с тоннами js-копрокодома, все эти hPZ,hQ0,hQ1,hQ2,hQ3,hQ4…. что они даёт нормальному человеку?

    Это немного близорукий взгляд. Статья — введение в другие исследования — это основа. На этом серия публикаций не заканчивается. Без этой статьи информация будет непоследовательной. Мне важно, чтобы любой 1Сник смог поучаствовать в новых исследованиях и вступить в дискуссию. Область изучения новая и не гарантирует положительный результат. Вероятность положительного результата увеличится, если исследования будут совместными.

    Reply
  17. Kuzja_R

    (16) и даже для введения маловато будет. То, что опубликовано на хабре — согласен — нормальное введение. А эта публикация — спам.

    Reply
  18. PiccaHut001

    (16) зачем мелочиться. Сделай уже цикл из 100 статей, в каждой можна описывать настройки апача, нюансы нажатия f12, какого цвета иконки. «чтобы любой 1Сник смог поучаствовать в новых исследованиях и вступить в дискуссию.» -тема интересна 0.001%-0.002% специалистов, остальные просто зарабатывают деньги.

    Reply
  19. Elisy

    (17) Kuzja_R,

    (16) и даже для введения маловато будет. То, что опубликовано на хабре — согласен — нормальное введение. А эта публикация — спам.

    Давайте, передергивать не будем. Статья подходит по тематике для ресурса об 1С. У статьи нет рекламной направленности. Судя по плюсам, есть небольшая часть сообщества, кому она понравилась. Спасибо тем, кто поддержал. Поэтому определение «спам» здесь совсем неуместно.

    Reply
  20. Elisy

    (18) PiccaHut001,

    (16) зачем мелочиться. Сделай уже цикл из 100 статей, в каждой можна описывать настройки апача, нюансы нажатия f12, какого цвета иконки. «чтобы любой 1Сник смог поучаствовать в новых исследованиях и вступить в дискуссию.» -тема интересна 0.001%-0.002% специалистов, остальные просто зарабатывают деньги.

    Мне, например, важны мелочи — именно в мелочах вся суть. Давайте основываться на фактах при рассуждениях. Сейчас факт в том, что 17 человек оценили статью положительно. Это хороший результат относительно других моих публикаций. Так сказать, выше среднего.

    Я допускаю мысль, что могу неверно излагать мысли или неполно раскрывать мысли. Но пишу в соответствии с опытом и ограниченным временем.

    Reply
  21. Kuzja_R

    (19) хорошо, не спам. Просто никуда не годная статья. Даже в качестве введения. Даже как объявление новой темы.

    Reply
  22. PiccaHut001

    (20) вы пишете очень интересные и нужные статьи. Огромному количеству профессионалов они интересны(целых 17 человек). Вы понимаете, ещё есть очень торопливые социально-адаптированные люди, у которых есть жена, дети, друзья, работа, ипотека, и у них нет времени читать полностью цикл из 100 статей «как я научился нажимать f12 в интернет експлорере». Был бы очень признателен, если бы специально для таких людей перед написанием первой статьи вы бы делали небольшой анонс вида «собираюсь написать цикл из 100 статей как я научился нажимать f12 в интернет експлорере, а в 89 статье я опишу, как получилось задать собственный обработчик события». Тогда можна было-бы прочитать сразу 89 статью и получить хоть какую-нибуть полезную информацию.

    Reply
  23. Elisy

    (22) PiccaHut001,

    Зачем человеку, у которого ипотека, работа, жена болеет и грудной ребенок вообще заходить на Инфостарт, читать статьи и долго в нескольких постах разжевывать ненужность некоторых статей? Если вам не нужно, это не значит, что другим не нужно. По себе людей не судят.

    Суть претензий не ясна. Анонс есть.

    Reply
  24. Elisy

    (21) Kuzja_R,

    (19) хорошо, не спам. Просто никуда не годная статья. Даже в качестве введения. Даже как объявление новой темы.

    Не проще просто поставить минус, чтобы не тратить свое и чужое время на прочтение статей и постов?

    Reply
  25. PiccaHut001

    (23) к счастью(сожалению) жены, ребёнка, ипотеки нету, но я подозреваю, что такие люди существуют. Мне обидно, что действительно оригинальные статьи и разработки задвигаются вниз таким (0) «мусором». Даже затрудняюсь ответить, что мне более противно: байки очередного стартапера или «задротская магия» открытия js кода в отладчике IE.

    >>Не проще просто поставить минус, чтобы не тратить свое и чужое время на прочтение статей и постов?

    не хватает рейтинга, а то бы — обязательно поставил.

    Reply
  26. Vlasenko.Oleg

    Прочитал. Сначала статья показалась просто сырым, недоделанным материалом.

    После прочтения статьи на хабре, понимаешь что у автора таки было что сказать (если это тот же автор).

    Возникает нехорошее чувство, что автор посчитал уровень пользователей инфостарта не достаточным для полноценной статьи.

    У меня одного такое чувство ?

    Reply
  27. Kuzja_R

    (26) Vlasenko.Oleg, на хабре за такие «публикации» на кол сажают. А здесь ничего, обсуждаем, убеждаем.

    Reply
  28. Elisy

    (26) Vlasenko.Oleg,

    Прочитал. Сначала статья показалась просто сырым, недоделанным материалом.

    После прочтения статьи на хабре, понимаешь что у автора таки было что сказать (если это тот же автор).

    Возникает нехорошее чувство, что автор посчитал уровень пользователей инфостарта не достаточным для полноценной статьи.

    У меня одного такое чувство ?

    Вы зря переживаете. Статья с Хабра будет помещена здесь. Была написана сразу серия статей в Word’е Нужно время, чтобы переделать эту статью под Инфостарт. Но вместо этого сижу — оправдываюсь здесь. А вместе с тем уже 19 плюсов. Значит не все знают, как вызывать отладчик.

    Reply
  29. Elisy

    (27) Kuzja_R,

    (26) Vlasenko.Oleg, на хабре за такие «публикации» на кол сажают. А здесь ничего, обсуждаем, убеждаем.

    Я вижу, у вас огромный опыт публикаций на Хабре, вам есть, что сказать дважды забаненному там.

    Reply
  30. tango

    (29) ну, это не показатель

    скока меня тут(!) банили!

    Reply
  31. Elisy

    (30) tango,

    (29) ну, это не показатель

    скока меня тут(!) банили!

    Порог вхождения на Хабр немного выше порога вхождения здесь. Когда вы дважды пробьетесь публикациями в песочнице, мы сможем поговорить на общем языке.

    Reply
  32. Kuzja_R

    (29)

    «Когда его массивная фигура отдалилась достаточно далеко, отец Федор быстро высунул голову за дверь и с долго сдерживаемым негодованием пискнул:

    — Сам ты дурак!»

    Reply
  33. zqzq

    Очередная статья из серии «Как хакнуть html поле 1С, получить себе проблем с разработкой, поддержкой, совместимостью (в т.ч. с будущими версиями 1С и (веб)клиентами под Linux/Mac) и весело провести время в Доминикане Тае (а также предоставить вумный отчет о проделанной работе по поиску лучшей жизни интерфейса 1С)». А где-то в заснеженной России уже выходит 8.3, Такси…

    Reply
  34. karakozov

    Хорошее начало.Но для публикации маловата.Соглашусь с критиками.Тот же кто не знает как в ИЕ отлаживать html (JS) найдет для себя что то новое.

    Reply
  35. sikuda

    Мой ответ Чембурлену Доминиканне http://infostart.ru/public/191248/ (пока на рассмотрении 19.06.2013 12:30)

    Reply
  36. matytsin_new

    Ставлю плюс. Не за содержание статьи, а за тему, как таковую. Сам я давно уже умею нажимать f12. Но вот вопросы аккуратной интеграции веб-клиента в портал компании мне интересны. И частенько мне нужны только данные 1с оформленные привычным, для пользователей 1С:Предприятие, образом. Например:

    Мы хотим отражать некие данные из 1С на сайте. Мы можем создать в 1С веб-сервис и получать данные из него. Мы можем создать rest-сервис, и поставить его между 1С и сайтом компании. Мы можем обратиться к данным в таблицах базы 1С. И при всех этих способах нам придется повторно решать задачу отображения полученной информации.

    Вариант обращения 1С по правилам Веб-клиента может решить (в обоснованных случаях) задачу доступа и представления данных. Беда в том, что нам неизвестно какая часть кода Веб-клиента является устоявшейся и будет сохранять свою логику в дальнейшем и наоборот. Если внедренцам не предоставляют подобную информацию в открытом виде и ее никто не исследует самостоятельно, аргументируя недостатком времени или чем-то иным, то использовать возможности 1с в полной мере мы не можем. Автор статьи потратил часть своего времени на подобное рассмотрение, и сообщил об этом.

    Да информации в статье мало. Я даже сначала подумал, что была некая цензура, чтобы полезные результаты не обнародовались. Но теперь мне ясно, что это лишь способ привлечь внимание к тематике вопроса. А мы ему фактически сказали — делай как все и не надо желать странного. Мало пока такой информации на Инфостарте и на партнерском форуме.

    Reply
  37. Elisy

    (36) matytsin_new,

    Спасибо за конструктивный ответ. Попробуйте посмотреть другую статью

    http://infostart.ru/public/190920/

    В ней немного больше сказано о внутреннем устройстве веб-клиента и попытка подключиться к нему снаружи.

    Reply

Leave a Comment

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