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
16
.epf 1.0 8,13Kb 16 Скачать
oData – HTTP-сервис для ленивых.: Обработка загрузки данных на Сервер

.epf 9,67Kb
11
.epf 9,67Kb 11 Скачать
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 60 14.05.20 11:39 Сейчас в теме
(2) Спасибо, не заметил! Это из ворда досталось. Сначала текст в нем собирал. Исправил.
4. пользователь 06.09.21 16:34
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

См. также

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Данная обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.

6000 руб.

02.02.2021    12674    28    43    

15

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ 3. Отчеты по данным загруженным в регистры сведений. Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен.

11856 руб.

25.05.2021    9699    6    4    

6

Драйвер облачной кассы для Бизнес.РУ Чеки

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

Универсальный драйвер для фискализации чеков для сервиса Бизнес.РУ. Чеки (https://online-check.business.ru/). Работает с любой кассой, подключенной к сервису, в том числе и без физической кассы (Аренда облачной ККТ в датацентре). Принцип работы аналогичен наличию физической кассы, подключенной к рабочему месту 1С. Фискализация выполняется с любого рабочего места через интернет. Нет ограничений на количество рабочих мест, касс, компьютеров. Поддерживает печать с нескольких рабочих мест на одну кассу. Работает в любой операционной системе (Windows, Linux) и в любом клиенте (Тонкий, Толстый, Web, Мобильный клиент).

6000 руб.

03.06.2021    10750    8    0    

5

Contragent+ 9.1 для 1С 8.2/8.3

Обработка справочников Обмен с ГосИС Взаиморасчеты WEB-интеграция Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Платные (руб)

Универсальная обработка для экспресс-регистрации новых и обновления реквизитов существующих элементов справочников «Контрагенты» & «Организации» по данным Федеральной Налоговой Службы РФ (ЕГРЮЛ&ЕГРИП). Минимизация ручного ввода и соответствие данных 1С учредительным сведениям юр. лиц & ИП.

3600 руб.

13.12.2012    88984    173    308    

248

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

10600 9540 руб.

28.05.2015    81703    25    51    

49

Прайс-лист с фотографиями, выгрузкой в Excel с подсчетом суммы заказа, загрузкой заказа в Управление торговлей 11 (Россия) и Управление торговлей для Беларуси 3

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

Прайс-лист для программы 1С: Управление торговлей 11 и Управление торговлей для Беларуси 3, позволяющий: 1) Формировать прайс-лист с фотографиями; 2) Сохранить прайс-лист в Excel с формулами, подсчитывающими количество и сумму заказа; 3) Передать сформированный прайс-лист по каналу ftp на сайт; 4) Сохранить прайс-лист в формате CSV; 5) Загрузить сделанный по прайс-листу заказ обратно в программу.

6000 руб.

04.09.2014    118041    42    105    

51

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    23126    7    0    

6

Расширение 1СПАРК риски для 1С:Документооборот 8 КОРП

WEB-интеграция Управление взаимоотношениями с клиентами (CRM) Документооборот и делопроизводство (СЭД) Взаиморасчеты Платформа 1С v8.3 1С:Документооборот Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для конфигурации 1С:Документооборот 8 КОРП, позволяющее с помощью сервиса "1СПАРК риски" проверять благонадежность контрагентов непосредственно из программы 1С.

7200 руб.

23.05.2018    27079    17    7    

14

Sync1C: Синхронизация 1С и OpenCart

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

Внешняя обработка для обмена данными с интернет-магазином OpenCart. Позволяет быстро наполнить магазин товарами, затем обновлять цены и добавлять новые товары. Далее можно средствами OpenCart настраивать и дополнять карточки товаров как надо для магазина, при этом связь товаров с 1С не теряется.

3840 руб.

30.03.2018    39850    73    133    

77

Справочник кодов ТНВЭД

Обработка справочников WEB-интеграция Операции по ВЭД Учет ТМЦ Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием Платные (руб)

Загрузка справочника ТНВЭД в базу данных 1С без изменения конфигурации. База кодов загружается с сайта www.nalog.ru или локального ресурса. После загрузки - справочник всегда под рукой! Реализован поиск по загруженной базе. Доступны примечания для групп справочника (комментарии налогового органа). Дополнительно реализовано занесение кодов ТНВЭД в справочники ИБ (например, справочник Номенклатура) как реквизита или свойства справочника. Подходит для всех стандартных конфигураций (БП 2.0, УПП 1.3, КА 1.1, УТ 10.3, Розница 1 и пр., написанных под обычные формы).

3100 руб.

29.09.2015    51971    13    4    

36

Загрузка google таблицы

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

Загрузим google таблицу через GET запрос.

1 стартмани

17.05.2023    4640    5    John_d    31    

76

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

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

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

5 стартмани

24.07.2022    10335    21    huxuxuya    29    

79

Яндекс.Метрика - загрузка статистики в 1С:Предприятие 8

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

Хорошая основа вашего решения импорта данных статистики Яндекс.Метрики в информационную базу 1С. Получение счетчиков, запрос статистики, получение данных - все в одной обработке.

3600 руб.

21.06.2022    6488    1    0    

3

Заполнение контрагентов по ИНН для УТ 10.3

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

Заполнение контрагентов по ИНН (1С: Управление торговлей 10.3).

6 стартмани

17.05.2022    7842    37    kostyan7    20    

1

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

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

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

1 стартмани

02.02.2022    14397    38    ltfriend    9    

89

Интеграция 1С:БИТ.Управление медицинским центром и amoCRM

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

Это законченное решение, которое позволяет в amoCRM получать данные о врачах и их свободном времени, в 1С создавать документ "Заявка", выгружать оплаты от клиента в лид. Тестировалось на конфигурации БИТ.Управление медицинским центром (2.0.46.43), платформа 1С:Предприятие 8.3 (8.3.16.1063), версия Python 3.10.1.

5400 руб.

28.01.2022    9601    1    2    

2

Обмен со СДЭК

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

Обработка позволяет производить обмен между 1С Альфа Авто 5.1 и СДЭК по протоколу API.

6000 руб.

21.12.2021    8683    1    0    

2

Интеграция с КОМТЕТ Касса Курьер

WEB-интеграция Учет ТМЦ Платформа 1С v8.3 1С:Управление торговлей 10 Платные (руб)

Внешняя обработка предназначена для интеграции конфигурации Управление торговлей 10.3 с веб-сервисом КОМТЕТ Касса Курьер. КОМТЕТ Касса Курьер это сервис с возможностью распределения заказов по курьерам, быстрой корректировке заказов в момент доставки, печати чеков по 54-ФЗ в момент расчета с покупателем.

3480 руб.

20.12.2021    7906    1    0    

1

Работа с 1С через протокол OData

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

В данной статье мы будем рассматривать работу с данными информационной базы через протокол OData (далее OData).

17.12.2021    35555    ProgrammingStore    27    

88

Подключение к HTTP-сервису с авторизацией посредством передачи клиентского SSL-сертификата

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

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

07.12.2021    11637    kholkin    12    

106

WEB/HTTP сервисы. Базовые отличия и применение на практике

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Рассказываем о WEB и HTTP сервисах, их практическом применении, о шишках, которые мы набили, и о выводах, которые сделали. Спойлер: тех, кто дочитает статью до конца, ждет бонус от автора.

04.10.2021    30448    Neti    23    

114

HTTP-клиент

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

Подсистема 1С для работы с HTTP.

1 стартмани

28.07.2021    17141    55    SpaceOfMyHead    51    

94

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

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

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

1 стартмани

31.03.2021    26129    71    Parsec1C    20    

83

Правила обмена больше не нужны

Внешние источники данных Обмен между базами 1C WEB-интеграция Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    19840    Nikola23    41    

80

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

WEB-интеграция Облачные сервисы, хостинг Платформа 1С v8.3 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    12923    comol    32    

108

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

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

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

1 стартмани

25.11.2020    83482    16    kandr    3    

6

Поиск номенклатуры в интернете (Розница 2.3, Управление торговлей 11.4)

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

Альтернатива сервису 1С Номенклатура, не требует подписки ИТС, ищет данные в открытых источниках. Для поиска товара по штрихкоду в сети интернет, полезно для первоначального заполнения базы.

1999 руб.

15.10.2020    15998    20    55    

23

Самый простой парсинг и обработка веб-страниц в 1С

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

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    25048    Infostart    30    

146