Мобильный клиент: установка, отладка, сборка под Android"




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

41 Comments

  1. FesenkoA

    То есть по-сути это веб клиент стационарной 1С, который нормально и красиво работает на МП? Или там полное приложение ? (с сервером)

    Reply
  2. davealone

    (2) Да, это именно клиент для МП. База при этом остается серверной. По поводу нормально и красиво, если была адаптация под запуск веб клиента, то скорее всего взлетит с минимальными правками. Если же писали без оглядки на функционал, править придётся больше.

    Но в плане того, что это не отдельное приложение со своими обменами, синхронизацией и прочим — адаптация будет проще.

    Хотя здесь понадобится постоянное соединение с веб-сервером.

    Reply
  3. FesenkoA

    (3) просто на ойфоне веб-клиент очень качественно работает (в отличие от ведроида, не говоря уж о вФоне), а главным + МП является его автономность: в этой стране временно нет 4Ж, да и даже вай фай не такой и стабильный способ связи в условиях плотной городской застройки (пока не поменял антену дома — его глушили соседсткие вайфаи/микроволновки). Очень часть приходилось решать проблему битых баз из за того что толстый клиент подключался по вай-фаю к файловой базе на другом пк.

    => Вопрос: Как 1С справляется с обрывами связи? Не пробовали отключать на МП интернет на 30,120,300 сек? Есть ли настройки ожидания связи и какова функциональность без оной?

    Reply
  4. davealone

    (4) В параметрах запуска поддерживается указание низкой скорости соединения.

    При обрывах включает режим ожидания с попыткой повторной отправки запроса, до 2 минут точно переподключает. на больших интервалах не пробовал.

    Reply
  5. FesenkoA

    (5) Прикольно, нужно будет попробовать в условиях переменной сети (в селе каком то) затестировать работу. Но все же мобильное приложение оно не заменит: ниже расход трафика/батареи, МП делается или для сотрудника (позволяет закрыть ненужные данные на уровне обмена, не использовать излишнюю детализацию ведения учета в ИБ, например маршрутный лист сократить из 10 заданий в 1 документ с 10 строками заказами покупателей) или для руководителя, которому важны определенные разделы учета + финрезультат.

    В любом случае спасибо за статью!! Будем пробовать 🙂

    Reply
  6. starasta

    А кто-то пробовал работу с камерой или геопозицией?

    Reply
  7. 🅵🅾️🆇

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

    1) Вместо мака с икскодом можно использовать VMware с виртуалкой мака (купленной на торрентах, как и сама VMware)

    2) Возможна последующая установка на айфон. Для этого надо подключить его к физической машине с VMware и выбрать в xcode режим отладки. Затем на айфоне в настройках нужно утвердить ваш сторонний сертификат и тогда приложением можно будет пользоваться недельку (через неделю сертификат умрет и надо будет повторить). Чтоб пользоваться постоянно — надо уже покупать учетку разработчика.

    В общем для сборки сам мак не необходим. А если вам потестировать-начальству показать, то и учетка разработчика не нужна.

    ЗЫ: с андроидом, естественно, все проще и дешевле.

    Reply
  8. 7OH

    Работать — работает.

    Как сказали выше — во многих местах надо добавить директиву МобильныйКлиент.

    Формы — если вы действительно с чем-то хотите удобно работать — надо расставить приоритеты (новое свойство).

    Немного поигравшись с приоритетом или положением элементов — можно добиться нормального показа и на десктопе и на телефоне — платформа приводит вид формы к мобильной версии — то есть формы не будут выглядеть так же как на компе.

    У себя пришлось кое-где кодом исправлять положение элементов, точнее пришлось сделать дубли и прятать в зависимости от клиента.

    Но эти затраты не сравнимы с написанием полного мобильного приложения.

    Reply
  9. 🅵🅾️🆇

    (9) А еще можно с помощью HTML, CSS и JS верстать нормальный адаптивный дизайн в определенных случаях)

    ЗЫ: Как ведет себя JS на мобильниках не проверял, на вскидку WebView поле не понравилось только тем, что его можно маштабировать пальцами (возможно ридонли или обработка кликов решила бы эту проблему, также не проверял).

    Reply
  10. andrey314

    Могу ли я подключиться к тестовой конфигурации в 1С-облаке?

    Такая ошибка:

    Reply
  11. Region102

    Лучше один раз увидеть чем 100 раз … https://www.youtube.com/watch?v=6QW2tzqu3Po

    Reply
  12. KAV2

    Вопрос снимается, просьба удалить.

    Reply
  13. Tolpinski

    1. Не понял зачем собирать если клиент и из коробки работает с ЦБ?

    2. Если Назначение использования стоит и Приложение для платформы и Приложение для мобильной платформы, то на стороне сервера, платформы, можно использовать COMObject? Может там директивы особые нужно указывать? Синтаксис помощник в 8.2.12.1567 даже о МобильныйКлиент пока не в курсе.

    Reply
  14. Tolpinski

    (22)

    1. Для публикации в паркете разве что

    2.Не смотря на то, что конфигуратор ругается, COM все же работает со стороны сервера. Ура.

    Reply
  15. Strady

    А кто знает как дела обстоят с торговым оборудованием (со сканером штрихкода и BT термопринтером)? Будет работать?

    Reply
  16. Strady
    Добавляем адрес базы на веб-сервере:

    У меня взлетело, только когда в адресе веб-сервера написал полный адрес базы. В пример добавить «/demo»

    Reply
  17. maksa2005

    (11)такая же ерунда

    Reply
  18. maksa2005

    Как решить???

    Reply
  19. extalionos

    (27)Возможно очистить кэш для этого приложения 1с на андройде или переустановить.

    Reply
  20. maksa2005

    (28)неа. оказалось рлатформа не та у меня

    Reply
  21. MKupreychenko

    (9) А можете описать на каком-нибудь примере как изменить форму списка и документа для мобильного клиента?

    Reply
  22. 7OH

    (30) Важность поставить ручками у нужных колонок, которые должны быть первыми и видны.

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

    Reply
  23. MKupreychenko

    (31) Спасибо за ответ, попробовал, но честно говоря, указал в свойстве «Важность» значения «Низкая», «Очень низкая», но данные реквизиты так же отражаются на формах, визуально ничего не поменялось (УТ 11.3.4.67, платформа 8.3.12.1616). Может я что-то не так делаю или ещё что-то нужно сделать.

    Reply
  24. 7OH

    (32) Так добавьте

    #Если МобильныйКлиент Тогда Элементы.ТаблицаКолонка1.Видимость = Ложь; #КонецЕсли

    Никто же не запрещает.

    Reply
  25. savostin.alex
  26. romku

    Подскажите пож-та не сталкивались ли с такой проблемой?

    На сервере IIS , платформа 8.3.12.1567 — в клиенте под андроид все работало отлично

    Перенес базу на другой сервер. В iis настройки аналогичные. Платформу установил 8.3.13.1690

    Клиент работает, но отчеты все стали подгонятся по ширине мобильного экрана. В отчетах много колонок и если раньше появлялась горизонтальная прокрутка, то теперь все колонки переносятся друг под друга. А графики, которые достаточно широкие вообще невозможно посмотреть. Т.е. видно что он там появился под таблицей, но посмотреть его нельзя, не прокручивается до него отчет.

    Не пойму, то ли в платформе дело, то ли надо отчеты подкручивать, то ли IIS как то настраивать.

    Reply
  27. davealone

    (35) Нет, к сожалению, не сталкивался. Скорее всего дело явно в платформе, посмотрите что пишут в V8Update по отчетам/табличным полям. Навскидку возможно это (как раз в 8.3.13 добавили):

    Высота и ширина страницы табличного документа (свойства ВысотаСтраницы и ШиринаСтраницы) ограничены значением 5000 мм.

    В режиме совместимости с версией 8.3.12 поведение не изменилось.

    Возможно при большем количестве колонок сжимает

    Reply
  28. romku

    (36) да, Вы правы. Благодарю.

    Скрытый текст
    Reply
  29. KAV2

    Очень уж медленно работает мобильный клиент, прям разочарование.

    Reply
  30. KAV2

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

    Reply
  31. YTMi

    как работает это мобильное приложение на «нечистом» андройде, например, HiOS на смартфонах Tecno?

    Reply
  32. ISP

    Ни как не могу понять почему у меня список баз на смартфоне пустой. Подпись сделал, приложение собрал. А список баз пустой.

    Как сделать, чтобы увидеть свою ИБ?

    Reply
  33. davealone

    (42) Пункт ниже точно выполнили?

    Далее необходимо подготовить файл конфигурации. Руководство разработчика говорит по этому поводу следующее: «Каждая конфигурация, которая может работать в мобильном клиенте, содержит некоторую вспомогательную информацию, позволяющую отследить подмену конфигурации».

    Файл конфигурации необходимо подписать. При этом для каждой конфигурации формируется свой закрытый ключ, а в файл 1cemca.xml выгружается открытый ключ (поле DSAKey), с помощью которого и сравнивается подпись конфигурации.

    Чтобы сформировать ключ и подпись, заходим в свойства конфигурации «Подпись мобильного клиента» (сразу под требуемыми разрешениями, если у Вас свойства разделены по категориям, а не по алфавиту) и видим настройки подписи

    Reply
  34. ISP
    Reply
  35. user792443

    У всех отладка нормально подключается?

    У меня вот такая ошибка в телефоне и эмуляторе:

    «Информационная база опубликована на веб-сервере без возможности отладки.

    Обратитесь к администратору для публикации информационной базы с указанием параметров отладчика, чтобы иметь возможность отлаживать клиентов, подключающихся через веб-сервер»

    Reply
  36. davealone

    Отладку во время публикации включить. Для серверной, насколько я помню, еще нужна отладка по HTTP на уровне сервера

    Reply
  37. user792443

    (45)Нашел, в публикации нужно тоже разрешить отладку

    Reply
  38. user792443

    (46)Да, спасибо)

    Reply
  39. Xershi

    (23) суть в том что теперь есть 2 контекста сервера. Оберните его, чтобы не выполнялся на сервер клиента, тогда и ругаться не будет. На сервере андроида какой ком же?) Вот и ругается!

    Reply
  40. mdSerg

    (10) Наоборот плохо, что нельзя масштабировать пальцем в остальных местах.

    Reply
  41. dctvghbdtn

    Если не секрет, как собирать приложение под различные версии Android? Допустим мне надо для старого устройства собрать приложение для версии «Android 4.0 Ice Cream Sandwich»

    Reply

Leave a Comment

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