Отладка конфигураций на мобильной платформе




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

45 Comments

  1. capitan
    Получить такой можно с помощью множества хостинговых площадок, которые за несколько минут и за сумму от 500р в месяц предоставят вам девственно чистый сервер

    Не в плане подкола, но поделитесь хотя бы одной ссылкой.

    Я например хостинг подходящий для установки сервера 2012 R2 Standard даже не говоря об аренде ПО, знаю от 20 Е

    Reply
  2. spezc

    (1) capitan, у меня ultravds.com, самый дешевый 360р/мес с 1гб оперативы. только внимательно читайте условия. в случае пропуска оплаты сервер удаляется через 7 дней без возможности восстановления. я из-за этой херни данные довольно нужные потерял.

    Reply
  3. capitan

    (2) да я просто не думал, что 2012 R2 даже на 2 гб стартанет )

    Reply
  4. spezc

    (3) capitan, стартанет) только не быстро)

    у меня 1×3.5ГГц, 4Гб RAM, 20Гб SSD, 1IP за 1600р.

    калькулятор показывает:

    1×2.2ГГц, 1Гб RAM, 20Гб, 1IP — 360р

    1×2.2ГГц, 2Гб RAM, 20Гб, 1IP — 540р

    1×2.2ГГц, 4Гб RAM, 20Гб, 1IP — 900р

    Reply
  5. 33lab

    Просто интересно — зачем закрашивать IP в картинках (в статье) если все в общих картинках они не закрашены ? 😉

    Reply
  6. spezc

    (5) 33lab, да потому что накосячил) надо заменить)

    Reply
  7. Serdgio

    Коллеги, отладка работает с реального устройства или только с эмулятора?

    Reply
  8. spezc

    (7) отлично работает с реальных айфонов и ведрофонов.

    Reply
  9. Serdgio

    только, если «айфон-ведрофон» в той же сети, что и сервер отладки?

    Или это не имеет значения?

    Reply
  10. spezc

    (9) не имеет

    Reply
  11. Serdgio

    А на IIS есть удачный опыт? А то мы в тупике…

    Reply
  12. Serdgio

    И еще не подскажите, значок отладки в конфигураторе «подсвечивается», как только попадает на точку останова? До этого в доступных предметах отладки сеанс есть?

    Reply
  13. spezc

    (11) там отличий быть не должно

    Reply
  14. spezc

    (12) да, отладка не отличается от обычной десктопной.

    Reply
  15. spezc

    как минимум п.5-7 должны у вас работать без проблем.

    Reply
  16. Serdgio

    кажется, понял. У Вас же файловая база?

    Reply
  17. spezc

    (16) да, а какие могут быть различия?

    Reply
  18. Serdgio

    Как минимум, еще

    Reply
  19. Serdgio

    ragent.exe -debug -http

    И другая настройка отладки — использовать сервер отладки кластера

    Это отсюда — http://v8.1c.ru/o7/201506debug/index.htm.

    А еще пишут вот здесь http://v8.1c.ru/o7/201506debug/index.htm,

    «Устройство должно быть в одной сети, доступ к серверу отладки по указаному порту должен быть с устройства.

    Запуск надо делать через Отладка — Запуск мобильного клиента. «

    Reply
  20. spezc

    (19) ссылки одинаковые, можете повторить ту ссылку, где пишут, что устройство должно быть в одной сети?

    И если все так сложно, не проще ли разработку мобильной конфигурации вести в файловой базе?

    Reply
  21. Serdgio

    1. http://www.forum.mista.ru/topic.php?id=760619.

    Это Ditrix пишет.

    2. Проще, если это все таки не в одной сети тоже работает

    Reply
  22. Serdgio

    Удалось добавиться небольшого прогресса.

    При нажатии в конфигураторе — мобильное приложение — начать отладку — на мобильном появляется «загрузка».

    Но отладка по-прежнему не работает.

    Кнопка отладки не горит, на точках останова не останавливается.

    Reply
  23. Kirill Melnikov

    Если у кого-то не взлетает отладка мобильного приложения через конфигуратор клиент-серверной базы — используйте имя базы DefAlias (это предопределенное имя файловой базы, коей по сути и является база на мобильном). Нахождение в одной сети, кстати, абсолютно не требуется

    Reply
  24. Adam12345678

    (23)

    Если у кого-то не взлетает отладка мобильного приложения через конфигуратор клиент-серверной базы — используйте имя базы DefAlias (это предопределенное имя файловой базы, коей по сути и является база на мобильном). Нахождение в одной сети, кстати, абсолютно не требуется

    Как считаете это баг или фича))? И почему 1с не фиксит такую бяку. Я очень много часов убил на изучение данной проблемы пока нашел ваш ответ, коллега. Огромное спасибо.

    Reply
  25. Kirill Melnikov

    (24)

    Не за что, рад помочь) Где-то в анналах документации у них прописана эта тема, так что это скорее фича, чем баг)

    Reply
  26. inf012

    Остановился на шаге 10.

    Вопрос: где это окно добавления базы на мобильнике?

    У меня стоит конфа (из апк файла), но если там я базу пытаюсь добавить — он просто делает копию базы.

    Как добавить базу, чтобы можно было указать ip адрес?

    Какую-то спец. платформу ставить на телефон или что?

    Reply
  27. inf012

    (26) Разобрался, надо на телефон установить моб.платформу

    Reply
  28. inf012

    Что-то при подключении по ай-пи выдало ошибку:

    Неправильный формат конфигурации

    по причине:

    Ошибка разбора XML: — [1,52]

    Фатальная ошибка:

    Space required after the Public Identifier

    SystemId: file:///data/data/com.e1c.mobile/files/1C/1cem/1cema.xml

    Какой он пробел просит после публичного идентификатора?

    Никто не знает, что за ошибка?

    Платформа мобильная 8.3.10.51 На пк 8.3.10.2466 и 8.3.20.2505 — обе пробовал

    Посмотрел здесь: https://forum.infostart.ru/forum92/topic144436/

    Советы

    1. В свойстве корня конфигурации «Назначение использования» (вроде 🙂 ) нужно оставить флаг на «Мобильное устройство».

    2. Потом в меню «Конфигурация» найти пункт «Проверка конфигурации». Установить флажки на проверку мобильного приложения (мобильное приложение клиент, мобильное приложение сервер, поиск неподдерживаемой функциональности и все в группе Логическая проверка модулей).

    не помогли

    Reply
  29. inf012

    (28) Разобрался. Это была тестовая конфа, в ней не переименовал стандартное «Конфигурация» на английские буквы.

    Теперь все работает.

    Спасибо за статью!!

    Reply
  30. dimasts

    Не работает ни фига, всё перетыкал. В диспетчере приложений dbgs.exe —port=1550 и всё OWENPId нету. Приложение перезапускается из конфигуратора но точки останова не пашут. База на сервере IIS. Галки в параметрах все включил, использую отладку кластера. В реестре прописал -debug -http

    Reply
  31. spezc

    (30) попробуйте ultravds.com или подобное, создайте чистый сервер, установите 1С и апач и сделайте ровно по инструкции. С вероятность 99% должно все получиться. Потом на этом же сервере повторите с IIS. Ну а с такими двумя работающими вариантами у вас будет с чем сравнивать и легче искать проблему.

    Reply
  32. dimasts

    НЕ могу понять, почему в Подключенных параметрах отладки пусто? Отладка же из конфигуратора запускается и мобильник загружает конфигурацию.

    Reply
  33. GlebBR

    Спасибо , очень помогло

    Reply
  34. user853472

    (29) у меня та же ошибка

    Что-то при подключении по ай-пи выдало ошибку:

    Неправильный формат конфигурации

    по причине:

    Ошибка разбора XML: — [1,55]

    Фатальная ошибка:

    Space required after the Public Identifier

    SystemId: file:///data/data/com.e1c.mobile/files/1C/1cem/1cema.xml

    мобильная платформа 8.3.11.57, на пк 8.3.11.3034

    пытаюсь запустить конфу «библиотека подключаемого оборудования для мобильной платформы»

    ошибка получается на андроиде при загрузке базы…

    помогите!

    Reply
  35. semen.n

    п1.- п9 все работает отлично. (купил место на хостинге ultravds.com) В мобильной платформе (8.3.9.74) при попытке загрузить, долго думает и выдает «Превышено время ожидания» и всё…

    помогите…

    Reply
  36. spezc

    (35)

    1. попробуйте ссылку из п.9 открыть в браузере телефона.

    2. какая платформа на сервере?

    Reply
  37. semen.n

    все оказалось намного проще, открыл на сервере 80 порт и заработало

    может его тоже одним из пунктов добавить?

    Спасибо!

    Reply
  38. user5300

    (36) как прочитать xml файл с мобильного приложение ? Ошибка выходит при вызове метода Прочитать с моб устройства, при тестировании эмулятора ошибки нет

    Reply
  39. ritd

    Подскажите пожалуйста, при запуске мобильного приложения появляется надпись «Отладка возможна только по протоколу HTTP» и ни какой отладки не происходит.

    Reply
  40. allexx

    (39)

    Подскажите пожалуйста, при запуске мобильного приложения появляется надпись «Отладка возможна только по протоколу HTTP» и ни какой отладки не происходит.

    Тоже самое. При чем в телефоне в браузере ссылка с нужным портом открывается, но отладка не взлетает.

    Reply
  41. pwn

    (23)

    Если у кого-то не взлетает отладка мобильного приложения через конфигуратор клиент-серверной базы — используйте имя базы DefAlias (это предопределенное имя файловой базы, коей по сути и является база на мобильном). Нахождение в одной сети, кстати, абсолютно не требуется

    Кирилл, спасибо. Очень помогли. Заработало. База клиент-серверная. Отладка заработала.

    Reply
  42. FesenkoA

    (39)Удваиваю вопрос. Раньше, кстати, работала…

    Reply
  43. FesenkoA

    (39)нашел, нужно в м.п. перед адресом отладки поставить http://

    Reply
  44. FesenkoA

    (40)нашел, нужно в м.п. перед адресом отладки поставить http://

    Reply
  45. hartman620

    (23) Премного благодарен, 2 дня ковырялся и ничего не работало, помог ваш совет

    Reply

Leave a Comment

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