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

См. также

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

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

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

36000 руб.

03.08.2020    15745    10    17    

11

Интеграция 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

Интеграция с сервисом vetmanager

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

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

12000 руб.

02.02.2021    16358    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25739    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

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

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88579    160    215    

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

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