Прямой обмен с БД интернет-магазина на Joomla (JoomShopping, VirtueMart)

22.04.18

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

Многие при выборе CMS для интернет-магазина не в последнюю очередь ориентируются на конечную стоимость решения. И вот выбор сделан в пользу Joomla, оплачены работы по созданию сайта, дизайн отличный, все хорошо, вот только одна деталь – обмен с 1С либо вообще не налажен, либо не устраивает из-за особенностей ведения учета в 1С, из-за низкой скорости обмена. Возникает задача настройки/оптимизации/адаптации обмена с интернет-магазином. За такую задачу готов взяться далеко не любой программист 1С, так как необходимы знания в смежной области, решения, которые предлагается адаптировать, зачастую защищены. В данной статье описывается методика обмена с интернет–магазином, не требующая от программиста оперировать понятиями незнакомой для него области. Предлагается работать с интернет-магазином как с базой данных. Благо, в интернет-магазинах под Joomla все необходимое для этого есть.

Скачать файлы

Наименование Файл Версия Размер
Обработка
.epf 17,96Kb
48
.epf 17,96Kb 48 Скачать
Инструкция
.rtf 94,83Kb
31
.rtf 94,83Kb 31 Скачать
Структура БД магазина на JoomShopping 4.12.3
.docx 100,43Kb
5
.docx 100,43Kb 5 Скачать

Итак, нам необходим интернет магазин под Joomla, для данной статьи выбран JoomShopping, т.к. автор считает его наиболее перспективным, в отличие от все более отстающего VirtueMart-а. Но, в принципе, технология для других магазинов отличается лишь структурой БД, и никаких препятствий для её использования нет.

Если у Вас нет интернет-магазина, но вы хотите на практике опробовать обмен, инструкция по его созданию на хостингах timeweb и radiushost приложена к данной статье. Будем считать, что магазин уже у нас есть.

Нам нужно установить ODBC драйвер для соединения с базой данных. Для его установки нужно скачать и установить MicrosoftVisualC++ 2010 RedistributablePackage (x86) с http://www.microsoft.com/en-us/download/confirmation.aspx?id=5555, скачать и установить MySQL Connector/ODBC 5.3.4 http://dev.mysql.com/downloads/connector/odbc/

Можно приступать к разработке. При установке соединения с базой данных важно установить кодовую страницу 1251, для нормального отображения русских символов. Для этого в строке соединения указываем «STMT=SET CHARACTER SET CP1251». В итоге подключение к БД будет выглядеть примерно так:

СтрПодключения = "DRIVER={MySQL ODBC 5.3 Unicode Driver};";
СтрПодключения = СтрПодключения+"SERVER="+Хост+";";
СтрПодключения = СтрПодключения+"Database="+ИмяБазы+";";
СтрПодключения = СтрПодключения+"Uid="+Логин+";PWD="+Пароль+";Option=3;STMT=SET CHARACTER SET CP1251";
Соединение=Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрПодключения);

При составлении запросов к БД есть один немаловажный нюанс. Поля, содержащие некоторые нехорошие символы, нужно брать в кавычки. Таких полей будет большинство, поэтому лучше брать в кавычки все поля. Только кавычки эти непростые, а вот такие `<имяполя>`. Код символа таких кавычек отличается от стандартного, это необходимо учитывать. Также нужно понимать, что у всех таблиц вашей БД есть префикс, который нужно добавлять слева к имени таблицы. Пример запроса:

ТекстЗапроса="DELETE FROM "+Префикс+"jshopping_categories";
Соединение.Execute(ТекстЗапроса);

Неплохо было бы оптимизировать наши запросы к БД. Не только с точки зрения самого запроса, но и с точки зрения количества передаваемых на хост данных. Например, синхронизацию товаров мы производим по коду. Тогда схема, когда мы отправляем для каждой номенклатурной позиции запрос «update», либо «insert» , будет неоптимальной. Причем для определения, какой из запросов мы будем делать, нам придется предварительно прочитать все коды из таблицы товаров. Как раз для такого случая подходит синтаксис «INS ERT ON DUPLICATE KEY UPDATE”, который позволяет обновить значения полей, если строка с таким ключом уже существует, либо, если нам не нужно ничего делать с уже существующими в БД строками «INS ERT IGNORE». В итоге запрос на обновление всей таблицы за один запрос будет выглядеть следующим образом «INS ERT IN TO <таблица> (<поле1>,..,<полеn>)VALUES (<Знач1>,...,<Значn>),...,(<Знач1>,...,<Значn>) ON DUPLICATE KEY UPDATE <поле1>=VALUES(<Знач1>),...,<полеn>=VALUES(<Значn>)». Такие запросы будут работать наиболее эффективно, правда при этом необходимо следить за тем, чтобы длина строки текста запроса не превысила максимум, установленный для базы. Пример формирования запроса:

Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |	КатегорииПапок.Папка КАК ПапкаНоменклатуры,
             |	КатегорииПапок.КодКатегории
             |ПОМЕСТИТЬ ВТ_КатегорииПапок
             |ИЗ
             |	&КатегорииПапок КАК КатегорииПапок
             |ГДЕ
             |	КатегорииПапок.Выгружать
             |;
             |
             |////////////////////////////////////////////////////////////////////////////////
             |ВЫБРАТЬ
             |	Товары.Ссылка КАК Номенклатура,
             |	ВТ_КатегорииПапок.КодКатегории КАК КодКатегории,
             |	Товары.Наименование КАК Наименование,
             |	Товары.Код КАК Код,
             |	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
             |	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество
             |ИЗ
             |	ВТ_КатегорииПапок КАК ВТ_КатегорииПапок
             |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
             |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
             |					,
             |					ТипЦен = &ТипЦен
             |						И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ЦеныНоменклатурыСрезПоследних
             |			ПО Товары.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
             |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
             |					,
             |					Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
             |						И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ТоварыНаСкладахОстатки
             |			ПО Товары.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
             |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ТоварыВРезервеНаСкладахОстатки
             |			ПО Товары.Ссылка = ТоварыВРезервеНаСкладахОстатки.Номенклатура
             |		ПО ВТ_КатегорииПапок.ПапкаНоменклатуры = Товары.Родитель
             |ИТОГИ
             |	МИНИМУМ(Наименование),
             |	МИНИМУМ(Код),
             |	МИНИМУМ(Цена),
             |	МИНИМУМ(Количество)
             |ПО
             |	Номенклатура";
Запрос.УстановитьПараметр("КатегорииПапок",КатегорииПапок);
Запрос.УстановитьПараметр("ТипЦен",Цена);
Результат=Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
	ТекстЗапросаНоменклатура="INSERT "+?(ОбновлятьСтаруюНоменклатуру,"","IGNORE ")+"IN TO "+Префикс
	+"jshopping_products (`product_id`,`product_date_added`,`date_modify`,`product_publish`,`name_ru-RU`,`description_ru-RU`,`short_description_ru-RU`,`product_price`,`product_quantity`) VALUES ";
	ПустойЗапрос=Истина;
	ТекстЗапросаКатегорииНоменклатуры="INSERT IGNORE IN TO "+Префикс
	+"jshopping_products_to_categories (`product_id`,`category_id`) VALUES ";
	
	ВыборкаНоменклатура=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока ВыборкаНоменклатура.Следующий() Цикл
		ТекстЗапросаНоменклатура=ТекстЗапросаНоменклатура+?(ПустойЗапрос,"",",")+"("
		+ВыборкаНоменклатура.Код+",'"+Формат(ТекущаяДата(),"ДФ='yyyy-MM-dd HH:mm:ss'")
		+"','"+Формат(ТекущаяДата(),"ДФ='yyyy-MM-dd HH:mm:ss'")
		+"',1,"""+СтрЗаменить(СтрЗаменить(ВыборкаНоменклатура.Наименование,Символы.ПС,"\n"),Символы.Таб,"\t")
		+""","""+СтрЗаменить(СтрЗаменить(ВыборкаНоменклатура.Наименование,Символы.ПС,"\n"),Символы.Таб,"\t")
		+""","""+СтрЗаменить(СтрЗаменить(ВыборкаНоменклатура.Наименование,Символы.ПС,"\n"),Символы.Таб,"\t")
		+""","+Формат(ВыборкаНоменклатура.Цена,"ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ=0")
		+","+Формат(ВыборкаНоменклатура.Количество,"ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ=0")+")";
		Выборка=ВыборкаНоменклатура.Выбрать();
		Пока Выборка.Следующий() Цикл
			ТекстЗапросаКатегорииНоменклатуры=ТекстЗапросаКатегорииНоменклатуры+?(ПустойЗапрос,"",",")+"("
			+Выборка.Код+","+Выборка.КодКатегории+")";
			ПустойЗапрос=Ложь;
		КонецЦикла;

	КонецЦикла;
КонецЕсли;
Если Не ПустойЗапрос Тогда
	Если ОбновлятьСтаруюНоменклатуру Тогда
		ТекстЗапросаНоменклатура=ТекстЗапросаНоменклатура+" ON DUPLICATE KEY UPDATE `product_publish`=1,`date_modify`=VALUES(`date_modify`),`name_ru-RU`=VALUES(`name_ru-RU`),`description_ru-RU`=VALUES(`description_ru-RU`),`short_description_ru-RU`=VALUES(`short_description_ru-RU`),`product_price`=VALUES(`product_price`),`product_quantity`=VALUES(`product_quantity`)";
	КонецЕсли;
	Соединение.Execute(ТекстЗапросаНоменклатура);
	Соединение.Execute(ТекстЗапросаКатегорииНоменклатуры);
КонецЕсли;

 

К статье приложена обработка для выгрузки товаров в интернет-магазин JoomShopping из 1С УТ 10.3 или КА 1.1. Данная обработка также будет работать в конфигурациях, которые используют структуру хранения остатков и цен номенклатуры, аналогичную УТ. Поскольку обработка предназначена для демонстрации работы с интернет-магазином как с базой данных, она имеет ряд ограничений, например, не выгружаются картинки. Ограничения и инструкция по использованию данной обработки находится в приложении к статье.

Структуру таблиц и полей БД интернет-магазина можно определить при помощи phpMyAdmin в панели управления сайта. К статье приложена структура БД магазина на JoomShopping 4.12.3

Выгрузка обмен интренет магазин сайт Joomla VirtueMart JoomShopping

См. также

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    7120    87    74    

68

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

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

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

36000 руб.

03.08.2020    15745    10    17    

11

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

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

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

18000 руб.

19.12.2023    1177    6    1    

6

SALE! 15%

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

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

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

12000 10200 руб.

18.03.2019    31271    109    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    17548    6    15    

13

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

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

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    6652    25    37    

15

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

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

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

4200 руб.

07.06.2022    15342    42    56    

37
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. salexdv 2327 14.07.15 17:24 Сейчас в теме
Обратите внимание на это. Работу с базой сайта можно будет сделать еще удобнее и понятнее.
2. 32ops 191 15.07.15 05:29 Сейчас в теме
3. ExpertAdmin 28.09.15 17:57 Сейчас в теме
4. 32ops 191 29.09.15 06:33 Сейчас в теме
(3) Bodyk, Да, не работает. Я это указал. "К статье приложена обработка для выгрузки товаров в интернет-магазин JoomShopping из 1С УТ 10.3 или КА 1.1.". Есть необходимость в обработке для УТ11? В принципе могу дописать, только ведь это не полноценный обмен, обработка просто демонстрирует возможности 1с обмена с интернет-магазинами на Joomla.
5. YuriFm 20.11.15 16:57 Сейчас в теме
Было время, использовал JoomShopping, по простой причине, бесплатный, достаточно хороший функционал, простое и интуитивно понятное расширение joomla. Вообщем отлично, плюсую!
6. 32ops 191 20.11.15 18:57 Сейчас в теме
(5) Спасибо! Планирую написать нормальный обмен для обычных форм, если реализация окажется удачной, то и для управляемых. Хотелось бы узнать, какие интернет-магазины сейчас пользуются наибольшим спросом.
7. WellMaster 104 22.01.16 14:10 Сейчас в теме
{ВнешняяОбработка.ОбменССайтом.МодульОбъекта(170)}: Ошибка при вызове метода контекста (Open)
Соединение.Open(СтрПодключения);
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

Использую последние joomla и joomShoping.
Развернуто все на timeweb.
Подозреваю, что неправильно указал настройки в обработке.
В частности вопрос: правильно ли в поле Хост указывать адрес своего сайта?
Имя базы и префикс не вызывают сомнений.
Логин и пароль = написано, что совпадает с именем базы. И логин и пароль?
8. WellMaster 104 22.01.16 14:49 Сейчас в теме
(7) WellMaster,
Сам и отвечу: помогло http://www.forum.mista.ru/topic.php?id=711224 (нужен 32-х битный драйвер, даже если винда х64)
9. 32ops 191 24.01.16 09:02 Сейчас в теме
10. Saldor 07.08.16 07:25 Сейчас в теме
Не мог бы, кто нибудь помочь. Вот в 1с, написано по выгрузке через модуль прямого обмена с БД, через HTTP туннель. Начало выгрузки в 18:46:38
7142
Выгрузка была успешно завершенна в 18:46:51
На сайт было выгруженно: 1 позиций

По resmon смотрю, трафик идет, а на сайт ничего не выкладывается.

В access log, вот что:

188.162.229.87 - - [02/Aug/2016:19:04:18 +0300] "GET /tunnel.php?check HTTP/1.1" 200 7 "-" "-"
188.162.229.87 - - [02/Aug/2016:19:04:19 +0300] "POST /tunnel.php HTTP/1.1" 200 289 "-" "Mozilla/3.0 (compatible; Indy Library)"
188.162.229.87 - - [02/Aug/2016:19:04:20 +0300] "POST /tunnel.php HTTP/1.1" 200 34 "-" "Mozilla/3.0 (compatible; Indy Library)"
188.162.229.87 - - [02/Aug/2016:19:04:21 +0300] "POST /tunnel.php HTTP/1.1" 200 289 "-" "Mozilla/3.0 (compatible; Indy Library)"
188.162.229.87 - - [02/Aug/2016:19:04:22 +0300] "POST /tunnel.php HTTP/1.1" 200 6 "-" "Mozilla/3.0 (compatible; Indy Library)"

Сам модуль забирает с начала моей базы по нажатию скачать типы цен , вот отсюда:

1,"1","Description"
2,"1","No. of Cores"
4,"1","test 1"
5,"1","test 2"
6,"1","test 3"
7,"1","test 4"
8,"1","test 5"
9,"1","test 6"
10,"1","test 7"
11,"1","test 8"
3,"1","Clockspeed"
1,"5","Description"
2,"5","No. of Cores"

База в размере меняется на пару сот килабайт, после обмена, но товар не появляется.

P.S: Как разберусь, выложу полную статью c файлами по обмену с БД через HTTP тунель.
Прикрепленные файлы:
OpenCart_v3cr.epf
tunnel.php
11. Saldor 07.08.16 08:40 Сейчас в теме
И да, на другой базе все работало нормально.
12. G_105982626809667439605 10.08.23 13:01 Сейчас в теме
Есть обновление данной обработки?
Оставьте свое сообщение