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 (в том числе Я.Маркет). Подходит для конфигураций Беларуси.

59990 руб.

05.09.2023    6606    83    74    

63

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

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15663    9    17    

9

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

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

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

18000 руб.

19.12.2023    1043    5    0    

5

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

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

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

12000 руб.

18.03.2019    31185    108    100    

62

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17430    6    15    

13

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

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

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

4200 руб.

07.06.2022    15244    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/
Оставьте свое сообщение