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

16.03.22

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Ценник на товар через HTTP-сервис: HTML шаблон ценника.
.html 0,82Kb ver:1
3
3 Скачать (1 SM) Купить за 1 850 руб.
Ценник на товар через HTTP-сервис: Расширение
.cfe 6,89Kb ver:1.1.1.1
4
4 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

3588 руб.

11.11.2020    49718    60    47    

69

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

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

2000 руб.

04.11.2019    29399    115    87    

54

Этикетки, ценники Пользователь Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Абонемент ($m)

Расширение "Контроль ценников". Позволяет автоматизировать контроль над устаревшими ценниками в магазине при изменении цен на товары. Продавцы или товароведы получают список товаров с измененными ценами для замены ценников в режиме онлайн.

10 стартмани

30.10.2024    256    3    Miket78    4    

5

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

Внешняя обработка для 1С Розница 2.2.ХХХ - 2.3.ХХХ для печати формирования штрихкодов весового товара и печати на принтере термоэтикеток или кассовом аппарате.

1 стартмани

29.10.2024    307    3    independ    1    

5

Логистика, склад и ТМЦ Этикетки, ценники Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Абонемент ($m)

Выводит при печати этикетки складской ячейки в качестве штрихкода адрес ячейки вместо уникального идентификатора

1 стартмани

20.06.2024    1153    3    Alexei_Siva    4    

6

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

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

20.01.2023    2581    aldar    0    

9

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

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

2 стартмани

03.01.2023    4135    29    AndreyPonom    9    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 2712 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 2712 16.03.22 21:02 Сейчас в теме
3. Malfarion 261 16.03.22 22:00 Сейчас в теме
Делайте ценник( или что вы там рисуете) в стандартном табличном документе, табличный документ можно сохранить в HTML и отдать в теле ответа.
Это будет более "родное" для 1С решение.
4. maksa2005 550 17.03.22 06:18 Сейчас в теме
Вот будет забавно, если цена при считывании будет одна, а на кассе другая))
Оставьте свое сообщение