1С бакэнд (каталог товаров)

01.01.23

Интеграция - WEB-интеграция

Серверная часть на 1с8 для веб каталога. Попробую поделиться опытом, как я использовал 1С в качестве веб сервера для веб витрины.

Мне необходимо было сделать веб каталог для встраивания в мобильное приложение. Это должно было быть 3 страницы

1. Виды товаров

2. Список товаров (по виду товаров)

3. Сам товар (описание, цена) и список магазинов, где этот товар есть, с указанием количества.

Собственно из-за третьего пункта и пришлось делать это самому, т.к. ни Woocommerce, ни UMI CMS и т.д. не поддерживают мультисклад.

И если с http-сервисом 1с-нику справиться было несложно, то с версткой html страниц сложнее. Тем более не хотелось формировать страницу на сервере и передавать как можно меньше данных. Поэтому решил формировать в 1С json строку, а саму страницу формировать уже с помощью js и php.

Создадим http сервис, который нам будет, в зависимости от типа запроса, возвращать строку json с данными (типы товаров, товары, остатки) 

 

Функция ВебПрайс(Запрос)  
	
	ВидСтр	=  Запрос.ПараметрыURL.Получить("metod");
	Стр		=  Запрос.ПараметрыURL.Получить("guid");    
	Если ВидСтр="catalog" Тогда  
		Возврат Каталог();
	ИначеЕсли ВидСтр="goods" Тогда	
		Возврат Товары(Стр); 
	ИначеЕсли ВидСтр="remnants" Тогда	
		Возврат Остатки(Стр);   
	ИначеЕсли ВидСтр="card" Тогда	
		ИД		= Запрос.ПараметрыЗапроса.Получить("id");
		Имя		= Запрос.ПараметрыЗапроса.Получить("firstname");
		Фамилия = Запрос.ПараметрыЗапроса.Получить("lastname");
		Возврат НомерКарты(Стр,ИД,Имя,Фамилия);   
	ИначеЕсли ВидСтр="discont" Тогда	
		Возврат Скидка(Стр);   
	ИначеЕсли ВидСтр="buying" Тогда	
		Возврат Покупки(Стр);   
...

	Иначе        
		Описание = ОписаниеОшибки();
		Ответ	= Новый HTTPСервисОтвет(500, Описание);
		Возврат Ответ;
	КонецЕсли;

КонецФункции

Сформируем строку json по типам товаров

Функция Каталог() 
	
	Ответ = Новый HTTPСервисОтвет(200);
	
	Попытка
		
		СтруктураОтвета = КаталогСписок(); 	//Возвращаем структуру ответа
		СтруктураОтветаJSON = Новый ЗаписьJSON;
		СтруктураОтветаJSON.УстановитьСтроку();
		ЗаписатьJSON(СтруктураОтветаJSON, СтруктураОтвета);
		Ответ.Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
		
		Ответ.Заголовки.Вставить("Access-Control-Allow-Origin", "*");
		Ответ.Заголовки.Вставить("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, HEAD, OPTIONS");
		Ответ.Заголовки.Вставить("Access-Control-Allow-Credentials", "true");
		Ответ.Заголовки.Вставить("Access-Control-Allow-Headers", "X-Requested-With, origin, content-type, accept");
		
		Ответ.УстановитьТелоИзСтроки(СтруктураОтветаJSON.Закрыть());	
		
	Исключение
		
		Описание = ОписаниеОшибки();
		
		Ответ = Новый HTTPСервисОтвет(500, Описание);
		
	КонецПопытки;
	
	Возврат Ответ;  
	               
КонецФункции

Получим структуру по типам товаров из запроса

Функция КаталогСписок() 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ

	...
	
	РезультатЗапроса = Запрос.Выполнить();
	
	МассивДанныхJSON = Новый Массив;
	СтруктураДанныхJSON = Новый Структура; 

	ЗаписьJSON = Новый ЗаписьJSON;
    
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет);  
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); 
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл 
		
		Данные = Новый Структура;
		Данные.Вставить("sku", Строка(ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор()));
		Данные.Вставить("name", ВыборкаДетальныеЗаписи.Наименование);
		МассивДанныхJSON.Добавить(Данные);  

	КонецЦикла;	       
	
	    // вставляем наш массив в ещеодну структуру
    СтруктураДанныхJSON.Вставить("catalog", МассивДанныхJSON);

    ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
	СтрокаJS = ЗаписьJSON.Закрыть();	
	
	Возврат СтрокаJS;
	
КонецФункции

Теперь сформируем html страницу. Для построения страницы я использовал CSS-фреймворк Tailwind. 

Добавим в Head строку с подключением 

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://cdn.tailwindcss.com"></script>
  <style type="text/tailwindcss"></style>

...

 

И  соберём из нашего json первую страницу. Добавим в Body скрипт.

 

  <script>
    $(document).ready(function () {
      $.getJSON("https://......../hs/web_price/catalog/123", function (data) {
        data = jQuery.parseJSON(data);

        showGoods(data.catalog);
      })

      function showGoods(f) {
        var out = '';
        for (var i = 0; i < f.length; i++) {

          out += '<div id="one'+i+'" class="container mx-auto px-3 py-1">'
          out += '<div id="two'+i+'" class="flex bg-white border border-fuchsia-900 shadow-lg rounded-xl overflow-hidden items-center justify-start"'
          out += '    style="cursor: auto;">'
          out += '    <!-- Картинка -->'
          out += '    <div id="three'+i+'" class="relative w-32 h-32 flex-shrink-0">'
          out += '        <div id="four'+i+'" class="absolute left-0 top-0 w-full h-full flex items-center justify-center">'
          out += '            <img alt="Photo"'
          out += '                class="absolute left-0 top-0 w-full h-full object-cover object-center transition duration-50"'
          out += '                loading="lazy" src="https:/............/img/group/' + '/' + f[i]['sku'] + '.jpg">'
          out += '        </div>'
          out += '    </div>'
          out += '    <!-- Надпись -->'
          out += '    <div class="p-4">'
          out += '        <p class="text-xl text-fuchsia-900 line-clamp-1">' + f[i]['name'] + '</p><br>'
          out += '        <a href="https:/........../goods.php?sku=' + f[i]['sku'] + '" class="text-fuchsia-900 outline outline-offset-2 outline-1 rounded-xl px-3">Перейти</a>'
          out += '    </div>'
          out += '    </div>'
          out += '</div>'
          document.getElementById("goods").innerHTML = out;
        }
      }

    })
  </script>

 

Веб каталог создавался для встраивания в приложение на Android и IOs. Если статья будет иметь интерес, то в следующей публикации покажу, как не просто создать страницу с товаром, но и применить к таблице пагинацию и добавить поиск. 

1c web каталог товаров backend бакэнд json js php

См. также

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

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

5040 руб.

04.05.2021    19041    10    16    

16

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

Подсистема интеграции Amo CRM с 1С: технические требования, порядок работы, возможности, доработки и обновления. Бесплатный период техподдержки - 1 месяц.

60000 руб.

07.05.2019    31897    62    40    

23

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

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

36000 руб.

03.08.2020    16782    15    19    

15

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

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    17023    45    49    

26

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13388    36    8    

15

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    87345    26    51    

50
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bprogs 218 10.01.23 12:40 Сейчас в теме
идея прикольная прям как в андроид парсим json и формируем страницу, так то в html очень простой язык гипертекста умещается в 5 куплетов стихотворения, когда начинаеш верстать может показаться сложным, а так в ваших методах лучше использовать вместо jquery саму нативную яваскрипт для формирования страницы а еще лучше есть там такая утилита в php работает очень быстро тоже формирует html страницу динамически ,будет формировать по милисекундно

вот небольшой кусок как это сделать в php, так же есть методы в java или swift
[1C-CODE
2. aldar 51 18.01.23 23:20 Сейчас в теме
(1) Да, то что на php тоже можно написать это я знаю (его я тоже использую), но мне хотелось сделать без промежуточных схем. Я взял конструктор приложений для Android & IOs, добавил функцию WebView в неё вставил html текст который при открытии получает json из 1с и строит страницу.
3. bprogs 218 19.01.23 10:20 Сейчас в теме
(2) там просто с webview не все маркеты примут такое приложение, к ним относятся не очень хорошо, например в appstore вам могут отказать в публикации приложения потому что у вас используется технология webview ,значит вы можете просто заходить через браузер или делать вообще все что хотите с телефоном пользователя через взаимодействия webview, в целях безопасности вам откажут в публикации на площадках, так как вы выходите с опасным приложением на рынок)))))) поэтому лучше придерживаться нативными приложениями, если нужно индивидуально для пару человек , то стоит ,как бы клиентуру не соберешь в таких решениях имею ввиду
4. aldar 51 19.01.23 20:16 Сейчас в теме
(3) При публикации мной нескольких приложений в google play вопросов вообще не возникло, а в appstore были вопросы но не связанные с WebView. А в данном случае какая разница как отразится страница через php или лучше как у меня без.
5. bprogs 218 19.01.23 20:31 Сейчас в теме
(4) киньте ссылку на гуглплей, хочу посмотреть
6. Lyolik 9 25.04.23 20:11 Сейчас в теме
(1) что Вы имели ввиду "так же есть методы в swift"?
7. bprogs 218 25.04.23 20:26 Сейчас в теме
(6) надо лезть в код приложения которое парсит данные json в webview , там у меня сейчас просто проблемы с доступом на vmware машине к xcode , нужно обновленная система, а apple уже давно сидит на других процах m1 m2 итд,поэтому vmware не вариант придется раскошеливаться и покупать яблоко для разработки
Оставьте свое сообщение