oData – HTTP-сервис для ленивых.

Публикация № 1234139 10.05.20

Интеграция и обмен данными - WEB-интеграция

oData HTTP HTTP-сервис GET POST PUT PATCH StandardODATA 1C_OData-DataLoadMode БИТ.ФИНАНС БП3.0 JSON

oData одним из последних появился в инструментах интеграции поддерживаемых платформой 1С. В данной статье хотел бы показать пример его использования. О преимуществах и недостатках oData предлагаю поделиться в комментариях исходя из реального опыта использования. Цель публикации. Дать разработчикам простой инструментарий обмена между идентичными конфигурациями.
  1. Вводная часть. О сервисе, его месте, статьях и цели публикации.

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

Цель публикации. Дать разработчикам простой инструментарий обмена между идентичными конфигурациями.

 

  1. Что делает обработка простым языком.

Итак, задача в которой я решил использовать REST-сервис (oData) был обмен документами идентичных конфигураций. В решении есть обработка реквизитов присущих только документам, с которыми мне пришлось работать, но большая часть реквизитов заполняется по универсальным правилам.

Обмен состоит из двух частей:

  1. Часть. Получение с сервера из регистра сведений документов, запись их на клиенте, очистка записей регистра сведений сервера.
  2. Часть. Отправка с клиента на сервер документов. Регистр присутствует и здесь, но т.к. oData никак не участвует в его обработке, то описывать его не буду.

Резюмируя, методы работы с oData в нашем решении, мы рассмотрим:

А) Получение данных из регистра по отбору измерений.

Б) Обработка полученного JSON и запись документов.

В) Удаление записи регистра сведений по ключевым измерениям.

Г) Формирование тела запроса для записи документов на сервере.

Д) Перезапись документа, если он уже есть на сервере.

 

  1. Что делает обработка (ближе к коду):

    1. Небольшая вводная перед кодом.

Про установку Интернет-сервера (Apache, или IIS) есть много статей. Публикация базы делается через одну кнопку в меню Администрирование:

  

И установкой флага «Публиковать стандартный интерфейс OData»:

Я обычно при первых публикациях еще ставлю флаг «Публиковать доступ для клиентских приложений». Это дает возможность проверить опубликовалась ли база с помощью любого Интернет-Браузера, введя в строку адреса: «localhost/server_odata». Как вы правильно заметили, server_odata – это имя базы, которую мы только что опубликовали. Если все успешно, то в браузере появится окно авторизации 1С, или сразу пользовательский режим, если в базе нет пользователей. Браузер корректно распознает запросы oData, и можно использовать его в качестве просмотрщика Get-запросов. Также никто не отменял специальные просмотрщики  http-запросов, например Postman. А еще можно написать свою обработку с выводом результата запроса, например, в ПолеHTML.

Если у вас не пионерская платформа по использованию интерфейса oData, то нужно включить доступ на объекты базы-сервера.

Пример:            

	Массив = Новый Массив();
	Массив.Добавить(Метаданные.Документы.бит_ЗаявкаНаРасходованиеСредств);
	УстановитьСоставСтандартногоИнтерфейсаOData(Массив);

Так же можно просмотреть объекты, на которые открыт доступ:

Массив =  ПолучитьСоставСтандартногоИнтерфейсаOData();

Для Каждого ОбъектМетаданных Из Массив Цикл

    Сообщить(ОбъектМетаданных.ПолноеИмя());

КонецЦикла;

 

    1. Получение данных

Первая процедура «Обработать Регистр» (Листинг 1.) получает уникальные идентификаторы нужных нам объектов.

В Адресе запроса регистр пишем, как он называется в конфигураторе, например «ЦеныВалют» после слова «InformationRegister_», это будет выглядеть так: InformationRegister_ЦеныВалют. Обращение на чтение регистра происходит с помощью Get-запроса, поэтому все передается в параметрах и может быть записано одной строкой в браузере. В частности, наш запрос можно записать строкой:

localhost/server_odata/odata/standard.odata/InformationRegister_<Ваш регистр>?$filter=<Измерение регистра> eq '<Значение>'&$format=json

В данном примере мы используем фильтр по измерению регистра, оно записывается как в конфигураторе, со значением, указанном в апострофах, это такие запятые 'сверху'. Если тип измерения – перечисление, то записываем его как в конфигураторе. Например, «filter=СтавкаНДС eq 'БезНДС'». Слово «eq» обозначает равенство.

Далее мы работаем как с обычным HTTP-запросом. Получаем данные из тела запроса в формате JSON, об этом мы указали в параметрах запроса «&$format=json».

Далее преобразуем его в массив соответствий и обращением к нужному нам измерению (Объект), получаем УИД объекта, который необходимо получить.

Далее идет процедура «ПолучитьИОбработатьСсылку(СсылкаУИД)», которая с помощью УИД получает все данные нашего объекта бит_ЗаявкаНаРасходованиеСредств. В данном случае мы используем канонический запрос с использованием GUID, который получает конкретный объект. Запрос такой:  

«localhost/server_odata/odata/standard.odata/Document_бит_ЗаявкаНаРасходованиеСредств(guid'<СсылкаУИД>')?$format=application/json».

Обращаю ваше внимание на то, что в процедуре «Обработать Регистр» мы использовали функцию «ПрочитатьJSON» без параметров «"ФункцияВостановленияЧтения",ЭтаФорма,,Реквизиты». Связано это с тем, что в первой функции мы не преобразовывали данные из JSON и получали УИД в виде строки. В процедуре «ПолучитьИОбработатьСсылку(СсылкаУИД)» мы уже работаем с ссылкой.

Далее идет создание и заполнение документа. Для удобства преобразовал полученное из JSON соответствие в структуру, предварительно удалив из него строку с ключом "odata.metadata". Код процедуры преобразования «ПолучитьСтруктуруИзСоответствия» взял из Статьи не меняя.

Листинг 1.

(Листинг 1.)
Процедура ОбработатьРегистр()
	
	Адрес = "/server_odata/odata/standard.odata/InformationRegister_<Ваш регистр>";
	Путь = КаталогВременныхФайлов();
	СерверИсточник = "localhost";
	Фильтр = "?$filter="+"<Измерение регистра> eq '<Значение>'";
	ФорматJSON = "&$format=json";
	HTTPЗапрос = Новый HTTPЗапрос(Адрес + Фильтр + ФорматJSON);
	ИмяВхФайла = Путь + "temp.json";
	HTTP = Новый HTTPСоединение(СерверИсточник,,"<Пользователь>","<Пароль>");
	HTTPОтвет = HTTP.Получить(HTTPЗапрос, ИмяВхФайла);
	Если HTTPОтвет.КодСостояния= 200 Тогда
		Чтение = Новый ЧтениеJSON;
		Чтение.ОткрытьФайл(ИмяВхФайла);
		Данные = ПрочитатьJSON(Чтение, Истина,,,,,,);
		МассивСсылок = Новый Массив;
		МассивПолученный = Данные.Получить("value"); 
		Для Каждого Строка ИЗ МассивПолученный Цикл
			МассивСсылок.Добавить(Строка.Получить("Объект")); //Добавляем в массив значение УИД объекта из регистра строкой.
		КонецЦикла;	
	КонецЕсли;
	Если МассивСсылок.Количество() > 0 Тогда
		Для каждого СсылкаУИД ИЗ МассивСсылок Цикл
			ПолучитьИОбработатьСсылку(СсылкаУИД);
		КонецЦикла;	
	КонецЕсли;
	
КонецПроцедуры

Процедура ПолучитьИОбработатьСсылку(СсылкаУИД)

		Чтение = Новый ЧтениеJSON;
		
		СерверИсточник = "localhost";
		
Адрес = "/server_odata/odata/standard.odata/Document_бит_ЗаявкаНаРасходованиеСредств(guid'"+СсылкаУИД+"')?$format=application/json";		
		HTTPЗапрос = Новый HTTPЗапрос(Адрес);
		HTTP = Новый HTTPСоединение(СерверИсточник,,"<Пользователь>","<Пароль>");
		HTTPОтвет = HTTP.Получить(HTTPЗапрос);
		Если HTTPОтвет.КодСостояния= 200 Тогда
			
			СтрокаОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
			
			Чтение.УстановитьСтроку(СтрокаОтвета);
			Реквизиты = Новый Массив;
			Реквизиты.Добавить("Ref_Key");
			Данные = ПрочитатьJSON(Чтение, Истина,,,"ФункцияВостановленияЧтения",ЭтаФорма,,Реквизиты);
			Ссылка = Документы.бит_ЗаявкаНаРасходованиеСредств.ПолучитьСсылку(Данные["Ref_Key"]);
			
			Данные.Удалить("odata.metadata"); //Нужно, чтобы преобразовать соответствие в структуру
			
			ДанныеЗаполнения = ПолучитьСтруктуруИзСоответствия(Данные);
			
			Если Ссылка = Документы.бит_ЗаявкаНаРасходованиеСредств.ПустаяСсылка() Тогда
				Заявка = Документы.бит_ЗаявкаНаРасходованиеСредств.СоздатьДокумент();
			Иначе;
				Заявка = Ссылка.ПолучитьОбъект();
			КонецЕсли;
			
				Заявка.ОбменДанными.Загрузка = Истина;
				
				ЗаполнитьЗначенияСвойств(Заявка, ДанныеЗаполнения);
				
				Заявка.Распределение.Очистить();
				ДанныеТЧ = ПолучитьСтруктуруИзСоответствия(Данные.Получить("Распределение"));
				Для каждого СтрокаРаспределения ИЗ ДанныеТЧ Цикл
					НоваяСтрокаРаспределения = Заявка.Распределение.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрокаРаспределения, СтрокаРаспределения);
				КонецЦикла;
				
				Попытка
				
					Заявка.Записать();
				
				Исключение
				
				КонецПопытки;
		КонецЕсли;

КонецПроцедуры

Функция ПолучитьСтруктуруИзСоответствия(ЗначВход) Экспорт
 
 СтруктураВозврат=Новый Структура;
 
 Если ТипЗнч(ЗначВход)=Тип("Соответствие") Тогда
  
  ФлагОщибка=Ложь;
  
  Для Каждого р Из ЗначВход Цикл
   Попытка
    СтруктураВозврат.Вставить(р.Ключ,ПолучитьСтруктуруИзСоответствия(р.Значение));
   Исключение
    ФлагОщибка=Истина;
    Прервать;
   КонецПопытки;
  КонецЦикла;
  
   Если ФлагОщибка Тогда // пришел ключь который не возможно поместить в структуру
   СтруктураВозврат = Новый Массив;
   Для Каждого р Из ЗначВход Цикл
    ДопСтруктура=Новый Структура;
    ДопСтруктура.Вставить("Ключ",р.Ключ);
    ДопСтруктура.Вставить("Значение",ПолучитьСтруктуруИзСоответствия(р.Значение));
    СтруктураВозврат.Добавить(ДопСтруктура);
   КонецЦикла;
  КонецЕсли;
  
  Возврат СтруктураВозврат; 
  
 ИначеЕсли ТипЗнч(ЗначВход)=Тип("Массив") Тогда
  
  НовыйМассив=Новый Массив;
  Для Каждого ЭлМ Из ЗначВход Цикл
   НовыйМассив.Добавить(ПолучитьСтруктуруИзСоответствия(ЭлМ));
  КонецЦикла;
  Возврат НовыйМассив;
  
 КонецЕсли;
 
 Возврат ЗначВход; 
 
КонецФункции

Функция ФункцияВостановленияЧтения (Свойство, Значение, ДополнительныеПараметры) Экспорт
	
	Если Свойство = "Ref_Key" Тогда
		Возврат Новый УникальныйИдентификатор(Значение);
	КонецЕсли;	

КонецФункции // ФункцияВостановленияЧтения()

 

    1. Отправка данных

Для отправки данных используется процедура «ЗаписатьСписаниеНаСервере». (Листинг 2)

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

Для начала нам нужно подготовить данные, которые мы будем передавать на сервер. Формат тот же JSON. Процедура формирования данных для отправки обратно их получению. Сначала создаем соответствие из необходимых реквизитов с нужными значениями. Откуда же взять имена ключей соответствия? Да оттуда же. Из прямого обращения к oData, например из строки браузера. Хоть мы и условились, что базы идентичны, все-таки, рекомендую получать структуру данных из базы сервера. Запрос нам уже знаком: «localhost/server_odata/odata/standard.odata/Document_СписаниеСРасчетногоСчета(guid'<СсылкаУИД>')?$format=application/json» Подставляем какой-нибудь из имеющихся УИДов базы сервера и видим имена. Секрет в том, что большая часть из них совпадают с именами реквизитов в конфигураторе. То есть, придумывать ключи и прописывать их в большинстве случаев не предется. В этом большой плюс и универсальность данных механизмов. Все описанные процедуры могут быть использованы для других объектов базы с небольшими изменениями. Но изменения все же есть.

Рассмотрим процедуру «ПолучитьСоответсвиеДокумента».

Вначале вставляем строку: «Стр.Вставить("odata.metadata", "http://localhost/server_odata/odata/standard.odata/$metadata#Document_СписаниеСРасчетногоСчета/@Element");» Без нее тоже работает, но мало ли.

Первое, что опишем «в рукопашную» - это реквизит «Контрагент». Дело в том, что контрагент имеет составной тип, поэтому необходимо передавать информацию о типе. Так как в нашем случае Контрагент всегда имеет тип контрагент, то тип его «захардкодим»:

Стр.Вставить("Контрагент_Type", "StandardODATA.Catalog_Контрагенты");

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

Само значение контрагента так же передается УИДом, но в ключе не пишем префикс «_Key».

Заполнение стандартных реквизитов происходит в функции «СоздатьОписанияОбязательнихРеквизитовДокумента» взятой из  Статьи без изменений.

Далее создаются три списка значений для дальнейшей обработки:

  1. СписокСсылок. Из него будут обрабатываться реквизиты ссылочного типа.
  2. СписокПеречисленией. Из него будут обрабатываться перечисления.
  3. СписокИсключений. Те реквизиты, которые не будут обрабатываться.

Примечание. Эти списки заполняются как для реквизитов документа, так и для реквизитов табличных частей.

Далее в процедуре «СоздатьОписанияДополнительнихРеквизитов» мы заполняем все оставшиеся реквизиты документа.

В процедуре в цикле обходятся метаданные документа. В отдельные процедуры вынесено заполнение перечислений, хотя, если сделать с ними несколько «приседаний», то, можно и их сделать универсальными.

Процедура «СоздатьОписанияТабличныхЧастей» чуть посложнее, тем, что надо обходить табличные части по отдельности и не забывать про номер строки, но принцип тот же.

После того, как мы сформировали соответствие реквизитов и преобразовали его в JSON с помощью объекта «ЗаписьJSON», передаем запрос на сервер с помощью метода ОтправитьДляОбработки(Post).

В коде состояния мы ожидаем получить число 201, что означает, что объект создан. Но не всегда код приходит именно таким. Про коды состояния можно найти дополнительную информацию в Интернете. Одним из возможных кодов, который можем получить, может быть код 500. Этот код означает серверную ошибку. Она не связана с передачей данных на сервер. Она связана с их обработкой на сервере. Скорее всего эта ошибка вызвана исключительной ситуацией. И в теле HTTP-ответа передается какая-то чатсь информации, которую мы бы видели на экране или в журнале регистрации, если бы работали непосредственно на сервере. Добавляем в строку условия на проверку кода 500 «И НЕ СтрНайти(HTTPОтвет.ПолучитьТелоКакСтроку(), "не уникально") = 0», что подсказывает о том, что ошибка вызвана наличием документа с данным номером. После этого мы получаем УИД объекта из базы сервера с фильтром по номеру и дате. Функция «ПолучитьАдресСписанияСGUID». И с данным УИДом отправляем все тот же запрос, который мы подготовили для создания объекта, только методом Изменить (Patch).

Примечание. Метод Записать (Put) отрабатывает, но он не записывает реквизиты, которые были пустыми. Узнал об этом опытным путем. На сервере ставил точки останова в процедурах ПриЗаписи и ПередЗаписью. В процедуре ПередЗаписью данные были, а в процедуре ПриЗаписи – уже нет.

Обращаю внимание на строку заголовка «Заголовки.Вставить("1C_OData-DataLoadMode", Истина);». Это строка переводит флаг «ОбменДанными.Загрузка» в значение «Истина»

Листинг 2.

Процедура ЗаписатьСписаниеНаСервере()
	
	ПараметрыЗаписи = Новый ПараметрыЗаписиJSON;
	
	Запись = новый ЗаписьJSON;
	Запись.УстановитьСтроку(ПараметрыЗаписи);
	
	СоответствиеДокумента = ПолучитьСоответсвиеДокумента(СсылкаДокумент);
	
	ЗаписатьJSON(Запись, СоответствиеДокумента);
	Данные = Запись.Закрыть();
	
	СерверИсточник = "localhost";
	Адрес = "/server_odata/odata/standard.odata/Document_СписаниеСРасчетногоСчета?$format=application/json";
		
    Заголовки = Новый Соответствие;
	Заголовки.Вставить("1C_OData-DataLoadMode", Истина);

	HTTPЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
	HTTP = Новый HTTPСоединение(СерверИсточник,,"<Пользователь>","1");
	HTTPЗапрос.УстановитьТелоИзСтроки(Данные);
	HTTPОтвет = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
	//Пытаемся создать документ
	Если HTTPОтвет.КодСостояния = 201 Тогда
		Сообщить("Списание создано!");
	Иначе 
		//Если документ не создан, то по коду ошибки и тексту в теле ответа определяем, что он может уже существовать
		Если  HTTPОтвет.КодСостояния = 500 
			И НЕ СтрНайти(HTTPОтвет.ПолучитьТелоКакСтроку(), "не уникально") = 0 Тогда
			
			//нужен канонический запрос (по ссылке) для перезаписи объекта
			//Получаем ссылку на документ по отбору Дата и Номер
			Адрес = ПолучитьАдресСписанияСGUID(СсылкаДокумент);
			HTTPЗапрос = Новый HTTPЗапрос(Адрес);
			HTTP = Новый HTTPСоединение(СерверИсточник,,"<Пользователь>","1");
			HTTPЗапрос.УстановитьТелоИзСтроки(Данные);
			//Отправляем запрос "Изменить(Patch)", т.к. "Записать (Put)" не перезаписывает пустые реквизиты.
			HTTPОтвет = HTTP.Записать(HTTPЗапрос);
			Если HTTPОтвет.КодСостояния = 200 Тогда
				Сообщить("Списание перезаписано!");
			Иначе
				Сообщить("Списание не записано. Код возврата: " + HTTPОтвет.КодСостояния + " по причине: " + HTTPОтвет.ПолучитьТелоКакСтроку());
			КонецЕсли;
		Иначе	
			Сообщить("Списание не создано. Код возврата: " + HTTPОтвет.КодСостояния + " по причине: " + HTTPОтвет.ПолучитьТелоКакСтроку());
		КонецЕсли;	
	КонецЕсли;	
КонецПроцедуры

Функция ПолучитьСоответсвиеДокумента(СсылкаДокумент)
	Стр = Новый Соответствие;
	Стр.Вставить("odata.metadata", "http://localhost/server_odata/odata/standard.odata/$metadata#Document_СписаниеСРасчетногоСчета/@Element");
	Стр.Вставить("Контрагент", Строка(СсылкаДокумент.Контрагент.УникальныйИдентификатор()));
	Стр.Вставить("Контрагент_Type", "UnavailableEntities.UnavailableEntity_9f6206b2-1ed6-423c-9b08-fd4978930c49");

	// соответствие стандартных реквизитов
		CписокCтандартныхРеквизитов  = СоздатьОписанияОбязательнихРеквизитовДокумента(СсылкаДокумент);
		Для Каждого ОписаниеРеквизита ИЗ CписокCтандартныхРеквизитов Цикл
			Стр.Вставить(ОписаниеРеквизита.Ключ, СокрЛП(ОписаниеРеквизита.Значение));	
		КонецЦикла;
		
		СписокСсылок = ПолучитьСписокСсылок();
		СписокПеречисленией = ПолучитьСписокПеречисленией();
		СписокИсключений = ПолучитьСписокИсключений();
		
		СписокДопРеквизитов  = СоздатьОписанияДополнительнихРеквизитов(СсылкаДокумент, СписокСсылок, СписокПеречисленией, СписокИсключений); 
		Для Каждого ОписаниеДопРеквизита ИЗ СписокДопРеквизитов  Цикл
			Стр.Вставить(ОписаниеДопРеквизита.Ключ, СокрЛП(ОписаниеДопРеквизита.Значение));	
		КонецЦикла;
		
		ОписаниеТабличныхЧастей = СоздатьОписанияТабличныхЧастей(СсылкаДокумент, СписокСсылок, СписокПеречисленией, СписокИсключений);
		Для каждого ТабЧасть ИЗ ОписаниеТабличныхЧастей Цикл
			Стр.Вставить(ТабЧасть.Ключ, ТабЧасть.Значение);
		КонецЦикла;
		
	Возврат(Стр);
КонецФункции

Функция СоздатьОписанияОбязательнихРеквизитовДокумента(СсылкаДокумент)
	
    МетаданныеДокумента = СсылкаДокумент.Метаданные(); 
	
	ОписаниеСтандарныхРеквизитов  = Новый Соответствие();
	
	Для Каждого СтандартнийРеквизит ИЗ МетаданныеДокумента.СтандартныеРеквизиты Цикл
		Если СтандартнийРеквизит.Имя = "Дата" Тогда	
			ОписаниеСтандарныхРеквизитов .Вставить("Date", НормализироватьКОбмену(СсылкаДокумент.Дата));
			
		ИначеЕсли СтандартнийРеквизит.Имя = "Номер" Тогда	
			ОписаниеСтандарныхРеквизитов .Вставить("Number", СокрЛП(СсылкаДокумент.Номер));
			
		ИначеЕсли СтандартнийРеквизит.Имя = "ПометкаУдаления" Тогда	
			ОписаниеСтандарныхРеквизитов .Вставить("DeletionMark", ?(СсылкаДокумент.ПометкаУдаления, "true", "false"));
			
		ИначеЕсли СтандартнийРеквизит.Имя = "Проведен" Тогда		
			ОписаниеСтандарныхРеквизитов .Вставить("Posted", ?(СсылкаДокумент.Проведен, "true", "false"));
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат ОписаниеСтандарныхРеквизитов
	
КонецФункции

Функция ПолучитьСписокСсылок()
	
	Перем Стр;
	
	Стр = Новый СписокЗначений();
	Стр.Добавить("Ответственный");
	Стр.Добавить("ПодразделениеДт");
	Стр.Добавить("НачислениеДивидендов");
	Стр.Добавить("РегистрацияВНалоговомОргане");
	Стр.Добавить("Налогоплательщик");
	Стр.Добавить("СтатьяДвиженияДенежныхСредств");
	Стр.Добавить("УдалитьФизЛицо");
	Стр.Добавить("Налог");
	Стр.Добавить("Организация");
	Стр.Добавить("СчетБанк");
	Стр.Добавить("СчетКонтрагента");
	Стр.Добавить("СчетОрганизации");
	Стр.Добавить("СчетУчетаРасчетовСКонтрагентом");
	Стр.Добавить("ПодразделениеОрганизации");
	Стр.Добавить("ДоговорКонтрагента");
	Стр.Добавить("ВалютаДокумента");
	Стр.Добавить("СчетУчетаРасчетовПоАвансам");
	
	Возврат Стр;

КонецФункции // ПолучитьСписокСсылок()

Функция ПолучитьСписокПеречисленией()
	
	Перем Стр;
	
	Стр = Новый СписокЗначений();
	Стр.Добавить("ВидОперации");
	Стр.Добавить("ВидНалоговогоОбязательства");
	Стр.Добавить("бит_мв_ВидОперации");
	Стр.Добавить("СпособПогашенияЗадолженности");
	
	Возврат Стр;

КонецФункции // ПолучитьСписокПеречисленией()

Функция ПолучитьСписокИсключений()
	
	Перем Стр;
	
	Стр = Новый СписокЗначений();
	Стр.Добавить("СубконтоДт1");
	Стр.Добавить("СубконтоДт2");
	Стр.Добавить("СубконтоДт3");
	Стр.Добавить("ДокументОснование");
	Стр.Добавить("ПлатежнаяВедомость");
	Стр.Добавить("Контрагент");
	Стр.Добавить("Сделка");
	Стр.Добавить("бит_Аналитика_1");
	Стр.Добавить("бит_Аналитика_2");
	Стр.Добавить("бит_Аналитика_3");
	Стр.Добавить("бит_Аналитика_4");
	Стр.Добавить("бит_Аналитика_5");
	Стр.Добавить("бит_Аналитика_6");
	Стр.Добавить("бит_Аналитика_7");
	Стр.Добавить("ПорядокОтраженияДохода");
	
	Возврат Стр;

КонецФункции // ПолучитьСписокИсключений()

Функция СоздатьОписанияДополнительнихРеквизитов(СсылкаОбъекта, СписокСсылочных = 0, СписокПеречисленией, СписокИсключений)
	
    МетаданныеЭтогоОбъекта  = СсылкаОбъекта.Метаданные(); 
	
	ОписаниеДопРеквизитов = Новый Соответствие();
	
	// теперь уже присутствуют ссылочные реквизиты
	Для Каждого ДопРеквизит ИЗ МетаданныеЭтогоОбъекта.Реквизиты Цикл	
		Если НЕ СписокИсключений.НайтиПоЗначению(ДопРеквизит.Имя) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Если НЕ СписокПеречисленией.НайтиПоЗначению(ДопРеквизит.Имя) = Неопределено Тогда
			Если ДопРеквизит.Имя = "ВидОперации" 
				ИЛИ ДопРеквизит.Имя = "бит_мв_ВидОперации"
				Тогда
				ЭлементПеречисления = НайтиПеречислениеВидОпераци(ДопРеквизит, СсылкаОбъекта);
				ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, Строка(ЭлементПеречисления.Имя));
				Продолжить;
			КонецЕсли;
			Если ДопРеквизит.Имя = "ВидНалоговогоОбязательства" Тогда
				ЭлементПеречисления = НайтиПеречислениеВидНалоговогоОбязательства(ДопРеквизит, СсылкаОбъекта);
				ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, Строка(ЭлементПеречисления.Имя));
				Продолжить;
			КонецЕсли;
		КонецЕсли;	
		
		
		Если СсылкаОбъекта[ДопРеквизит.Имя] = null Тогда // ВАЖНО у группы и элемента справочника (а у нас уже будут ссылки) не всегда "одинаковый" состав реквизита
			Продолжить;
		КонецЕсли;	
		Если Строка(ДопРеквизит.Тип) = "Число"  ИЛИ
			 Строка(ДопРеквизит.Тип) = "Строка" ИЛИ
			 Строка(ДопРеквизит.Тип) = "Булево" ИЛИ
			 Строка(ДопРеквизит.Тип) = "Дата"   Тогда
			 	ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, НормализироватьКОбмену(СсылкаОбъекта[ДопРеквизит.Имя])); 
				
		Иначе
			Попытка
				Если СписокСсылочных <> 0 Тогда
					Если СписокСсылочных.НайтиПоЗначению(ДопРеквизит.Имя) = Неопределено Тогда
						ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, СсылкаОбъекта[ДопРеквизит.Имя].Наименование);
					Иначе
						ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя + "_Key", Строка(СсылкаОбъекта[ДопРеквизит.Имя].УникальныйИдентификатор()));
					КонецЕсли;	
				Иначе
					ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, СсылкаОбъекта[ДопРеквизит.Имя].Наименование);	
				КонецЕсли;	
				
			Исключение
				Попытка
					ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, Строка(СсылкаОбъекта[ДопРеквизит.Имя]));
				Исключение
					ОписаниеДопРеквизитов.Вставить(ДопРеквизит.Имя, "");
				КонецПопытки;	
			КонецПопытки;	
			
		КонецЕсли;	
	КонецЦикла;
	
	Возврат ОписаниеДопРеквизитов
	
КонецФункции

Функция НайтиПеречислениеВидОпераци(Знач ДопРеквизит, Знач СсылкаОбъекта)
	
	Перем ЭлементПеречисления;
	
	Для каждого ЭлементПеречисления Из Метаданные.Перечисления.ВидыОперацийСписаниеДенежныхСредств.ЗначенияПеречисления Цикл
		Если ЭлементПеречисления.Синоним = Строка(СсылкаОбъекта[ДопРеквизит.Имя]) Тогда
			Прервать;
		КонецЕсли; 
	КонецЦикла;
	Возврат ЭлементПеречисления;

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

Функция СоздатьОписанияТабличныхЧастей(СсылкаОбъекта, СписокСсылочных = 0, СписокПеречисленией, СписокИсключений)
	
	МетаданныеЭтогоОбъекта = СсылкаОбъекта.Метаданные();
	
	ОписаниеТабличныхЧастей = Новый Структура();

	Для Каждого ТабличнаяЧасть ИЗ МетаданныеЭтогоОбъекта.ТабличныеЧасти Цикл
		//это будет передано в элемент соответствия документа 
		МассивСтрок = Новый Массив;
		//инициализируем список имен реквизитов ТЧ 
		СписокРеквизитовСтроки = Новый СписокЗначений();
		Для Каждого реквизитТЧ ИЗ ТабличнаяЧасть.Реквизиты Цикл
				СписокРеквизитовСтроки.Добавить(реквизитТЧ.Имя);
		КонецЦикла;
		//обходим строки
		Для еНомерСтроки = 1 По СсылкаОбъекта[ТабличнаяЧасть.Имя].Количество() Цикл			
			СтрокаТЧ = Новый Соответствие();
			
			СтрокаТЧ.Вставить("LineNumber", Строка(еНомерСтроки));
			Для Каждого ЕлСпискаРеквизитовСтроки ИЗ СписокРеквизитовСтроки Цикл
				
				Если НЕ СписокИсключений.НайтиПоЗначению(ЕлСпискаРеквизитовСтроки.Значение) = Неопределено Тогда
					Продолжить;
				КонецЕсли;	
					
				ЭтотКонкретныйЕлемент = СсылкаОбъекта[ТабличнаяЧасть.Имя][еНомерСтроки-1][ЕлСпискаРеквизитовСтроки.Значение];  		
				Если ТипЗнч(ЭтотКонкретныйЕлемент) = Тип("Число")  ИЛИ
					ТипЗнч(ЭтотКонкретныйЕлемент) = Тип("Строка") ИЛИ
					ТипЗнч(ЭтотКонкретныйЕлемент) = Тип("Булево") ИЛИ
					ТипЗнч(ЭтотКонкретныйЕлемент) = Тип("Дата")   Тогда
					НормализированыйКонкретныйЕлемент = НормализироватьКОбмену(ЭтотКонкретныйЕлемент);  					 
				Иначе
					Попытка
						НормализированыйКонкретныйЕлемент = ЭтотКонкретныйЕлемент.Наименование;  					 
					Исключение
						НормализированыйКонкретныйЕлемент = "";
					КонецПопытки;	
				КонецЕсли;
				
				//перечисления
				Если НЕ СписокПеречисленией.НайтиПоЗначению(ЕлСпискаРеквизитовСтроки.Значение) = Неопределено Тогда
					Если ЕлСпискаРеквизитовСтроки.Значение = "СпособПогашенияЗадолженности" Тогда
						ЭлементПеречисления = НайтиПеречислениеСпособПогашенияЗадолженности(ЕлСпискаРеквизитовСтроки, СсылкаОбъекта, ТабличнаяЧасть, еНомерСтроки-1);
						СтрокаТЧ.Вставить(ЕлСпискаРеквизитовСтроки.Значение, Строка(ЭлементПеречисления.Имя));
						Продолжить;
					КонецЕсли;
				КонецЕсли;	

				//ссылки
				Если СписокСсылочных <> 0 Тогда
					Если СписокСсылочных.НайтиПоЗначению(ЕлСпискаРеквизитовСтроки.Значение) = Неопределено Тогда
						СтрокаТЧ.Вставить(ЕлСпискаРеквизитовСтроки.Значение, НормализированыйКонкретныйЕлемент);
					Иначе
						СтрокаТЧ.Вставить(ЕлСпискаРеквизитовСтроки.Значение + "_Key", Строка(ЭтотКонкретныйЕлемент.УникальныйИдентификатор())); // ссылочный реквизит
					КонецЕсли;	
				Иначе
					СтрокаТЧ.Вставить(ЕлСпискаРеквизитовСтроки.Значение, НормализированыйКонкретныйЕлемент);
				КонецЕсли;
			КонецЦикла;	
			МассивСтрок.Добавить(СтрокаТЧ);	
		КонецЦикла;	
		ОписаниеТабличныхЧастей.Вставить(ТабличнаяЧасть.Имя, МассивСтрок);
		
	КонецЦикла;
	
	Возврат ОписаниеТабличныхЧастей;
	
КонецФункции

Функция НайтиПеречислениеСпособПогашенияЗадолженности(Знач РеквизитТЧ, Знач СсылкаОбъекта, ТабличнаяЧасть, НомерСтроки)
	
	Перем ЭлементПеречисления;
	
	Для каждого ЭлементПеречисления Из Метаданные.Перечисления.СпособыПогашенияЗадолженности.ЗначенияПеречисления Цикл
		Если ЭлементПеречисления.Синоним = Строка(СсылкаОбъекта[ТабличнаяЧасть.Имя][НомерСтроки][РеквизитТЧ.Значение]) Тогда
			Прервать;
		КонецЕсли; 
	КонецЦикла;
	Возврат ЭлементПеречисления;

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

Функция НормализироватьКОбмену(ЭтотРеквизит)
	
	Если ТипЗнч(ЭтотРеквизит) = Тип("Число") Тогда
		Возврат СокрЛП(Строка(Формат(ЭтотРеквизит,"ЧРД=.; ЧГ=0")));		
		
	ИначеЕсли ТипЗнч(ЭтотРеквизит) = Тип("Строка") Тогда	
		Возврат СокрЛП(ЭтотРеквизит);
		
	ИначеЕсли ТипЗнч(ЭтотРеквизит) = Тип("Булево") Тогда	
		Возврат ?(ЭтотРеквизит, "true", "false");	
		
	ИначеЕсли ТипЗнч(ЭтотРеквизит) = Тип("Дата") Тогда		
		Возврат XMLСтрока(ЭтотРеквизит);
		
	КонецЕсли;	
	
КонецФункции
  1. Вместо заключения. В чем преимущества oData. В чем недостатки (мое незнание возможностей, или ограничения сервиса)

Преимущества. Интерфейс oData позволяет быстро настроить обмен документами, между идентичными конфигурации без изменения конфигурации сервера. Порог входа программиста для использования oData ниже чем у стандартного HTTP-сервиса и Web-сервиса. Основываюсь на том, что имена объектов уже определены, методы уже настроены на определенную функциональность, которую понимает сервер. Код минимальный и часть обмена можно писать, используя универсальные функции. Поэтому поддержка, модификация и масштабирование проще. 

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

P.S. В качестве примера прикрепил обработку скачивания заявки с сервера и создания документа на клиенте по УИДу. Переделал под типовую файловую демо-базу.
То же самое с создание документа на стороне сервера не удалось. Ошибка на сервере в процедуре "ОбработкаЗаполнения" без расшифровки. К отладке подключиться на сервере не смог. Возможно из-за того, что база файловая. Поэтому выкладываю как есть. Если нужен строительный материал, берите.

Тестировал на: 1С:Предприятие 8.3 (8.3.16.1148)
Бухгалтерия предприятия КОРП + БИТ.ФИНАНС 3.0 (3.0.43.240/3.1.26.5)
Исходник работал на измененной: Бухгалтерия предприятия КОРП + БИТ.ФИНАНС 3.0 (3.0.69.35/3.1.41.3)

Скачать файлы

Наименование Файл Версия Размер
oData – HTTP-сервис для ленивых.: Обработка получения данных с Сервера

.epf 8,13Kb
14
.epf 1.0 8,13Kb 14 Скачать
oData – HTTP-сервис для ленивых.: Обработка загрузки данных на Сервер

.epf 9,67Kb
8
.epf 9,67Kb 8 Скачать
oData – HTTP-сервис для ленивых.: Отображение УИД объекта

.epf 5,90Kb
6
.epf 5,90Kb 6 Скачать
oData – HTTP-сервис для ленивых.: Открытие доступа к oData на сервере

.epf 6,35Kb
7
.epf 6,35Kb 7 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 11.05.20 19:06
Сообщение было скрыто модератором.
...
2. 13jaguar 94 14.05.20 09:33 Сейчас в теме
Зачем после каждой функции/процедуры оператор "Q95"?
3. Forest83 56 14.05.20 11:39 Сейчас в теме
(2) Спасибо, не заметил! Это из ворда досталось. Сначала текст в нем собирал. Исправил.
4. пользователь 06.09.21 16:34
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

См. также

Получение/отправка сообщений RabbitMQ через REST API

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Простой пример получения и отправки сообщений в брокер сообщений RabbitMQ через REST API из 1С без сторонних компонент и middleware.

1 стартмани

23.09.2022    4615    9    NikeeNik    16    

#KafkaЭтоПросто: Kafka Adapter 1С (Confluent) - отправляем сообщения

Инструментарий разработчика Внешние источники данных WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Сегодня поднимем в docker kafka с confluent'om, а в 1С, в EDT загрузим проект из репозитория, создадим обработку, в которой несколькими строчками отправим сообщение в kafka через rest proxy и в confluent control center посмотрим на него. Если коротко, то: как отправить сообщение в Kafka несколькими строчками кода без компонент, регистраций и смс.

5 стартмани

24.07.2022    6435    18    huxuxuya    28    

Распознавание текста из изображений и PDF с помощью нейросетей Yandex Vision и 1С

Обработка документов WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Если вам нужно с помощью компьютерного зрения от Yandex быстро распознавать текст из документов и изображений, эта статья для вас!

5 стартмани

13.07.2022    6128    9    kiv1c    4    

Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

2 стартмани

30.06.2020    16436    136    XilDen    19    

Api идеи для начинающих

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Данная обработка подойдет тем, кто только начинает знакомиться с механизмами api в 1С. В обработке представлены взаимодействия с 12 простыми сайтами на примерах. Решения не затрагивают полной документации, а носят лишь ознакомительный характер. Делал на платформе 8.3.20.

1 стартмани

16.06.2022    7352    22    user676027_svikator    5    

Делаем табло в обозревателе из 1Ски с нуля за полчаса. Без бутстрапов, реактов и ангуляров. Жизнетрюки от kuzkov.info

Разработка внешних компонент WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

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

1 стартмани

02.05.2022    6987    124    Steelvan    0    

Обмен данными с Web-сервисами

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Обработка предназначена для быстрой настройки обмена данными с Web-сервисами из пользовательского интерфейса.

10 стартмани

29.04.2022    5062    28    ns_bulatov    4    

Модуль обмена с QIWI Промо

Банковские операции WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Управленческий учет Управленческий учет Абонемент ($m) Абонемент ($m)

Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.

5 стартмани

25.05.2020    14627    2    Neti    10    

Сервис push-уведомлений для 1С (Push Notification Service For 1C - PNS4OneS)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

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

1 стартмани

02.02.2022    10744    33    ltfriend    9    

Создание интерактивных обучающих курсов с помощью Vanessa Interactive

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

Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).

1 стартмани

02.02.2022    5892    1    Viktor_Ermakov    2    

BIM: взаимодействие с платформой Autodesk Forge Промо

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Строительство Строительство Абонемент ($m) Абонемент ($m)

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

1 стартмани

25.11.2020    74595    16    kandr    3    

Создание простых сайтов на основе http сервисов - tips and tricks

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Универсальный метод, html шаблоны, страницы с авторизацией и без, многоязычность, страница авторизации, etc.

1 стартмани

22.01.2022    7697    10    vl-sher1    29    

1Scan. Интеграция веб-клиента 1С с устройством Android (смартфон, планшет, ТСД)

Мобильная разработка WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Получение из Android устройства данных сканера штрихода, камеры, GPS, широковещательных сообщений и передача в код модуля формы 1С для дальнейшей обработки.

1 стартмани

15.11.2021    8295    36    kild    33    

Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.

1 стартмани

01.04.2021    16731    20    SaschaG    4    

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

WEB-интеграция Работа с интерфейсом Языки и среды Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021    21899    59    Parsec1C    20    

Отправка Push-уведомлений через сервис Firebase Cloud Messaging по протоколу FCM HTTP v1 API

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

При разработке нативного приложения Android для ТСД, в котором присутствует функционал отображения задач кладовщикам, созданных в 1С, возникла необходимость отправлять push-уведомления о появлении новых задач. Для отправки таких уведомлений было решено использовать сервис Firebase Cloud Messaging (FCM). Так как для 1С, в отличии от других языков программирования, не существует готовых библиотек, что вполне логично, то очевидным способом отправки является использование протокола HTTP. Однако, существующая информация в интернете в части 1С содержит только сведений об отправке push-уведомлений через этот сервис с использованием устаревшего протокола HTTP Firebase Cloud Messaging. Сам Google не рекомендует использовать данный протокол и настоятельно склоняет к переходу на новый протокол FCM HTTP v1 API. Что ж, пришлось разбираться самостоятельно.

1 стартмани

24.03.2021    16526    27    ltfriend    16    

"Учет штрафов ГИБДД" с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3 Промо

Обработка документов WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Управляемые формы Управляемые формы Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Бухгалтерский учет Бухгалтерский учет Управленческий учет Управленческий учет Абонемент ($m) Абонемент ($m)

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

4 стартмани

30.12.2019    29184    40    capitan    26    

1С + react native

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Пример реализации клиента для 1С на react native.

1 стартмани

09.10.2020    16236    11    van_za    9    

Учимся создавать http сервис (часть третья). Передача нескольких параметров в http сервис

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Пошаговое руководство по созданию http сервиса (часть третья). Передача нескольких параметров в http сервис, a также формирование сложных JSON строк.

1 стартмани

02.10.2020    30951    9    hpi    18    

Взаимодействие 1С со сторонними продуктами посредством REST и Golang (middleware). Часть 1 - RabbitMQ

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Часто 1С не может взаимодействовать со сторонними продуктами, например для шины предприятия RabbitMQ создают внешние компоненты. В статье предлагается новомодный подход REST API реализованный на приложении прокладке Middleware, язык тоже трендовый Golang. В статье немного познакомлю Вас с языком Golang, опишу интеграцию на стороне 1С (8.3.16.1502). Если статья зайдет, напишу как выгружать журнал регистрации по этой схеме в ElasticSearch

1 стартмани

31.08.2020    18077    17    dmitry-irk38    15    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

2 стартмани

30.03.2018    47034    115    Ditron    120    

HTTP сервисы по OpenAPI спецификациям

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Начинаем путь разработки HTTP сервисов с создания спецификаций OpenAPI. Автодокументация сервисов формата Swagger UI без зависимостей. Настройка сервисов в режиме предприятия.

1 стартмани

29.06.2020    24327    28    shmalevoz    22    

Конструктор HTTP-соединений в 1С (обычные и управляемые формы)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Управляемые формы Управляемые формы Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Иногда возникают мысли о том, чтобы прикрутить сервисы, связанные с HTTP-соединениями, в 1С. Необходимо писать обработку и анализировать результат.

1 стартмани

02.06.2020    13476    39    Denr83    0    

DaJet QL - расширяемый язык запросов

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

DaJet QL поддерживает практический полный синтаксис SQL Server 2005-2016. Кроме этого это расширяемый язык запросов. Обращение к объектам СУБД выполняется в терминах метаданных 1С. Доступ к возможностям этого языка запросов реализован в виде web api сервиса. Результаты запросов возвращаются в виде JSON.

1 стартмани

20.04.2020    19036    12    zhichkin    19    

Пример работы с Trello из 1С

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

Небольшая конфигурация содержит примеры обмена с онлайн-сервисом Trello.

1 стартмани

15.02.2020    25074    61    terrorion    18    

Проверка VAT номеров Промо

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Обработка для вызова сервиса проверка VAT номера.

1 стартмани

26.11.2018    25538    4    wtlz    1    

Автозаполнение адреса по КЛАДР в УПП при выгрузке контрагента с портала компании (API dadata)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Заведение, согласование контрагентов организовано на портале компании. Далее по web-сервису контрагенты выгружаются в УПП (юр.адрес и факт.адрес выгружаются строкой). Задача автоматизировать заполнение адреса в УПП по КЛАДР.

1 стартмани

03.12.2019    15356    3    John_d    10    

Работа с Яндекс-картами в 1С (вывод меток, прокладка маршрута, отображение балуна, вывод меток в кластеры) (обычное и управляемое приложение)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Управляемые формы Управляемые формы Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Работа с Яндекс-картами в 1С (управляемое приложение). Обработка показывает, как можно найти адреса на карте Яндекс, проложить маршрут.

2 стартмани

20.11.2019    31298    174    Denr83    0    

Конфигурация Парсер Сайтов Объявлений (Авито avito.ru) Промо

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Россия Россия Абонемент ($m) Абонемент ($m)

Вкратце: Например, вы можете автоматически несколько раз в день (любое заданное время) загружать свежие объявления в категории Телефоны (любой категории или произвольный запрос) и отправлять сообщения тем, которые содержат слово «iphone 6S» и цена ниже 50 000 руб. Затем отправлять себе на почту отчеты о загруженных объявлениях и результатах рассылки. А можете загружать данные в основную учетную систему.

21.03.2016    45101    0    capitan    21    

Яндекс сервисы [Расширение]

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)

1 стартмани

24.10.2019    21219    13    noprogrammer    12    

Выгрузка номенклатуры в социальную сеть Вконтакте

WEB-интеграция Оптовая торговля Розничная торговля Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Обработка для быстрой и легкой выгрузки товаров Вконтакт. Так просто еще не было)))

2 стартмани

14.08.2019    31887    73    kaliuzhnyi    48    

Работа с картой. Кадастровый учет (Росреестр). Тематические карты Промо

WEB-интеграция Рабочее место Платформа 1С v8.3 Платформа 1С v8.3 Управляемые формы Управляемые формы Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Внешняя обработка для работы с картами в 1С. Получения изображения с публичной кадастровой карты России, построения тематических карт

10 стартмани

31.08.2017    32854    32    vipchep    5    

Подключение к сайту и отправка или получение данных по API (POST, GET...) (с описанием кода)

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Простая обработка по отправке или получение данных с любого сервера главное знать ресурс (выполняемую функцию) и тело запроса.

1 стартмани

12.08.2019    41842    84    MaxPowerr    7    

Конфигурация для обмена данными (интеграционная шина)

Внешние источники данных WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

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

4 стартмани

08.07.2019    28751    45    miha-28    17    

Почта России - отправка и отслеживание, интеграция с Документооборот 8; УНФ

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

Выгрузка почтовых отравлений в личный кабинет отправки Почты России; отслеживание почтовых отправлений через Почту России; расширение для интеграции Документооборот 8, УНФ с Почтой России

10 стартмани

04.06.2019    26257    170    wtlz    96    

Пример использования REST API Яндекс Диска Промо

WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Пример использования REST API Яндекс Диска: чтение диска, добавление каталога, загрузка файла, скачивание файлов или каталогов, удаление файлов или каталогов.

1 стартмани

26.06.2018    44803    77    MKFreeUser    17    

Работа с публикациями "Инфостарт" Промо

Инфостарт WEB-интеграция Платформа 1С v8.3 Платформа 1С v8.3 Управленческий учет Управленческий учет Абонемент ($m) Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    35090    17    RocKeR_13    16