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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *