Ценник на товар через HTTP-сервис

16.03.22

Задачи пользователя - Этикетки, ценники

Коллеги, добрый день! Вспыхнула мода на электронный ценник на товар из-за скачущего курса, предлагаю не рассуждать на тему законности, а посовещаться, как это можно реализовать. В моем примере есть следующие входные данные, существуют ценники без цены, но c QR-кодом. Содержание QR представляет собой штрихкод товара и адрес http-сервиса.

Скачать исходный код

Наименование Файл Версия Размер
Ценник на товар через HTTP-сервис: HTML шаблон ценника.
.html 0,82Kb
3
.html 1 0,82Kb 3 Скачать
Ценник на товар через HTTP-сервис: Расширение
.cfe 6,89Kb
4
.cfe 1.1.1.1 6,89Kb 4 Скачать

Рабочее окружение: 

Розница, редакция 2.3 (2.3.10.61) 

1С:Предприятие 8.3 (8.3.19.1264)

Для реализации было сделано расширение с http-сервисом и шаблон html ценника. (Приложены к публикации). 

На фото в публикации результат, который отдает сервис пользователю. 

Надеюсь, кто-нибудь покритикует, расскажет о своем (возможном решении). 

Листинг кода

Функция startPrice(Запрос) 
	
	//http://127.0.0.1:33365/Ret/hs/unit/start/4810344008954
	Штрихкод = СтрЗаменить(Запрос.ОтносительныйURL,"/start/","");
	HTTPОтвет = Новый HTTPСервисОтвет(200);
	HTTPОтвет.УстановитьТелоИзСтроки(Чтение(Штрихкод)); //Добавляем аргумент функции (Штрихкод)
	HTTPОтвет.Заголовки["Content-Type"] = "text/html"; 
	
	Возврат HTTPОтвет;
	
КонецФункции 

Функция Чтение(Штрихкод)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Штрихкод",Штрихкод);
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ПРЕДСТАВЛЕНИЕССЫЛКИ(Штрихкоды.Владелец) КАК НаименованиеТовара,
	|	Штрихкоды.Характеристика КАК Характеристика,
	|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
	|ИЗ
	|	РегистрСведений.Штрихкоды КАК Штрихкоды
	|		ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
	|		ПО (Штрихкоды.Владелец = ЦеныНоменклатурыСрезПоследних.Номенклатура)
	|ГДЕ
	|	Штрихкоды.Штрихкод = &Штрихкод"; 
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда 
		ЦенаТовара = 0;
		НаименованиеТовара = "Товар отсутствует"; 
	Иначе
		Выборка = РезультатЗапроса.Выбрать(); 
		Пока Выборка.Следующий() Цикл  
			ЦенаСтрокой = СтрЗаменить(Строка(Выборка.Цена),Символы.НПП,""); 
			РазмерСтроки = СтрДлина(ЦенаСтрокой);
			СуммаЦелых = Лев(ЦенаСтрокой,РазмерСтроки-3);
			ДробнаяЧасть = СтрНайти(ЦенаСтрокой,",");
			Если ДробнаяЧасть = 0 Тогда 
				СуммаКопеек = "00"; 
				СуммаЦелых = ЦенаСтрокой;
			Иначе
				СуммаКопеек = Прав(ЦенаСтрокой,2); 
				СуммаЦелых = Лев(ЦенаСтрокой,РазмерСтроки-3);
			КонецЕсли;
			ЦенаТовара = СтрШаблон("%1 руб. %2 коп.",СуммаЦелых,СуммаКопеек);  
			НаименованиеТовара = Выборка.НаименованиеТовара;
		КонецЦикла;
	КонецЕсли;

	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.ОткрытьФайл("C:\Ценник2.html", "UTF-8"); //Размешение шаблона HTML ценника.
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	ЧтениеHTML.Закрыть();
	АдресHTML = ПолучитьТекстHTML(ДокументHTML);
	СтрокаЗаменыЦены = "Цена товара";
	СтрокаЗаменыНаименование = "Карточка товара";
	ЦенаHTML = СтрЗаменить(АдресHTML,СтрокаЗаменыЦены, ЦенаТовара);
	КарточкаТовараHTML = СтрЗаменить(ЦенаHTML,СтрокаЗаменыНаименование,НаименованиеТовара);
	
	Возврат КарточкаТовараHTML;
	
КонецФункции  

Функция ПолучитьТекстHTML(ДокументHTML) 
	
	ЗапиcьHTML = Новый ЗаписьHTML;	
	ЗапиcьHTML.УстановитьСтроку();	
	ЗаписьDOM = Новый ЗаписьDOM;	
	ЗаписьDOM.Записать(ДокументHTML, ЗапиcьHTML);
	
	Возврат ЗапиcьHTML.Закрыть();
	
КонецФункции

Текст HTML-Шаблона 

<!DOCTYPE html>
<html>
<head>
<style>
.card {
  box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
  max-width: 1000px;
  min-height: 640px; 
  margin: auto;
  text-align: center;
  font-family: arial;
  font-size: 48px;
}

.price {
  color: grey;
  font-size: 96px;
}

.card button {
  border: none;
  outline: 0;
  padding: 12px;
  color: white;
  background-color: #000;
  text-align: center;
  cursor: pointer;
  width: 100%;
  font-size: 18px;
}

.card button:hover {
  opacity: 0.7;
}
</style>
</head>
<body>



<div class="card">
  <h1>Карточка товара</h1>
  <meta charset="UTF-8">
  <p class="price">Цена товара</p>
  <p>Финские товары лучшего качества</p>
  <p><button>ИП Плошкиш В.П.</button></p>
</div>

</body>
</html>

 

QR Ценники Розница.

См. также

Ценники и этикетки со штрих-кодом для 1С 8.х любой конфигурации

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

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

3588 руб.

11.11.2020    47926    54    44    

64

Штрих-коды в шаблоне этикетки

Этикетки, ценники Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Россия Управленческий учет Платные (руб)

Решение позволяет в шаблон этикетки с типом "Этикетка (обувь, одежда, табак...)" добавлять штрих-коды другого типа, например, GTIN в Code128.

4000 руб.

09.06.2021    15101    8    6    

11

Печать ценников. (Розница 2.3, УНФ 1.6, две цены + серийные номера) + УНФ 3.0

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

Встроенная в конфигурации Розница 2.3 и УНФ 1.6 подсистема печати ценников по мне слишком неповоротлива и с усилиями поддается тонкой настройке, решил с нуля написать свою универсальную печать ценников для этих конфигураций.

2000 руб.

04.11.2019    28352    113    87    

52

Печать из Андроид

Этикетки, ценники Мобильная платформа Бесплатно (free)

Печать этикеток на принтер WiFi без драйвера.

20.01.2023    1928    aldar    0    

8

Ценники (этикетки) для термопринтера

Этикетки, ценники Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Абонемент ($m)

Внешняя печатная форма для принтера этикеток. В отличие от базовой обработки для печати этикеток эта может выводить на печать дополнительные свойства справочника Номенклатура, а также в ней несложный программный код, что позволяет легко дорабатывать обработку под свои нужды.

2 стартмани

03.01.2023    3145    19    AndreyPonom    7    

9

Набор готовых макетов этикеток (ценников) для Розницы 2.3

Этикетки, ценники Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Абонемент ($m)

Архив с экспортными шаблонами этикеток (ценников) формата 58х40. Для тех, кто не хочет сам рисовать их.

2 стартмани

04.05.2022    12357    44    aximo    3    

11

Шаблон этикетки для УНФ (1С:Фреш)

Этикетки, ценники Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Описан механизм создания этикетки для термопринтера ТSC TDP-225 в подробностях. Приложен XML-файл с самим шаблоном.

1 стартмани

01.05.2022    11467    6    zemskov    7    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 16.03.22 21:01 Сейчас в теме
ценник без цены - нарушение НПА.
5. Altez50 1 19.03.22 00:56 Сейчас в теме
(1) Лучше гипс и кроватка, чем гранит и оградка.
(4) Предоплата рулит.
(0) Упростил html и добавил остатки магазинов, работу с камерой поместил в apk, так покупателю проще сканировать несколько шк, стоит выложить?

Функция startPrice(Запрос) 
	
	//Штрихкод = СтрЗаменить(Запрос.ОтносительныйURL,"/start/","");      
	
	Штрихкод=Запрос.параметрыURL.Получить("barcode");
	
	HTTPОтвет = Новый HTTPСервисОтвет(200);
	HTTPОтвет.УстановитьТелоИзСтроки(Чтение(Штрихкод)); //Добавляем аргумент функции (Штрихкод)
	HTTPОтвет.Заголовки["Content-Type"] = "text/html"; 
	HTTPОтвет.Заголовки.Вставить("Access-Control-Allow-Origin","*");
	HTTPОтвет.Заголовки.Вставить("Access-Control-Allow-Credentials", "true");
	
	Возврат HTTPОтвет;
	
КонецФункции 

Функция Чтение(Штрихкод)
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Штрихкод",Штрихкод);
	Запрос.УстановитьПараметр("РозничнаяЦена",Справочники.КлассификаторКонстант.Значение("Розничная цена") );
	
		Склад1 = Справочники.КлассификаторКонстант.Значение("Склад1");
		Запрос.УстановитьПараметр("Склад1",Склад1);
		Склад2 = Справочники.КлассификаторКонстант.Значение("Склад2");
		Запрос.УстановитьПараметр("Склад2",Склад2);
		Склад3 = Справочники.КлассификаторКонстант.Значение("Склад3");
		Запрос.УстановитьПараметр("Склад3",Склад3);
	
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1                          //Штрихкоды.Номенклатура,
	|	ПРЕДСТАВЛЕНИЕССЫЛКИ(Штрихкоды.Номенклатура) КАК НаименованиеТовара,
	|	Штрихкоды.Характеристика КАК Характеристика,
	|	isnull(ОстаткиСклад1.ВНаличииОстаток,0) КАК ОстатокСклад1,
	|	isnull(ОстаткиСклад2.ВНаличииОстаток,0) КАК  ОстатокСклад2,
	|	isnull(ОстаткиСклад3.ВНаличииОстаток,0) КАК  ОстатокСклад3,
	|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
	|ИЗ
	|	РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
	|		//ПРАВОЕ 
	|		левое СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦены=&РозничнаяЦена) КАК ЦеныНоменклатурыСрезПоследних
	|		ПО (Штрихкоды.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
	|		левое СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(,Склад=&Склад1) КАК ОстаткиСклад1
	|		ПО (Штрихкоды.Номенклатура = ОстаткиСклад1.Номенклатура)
	|		левое СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(,Склад=&Склад2) КАК ОстаткиСклад2
	|		ПО (Штрихкоды.Номенклатура = ОстаткиСклад2.Номенклатура)
	|		левое СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(,Склад=&Склад3) КАК ОстаткиСклад3
	|		ПО (Штрихкоды.Номенклатура = ОстаткиСклад3.Номенклатура)
	|ГДЕ
	|	Штрихкоды.Штрихкод = &Штрихкод";
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда 
		ЦенаТовара = 0;
		НаименованиеТовара = "Товар отсутствует";
		СтрокаОстатков = "";
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл  
			ЦенаТовара =  Формат(Выборка.Цена,"ЧДЦ=0; ЧРГ=' '; ЧГ=3,0"); 
			НаименованиеТовара = Выборка.НаименованиеТовара;
			СтрокаОстатков = СтрШаблон("Склад1:%1 Склад2:%2 Склад3:%3",Выборка.ОстатокСклад1,Выборка.ОстатокСклад2,Выборка.ОстатокСклад3);
			СтрокаОстатков = СтрЗаменить(СтрокаОстатков,"Склад1","Бабушкина"); //Склад1
			СтрокаОстатков = СтрЗаменить(СтрокаОстатков,"Склад2","Ереванская"); //Склад2
			СтрокаОстатков = СтрЗаменить(СтрокаОстатков,"Склад3","Нахимова"); //Склад3
		КонецЦикла;
	КонецЕсли;

	//ЧтениеHTML = Новый ЧтениеHTML;
	//ЧтениеHTML.ОткрытьФайл("E:\UT\Price.html", "UTF-8"); //Размешение шаблона HTML ценника.
	//ПостроительDOM = Новый ПостроительDOM;
	//ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	//ЧтениеHTML.Закрыть();
	//ТекстHTML = ПолучитьТекстHTML(ДокументHTML); 
	Макет = ПолучитьОбщийМакет("ВебСерв_КарточкаТовараHTML");  // ПолучитьОбщийМакет("ПротоколВзаимодействияWSSСервисаEDI")
	ТекстHTML = Макет.ПолучитьТекст();
	
	СтрокаЗаменыЦены = "Цена товара";
	СтрокаЗаменыНаименование = "Карточка товара";
	СтрокаЗаменыСтрокаОстатков = "Строка остатков";
	
	ТекстHTML = СтрЗаменить(ТекстHTML,СтрокаЗаменыЦены, ЦенаТовара);
	ТекстHTML = СтрЗаменить(ТекстHTML,СтрокаЗаменыНаименование,НаименованиеТовара);
	ТекстHTML = СтрЗаменить(ТекстHTML,СтрокаЗаменыСтрокаОстатков,СтрокаОстатков);
	
	Возврат ТекстHTML;//КарточкаТовараHTML
	
КонецФункции 
Показать
Прикрепленные файлы:
Vodi4kin; +1 Ответить
6. Vodi4kin 9 22.03.22 14:25 Сейчас в теме
2. CheBurator 3119 16.03.22 21:02 Сейчас в теме
3. Malfarion 254 16.03.22 22:00 Сейчас в теме
Делайте ценник( или что вы там рисуете) в стандартном табличном документе, табличный документ можно сохранить в HTML и отдать в теле ответа.
Это будет более "родное" для 1С решение.
4. maksa2005 534 17.03.22 06:18 Сейчас в теме
Вот будет забавно, если цена при считывании будет одна, а на кассе другая))
Оставьте свое сообщение