Сборка мобильного приложения 1С под IOS




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

    Спасибо. Думаю материал будет полезен людям которые только пробуют разработку по IOS.

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

    1) «Необходимо правильно ввести данные для подключения к компьютеру с ОС iOS» — не обязательно оно. Если Вы осуществляете перенос проекта на виртуальную машину файловым методом.

    2) Для обновления конфигурации не обязательно каждый раз пересобирать приложение сборщиком. Выгрузите хмл мобильной конфигурации и закиньте прямо файловым методом в Ваш проект хCode (папка Templates в проекте) переименовав 1cema.xml в conf.xml

    Даже перезапуск xCode не требуется. Просто перекомпилить.

    3) Сертификаты подписи безплатного акаунта отзиваються примерно +/- 1 месяц. Ну у меня как то так вышло. По этому долго тестировать не выйдет.

    Reply
  2. Isonic

    (1)

    1. Согласен, в данном случае можно обойтись и без этого.

    2. Спасибо за замечание

    3. У меня почему-то больше 7-ми дней не живут они. Я имею в виду сами тестовые приложения на мобильном устройстве.

    Reply
  3. DENLSD

    3. Так и есть, сертификат временный. Попробуйте его востановить на портале разработчиков портале разработчиков

    Там статусы меняются. Не уверен будет ли возможность на бесплатном аккаунте.

    Периодически они могут приостанавливаться или блокироваться. (по жалобам и времени)

    Reply
  4. FesenkoA

    (3) А можно, пожалуйста, поподробнее про восстановление сертификатов, и вообще про получение сертификатов? Столкнулся с тем, что в сети очень мало информации по сборке 1С на яблокофоны, а все чаще клиентам с яблоками хочется «пощупать»..

    Reply
  5. DENLSD

    Рекомендую прочитать

    В целом для нас xCode делает все сам. Создает автоматом подпись и сертификат в рамках выбраного провижин профиля.

    Reply
  6. alexnikolas

    У меня после открытия проекта при попытке собрать вываливается ошибка:

    ld: warning: ignoring file /Volumes/Work/XcodeProjectTest/F2/1cem.o, missing required architecture x86_64 in file /Volumes/Work/XcodeProjectTest/F2/1cem.o (2 slices)

    ld: entry point (_main) undefined. for architecture x86_64

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    Может кто подскажет решение? проект чистил — не помогает.

    Reply
  7. alexnikolas

    (6) На самом телефоне запустилось. Вопрос снят.

    Reply
  8. Zabba

    (7) а как на сам телефон то вытащить, если оно не скомпилировано?(7)

    Reply
  9. Isonic

    (8) подключить к маку, выбрать его в Xcode и скомпилировать. Приложение само перенесется на мобильное устройство

    Reply
  10. alexnikolas

    Только обязательно ставь мобильную платформу свежую. В сборщике я не ставил галочку «Собирать ipa» — у тебя появится архив. Распакуй — внутри проект. Запусти его. В списке устройств на котором будет запуск после того как подключишь телефон проводом — появится твой телефон в самом верху списка устройств. Выбираешь его и запускаешь — он сам установит на телефон приложение и запустит его. Там еще нужно включить твой телефон в список устройств для разработки, но это уже не к этой теме

    Reply
  11. grin_64

    А может кто подскажет, как установить prjios_client.zip на ipad? 1С мобильный клиент для подключения к web-серверу 1С?

    Reply
  12. mxs89

    У меня после сборки приложения на устройстве не отображаются шрифты/текст в колонках табличной части. Кто нибудь сталкивался с таким, как решали?

    Reply
  13. Isonic

    (12) вы шрифты какие-то специфические поставили?

    Reply
  14. mxs89

    (13) нет, все типовое, ед. менял только размер.

    Reply
  15. mxs89

    (13)

    Reply
  16. it@contlog.ru

    Подскажите как быть с такой ошибкой?

    Reply
  17. Isonic

    (16) в моей публикации (в PDF файле) эта ошибка рассматривается

    Reply
  18. fr13

    (17) Я скачал Вашу публикацию. У Вас рассматривается не этот вопрос. в (16) вопрос про ненайденное устройство. Я тоже столкнулся с этой проблемой. XCode не видит iphone. Настройки USB в VMWare менял. Подскажите пжл, как решить эту проблему?

    Reply
  19. Isonic

    (18) Вот вырезка из файла публикации. Проблема может быть только на стороне VMWare.

    Reply
  20. fr13

    (19) Я менял порты. Это не помогло

    Reply
  21. Isonic

    (20) в моем случае получилось так:

    — На VMWare стояла настройка на USB 3.0, мобильное устройство подключил к USB 3.0. Ничего не работало, писало ошибку с драйвером.

    — На VMWare стояла настройка на USB 2.0, мобильное устройство подключил к USB 2.0. Все заработал.

    (20) Вам выдается какое-нибудь сообщение в VMWare при подключении мобильного устройства?

    И вы пишете что не видит XCode. А сам Mac OS видит ?

    Reply
  22. fr13

    (21) Сообщение от VMWare не выдается. Может это дело не в оригинальности кабеля? Но ITunes на основной ОС видит устройство.

    Reply
  23. Isonic

    (22) Нет, шнур тут не причем. Вот то что никаких сообщений не выдается это конечно плохо.

    Reply
  24. djolejek
    3. Настройка сборщика мобильных приложений

    Подробно рассказывать не буду, так как это не один раз публиковали на инфостарте. Напомню лишь важные моменты:

    А где найти эти публикации? Не нашел как с самого начало и до конца настроить сборщика под IOS. Не подскажите где можно найти?

    Reply
  25. djolejek

    Всем привет. Пытаюсь собрать приложение для iOS системы но вылезает ошибка:

    Ошибка создания каталога кеш-файлов (для мобильной платформы): C:Usersolegdownloadsplatform80312046

    Кто-нибудь может подсказать что это за ошибка, и в какую сторону копать?.

    Reply
  26. Isonic

    (25) скорее всего прав нет на создание каталога

    Reply
  27. djolejek

    (26) Спасибо. Так и есть.

    Reply
  28. djolejek

    Всем привет. После сборки мобильного приложения на IOS и последующем запуске на Iphone запускаеться приложение но с пустым списком информационных баз.

    В конфигурационном файле ibases прописано:

    [Мобильный клиент]

    Connect=ws=»http://192.168.16.7/my-base»;

    UpdateURL=97282424-870b-11e8-8136-02342341.xml

    MobilePublicKey=

    На сколько я понимаю после сборки приложение должно сразу запускать нужную базу а не предлагать ее выбрать из списка. Кто-нибудь знает почему так происходит?

    Reply
  29. it@contlog.ru

    Каким образом выполнить компиляцию приложения для IOS с помощью сборщика до конца, не прибегая к костылям в xcode? Минус этого подхода что получается очень длинная цепочка операций чтобы компилировать свое приложение и смысл использования сборщика страдает. Видимо автор предложил свой костыль?

    Reply
  30. Isonic

    (29)

    Каким образом выполнить компиляцию приложения для IOS с помощью сборщика до конца, не прибегая к костылям в xcode

    купить лицензию разработчика IOS. В результате чего сборщик вам выдаст готовый файл приложения.

    (29)

    Минус этого подхода что получается очень длинная цепочка операций чтобы компилировать свое приложение и смысл использования сборщика страдает

    Пишите с нуля, вам никто не запрещает.

    + этого подхода заключается в том, что мобильная платформа 1С очень сильно облегчает разработку приложения.

    + этого в том, что это 1С, со своей спецификой бизнес решения. Собственно поэтому и все так и делается.

    Соглашусь что это очень неудобно.

    Reply
  31. gagash

    А можно перенести себе на мобильную платформу типовую конфигурацию 1с, типа 1сРозница?

    Reply
  32. Isonic

    (31) Весь функционал нет, только часть (очень малую часть)

    Reply
  33. gagash

    (32)

    только часть (очень малую часть)

    насколько малую ;)? Кассовый функционал к примеру можно? Продажи, учет скидок, интеграция с ККТ через БПО, ? Или проще будет с нуля что-то своё простое написать кассовое, только для продаж?

    Reply
  34. user1066490

    Требуется консультация и помощь не могу скомпилировать проект в XCode 10. Опыта не хватает. Естественно за вознаграждение.

    Контакт для связи admin собака it-ltd.ru

    Reply
  35. Isonic

    (34) Используй 9-ю версию.

    На данный момент то что делает сборщик приложений 1С не работает в 10-ой версии Xcode.

    Reply
  36. rotting

    (35) А где её скачать?

    Reply
  37. Isonic
  38. data78

    Добрый день. Сборщик выдает такую ошибку:

    CommonModule.MobileApplicationBuilding.Module(314)}: Выбранное мобильное приложение не может быть собрано для ОС iOS, т.к. следующие внешние компоненты не собраны для этой ОС.: ДрайверШтрихМККТ54ФЗ от 30.10.2018 15:25:58, ДрайверСканкодСканерШтрихкода от 30.10.2018 15:25:58, ДрайверВерсияТККТ54ФЗ от 30.10.2018 15:25:58, ДрайверАТОЛККТ54ФЗ от 30.10.2018 15:25:57, ДрайверScanPortУстройстваВвода от 30.10.2018 15:25:57, ДрайверRightScanУстройствоПечати от 30.10.2018 15:25:57, ДрайверRightScanУстройстваВвода от 30.10.2018 15:25:57, Драйвер1ССканерШтрихкода от 30.10.2018 15:25:57

    С чем это может быть связано?

    Reply
  39. Isonic

    (38)

    Выбранное мобильное приложение не может быть собрано для ОС iOS, т.к. следующие внешние компоненты не собраны для этой ОС

    Видимо нужно гуглить по этому тексту. С такой ошибкой не сталкивался. Могу лишь предположить, что указанные внешние компоненты не могут в принципе работать в мобильной ОС.

    Проверьте внешнюю компоненту на признак того что она может быть использована в iOS

    Reply
  40. data78

    Дело в том, что это типовое приложение 1с унф, там добавлено пару реквизитов только. В типовом то все эти драйверы присутствуют и есть же мобильное приложение под ios.А в интернете ничего похожего не нашлось, вот и решила тут спросить.

    Reply
  41. Region102

    Вот сборка под iOS, правда с платным аккаунтом https://www.youtube.com/watch?v=UKJ76BNaIqE

    Reply

Leave a Comment

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