Максимально простая установка своего мобильного приложения(базы) 1С на iOS (iPhone)




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

42 Comments

  1. pablo_escobar

    Спасибо за наводку!

    Reply
  2. Константин С.
    аккаунт в AppStore для разработчика за 100$

    нююю… это философское размышление

    Все зависеть, что будешь делать с этими приложениями)))

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

    Reply
  3. Rabot

    (2) Согласен, для солидной разработки это решение не подходит, и проще и правильнее купить аккаунт разработчика.

    К тому же данное решение не для продажи, как минимум из-за значка на рабочем столе от чужого (хоть и смежного) приложения =)

    Моё решение исключительно для быстрой (без apple аккаунтов, без установки и настройки сборщика приложения и всех сопутствующих действий) и бесплатной пробы «как там вообще на iPhone моё приложение заработает».

    Reply
  4. palsergeich

    Для того что бы изучать — самое то.

    Reply
  5. zeegin

    (4) Чтобы изучать есть андроид бридж и виртуалка от гугла, которые настраиваются из конфигуратора два клика.

    Reply
  6. TreeDogNight

    Спасибо за публикацию! А вы случайно не знаете как установить на IOS 11 Мобильный клиент, который появился в платформе 1C 8.3.12 ?

    Reply
  7. Xershi

    Русские не ищут легких путей)) 5+ за лайфхак.

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

    Reply
  8. androgin

    Как это связано с аккаунтом разработчика за 100 баксов чтобы поставить приложение?

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

    Для разработки достаточно.

    А в новом мобильном приложении 8.3.12 такой номер уже не пройдет — там на уровне разработки задаются возможные конфигурации

    Reply
  9. palsergeich

    (5) У меня 5 штук приложений на андроид уже в релизе и разработка на них уже окончена, как это работает на андроиде, я прекрасно знаю.

    Достаточно увесистая часть функционала, которая работает на андроиде не работает на IOS, и это в общем то не тайна + есть специфичные баги. Но руководство поголовно сидит на айфонах. Для того что бы сделать приложение на IOS нужна лицензия разработчика и IOS устройство, если IOS для демонстрации можно взять у коллеги, то прототип только с лицензией, а платить за лицензию из своего кармана я принципиально не собираюсь, естественно коллега тоже против установки чего либо кроме демо версии. От таких задач мы просто отказывались раньше, благо работы море. Сейчас можно будет заморочиться ради еще одной строчки в резюме.

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

    Reply
  10. palsergeich

    (6)

    6. TreeDogNight 15 09.10.18 23:46

    Спасибо за публикацию! А вы случайно не знаете как установить на IOS 11 Мобильный клиент, который появился в платформе 1C 8.3.12 ?

    Его надо собрать так же как и мобильное приложение

    Reply
  11. palsergeich

    (8)

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

    Для разработки достаточно.

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

    Reply
  12. androgin

    (11) ну не стоит сравнивать эпл и андроид, на который всякое г**но поставить может любой «умник»))

    Reply
  13. TreeDogNight

    (10) Я правильно понимаю, что к Мобильному клиенту относятся архивы сборок «prjios_admob_client», «prjios_client», «prjios_client_sim»? В чём их отличие?

    Reply
  14. Designer1C

    Вот это смекалка !

    Reply
  15. capitan

    Красавчик !

    На самом деле сертификат для установки на свой компьютер можно нажить за 1$

    Reply
  16. palsergeich

    (13)

    (10) Я правильно понимаю, что к Мобильному клиенту относятся архивы сборок «prjios_admob_client», «prjios_client», «prjios_client_sim»? В чём их отличие?

    https://infostart.ru/public/797123/

    Reply
  17. FesenkoA
  18. Rabot

    (6) К сожалению, не подскажу, т.к. не силён в мобильных приложениях. Не уверен даже в своём понимании разницы: мобильный клиент и мобильное приложение 1С.

    Reply
  19. Rabot

    (8) 1. «Не пройдёт»? В статье описывается актуальные версии, как раз на первом рисунке видно платформа 8.3.12.83.

    2. В тех темах, которые я читал на инфорстарте рассказывалось о 30 днях(если не путаю) бесплатного аккаунта разработчика AppleStore.

    3. Я и не говорил, что этот метод лучше «профессионального» — покупки аккаунта. Этот метод проще, чем манипуляции с файлами (что в статьях, на которые я наткнулся изучая вопрос) и с тем же результатом.

    Для чего усложнять установку приложения, к тому же ради 20% владельцев IPhone’ов?

    — Купить аккаунт (или получить пробный);

    — разобраться с конфигурацией «Сборщик приложений»;

    — скачать необходимые программы (судя по статьям);

    — установить их и настроить;

    — разобраться как собирать само приложение под iOS;

    — разобраться как публиковать на Apple Store;

    Или просто скачать «1С: Заказы» и подставить свой адрес обновления? По крайней мере пока это возможно.

    Reply
  20. Rabot

    (17) Именно, только проще. Кстати, в статье эта ссылка приведена.

    Reply
  21. Rabot

    (15) А как? Официально? Я читал (возможно и брехня) про «чёрный рынок», где твой аккаунт добавляют в список аккаунтов разработчика, но без гарантии, что он там долго продержится.

    Reply
  22. Rabot

    (7) Ну на самом деле, я написал простую инструкцию с картинками и пользователи сами ставят (пусть и не все).

    Reply
  23. capitan

    (21) Точно так. Проверено и работает )

    Reply
  24. pafftis

    Подскажите, вообще не понимаю что тут и для чего это.

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

    Reply
  25. Rabot

    (14) Спасибо!

    Reply
  26. FesenkoA

    (20) точно, крайние нажал, а это пропустил, простите 🙂

    Reply
  27. Rabot

    (24) В «статье» описан метод добавления своей конфигурации в мобильное приложение 1С на iOS (iPhone).

    Вопрос, видимо, по приложению «1С: Заказы».

    С мобильным приложением «1С: Заказы» «статья» ни как не связана. Приложение «1С: Заказы» в данном случае нужно только для установки на телефон мобильной платформы 1С.

    Reply
  28. androgin

    (27) а теперь топаем в зазеркалье и читаем статью. Внимательно!

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

    Reply
  29. Rabot

    (28) И что мне с этим знанием делать?

    Reply
  30. Rabot

    (28) «Статья» же не о том, что бы впаривать своё приложение 1С путём подмены адреса обновлений у чужих приложений, опубликованных на AppleStore. А о том, что для своих нужд можно своё приложение поставить в 2 шага на iPhone (без iTunes, без MacBook, без сборщиков приложений и тд и тп). И это работает на актуальной версии приложения «1С: Заказы 8.3.12.83» (уверен, что и другие тоже подойдут) опубликованного на данный момент в AppleStore и на iPhone 4(в свойствах сразу адрес обновления доступен!) и на iPhone 5, iPhone SE, iPhone 7. Остальные не пробовал.

    Не исключаю, что данный метод это лазейка в баге/фиче. Но пока метод работает.

    Reply
  31. nomadon

    BugBounty? не не слышали)

    может это умышленное пасхальное яйцо для вовлечения в в секту 1С без аккаунта разработчика?

    Reply
  32. Dementor

    (31) а какое отношение имеет цитата про мобильный клиент к обсуждению мобильного приложения? К тому же не рекомендую цитировать зазеркалье — это лишь анонсы планируемой функциональности, которая может не дойти до релиза или быть существенно изменена.

    Reply
  33. Rabot

    На текущий момент данный метод уже не работает с «1С: Заказы», т.к. его обновили.

    Но это нас не остановит) Думаю, каждый догадается о решении.

    Reply
  34. max_stupino

    (36) Подскажи как установить свою конфу на IOS

    Reply
  35. user1079832

    Подскажите есть ли сейчас способ, без аккаунта разработчика?

    Reply
  36. Rabot

    (37) Схема та же, просто в приложении «1С: Заказы» этот вариант не работает. Просто нужно скачать другое приложение, например, «1С: Босс» от Раруса.

    Reply
  37. Rabot

    (39) Схема та же, просто в приложении «1С: Заказы» этот вариант не работает. Просто нужно скачать другое приложение, например, «1С: Босс» от Раруса.

    Reply
  38. binary

    IPhoneX iOS 12 Схема не срабатывает. Не появляются поля для ввода адреса обновления.

    Reply
  39. fominov.a

    (41) Я так понимаю больше нет приложений таких?

    Reply
  40. maksa2005

    На новых iphon так не работает уже…6 пункт не рабочий

    Reply
  41. Rabot

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

    Reply
  42. Alex_241

    Может появились какае то новая возможность

    Reply

Leave a Comment

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