Публикация приложения на платформе 1С в App store и Play market




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

15 Comments

  1. nomadon

    Подтверждаю что ошибки сборки xcode убивают кучу времени и гуглелие практически безрезультатно (если конечно вы постоянно не занимаетесь мобильной разработкой)! Такое чувство, что мне говорят: не беспокойся 1С все сделает, расслабься и жди… обычно не жду… помню только один раз гугление помогло: нужно было версию подправить и прописать ее в другом месте, потом 1c добавили это через параметр и можно ждать следующей версии xcode

    Reply
  2. Tahallus

    А разве DUNS нельзя получить бесплатно ?

    https://habr.com/company/touchinstinct/blog/342046/

    Reply
  3. fr13

    (2) Спасибо, очень полезно. Не возражаете если добавлю информацию об этом в публикацию?

    Reply
  4. fr13

    (1) мне как-то Гугл помог в случае сборки для Андроида, но времени тоже пару дней тогда потратил

    Reply
  5. Tahallus

    (3) какие могут быть возражения)) это даже не моя статья, тем более что информация экономит 12240 рублей.

    Reply
  6. Region102
    После этого нажать Собрать приложение и подождать окончания операции. Если все пройдет успешно, то на выходе получится ipa файл и два проекта для XCode.

    Ключевая фраза «Если все пройдет успешно». 99% успешно не пройдет.

    У меня получилось только на XCode 9.2 https://www.youtube.com/watch?v=UKJ76BNaIqE

    Reply
  7. o4karek

    А встроенный в сборщик публикатор чем не устроил?

    Reply
  8. fr13

    (7)Вы про что? Для Apple использовался встроенный публикатор. Для Google встроенный не авторизовывался. Про оба случая я написал в публикации.

    Reply
  9. etmarket

    Полезная информация. Спасибо автору за публикацию статьи!

    Reply
  10. 4Shikari

    Огромное спасибо автору за публикацию. Инструкция очень помогла разобраться и расставить все по полочкам. Изначально казалось, что публикация в AppStore довольно сложное занятие. Однако уже после первой публикации все стало понятно.

    Подскажите, а что с авторскими правами на приложение, если продавать его через AppStore? Компании 1С какие-то права на созданное приложение принадлежат?

    Reply
  11. fr13

    (11) Спасибо за комментарий

    Если Ваше приложение не монетизируется, то платить ничего не нужно, в противном случае 10%. Но информация не точная, лучше писать в 1С (Лавринова Анна Владимировна, вроде она занимается этим).

    Reply
  12. 1cspec

    Добрый день. А как решили проблему с разрадностью в xcode?

    Reply
  13. fr13

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

    Reply
  14. 1cspec

    (14) У меня не получалось в сборщике собрать файл *.IPA, написал письмо в 1С и ниже ответ (может кому-то это сэкономит кучу времени).

    По результатам расследования в отделе разработки:

    Просьба поставить версию PuTTY 0.68 или ниже,

    для новых версий PuTTY мы исправим ошибку в будущем.

    Reply
  15. 1cspec

    Добрый день. Может кто сталкивался с подобной ошибкой:

    сборщик собирает ira файл, но данное приложение при установки на ios падает.

    Reply

Leave a Comment

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