JavaScript в 1С




Принцип обмена данными из 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='\

71 Comments

  1. Трактор

    Прикольно. Но не для 8.2. Для 8.2 надо по-другому писать.

    Reply
  2. slaviksoft

    чего-то вторые часы не работают есть тока круг

    Reply
  3. MRAK

    Маладца!

    Reply
  4. Трактор

    (2) У тебя ИЕ глючит. Всё работает.

    Reply
  5. salexdv

    Супер! Ну это однозначно — плюс!

    Reply
  6. salexdv

    Ну теперь понесется душа в рай 😀 Новых панелей на ИС появится бесчисленное количество 🙂

    Reply
  7. vet7777

    и игрушек типа арканоид )

    Reply
  8. sound

    Афигеть

    Reply
  9. Asdam

    Блин, а фотошоп в 1с можно засунуть? 🙂

    Reply
  10. igoSolo

    Браво!

    Reply
  11. LostMicos

    + Области применения… 💡

    Reply
  12. kolyada

    (1) Попробовал всё то-же самое сделать в 8.2 на тонком клиенте. В принципе, работает аналогично как и в 8.1. Только присвоение текстового значения полю НТМЛ делается не командой «УстановитьТекст», а просто «=». Сами скрипты JS работают в 8.2 и в 8.1 одинаково.

    Reply
  13. Трактор

    (12) прикольно. Жаль что эта красотища жёстко привязано к ИЕ.

    Reply
  14. Аверков

    Интересная вещь. +1

    Reply
  15. kolyada

    (13) думаешь если снести IE (со своим компом не хочу эксперементировать), то работать не будет? Не уверен. Но и на такой случай есть ещё SVG (вместо VML) — то же с помощью текстовых скриптов (текстовые чем хороши — их на «лету» можно генерировать или редактировать как хочешь) рисует графику и работает в FireFox.

    Reply
  16. Трактор

    (15) >> думаешь если снести IE …, то работать не будет?

    Не думаю. Знаю. Поле ХТМЛ документа это и есть ИЕ.

    в web клиенте точно работать не будет. Ни в ИЕ ни в Фирефоксе. Там нет такого элемента управления.

    Reply
  17. kolyada

    (16) почему нет такого элемента управления? Обычная неограниченная строка на форме может быть представлена в 8.2 как ПолеHTML (есть в свойствах спец. выпадающий список)

    Reply
  18. Трактор

    (17) Если ошибаюсь, то буду очень рад. Пока проверить не могу.

    Reply
  19. Широкий

    Однозначно плюс

    Reply
  20. WiseSnake

    Молодец!

    Reply
  21. stasyan

    Классно, уверенный Плюс!

    Reply
  22. z-alexey

    Прикольно. Еще бы пример с обратной связью посмотреть 🙂

    Reply
  23. WKBAPKA

    а что это за объект такой часы, это нарисовано или готовый?

    Reply
  24. kolyada

    (23) векторная графика в ПолеHTML

    Reply
  25. ediks

    Отлично, ПЛЮС! Эта обработка даже сподвигла меня на изучение JavaScript. На основе ее я себе сделал «До конца рабочего дня:» по мотивам аналогичной обработки на ВК. 🙂

    Reply
  26. Трактор

    18+ Я таки ошибаюсь! 😀

    http://users.v8.1c.ru/Info/Platform/8_2_9_356/V8UpdateFrom829Test.htm

    События поля HTML-документа будут отработаны и в тонком и веб-клиенте, если в поле помещен HTML-текст или ссылка, указывающая на тот же домен, что и домен приложения.

    События поля HTML-документа будут отработаны только в тонком клиенте, если в поле помещен HTML-текст или ссылка, указывающая на чужой (по отношению к домену приложения) домен. Это поведение связано с политикой безопасности браузеров.

    Reply
  27. kolyada

    (22) У меня есть пример только в составе конфигурации (а она очень большая), если будет не лень — попытаюсь вырезать оттуда. Хотя наверное проще что-либо простенькое набросать.

    (25) Вот! Вчера поместил обработку и человеку хватило одного дня чтобы изучить (пусть не в деталях) JS. Я же говорил — простой язык 🙂

    (26) Ну вот видишь — скрипты спокойно отработают хоть в толстом клиенте, хоть в тонком, хоть веб. Да и странно было бы чтобы скрипты на JS (заточенные для интернета) не работали бы на Веб-клиенте, который и сам то из них в основном состоит.

    Reply
  28. z-alexey

    (27) ну вот например тут есть календарь:

    http://scripts.protoplex.ru/scripts_show/2217.html

    пользователь выбирает дату. Можно сделать пример — сообщить дату, которую он выбрал. 🙂

    Reply
  29. kolyada

    (28) Ну это очень просто: в модуле формы 1С создаёшь процедуру соотв. событию onclick ПоляHTML. Второй параметр который передаётся в эту процедуру (pEvtObj) и есть тот объект (рисунок, элемент, таблица, ячейка и т.п.) на который ты нажал. Отладчиком смотришь какие свойства присутствуют у объекта (я, например, просто смотрел Id, который в JS скрипте присваивал всем элементам, но можно что-либо другое анализировать) и в зависимости от значений этих свойств делал то или иное действие.

    Reply
  30. Sprite

    Эх…. Хорошо было бы для 7.7…..

    Reply
  31. NoMax

    (30) Да вобщем на два пальца.

    возьми http://infostart.ru/public/57767/ и туда вставляй код, да и любуйся 🙂

    Reply
  32. O-Planet

    Прикольно, но кажется, что нишу разработчиков ВК в 7.7 в восьмерке сменят те, кто владеет web-технологиями. Потому, как думается мне, что ВК в 8 менее актуально, чем web.

    Reply
  33. O-Planet

    … только VML — это же типа плагин. Он разве не ставится дополнительно?

    Reply
  34. kolyada

    (33) да нет — не плагин. VML поддерживается IE начиная с 5-ой версии (т.е уже 11 лет). Отдельно устанавливать не надо. Каким образом это работает в 1С — я не разбирался. То ли используются стандартные библиотеки от микрософт, то ли 1С свои поставляет — по мне не так важно.

    В принципе я когда разрабатывал приложение где использовал эту технологию, столкнулся только с одной существенной проблемой — не смог стандартными средствами (без ВК) сохранить полученный векторный рисунок (а ведь по сути это набор команд) в растровом формате (типа bmp, jpeg и т.п.). А это было необходимо для определенных функций в программе. Но потом сменил работу и проблемы не стало 🙂

    Reply
  35. O-Planet

    (34) А что там не понимать? Просто 1С строит свой хтмлдокумент на основе com технологий. Т.е., какой на компе IE, такой и хтмлдокумент.

    Мммм… А есть краткое (и не очень) описание функционала VML?

    По поводу сохранения… Можно было бы, наверное, что-то придумать. Вплоть до скрина области экрана средствами IE.

    Reply
  36. kolyada
  37. sss999

    блин тока писать умею а читать нет,ниче нимогу сказать

    Reply
  38. Душелов

    Красиво 😉

    Reply
  39. volod

    Даешь еще примеры в обработку

    Reply
  40. Winston

    А пример с обратной связью..

    Reply
  41. vita8383

    А книжку можешь подсказать по JS, чтобы разобратся в коде

    Reply
  42. ediks

    (41) можно http://www.w3schools.com. Правда, все английском, но примеров туча.

    Reply
  43. vita8383

    а на русском что-нибудь есть? 😀

    Reply
  44. kolyada

    (43) я уже приводил ссылку на пред. странице. Перейди там в оглавление.

    Reply
  45. ediks
  46. aavolkoff

    Ндя… только вот для увеличения юзабельности в типовых конфах давным-давно яваскрипт используется (зачастую исключительно для красивости, но все же))))

    Reply
  47. oleg974

    Спасибо. Какая перелесть.

    Reply
  48. Abadonna

    Спасибо автор, за пинок в нужном направлении 😉

    Я теперь знаю как всадить часики прям на окно MDI (тёмно-серое в 1С).

    А хоть бы и ИС туда при старте 1С 😀

    Reply
  49. Abadonna

    Вот, например, привет прям из 1С без всяких внешних форм 😉

    Reply
  50. Abadonna

    О, блин, 1С-кое Поле HTML Документа не поддерживает, оказывается, всех свойств HTML -кода 😥

    Нет ни контекстного меню по правой кнопке, ни других свойств актив-икса.

    Я у себя порадовался, что у часиков из макета 2 можно открыть/закрыть крышку, решил проверить на на разработке автора — ни фига 🙁

    Че-то не долелали они…

    Reply
  51. Abadonna

    (9)>Блин, а фотошоп в 1с можно засунуть?

    Я уже попросил Билла, они готовят к выпуску релиз Windows1C, там внутри всё будет 😀

    Reply
  52. sashocq

    Это мегакруто!

    Reply
  53. Alex_Sun

    А как что-то похожее написать с ноля?

    Reply
  54. tnnick

    Ну как минимум — ОТЛИЧНО!!! Немного модификации и работает плеер (не актив Х). Если автору будет в охотку, может заменить на «прикрепленную» 🙂

    Reply
  55. kolyada

    (54) прикрепленный файлик у меня не скачивается почему-то. Лучше сам сделай обработку и выложи отдельно.

    Reply
  56. G_Re

    Попробовал смоделировать в 7.7

    Тексты HTML те же.

    http://infostart.ru/public/60137/

    Reply
  57. hansel

    Просто. Великолепно.

    Просто великолепно 💡

    Reply
  58. onlineoff

    Отличная вещь

    Reply
  59. pmtvv

    очень нужная вещь

    Reply
  60. dmd

    Идея реализации понравилась. Скачал работает. Переделал под собственные нужды

    Reply
  61. mehalyna

    Спасибо, пригодилось. Немного переделала под себя. красота!

    Reply
  62. GSA3D

    Очень интересно. А получится ли сделать показ изображений из внешних файлов через JS на 1с?

    Reply
  63. sikuda

    Это VML от Microsoft (schemas-microsoft-com:vml). Но развитие не последовало. Работает в IE7,8 и 1С

    А с html5 в 1c пока все грусно http://infostart.ru/public/174856

    Reply
  64. t955938

    Очень интересное решение. Давно искал способ использование графики для 1с

    Reply
  65. sikuda

    (64) t955938, Ну тогда вперед http://infostart.ru/public/191248

    Reply
  66. NewLifeMan

    (63) sikuda, а причем тут 1С и HTML5? 1С работает с движком ИЕ, так что все зависит от того, какая версия ИЕ установлена на машине, где все это запускается..

    Reply
  67. sikuda

    (66) NewLifeMan, Да но работает ie в 1С в режиме совместимости. И в этом универсальность для 1С и сложность применения для интернет технологий.

    Reply
  68. марксист

    а есть толковая статья о работе с Полеhtml и js в 1с?подскажите пожалуйста

    Reply
  69. TitanLuchs

    (68) марксист, а что именно интересует? Скажите, напишу вам статью.

    Reply
  70. марксист

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

    Reply
  71. slipers
    VML+JS это единственный способ работы с графикой в 1С

    Как вариант можно использовать processing https://p5js.org/examples/

    Reply

Leave a Comment

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