Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона




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

27 Comments

  1. Nehc

    Попробовал — работает. Довольно неплохое и функциональное приложение получилось…

    Пригодился RAS хоть для тестов, а то поставил — хотел посмотреть как оно из командной строки и понял, что никак!

    Reply
  2. tvm

    Идея отличная! Надо будет попробовать

    Reply
  3. Andruykha

    На версии 8.3.9.2170 64бит не работает приложение, выходит ошибка «com._1c.v8.ibis.service.V8ServiceException»

    Reply
  4. Nehc

    (3) Это не платформа… У меня такая же и то-же х64. И работает.

    Reply
  5. brrart

    А какие еще могут быть причины ошибки из (3) ?

    У меня несколько серверов на разных версиях платформы. Ни к одному не смог подключиться.

    Reply
  6. user700211_a.straltsou

    (5)

    ие еще могут быть причины ошибки из (3) ?

    У меня несколько серверов н

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

    Reply
  7. den_vladimir

    Спасибо за статью и прогу! +100500 в карму

    Reply
  8. user700211_a.straltsou

    (7) Можете отзыв на маркете оставить )

    вчера выложил 5 версию.

    Reply
  9. brrart

    (6) А можно ссылку на первоисточник, если есть? Мне хотелось бы почитать поподробней про ras

    Reply
  10. user700211_a.straltsou

    (9)

    о ссылку на первоисточник, если есть? Мне хотелось бы почита

    Конечно, но вам понадобиться доступ к ИТС

    https://its.1c.ru/db/v838doc#bookmark:cs:TI000000189

    Также, теоретически, описание должно быть в книжке по администрированию, которая идет в коробке с платформой.

    Reply
  11. brrart

    (10) Спасибо

    Reply
  12. ineshyk

    Скажите, а как с безопасностью?

    Как ras общается с сервером?

    Через REST запросы?

    Reply
  13. user700211_a.straltsou

    (12) DroidRAC общается с ras версий 8.3.x через «Administrative Service API» по бинарному протоколу, который не шифруется. Но даже если бы и шифровался — все равно не стоит выставлять ras «наружу», т.е. в небезопасные сети типа Интернет.

    Отсюда вывод: пользоваться такими инструментами лучше в локальной сети либо через VPN.

    Rest API будет в версии 1С 8.4

    Reply
  14. quick

    Класс! То что нужно мне под линухом и для скриптов

    Reply
  15. Vovan58

    (12) RAS использую постоянно для работы с сервером под Linux, в интернет ничего не выкладываю, работаю по SSH — это о безопасности. И

    (1) можно указать флаг -daemon — запустить как демон!

    Reply
  16. Darklight

    А где можно почитать про «Administrative Service API» на русском языке?

    Пока я нашёл только вот тут 1с-dn.com но там на английском 8o а для скачивания ещё и регистрироваться надо 🙁

    Reply
  17. user700211_a.straltsou

    (16) Не видел нигде на русском. В архиве есть Javadoc, естественно на английском. Подразумевается видимо, что знание Java предполагает знание технического английского.

    Reply
  18. Darklight

    (17)Просто для меня это странно, чтобы компания 1С выпустила разработку для платформы, без поддержки русского языка, даже выложено это, видимо, исключительно на англоязычном сайте и ориентировано не на российскую аудиторию. Всё это для меня необычно очень. Даже в новостях нигде не проскакивало (по крайней мере, я не заметил), на 1С: ИТС инфу я тоже не нашёл. Тихой сапой выложили — не для всех — а лишь для избранных. Если бы не эта Ваша публикация, так я вообще бы не узнал бы об этом. За это Вам большое спасибо. А сделать большую русскоязычную статью, по мотивам данной SDK, и выложить её здесь — было бы очень познавательно для продвинутой аудитории. А если показать как это всё синтегрировать с платформой 1С: Предприятие 8 (большой и мобильной) — так вообще было бы очень круто!

    Reply
  19. Xershi

    Сделал тоже надстройку ГУИ:

    https://infostart.ru/public/876329/

    Reply
  20. user700211_a.straltsou

    (19) Встречайте DroidRAC2!

    Reply
  21. user700211_a.straltsou

    (19) https://infostart.ru/public/591608/ а ссылку то забыл)

    Reply
  22. Xershi

    (21) так работает как? В локальной сети только? Если база опубликована будет работать?

    Reply
  23. user700211_a.straltsou

    (22) Работает через ras-сервер — к нему должен быть доступ по ip. Rest-api от 1С всё ещё нет. Только в 8.3.14 добавили администрирование из самой 1С

    Reply
  24. Xershi

    (23) у админа не получилось его установить службой. Кстати не в курсе это функциональность КОРП или ПРОФ версий в связи с обновлениями политики лицензирования?

    Reply
  25. user700211_a.straltsou

    (24) плохой админ, негодный. По поводу ПРОФ и КОРП — часть настроек кластера заявлены как доступные только в КОРП. Вероятнее всего при попытке их менять ras будет бросать ошибку. Но что реально отключат будет понятно только в сентябре. Очень уж важные настройки хотят отнять

    Reply
  26. kwazi

    ссылка на droidrac битая

    Reply
  27. user700211_a.straltsou

    (26) Поправил. Со времени написания статьи DroidRAC потерял актуальность, вышел DroidRAC2. Подробнее о второй версии

    https://infostart.ru/public/591608/

    Reply

Leave a Comment

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