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

22.04.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка
.epf 17,96Kb
48
48 Скачать (1 SM) Купить за 1 850 руб.
Инструкция
.rtf 94,83Kb
31
31 Скачать (1 SM) Купить за 1 850 руб.
Структура БД магазина на JoomShopping 4.12.3
.docx 100,43Kb
5
5 Скачать (1 SM) Купить за 1 850 руб.

Итак, нам необходим интернет магазин под 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

См. также

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    5915    40    11    

37

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

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

36000 руб.

03.08.2020    18356    20    22    

18

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

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    975    2    4    

3

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 3.0. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер). Интегрировано в Чек ККМ, Рабочее место кассира (РМК)

24000 руб.

02.11.2024    684    2    0    

2

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20566    13    19    

18

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

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31258    8    12    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. salexdv 2364 14.07.15 17:24 Сейчас в теме
Обратите внимание на это. Работу с базой сайта можно будет сделать еще удобнее и понятнее.
2. 32ops 197 15.07.15 05:29 Сейчас в теме
3. ExpertAdmin 28.09.15 17:57 Сейчас в теме
4. 32ops 197 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 197 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 197 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 Сейчас в теме
Есть обновление данной обработки?
Оставьте свое сообщение