1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс)

Публикация № 686577

Обмен - Интеграция с WEB

обмена данными Альфа-Авто обмен с сайом

5
Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.

Преамбула.

Работаю с Альфа-Авто очень давно, пару лет назад посетила идея о предоставлении клиентам дополнительной (бесплатной) услуги,
назовём её "Сервисная книжка", через интернет. Возникла потому, что постоянные клиенты часто просили историю ремонтов по своим авто.

Несколько раз начинал, потом закрывал проекты на эту тему, т.к. слишком сложные механизмы обмена получались.

Решение Рарус для Битрикса не очень нравилось, да и жалоб в интернете на него много.

Так же толчком послужило то, что в одном знакомом сервисе, подобная услуга есть (писал им обработку по выгрузке данных в CSV-формат), но по непонятным причинам то работает, то не работает (причина не в моей обработке - однозначно).

Так же имею небольшой опыт работы по созданию сайтов на WordPress, а он работает на MySQL.

И вот недавно посетила идея: а почему бы не загружать данные из Альфа-Авто в напрямую MySQL, и потом оттуда эти данные публиковать, используя PHP.

Задача: 

1.Загрузить в базу MySQL сайта из 1С:Альфа-Авто данные о ремонтах авто (сервисная книжка). 

2. Выдавать эти данные по запросу.

Так как имею опыт работы с WordPress, всё описанное работает с ним. Протестировать можете на моём сайте: здесь.

Все данные вымышлены, анонимны, ничья конфиденциальная информация не раскрывается.

НО: главное принципиальная схема, модифицировать можно под любой сайт.

Решение:

1. Для выгрузки берутся данные из регистра Альфы "Продажи": Дата документа, Номер документа, VIN автомобиля, Наименование товара (Работы), 
Ставится признак работа/запчасть, Количество, Количество нормочасов. Эти данные экспортируются формат *.CSV. Почему? Просто написать обработку,
загрузить в базу MySQL сайта можно штатными средствами.

2. В базе MySQL сайта создается таблица в аналогичными полями, загружаются данные.

3. Пишется PHP-скрипт для обработки запроса и выдачи результата.

Пункты 1. и 2. самые простые, любой мало-мальски знающий, справится без труда.

А вот с п.3 мне лично пришлось повозиться, т.к. мои познания в PHP равны нулю, но тем не менее получилось.

Сам скрипт, // - мои комментарии, PHP соответственно также обрабатывает.

---------------------------------------------

<?php // Скрипт запроса по VIN, создан 2017-10-14 08:09:44 
echo '<pre>';
global $wpdb;  // вшитые в WordPress процедуры по работе с базой
global $wpdb2;
//переданный VIN
//VIN авто в верхний регистр
$VINTextParam=strtoupper ( $_POST['text']);

if (!isset($_POST['TextParam']))   // отработка на то, что нам не передали пустое значение VIN, если нет то делаем запрос
{
      //выполняем запрос
    $wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
    // если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
   if( ! empty($wpdb2->error) ) wp_die( $wpdb2->error );    // ошибка подключения 
   {  // если ошибок с подключением к базе нет
   // Готово, теперь используем функции класса wpdb
   $SpisokDocTxtZapros="SELECT date_doc, doc_number FROM wp_vin_history WHERE vin = '".$VINTextParam."' GROUP BY doc_number";  // текст запроса с введенным пользователем VIN - $VINTextParam

   $RezultZaprosSpisorDoc= $wpdb->get_results($SpisokDocTxtZapros);  // результат запроса - выборка, сначала выбираем список документов по которым авто был в ремонте
   //вывод результата первого запроса
        if( $RezultZaprosSpisorDoc)   // *1.отработка условия на то что, есть результат в выборке
        {  
           echo "<H2><b>Сервисная книжка автомобиля с VIN: ".$VINTextParam."</b></H2><br> ";   // выводим на страницу 
           foreach ( $RezultZaprosSpisorDoc as $Rezult )                                       // цикл для перебора результатов запроса                          
           {
                echo "<br> ";
                echo "<H3><b>Заказ-наряд № ".$Rezult->doc_number." от ".$Rezult->date_doc."</b></H3>";   // вывод шапки таблицы
                //детальная выборка, 1 - работы, 2 - запчасти
                $WorksTxtZapros="SELECT name_work_tovar, kolichestvo, kolichestvo_nc FROM wp_vin_history WHERE vin ='".$VINTextParam."' AND doc_number = '".$Rezult->doc_number."' AND this_avto_work = '1' ";
                // текст запроса перечня работ 
                $DetalyTxtZapros="SELECT name_work_tovar, kolichestvo, kolichestvo_nc FROM wp_vin_history WHERE vin ='".$VINTextParam."' AND doc_number = '".$Rezult->doc_number."' AND this_avto_work = '0' ";
                // текст запроса перечня деталей
                $RezultZaprosWorks= $wpdb->get_results($WorksTxtZapros);
                $RezultZaprosDetaly= $wpdb->get_results($DetalyTxtZapros);
                // результыты запросов, ОЧЕНЬ некорректно делать запросы в цикле, но здесь важен принцип 
                if( $RezultZaprosWorks)                 //*2. если есть работы, выводим на страницу
                 {   // выводим на страницу сайта заголовки HTML-таблицы
                         echo '<table border="1">';
                        echo '<thead>';
                          echo '<tr>';
                            echo '<th>Наименование работы</th>';
                            echo '<th>Количество операций</th>';
                            echo '<th> Количество часов </th>';
                            echo '</tr>';
                        echo '</thead>';
                        echo '<tbody>';    
                             foreach ( $RezultZaprosWorks as $RezultWorks)  // в цикле выводим работы
                             {        // выводим в HTML-таблицу все данные из таблицы MySQL
                                     echo '<tr>';
                                         echo '<td>' . $RezultWorks->name_work_tovar . '</td>';                 // выводим работу
                                         echo '<td align="center">' . $RezultWorks->kolichestvo. '</td>';       // выводим количество операций
                                         echo '<td align="center">' . $RezultWorks->kolichestvo_nc. '</td>';    // выводим нормочасы
                                     echo '</tr>';
                              }
                       echo '</tbody>';
                        echo '</table>';
                   }        
                 else {echo "Работы, нет данных для вывода.";}   //*2. если нет, сообщаем
                if( $RezultZaprosDetaly)                        //*3. если есть запчасти, выводим на страницу
                 {   // выводим на страницу сайта заголовки HTML-таблицы
                     echo '<table border="1">';
                        echo '<thead>';
                          echo '<tr>';
                            echo '<th>Наименование запчасти</th>';
                            echo '<th>Количество</th>';
                            echo '</tr>';
                        echo '</thead>';
                        echo '<tbody>';    
                             foreach ( $RezultZaprosDetaly as $RezultWorks)  //запчасти
                             {        // выводим в HTML-таблицу все данные клиентов из таблицы MySQL
                                     echo '<tr>';
                                         echo '<td>' . $RezultWorks->name_work_tovar . '</td>';             // выводим запчасть
                                         echo '<td align="center">' . $RezultWorks->kolichestvo. '</td>';   // выводим количество
                                     echo '</tr>';
                              }
                       echo '</tbody>';
                        echo '</table>';
                  }        
                 else {echo "Запчасти, нет данных для вывода.";}   //*3. если нет, сообщаем
           }
        }
       else {echo "<H3><b>Сервисные данные отсутствуют или введен некорректный VIN.</b></H3><br>";} // *1. здесь, думаю, и так всё понятно
   }    
}

else {echo "VIN автомобиля не введен, нет данных для вывода.";}  // отработка если пользователь не ввел никакие данные и нажал кнопку
echo '</pre>';
?>
/////конец скрипта


----------------------


Что имеем в итоге.

Данный механизм даёт возможность публиковать на сайте практически любые данные из Альфа-Авто (любой версии), да в принципе из любой конфигурации 1С.
Повторюсь, ОЧЕНЬ некорректно делать запросы в цикле, но здесь для меня был важен принцип.

Соответственно не правильно сводить все данные в одну таблицу, так как некоторые данные (например номенклатура, перечень работ) могут пригодиться для других целей, интернет-магазин например, или он-лайн калькуляция ремонта.

Но пока корректно, связывать разные таблицы MySQL не получается.

Пока не решенными остаются вопросы: синхронизации, исключения задвоения, автоматизации и т.д. Но это дело времени.

Некоторые моменты: обратная связь, запись на ремонт, задать вопрос мастеру и т.д., можно решить штатными средствами 1С и WordPress.

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

Через пункт меню "Сервисная книжка".

Здравая критика приветствуется (ещё раз подчеркну, в PHP я практически полный ноль).

С удовольствием выслушаю предложения и пожелания.

5

См. также

Специальные предложения

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. man-1982 18.10.17 10:10 Сейчас в теме
В целом идея рабочая и это главное.
1.Можно "1с: Авто" опубликовать в вебе и данные от туда по cron забирать на сайт.
2.PHP код не безопасен. Возможны SQL иньекции.
3. Если публиковать не хотите, то можно по фтп выкладывать в папку на серерве и от туда данные уже парсить средсвами WordPress/
Как предложения - оформить это в отдельный модуль под WordPress и отдельную внешнюю обработку под 1с.
А так молодец!
2. osivv 29 18.10.17 11:05 Сейчас в теме
Спасибо за комментарий.
Мне был важен принцип.
Защита от SQL инъекций предусмотрена в WordPress, глобальной переменной в начале скрипта, + не стал усложнять код, для упрощенного понимания.
Конечно отдельные модули, + закатать всё в регламент, будет вообще красота.
5. user1061130 02.10.18 16:08 Сейчас в теме
Посмотрите на этом сайте,он мне помог в решении многих вопросов https://www.pro1c-alfa.ru/
6. user1079177 30.10.18 11:16 Сейчас в теме
Саветую посмотреть сайт, тут мне помогли в решении многочисленых вопросов https://www.pro1c-alfa.ru/
Оставьте свое сообщение