JavaScript в 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='\

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 не будет опубликован. Обязательные поля помечены *