Пример создания мобильного приложения в 1С с нуля




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

33 Comments

  1. DitriX

    У меня на курсах, что бы объяснить это — ушел не один час, особенно про AdMob и про push в iOS 🙂

    А вы тут уложились в пару страниц 🙂 Оставив все самое интересное и сложное — за занавесом 🙂

    Не хорошо так статьи писать.

    Reply
  2. Константин С.
    Оставив все самое интересное и сложное — за занавесом 🙂

    (1) DitriX, за сложное ты берешь деньги. Автор выдал направление как делается. Реально это нужно 1 или менее процента, остальным для общего развития хвати и этого объема.

    Reply
  3. zekrus

    Доброе утро!

    Тема очень актуальная.

    А нет подробного руководства для компиляции мобильного приложения под iOS?

    С уважением

    Reply
  4. METAL
  5. a3a3elloxxxx

    Вопрос к знатокам мобильной 1С. Возможен ли такой вариант использования 1С. Есть файловая база 1С. Кидаем ее на DropBox или яндекс диск и работаем то с мобилы то с планшета а то с десктопа. Понятно, что формы для мобилы и десктопа надо делать разные, главное что бы данные можно было набивать с разных устройств.

    Reply
  6. flyer

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

    Reply
  7. a3a3elloxxxx

    (6) flyer,

    Арендовать сервер как раз сложнее и дороже чем кинуть пару файлов на диск.

    Reply
  8. Константин С.

    (5) a3a3elloxxxx, Нет одновременная работа с одной базой Мобайл — Десктоп нельзя. Нужно два приложение и далее на уровне обменов. Или как сказали ранее сервер + web, если на 1-2 пользователе ценав выделенного сервера на Линуксе в приемлема.

    Reply
  9. DitriX

    (2) Константин С., Никто же не говорит что я сама щедрость. Я просто к тому, что если уж и писать статьи, то не оставлять самое интересное закулисами. Я так статьи не пишу, между прочим, а стараюсь выжать максимум из темы.

    А на счет того, что я беру деньги за самое интересное — это да, каюсь. Но вот только я еще и экономлю время и нервы:)

    Reply
  10. vano-ekt

    самое интересное в конфигураторе и не напишешь…

    да и политика по распространению приложений пока не вдохновляет писать даже учетные программки на 1С для этих ваших Плэймаркетов/Аппсторов

    где-то же они озвучивали, что начиная от 50 пользователей/скачек распространение возможно только по соглашению с 1С

    такшта АндроидСтудио пока наше всё

    Reply
  11. awk

    (5) a3a3elloxxxx, Нет. Такой вариант невозможен.

    Reply
  12. Aphanas

    Как этот .cf в телефон затолкать, непонятно

    Reply
  13. VovkaBo

    (12) Aphanas,

    cf никак. Ищи сборщик мобильных приложений, загружай туда cf, собирай мобильное приложение, получишь apk. Его и кидаешь в телефон.

    Reply
  14. silver_a

    Интересное приложение. Но только вот при блокированном экране и при свёрнутом режиме приложения — локальные сообщения выходят через раз или просто вибрирует без вывода сообщений. Так должно быть или это ошибка? Конфа эта без изменений, версия мобильной платформы 8.3.9.74.

    Reply
  15. silver_a

    (12) как вариант — установить мобильную платформу на смартфон, установить апач, опубликовать cf-ку и таким образом загрузить. я так использую. Вот тут есть пошаговое описание.

    Reply
  16. user754495

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

    Reply
  17. d.zhukov

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

    Reply
  18. privin731

    Отличная статья! Огромное спасибо Автору! По этой статье пытаюсь повторить. И вот получил такую ошибку:

    {Обработка.Таймер.Форма.Форма.Форма(47,1)}: Неопознанный оператор

    <<?>>&НаКлиенте

    Мобильное приложение содержит синтаксические ошибки.

    Reply
  19. privin731

    К сожалению, не могу скачать файл конфигурации, так как нет денег. Я только учусь. Но очень хочу запустить эту конфигурацию. Сожалею, что не могу скачать, хотя радует статистика Просмотры 21389 Загрузки 50 . Убедительная просьба, пожалуйста, помогите мне.

    Reply
  20. privin731

    Спасибо всем! Всё решил сам. Статья действительно очень замечательная!!!

    Reply
  21. retif

    https://play.google.com/store/apps/details?id=org.mykib.pomodoro «Страница не найдена»

    habr эффект?

    Reply
  22. taishy

    (10) Не совсем так

    При бесплатном распространении мобильного приложения, созданного на платформе «1С:Предприятие», среди третьих лиц через магазины приложений AppStore, Google Play и Windows Store и любыми другими способами, заключение лицензионного договора с фирмой «1С» не требуется, никаких финансовых обязательств перед «1С» у разработчика не возникает, а вот для установки и использования мобильных приложений, созданных на платформе «1С:Предприятие», на мобильных устройствах своих сотрудников, организация должна приобрести клиентскую лицензию на соответствующее количество мобильных рабочих мест.

    Источники:

    Мобильная платформа 1С: лицензионная политика

    О правилах распространения и использования мобильных приложений, разработанных на платформе «1С:Предприятие», для использования сотрудниками одной организации-пользователя «1С»

    Reply
  23. s_vidyakin

    (7) А Firebase вас не спасает?

    Reply
  24. Luchik

    (21) Этой публикации более двух лет — google удалил приложение, т.к. за это время поменялись какие-то правила по возрастным ограничениям, на которые я не стал обращать внимания. Но apk-файл у меня остался

    Reply
  25. Region102

    (12) Посмотри на моем канале, много вопросов отпадет, еще больше появится ) https://www.youtube.com/watch?v=e4mq2I8wtU4&list=PLkvJd0RKh5mkt3hA-ttps0ewqp9b3YAKm

    Reply
  26. Region102

    (17) Есть видео по сборке, но пока без выкладывания в маркет, подписывайся https://www.youtube.com/watch?v=e4mq2I8wtU4&list=PLkvJd0RKh5mkt3hA-ttps0ewqp9b3YAKm

    Reply
  27. Region102

    Я тут интенсив пишу по разработке корпоративного мобильного приложения с нуля, так уже часов на 6-8 тянет, и это все вырезал что смог, а тут статья на пару листов. При этом у меня нет ни монетизации, ни push, ни других возможностей, ни сборки, ни публикации. Чистый кодинг несколько часов подряд.

    Вообще банеры решение спорное для монетизации в 1С, лучше уж подписка, а еще лучше бесплатное приложение ограниченное, и полноценное платное. Так как подписки и банеры уже многих начинают бесить неимоверно.

    Reply
  28. Region102

    (10) Пусть АндроидСтудио визуализацию лайоутов допилят до нормального состояния, а так есть задачи, где 1С использовать выгоднее в разы, чем писать нативное приложение. А расширить возможности можно внешними компонентами.

    Reply
  29. YanTsys

    (27)

    Так как подписки и банеры уже многих начинают бесить неимоверно.

    Разве не в этом основное назначение бесплатной версии :))))

    Reply
  30. Region102

    (29) Вы можете ограничить программно количество помидоров, допустим 4 и это будет бесплатная версия. А в платной трекер задач с синхронизацией в облако и еще какие-нибудь плюшки.

    Reply
  31. YanTsys

    (30) Понятное дело 🙂 Это самые распространенные методы, метод пряника, и метод кнута…

    Идет человек по бульвару, видит сидят два нищих, у одного табличка «Подайте бедному Василию» а у второго «Подайте бедному Абраму» толпа людей идет смотрит на таблички и все кидают монеты Василию с ехидцей поглядывая на Абрама. Сжалился прохожий подошел к Абраму и говорит: «Ну зачем ты сидишь с такой табличкой, напиши просто «Подайте на еду» или что нибудь еще»

    На что Абрам оборачивается ко второму нищему и говорит: «Слышишь Мойша? Этот поц еще будет нас бизнесу учить» 🙂

    Reply
  32. nextkmv

    Кто нибудь использовал мобильную платформу в реальных условиях корпоративной среды?

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

    Как обстоят дела с производительностью с бюджетными устройствами(планшет 7 дюймов стоимостью до 10 000 рублей)?

    Как отзываются пользователи о производительности, удобстве интерфейсов, скорости полнотекстового поиска?

    Reply
  33. zavsom

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

    Reply

Leave a Comment

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