Общий модуль для быстрой организации HTTP сервиса (набор функций и процедур)

21.10.24

Разработка - Инструментарий разработчика

Информация о том, как быстро организовать HTTP сервис.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Общий модуль для организации HTTP сервиса:
.rar 14,12Kb
13
13 Скачать (1 SM) Купить за 1 850 руб.

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

В рамках разработки создан универсальный модуль с функциями, которые ускоряют и упрощают этот процесс.

Рассказ о том, как получился этот модуль, был сделан на Инфостарте 2024.

https://event.infostart.ru/2024/agenda/2190185/

Модуль предлагаю брать за 1 стартмани (100 рублей, труда в эти функции в часах разработчика вложено существенно больше), он постоянно развивается. Для меня это показатель, насколько актуально развитие этого модуля и ему подобных.

ОбщийМодуль состоит из 2 частей 

1. Функции для работы с HTTP Сервисом, проверка обязательных параметров, преобразование параметров, приведение к нижнему регистру, преобразование результата запроса в готовую структуру для кодировки в JSON (редактировать выданный результат можно через редактирование запроса в 1с)

2. Преобразование любого объекта 1с в структуру с детализацией по вложениям (любой справочник/документ можно преобразовать в структуру с информацией по вложенным объектам и выдать как готовый результат.) - удобно для интерграции или прямой выдачи объектов из 1с в сторонние системы. Может использоваться как элемент HTTP Сервиса или для самостоятельной выгрузки данных .

 

Часть 1. Быстрая Организация HTTP Сервиса. (Пошаговое описание)

1. Создаем единый входящий шаблон

 

 

Функция ОбщийШаблонGET(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);       
        
    ОтветАпи = {ОбщийМодульГдеБудутФормароватьсяОтветы}.ВыполнитьФункциюАпи(Запрос);    
    Ответ.УстановитьТелоИзСтроки(ОтветАпи);
    
    Ответ.Заголовки.Вставить("Accept","application/json");
    Ответ.Заголовки.Вставить("Content-Type","application/json");    
    Возврат Ответ;

КонецФункции

 

2. Создаем роутер входящих сообщений.

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

Функция ВыполнитьФункциюАпи(Запрос) экспорт
	
	
	ПараметрыURL = Запрос.ПараметрыURL;
	// /{resouse}/{comand}
		
	HTTPМетод = Запрос.HTTPМетод;
	resourse = ?(ПараметрыURL.получить("resourse") =Неопределено,Неопределено,нрег(ПараметрыURL.получить("resourse")));
	comand =   ?(ПараметрыURL.получить("comand")   =Неопределено,Неопределено,нрег(ПараметрыURL.получить("comand")));
	
	Если resourse = "apireqest" И comand = "list" тогда // шаблон с вумя значениями
		ОтветАпи = ФункцияОбрабатывающаяЗапрос(Запрос); 
	ИначеЕсли resourse = Неопределено И comand = "list" тогда // шаблон с 1 значением
		ОтветАпи = ФункцияОбрабатывающаяЗапрос(Запрос);
	ИначеЕсли resourse = Неопределено И comand = "list" тогда
		ОтветАпи = ФункцияОбрабатывающаяЗапрос(Запрос);
	Иначе	
		ОтветАпи = НегативныйОтвет("Не определена команда для выполнения");
	КонецЕсли;
	
	Возврат ОтветАпи;	
КонецФункции

 

3. Преобразовать параметры.
Далее входящие обязательные параметры можно преобразовать в конкретные значения.
 

Функция ПреобразоватьПараметры(СтрДанных) Экспорт
	
	массивОшибок = Новый массив;
	
	НоваяСтруктура = Новый Структура("Успех,Ошибка",Ложь,"");
	
	// дата
	Если СтрДанных.Свойство("date") тогда		
		Попытка
			ДатаДок = Дата(СтрДанных.date + " 00:00:00");
			НоваяСтруктура.Вставить("date",ДатаДок);
		Исключение
			массивОшибок.Добавить("Не удалось преобразовать дату date.");
		КонецПопытки;		
	КонецЕсли;
	
	
	// Дата начала
	Если СтрДанных.Свойство("datestart") тогда		
		Попытка
			ДатаДок = Дата(СтрДанных.datestart + " 00:00:00");
			НоваяСтруктура.Вставить("datestart",ДатаДок);
		Исключение
			массивОшибок.Добавить("Не удалось преобразовать дату datestart.");
		КонецПопытки;		
	КонецЕсли;
	
	// Датаокончания
	Если СтрДанных.Свойство("dateend") тогда		
		Попытка
			ДатаДок = Дата(СтрДанных.dateend + " 23:59:59");
			НоваяСтруктура.Вставить("dateend",ДатаДок);
		Исключение
			массивОшибок.Добавить("Не удалось преобразовать дату dateend.");
		КонецПопытки;		
	КонецЕсли;
		
	// Смотрим другие значения
		
	Если массивОшибок.Количество() > 0 Тогда
		НоваяСтруктура.Вставить("Успех",Ложь);
		Ошибка = СтрСоединить(массивОшибок,","); 
		НоваяСтруктура.Вставить("Ошибка",Ошибка);
		Возврат НоваяСтруктура;
	КонецЕсли;
	
	НоваяСтруктура.Успех = Истина;
	Возврат НоваяСтруктура;
КонецФункции

 

4. Создаем типовую функцию, которая обрабатывает итоговый ответ


В ней пошагово проверяем Обязательные параметры, преобразуем в значения.

Формируем запроса с именами полей как они должны быть выданы в итоговом ответе,
выполняем запрос  и с помощью функции ЗначениеРезультатаЗапросаВСтруктуру(РезультатЗапроса,МножественноеЗначение) получаем результирующую структуру/массив

Если это одно значение, то МножественноеЗначение = ложь и вам вернется структура первого значения

Если это выборка нескольких значений, тогда нужно указать МножественноеЗначение = Истина, вернется массив.

Итоговый ответ надо упаковать в НегативныйОтвет или ПозитивныйОтвет, которая преобразуют сформированный объект в JSON  в итоговый ответ в виде строки.

Итоговая функция, которая принимает запрос и выдает результат,  будет выглядеть следующим образом с этим модулем. 

Функция ДетализацияИспользованногоСырьяПоПекарнеЗаДень(HTTPЗапрос) Экспорт 
	
	мПараметров = Новый массив;
	мПараметров.Добавить("bakerycode");
	мПараметров.Добавить("date");
	мПараметров.Добавить("resourcecode");
	               
	
	Рез =  АпиСервисСервер.ПроверитьНаличиеОбязательныхПараметров(HTTPЗапрос,мПараметров);
	
	Если Рез.успех = ложь тогда
		Возврат НегативныйОтвет(Рез.ошибка);		
	КонецЕсли;
	
	Данные = Рез.Данные;
	
	ПреобразованныеПараметры = АпиСервисСервер.ПреобразоватьПараметры(Данные);
	
	Если ПреобразованныеПараметры.Успех = Ложь Тогда
		Возврат НегативныйОтвет(ПреобразованныеПараметры.Ошибка); 
	КонецЕсли;
			
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВЫБОР
		|		КОГДА ТИПЗНАЧЕНИЯ(ФактическийВыпускРасчетРасчетСписанногоСырья.Продукция) = ТИП(Справочник.Номенклатура)
		|			ТОГДА ""good""
		|		КОГДА ТИПЗНАЧЕНИЯ(ФактическийВыпускРасчетРасчетСписанногоСырья.Продукция) = ТИП(Справочник.Полуфабрикат)
		|			ТОГДА ""halfstuff""
		|		ИНАЧЕ """"
		|	КОНЕЦ КАК producttype,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Продукция.Код КАК productcode,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Продукция.Наименование КАК productname,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Сырье.Наименование КАК rawmaterialname,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Сырье.Код КАК rawmaterialcode,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Количество КАК resoursetotal,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.КоличествоПродукции КАК produced,
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.КоличествоНаЕдиницу КАК resoursetounit
		|ИЗ
		|	Документ.ФактическийВыпускРасчет.РасчетСписанногоСырья КАК ФактическийВыпускРасчетРасчетСписанногоСырья
		|ГДЕ
		|	ФактическийВыпускРасчетРасчетСписанногоСырья.Ссылка.ТорговаяТочка = &ТорговаяТочка
		|	И ФактическийВыпускРасчетРасчетСписанногоСырья.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
		|	И ФактическийВыпускРасчетРасчетСписанногоСырья.Ссылка.Проведен = ИСТИНА
		|	И ФактическийВыпускРасчетРасчетСписанногоСырья.Сырье = &Сырье";
	
	Запрос.УстановитьПараметр("ДатаН", НачалоДня(ПреобразованныеПараметры.date));
	Запрос.УстановитьПараметр("ДатаК", КонецДня(ПреобразованныеПараметры.date));
	Запрос.УстановитьПараметр("ТорговаяТочка", ПреобразованныеПараметры.bakerycode);
	Запрос.УстановитьПараметр("Сырье", ПреобразованныеПараметры.resourcecode);
	                                                
	РезультатЗапроса = Запрос.Выполнить();
	
	СтрРезультат = АпиСервисСервер.ЗначениеРезультатаЗапросаВСтруктуру(РезультатЗапроса,Истина);
	
	Возврат АпиСервисСервер.ПозитивныйОтвет(,СтрРезультат);
	
	
	
КонецФункции

 

2 Часть. Описание объекта в виде структуры

Надо отправить объект в функцию ПолучитьСтруктуруОбъекта(ссылкаНаобъект,Истина) вернется результат структуры объекта.

Возвращаемый объект буде в формате json (Пример - объект номенклатура из УНФ)

 

{
    "тип": "справочник",
    "уид": "0ba5b320-ecf2-11ee-b56d-00155d6fd10d",
    "код": "НФ-00000060",
    "естьиерархия": true,
    "родитель": "",
    "этогруппа": false,
    "владелец": "",
    "метаданные": "Номенклатура",
    "пометкаудаления": false,
    "артикул": "",
    "алкогольнаяпродукция": false,
    "вес": 0,
    "вариантограничениясертификата": {
        "тип": "перечисление",
        "наименование": "ВариантыОграниченийСкидокПоНоменклатуре",
        "значение": ""
    },
    "вариантпечатинабора": {
        "тип": "перечисление",
        "наименование": "ВариантыПечатиНаборов",
        "значение": ""
    },
    "верхняяграницаостатков": 0,
    "единицаизмерения": {
        "тип": "справочник",
        "уид": "6c4c9b97-c52f-11ee-b534-00155d6fd10e",
        "код": "796",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КлассификаторЕдиницИзмерения",
        "пометкаудаления": false
    },
    "весовой": false,
    "видалкогольнойпродукции": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ВидыАлкогольнойПродукции",
        "пометкаудаления": false
    },
    "видмаркировки": {
        "тип": "перечисление",
        "наименование": "ВидыМаркировки",
        "значение": "НеМаркируется"
    },
    "видпродукцииис": {
        "тип": "перечисление",
        "наименование": "ВидыПродукцииИС",
        "значение": ""
    },
    "автоматическигенерироватьпартии": false,
    "выписыватьгарантийныйталон": false,
    "высота": 0,
    "гарантийныйсрок": 0,
    "датаизменения": "17.10.2024 18:43:25",
    "датаокончаниядействия": "01.01.0001 0:00:00",
    "длина": 0,
    "использоватьсерииноменклатуры": false,
    "изготовитель": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "СтруктурныеЕдиницы",
        "пометкаудаления": false
    },
    "импортнаяалкогольнаяпродукция": false,
    "исключитьизпрайслистов": false,
    "использоватьдатупроизводствапартии": false,
    "использоватьзаписьскладскогожурналаветиспартии": false,
    "использоватьидентификаторпартииветиспартии": false,
    "использоватьномерпартии": false,
    "использоватьпартии": false,
    "использоватьпроизводителяветиспартии": false,
    "наименованиеполное": "наименование",
    "использоватьсрокгодностипартии": false,
    "использоватьхарактеристики": false,
    "категорияноменклатуры": {
        "тип": "справочник",
        "уид": "e2b4776b-df89-11ee-b55a-00155d6fd10d",
        "код": "НФ-000001",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КатегорииНоменклатуры",
        "пометкаудаления": false
    },
    "кизгисм": false,
    "кизгисмgtin": "",
    "кизгисмвид": {
        "тип": "перечисление",
        "наименование": "ВидыКиЗГИСМ",
        "значение": ""
    },
    "кизгисмразмер": {
        "тип": "перечисление",
        "наименование": "РазмерыКиЗГИСМ",
        "значение": ""
    },
    "кизгисмспособвыпускавоборот": {
        "тип": "перечисление",
        "наименование": "СпособыВыпускаВОборотГИСМ",
        "значение": ""
    },
    "кодмедицинскогоизделия": "",
    "количествопериодовдействия": 0,
    "комментарий": "",
    "крепость": 0,
    "методоценки": {
        "тип": "перечисление",
        "наименование": "МетодОценкиЗапасов",
        "значение": "ПоСредней"
    },
    "странапроисхождения": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "СтраныМира",
        "пометкаудаления": false
    },
    "направлениедеятельности": {
        "тип": "справочник",
        "уид": "6c4c9b98-c52f-11ee-b534-00155d6fd10e",
        "код": "000000001",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "НаправленияДеятельности",
        "пометкаудаления": false
    },
    "недействителен": false,
    "нижняяграницаостатков": 0,
    "номинал": 0,
    "нормавремени": 0,
    "обувнаяпродукция": false,
    "объем": 0,
    "объемдал": 0,
    "периодичность": {
        "тип": "перечисление",
        "наименование": "Периодичность",
        "значение": ""
    },
    "подконтрольнаяпродукцияветис": false,
    "поставщик": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "Контрагенты",
        "пометкаудаления": false
    },
    "проверятьзаполнениепартий": false,
    "проверятьзаполнениехарактеристики": false,
    "производитель": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "Контрагенты",
        "пометкаудаления": false
    },
    "производительимпортералкогольнойпродукции": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "Контрагенты",
        "пометкаудаления": false
    },
    "произвольныйноминал": false,
    "реквизитдопупорядочиванияунф": 0,
    "рекомендуемзаказать": false,
    "склад": {
        "тип": "справочник",
        "уид": "46738cf9-c52f-11ee-b534-00155d6fd10e",
        "код": "00-000001",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "СтруктурныеЕдиницы",
        "пометкаудаления": false
    },
    "способограничениясертификата": {
        "тип": "перечисление",
        "наименование": "СпособыОграниченияПодарочныхСертификатов",
        "значение": ""
    },
    "способпополнения": {
        "тип": "перечисление",
        "наименование": "СпособыПополненияЗапасов",
        "значение": "Закупка"
    },
    "способрасчетаценынабора": {
        "тип": "перечисление",
        "наименование": "СпособыРасчетаЦеныНабора",
        "значение": ""
    },
    "средствоиндивидуальнойзащиты": false,
    "срокдействияфлагановинка": "01.01.0001 0:00:00",
    "срокисполнениязаказа": 1,
    "срокпополнения": 0,
    "видставкиндс": {
        "тип": "перечисление",
        "наименование": "ВидыСтавокНДС",
        "значение": "БезНДС"
    },
    "счетучетадоходов": {
        "тип": "ПланСчетов",
        "Код": "",
        "КодБыстрогоВыбора": "",
        "Наименование": ""
    },
    "счетучетазапасов": {
        "тип": "ПланСчетов",
        "Код": "10      ",
        "КодБыстрогоВыбора": "",
        "Наименование": "Сырье и материалы"
    },
    "счетучетазатрат": {
        "тип": "ПланСчетов",
        "Код": "20      ",
        "КодБыстрогоВыбора": "",
        "Наименование": "Незавершенное производство"
    },
    "табачнаяпродукция": false,
    "удалитьставкандс": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "СтавкиНДС",
        "пометкаудаления": false
    },
    "типсрокадействия": {
        "тип": "перечисление",
        "наименование": "СрокДействияПодарочныхСертификатов",
        "значение": "БезОграниченияСрока"
    },
    "тнвэдгисм": "",
    "товарнаяноменклатуравэд": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КлассификаторТНВЭД",
        "пометкаудаления": false
    },
    "толькоподдержкаостаткаприрасчетепотребностей": false,
    "удалитьспецификация": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "Спецификации",
        "пометкаудаления": false
    },
    "типноменклатуры": {
        "тип": "перечисление",
        "наименование": "ТипыНоменклатуры",
        "значение": "Запас"
    },
    "файлкартинки": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "НоменклатураПрисоединенныеФайлы",
        "пометкаудаления": false
    },
    "фиксированнаястоимость": true,
    "ценоваягруппа": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ЦеновыеГруппы",
        "пометкаудаления": false
    },
    "частичноепогашение": false,
    "шиныипокрышки": false,
    "ширина": 0,
    "этонабор": false,
    "этоновинка": false,
    "ячейка": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "Ячейки",
        "пометкаудаления": false
    },
    "подакцизныйтовар": false,
    "политикаучетасерий": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ПолитикаУчетаСерий",
        "пометкаудаления": false
    },
    "индивидуальныенастройкиполитикиучетасерий": false,
    "использоватьсрокгодностисерии": false,
    "использоватьдатупроизводствасерии": false,
    "точностьуказаниясрокагодностисерии": {
        "тип": "перечисление",
        "наименование": "ТочностиУказанияСрокаГодности",
        "значение": ""
    },
    "использоватьуникальныесерии": false,
    "этоагентскаяуслуга": false,
    "договор": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": true,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ДоговорыКонтрагентов",
        "пометкаудаления": false
    },
    "срокгодности": 0,
    "единицаизмерениясрокагодности": {
        "тип": "перечисление",
        "наименование": "ЕдиницыИзмеренияВремени",
        "значение": ""
    },
    "прослеживаемыйтовар": false,
    "веспосертификатутовара": 0,
    "кодокпд2": "",
    "наборединицизмерения": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "НаборыЕдиницИзмерения",
        "пометкаудаления": false
    },
    "использоватьнаборыединицизмерения": false,
    "единицадляотчетов": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ЕдиницыИзмерения",
        "пометкаудаления": false
    },
    "коэффициентединицыдляотчетов": 1,
    "штрихкод": "",
    "кодтру": "",
    "прослеживаемыйкомплект": false,
    "признакпредметарасчета": {
        "тип": "перечисление",
        "наименование": "ПризнакиПредметаРасчета",
        "значение": "Товар"
    },
    "характеристикацен": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "ХарактеристикиНоменклатуры",
        "пометкаудаления": false
    },
    "запретитьвводдробногоколичества": false,
    "счетучетандспоприобретеннымценностям": {
        "тип": "ПланСчетов",
        "Код": "19          ",
        "КодБыстрогоВыбора": "",
        "Наименование": "НДС по приобретенным ценностям"
    },
    "счетучетандспореализации": {
        "тип": "ПланСчетов",
        "Код": "90.03       ",
        "КодБыстрогоВыбора": "",
        "Наименование": "Налог на добавленную стоимость"
    },
    "продаетсяврозлив": false,
    "единицадляценников": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КлассификаторЕдиницИзмерения",
        "пометкаудаления": false
    },
    "числитель": 0,
    "знаменатель": 0,
    "видподакцизноготовара": {
        "тип": "перечисление",
        "наименование": "ВидыПодакцизныхТоваров",
        "значение": ""
    },
    "кодвидаподакцизноготовара": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КодыВидовПодакцизныхТоваров",
        "пометкаудаления": false
    },
    "единицаизмерениядлярасчетаакциза": {
        "тип": "справочник",
        "уид": "",
        "код": "",
        "естьиерархия": false,
        "родитель": "",
        "этогруппа": false,
        "владелец": "",
        "метаданные": "КлассификаторЕдиницИзмерения",
        "пометкаудаления": false
    },
    "счетучетаакцизапоимпорту": {
        "тип": "ПланСчетов",
        "Код": "",
        "КодБыстрогоВыбора": "",
        "Наименование": ""
    },
    "коэффициентпересчета": 0,
    "ДополнительныеРеквизиты": [],
    "НоменклатураГруппыЦеновыеГруппы": []
}


Как использовать.

Скачать, добавить общий модуль, скопировать текст.

Модуль локализован, поэтому можно добавлять в чистую базу.

Если будут проблемы, пишите.

Тестировалась и работает на версии платформе 1С:Предприятие 8.3 (8.3.23.1912) на самописной конфигурации.

 

Доработал процедуры выдачи информации по справочнику.

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159310    872    399    

861

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7737    55    22    

66

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    23400    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10401    36    20    

61

SALE! 15%

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 19980 руб.

06.10.2023    15377    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187956    1138    0    

912

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

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

36000 руб.

03.08.2020    17778    19    22    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bayselonarrend 2087 21.10.24 15:46 Сейчас в теме
Вставлю свои 5 копеек) Все это как будто бы имеет право на жизнь, но то тут, то там случается какой-то meh

1.
Функция ОбщийШаблонGET(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);       
        
    ОтветАпи = {ОбщийМодульГдеБудутФормароватьсяОтветы}.ВыполнитьФункциюАпи(Запрос);    
    Ответ.УстановитьТелоИзСтроки(ОтветАпи);
    
    Ответ.Заголовки.Вставить("Accept","application/json");
    Ответ.Заголовки.Вставить("Content-Type","application/json");    
    Возврат Ответ;

КонецФункции
Показать


Заголовок Accept - это клиентский заголовок, сообщающий серверу, какой ответ клиент хочет получить в ответ на свой запрос. Т.е. смысла устанавливать его на сервере нет

2.
Если СтрДанных.Свойство("date") тогда		
		Попытка
			ДатаДок = Дата(СтрДанных.date + " 00:00:00");
			НоваяСтруктура.Вставить("date",ДатаДок);


Для работы с датой в веб технологиях, как правило, принято использовать стандарт ISO 8601 - это фактически общепринятый формат. Это, конечно, момент догвороной между пользователем и провайдером API, но даже просто в 1С его использовать куда легче и надежнее чем добавлять нули: для простого преобразования можно использовать XMLЗначение()/XMLСтрока(), а у ЗаписатьJSON и ПрочитатьJSON в настройках вообще можно указать ФорматДатыJSON.ISO и они сами все преобразуют

3.
НоваяСтруктура = Новый Структура("Успех,Ошибка",Ложь,"");


Описание успеха/неуспеха и ошибок в теле это нормальная практика, но главным показателем статуса общепринято является код. Код почему-то 200 на все случаи жизни


Ответ = Новый HTTPСервисОтвет(200); 


4. Ну и кириллические ключи в JSON это тоже не база) Клиенты, вызывающие API бывают разные и если это однажды окажется чем-то менее лояльным к русскому языку, чем другая 1С, то будут проблемы. Тут как минимум должно быть указание charset=UTF8 при установке Content-type, но даже его нету

Content-type: application/json; charset=utf-8


P.S ну и если уже совсем докапываться, то Ответ.УстановитьТелоИзСтроки(ОтветАпи); это неоптимальный способ записи JSON в ответ, т.к. и ЗаписьJSON и HTTPСеривсОтвет могут в потоки


    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьПоток(Ответ.ПолучитьТелоКакПоток());
    ЗаписатьJSON(ЗаписьJSON, Новый Структура("Поле", "Значение"));
    ЗаписьJSON.Закрыть();

dsdred; sergeevcorp; nightowl5; dabu-dabu; alex_sayan; artbear; triviumfan; thornhiven; wild83; aleksey2; ixijixi; +11 Ответить
2. uribur 165 21.10.24 16:08 Сейчас в теме
(1) Спасибо за добрые советы и 5 копеек ) Пересмотрю оптимизирую при следующей итерации
sapervodichka; user1216897; ixijixi; bayselonarrend; +4 Ответить
3. triviumfan 97 23.10.24 07:28 Сейчас в теме
(1) Обожаю комментарии, которые по своей смысловой нагрузке превосходят статью!
Ps: А ресурс то ещё живой!
alex_sayan; sapervodichka; +2 1 Ответить
8. sapervodichka 6912 23.10.24 13:20 Сейчас в теме
(3) главное начать, автор молодец начал, был на его докладе
10. uribur 165 23.10.24 14:52 Сейчас в теме
(3) Главное в них есть доброе пожелание и мысли с которыми надо поработать. Так и долно работать сообщество. )) Объять 1с порой невозможно ))
4. alex_sayan 51 23.10.24 09:18 Сейчас в теме
Так себе решение, если честно. Изобилует соглашениями с конкретной задачи под конкретный апи
6. uribur 165 23.10.24 11:01 Сейчас в теме
(4) Так себе коммент, если честно, претендует на полноценный ответ без какой либо фактологии. )
9. alex_sayan 51 23.10.24 14:26 Сейчас в теме
(6) у тебя сколько опыта работы с http-сервисами?
11. uribur 165 23.10.24 21:42 Сейчас в теме
(9) Коллега, никак не хотел вас задеть своим ответом выше, хотелось бы больше конкретных замечаний, "тут плохо, тут хорошо, а тут я бы сделал вот так", чтобы таким образом объединить наши общие знания в бОльший и качественный результат. Всегда буду признателен доброй критике и лишним 5 копейкам.
В любом случае спасибо Вам что оставили даже предыдущий комментарий.
12. alex_sayan 51 25.10.24 01:09 Сейчас в теме
(11) интеграция через http-сервисы вроде простая, но каждый случай как новый. Тот же json от сервиса к сервису может иметь свои особенности: одни выкидывают пустые свойства (для уменьшения размеров), у других структура "гибкая", третьи дату в каком-то особом формате шлют... Неблагодарное дело писать под всё это разнообразие кухонь библиотечный функционал
5. user2110848 23.10.24 10:25 Сейчас в теме
Боже мой, что это? только дочитав до конца и пролистав комментарии понял что это 1с ))) извините, но как-то очень непривычно видеть код на русском
7. sapervodichka 6912 23.10.24 13:11 Сейчас в теме
14. webester 26 18.11.24 05:56 Сейчас в теме
(5)
извините, но как-то очень непривычно видеть код на русском

Не переживай. Мы тебя простили.
13. dsdred 3593 06.11.24 23:20 Сейчас в теме
Серьезно? Это доклад на инфостарте такой был?

Повторяет 1 в 1 мои статьи про http-сервисы...
Только у меня поуниверсальнее в итоге вышло.
Подсистема: https://infostart.ru/1c/tools/2123781/
Примеры часть1: https://infostart.ru/1c/articles/1105206/

П.С. А, чуть не забыл. Подсистема бесплатная.
Оставьте свое сообщение