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

16.10.17

Интеграция - Сайты и интернет-магазины

Принцип обмена данными из 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 я практически полный ноль).

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

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

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    8314    125    74    

78

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15936    13    18    

13

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1546    13    3    

10

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31529    111    100    

64

Универсальный парсер интернет-магазинов

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

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

9600 руб.

19.10.2018    52203    220    99    

111

Выгрузка для АВИТО

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Россия Платные (руб)

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15645    42    56    

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