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С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    3271    5    0    

11

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    35424    70    45    

30

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

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2989    3    3    

5

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    5021    5    2    

6

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

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

36000 руб.

03.08.2020    19418    24    22    

20

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1197    7    2    

9

Обмен с ГосИС 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

3000 руб.

28.04.2016    93663    96    217    

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

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