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

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

См. также

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

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

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

1 стартмани

23.09.2022    6002    17    NikeeNik    16    

44

#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    7769    21    huxuxuya    29    

75

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

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

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

5 стартмани

13.07.2022    7538    9    kiv1c    5    

35

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

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

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

1 стартмани

16.06.2022    8554    24    user676027_svikator    5    

70

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

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

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

6 стартмани

17.05.2022    5710    35    kostyan7    20    

1

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

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

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

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

1 стартмани

02.05.2022    7986    124    Steelvan    0    

66

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

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

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

10 стартмани

29.04.2022    5831    31    ns_bulatov    4    

36

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

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

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

1 стартмани

02.02.2022    12031    38    ltfriend    9    

87

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

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

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

1 стартмани

02.02.2022    6441    1    Viktor_Ermakov    2    

34

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

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

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

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

1 стартмани

22.01.2022    8420    11    vl-sher1    29    

38

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

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

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

1 стартмани

15.11.2021    9127    37    kild    33    

29

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

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

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

1 стартмани

01.04.2021    17551    20    SaschaG    4    

64

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

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

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

1 стартмани

31.03.2021    23253    69    Parsec1C    20    

80

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

WEB-интеграция Платформа 1С v8.3 Абонемент ($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    17708    27    ltfriend    16    

34

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

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

3 500 рублей

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

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

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

1 стартмани

25.11.2020    77811    16    kandr    3    

6

Генератор маршрута по "документам отгрузки" в Google.Maps

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

Данная обработка будет полезна для построения маршрута по документам реализаций за выбранный период.

7 стартмани

08.11.2020    18055    18    quazare    22    

41

1С + react native

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

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

1 стартмани

09.10.2020    17003    12    van_za    9    

34

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

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

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

1 стартмани

02.10.2020    33118    9    hpi    18    

73

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

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

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

1 стартмани

31.08.2020    19597    19    dmitry-irk38    15    

38

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

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

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

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

2 стартмани

30.06.2020    17470    140    XilDen    19    

28

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

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

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

1 стартмани

29.06.2020    25201    28    shmalevoz    22    

89

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

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

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

1 стартмани

02.06.2020    13998    40    Denr83    0    

36

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

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

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

5 стартмани

25.05.2020    15506    3    Neti    10    

16

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

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

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

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

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

1 стартмани

20.04.2020    19629    12    zhichkin    19    

42

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

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

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

1 стартмани

15.02.2020    25708    62    terrorion    18    

59

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

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

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

4 стартмани

30.12.2019    30321    43    capitan    30    

1

Односторонний файловый обмен с сайтом по ftp (1C 2 Web)

Файловый обмен (TXT, XML, DBF), FTP WEB-интеграция Платформа 1С v8.3 1С:Розница 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

09.12.2019    21415    25    LamerSoft    0    

19

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Google drive - менеджер файлов

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

Синхронизация с гугл диском легко и просто!

10 стартмани

05.12.2019    33005    49    zykov_vitaliy    28    

45

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

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

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

1 стартмани

03.12.2019    15899    3    John_d    10    

27

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

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

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

1 стартмани

24.10.2019    21929    13    noprogrammer    12    

42

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

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

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

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

2 стартмани

14.08.2019    32733    73    kaliuzhnyi    48    

44

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

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

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

1 стартмани

12.08.2019    43371    92    MaxPowerr    7    

38

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

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

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

4 стартмани

08.07.2019    29474    46    miha-28    17    

41

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

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

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

10 стартмани

04.06.2019    27095    171    wtlz    96    

29