Интерфейс 1С. Боль. Но решаемо. HTML, JS и JSON. Делаем свой универсальный интерфейс в 1С

14.07.25

Разработка - Работа с интерфейсом

Универсальный интерфейс в 1С под любые формы и конфигурации с использованием поля HTML документа, js, html и json.

Файлы

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

Наименование Скачано Купить файл
Интерфейс 1С. Боль. Но решаемо. HTML, JS и JSON. Делаем свой универсальный интерфейс в 1С.:
.cfe 57,67Kb
3 3 050 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Как рождалась эта разработка.

Вначале я спросил людей(в телеграмм в сообществе БСП и Архитектура):

-Деревом в 1С это не сделать, как быть? Заказ горит. Денег вагон дают.

Мне последовал ответ: Поле HTML документа, html, js и json.

Дальше накидываю дипсику в своем терминале, в котором по апи он мне отвечает без ограничений, сделай мне шаблончик такой идеи, и получаю в ответ:

 

 

Ну дальше я вошел во вкус и двое суток накидывал по ТЗ и вспоминал JS и HTML из яркой молодости.

В итоге решение представляет собой расширение реализующее систему взаимодействия с АПИ поставщика под любую платформу и под любые формы.

Регламентное задание раз в сутки грузит данные с сайта поставщика в периодический регистр сведений.

Основная общая форма представляет из себя поле HTML документа и 1 реквизит с типом бесконечная строка. Выводит список доступных позиций в таблицу по данным регистра с, так сказать, "необычными" группировками для 1С (видно на скриншоте). 

Ну теперь самое сладкое, код.

 
 Это код обновления данных (backend)
&НаСервере
Процедура ОбновитьДанные()
	
	// Инициализация таблицы для хранения результата запроса
	РезультатЗапроса = Новый ТаблицаЗначений;
	РезультатЗапроса.Колонки.Добавить("ПартНомер");
	РезультатЗапроса.Колонки.Добавить("Производитель");
	РезультатЗапроса.Колонки.Добавить("Бренд");
	РезультатЗапроса.Колонки.Добавить("ТНВЭД");
	РезультатЗапроса.Колонки.Добавить("ДатаЗагрузки");
	РезультатЗапроса.Колонки.Добавить("ОтветныйПартНомер");
	РезультатЗапроса.Колонки.Добавить("Количество");
	РезультатЗапроса.Колонки.Добавить("Прайсы", Новый ОписаниеТипов("ТаблицаЗначений"));
	
	// Инициализация таблицы для хранения прайсов
	ТаблицаПрайс = Новый ТаблицаЗначений;
	ТаблицаПрайс.Колонки.Добавить("ПартНомер");
	ТаблицаПрайс.Колонки.Добавить("ГруппировкаВидПрайса");
	ТаблицаПрайс.Колонки.Добавить("СрокПоставки");
	ТаблицаПрайс.Колонки.Добавить("Цены");
	ТаблицаПрайс.Колонки.Добавить("Количество");
	ТаблицаПрайс.Колонки.Добавить("Источник");
	ТаблицаПрайс.Колонки.Добавить("Предложение");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Номенклатура.Артикул КАК ПартНомер,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Номенклатура.БрендПроизводитель КАК Производитель,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Период КАК ДатаЗагрузки,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ОтветныйПартНомер КАК ОтветныйПартНомер,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ТНВЭД КАК ТНВЭД,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ИсточникИД КАК ИсточникИД,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ДатаКвотации КАК ДатаКвотации,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ВидПрайса КАК ГруппировкаВидПрайса,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Валюта КАК Валюта,
	               |	ВЫРАЗИТЬ(ИсторияОбновленияНоменклатурыСрезПоследних.СрокПоставки КАК СТРОКА(250)) КАК СрокПоставки,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.ДоступноеКоличество КАК Количество,
	               |	ВЫРАЗИТЬ(""                                                                           "" КАК СТРОКА(250)) КАК Цены,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Бренд КАК Бренд,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Источник КАК Источник,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.КоличествоОт КАК КоличествоОт,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Предложение КАК Предложение,
	               |	ИсторияОбновленияНоменклатурыСрезПоследних.Цена КАК ЦенаПозиции
	               |ИЗ
	               |	РегистрСведений.ИсторияОбновленияНоменклатуры.СрезПоследних(&Дата, ) КАК ИсторияОбновленияНоменклатурыСрезПоследних
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ПартНомер,
	               |	Предложение,
	               |	ГруппировкаВидПрайса,
	               |	КоличествоОт
	               |ИТОГИ
	               |	МАКСИМУМ(Производитель),
	               |	МАКСИМУМ(ДатаЗагрузки),
	               |	МАКСИМУМ(ОтветныйПартНомер),
	               |	МАКСИМУМ(ТНВЭД),
	               |	МАКСИМУМ(ИсточникИД),
	               |	МАКСИМУМ(ДатаКвотации),
	               |	МАКСИМУМ(Валюта),
	               |	МАКСИМУМ(СрокПоставки),
	               |	СУММА(Количество),
	               |	МАКСИМУМ(Цены),
	               |	МАКСИМУМ(Бренд),
	               |	МАКСИМУМ(Источник),
	               |	МАКСИМУМ(ЦенаПозиции)
	               |ПО
	               |	ПартНомер,
	               |	Предложение,
	               |	ГруппировкаВидПрайса,
	               |	КоличествоОт
	               |АВТОУПОРЯДОЧИВАНИЕ";
	
	Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
	//Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ИМЯТАБЛИЦЫ%", СтрЗаменить(Константы.TC_ИмяТаблицы.Получить(), ".ТабличнаяЧасть", ""));   
	ИмяСправочника = СтрЗаменить(Константы.TC_Реквизит.Получить(), Константы.TC_ИмяТаблицы.Получить() + ".Реквизит.", "");
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "Номенклатура", ИмяСправочника);   
	Артикул = Константы.TC_РеквизитПартНомер.Получить();
	Если Артикул = "Код" Или Артикул = "Наименование" Тогда
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Артикул", Артикул);
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Артикул", СтрЗаменить(Константы.TC_РеквизитПартНомер.Получить(), "Справочник.Номенклатура.Реквизит.", ""));
		
	КонецЕсли;	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "БрендПроизводитель", СтрЗаменить(Константы.TC_РеквизитБренд.Получить(), "Справочник.Номенклатура.Реквизит.", ""));
	
	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Выборка.Следующий() Цикл
		
		Строка = РезультатЗапроса.Добавить();
		Строка.ДатаЗагрузки = Выборка.ДатаЗагрузки; 
		Строка.Количество = Выборка.Количество;
		ВыборкаПредложение = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		// Очищаем таблицу прайсов перед заполнением для новой строки
		ТаблицаПрайс.Очистить();
		Пока ВыборкаПредложение.Следующий() Цикл
			
			
			ВыборкаВидПрайса = ВыборкаПредложение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			
			
			Пока ВыборкаВидПрайса.Следующий() Цикл               
				НоваяСтрока = ТаблицаПрайс.Добавить();
				ЗаполнитьЗначенияСвойств(Строка, ВыборкаВидПрайса, , "ДатаЗагрузки,Количество");
				НоваяСтрока.ГруппировкаВидПрайса = Строка(ВыборкаВидПрайса.ГруппировкаВидПрайса);
				ВыборкаКоличествоОт = ВыборкаВидПрайса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
				
				СтрокаЦен = "";
				СтрокаСрокиПоставки = "";
				
				Пока ВыборкаКоличествоОт.Следующий() Цикл
					СтрокаЦен = СтрокаЦен + Строка(ВыборкаКоличествоОт.ЦенаПозиции) + " " + ВыборкаКоличествоОт.Валюта + " от " + Строка(ВыборкаКоличествоОт.КоличествоОт) + "<br>";
					СтрокаСрокиПоставки = СОКРЛП(ВыборкаКоличествоОт.СрокПоставки);
					
					ВыборкаДетали = ВыборкаКоличествоОт.Выбрать();
					
				КонецЦикла;	                                 
				
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаВидПрайса);
				НоваяСтрока.Количество = ВыборкаПредложение.Количество;
				НоваяСтрока.Цены = СтрокаЦен;
				НоваяСтрока.СрокПоставки = СтрокаСрокиПоставки;
			КонецЦикла;	      
			
		КонецЦикла;	
		// Копируем заполненную таблицу прайсов в строку результата
		Строка.Прайсы = ТаблицаПрайс;
		
	КонецЦикла;	      
	
	// Преобразование результата в HTML
	Реквизит1 = ТаблицаВHTML(РезультатЗапроса);	
	
КонецПроцедуры	

 

 
 А это собственно суть публикации и твои новые возможности в 1С, мой друг

 

Получилось что то такое, если смотреть с точки зрения будущего 1С:

 

 

Итоговый вариант для заказчика выглядел так:

 

 

Ну что хочу сказать в итоге. Реализация в прикрепленном расширении.

Чуть понимающий специалист сделает себе такое же, для своих поставщиков по апи воткнув токен, эндпоинт и чуть подправив код. 

 

Под любую платформу. Под любые формы.

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.228

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Скачайте бесплатную обработку "Анализ данных для использования в подсистеме 1С Инфоборды" и узнайте возможность внедрения подсистемы у себя в конфигурации! Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения "Инфоборды". Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране.

28800 руб.

27.03.2025    13484    24    18    

34

Работа с интерфейсом Рабочее место 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    65962    45    60    

84

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    21638    31    6    

48

Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

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

20.08.2024    36030    mrXoxot    44    

136

Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

27.05.2024    21171    smielka    37    

106

Работа с интерфейсом 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    20947    1285    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    14900    175    acces969    31    

132

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Питничная фантазия на возможности в разработке интерфейсов формы с помощью Платформы 1С - делаем свою подсказку. Публикация содержит готовую библиотеку программного формирования данной подсказки.

12.08.2022    9640    rpgshnik    39    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1446 14.07.25 17:54 Сейчас в теме
Что-то сумбурно получилось



Вначале я спросил людей.

Деревом в 1С это не сделать, как быть? Заказ горит. Денег вагон дают.

О чем спросили? У кого? Что в ответ получили? Какие альтернативы рассматривали?


Универсальный интерфейс в 1С под любые формы и конфигурации

Тема универсальности не раскрыта: вы привели пример реализации конкретного интерфейса под конкретную задачу. В 1С в том числе поняли что интерфейс, предлагаемый платформой - это функционально, не не всегда красиво/интересно, поэтому сами уже реализует формы на основе html-документов (новый "легкий" интерфейс ЭДО, например).
orakool; Kesak; VovanIvan; amiralnar; +4 Ответить
2. johnicjs 105 15.07.25 20:48 Сейчас в теме
Если код сгенерирован, так же как же как написана статья, то хочется плакать
orakool; 7OH; user625107_barabambler1s; +3 Ответить
3. 0xFFFFFF 16.07.25 08:03 Сейчас в теме
Такое в 1с не сделать. Какое такое?
Какую задачу нужно решить?
Ну примотал поле хтмл документа и чо?
Будто до тебя никто не делал.
Почему ты считаешь что это удобный интерфейс? Зачем тут загрузка номенклатуры если целью было показать супер дерево (неудобное).
На любой платформе работать не будет. Попробуй на 8.3.13 например.
В общем вопросов больше чем ответов.
4. user625107_barabambler1s 16.07.25 11:08 Сейчас в теме
Зачем я это прочел?
denis83; oveksKnaaz; 7OH; +3 Ответить
5. 7OH 70 16.07.25 12:19 Сейчас в теме
А где изначальное дерево ?
нафига 8.5, которая пока сама по себе УГ по интерфейсу пока
6. exitone 24 23.07.25 15:17 Сейчас в теме
Хейтеров прошу идти лесом туда откуда пришли и дальше.
Для отправки сообщения требуется регистрация/авторизация