API 1С (получение отчета на стороне сайта по данным 1С)

22.04.21

Интеграция - Сайты и интернет-магазины

Вводная: На сайте есть личный кабинет контрагента, необходимо предоставить возможность формировать отчеты по взаиморасчетам по данным БП 3.0. Для этого был разработан HTTP-сервис. Сама тема создания HTTP-сервиса не нова, здесь не будет описано, что это и как это готовить. В данной статье описан подход к реализации данной задачи.

Скачать исходный код

Наименование Файл Версия Размер
API 1С:
.cfe 8,94Kb
2
.cfe 8,94Kb 2 Скачать

Идея в следующем, Сайт GET запросом отдает идентификатор контрагента (в нашем случае это просто ИНН), и на выходе получает файл отчета в формате двоичных данных, далее уже сайт обрабатывает эти данные и отображает их контрагенту.

Чтоб не изобретать велосипед и максимально использовать стандартный функционал за основу был взят стандартный механизм БСП "Рассылка отчетов". В Нем мы настраиваем рассылку отчета с вариантом "свой отчет для каждого получателя" (куда мы добавляем необходимый вариант отчета для контрагента) и благодаря этому в настройках у нас есть необходимый параметр для идентификации контрагента, который мы будем в дальнейшем использовать.

 

 

И теперь нам не надо ломать голову над  программным формированием  отчета на СКД, передачей параметров, созданием интерфейса для формирования настроек.

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

Ниже код модуля метода, в нем все самое интересное, также добавил сам файл расширения, если кому будет мало).

 

 

Функция ПолучитьОтчетАгентскиеВариант1ОтправитьОтчет(Запрос)
	ЗначенияПараметров = новый Структура;
	Для каждого Элемент ИЗ Запрос.ПараметрыURL цикл
		ЗначенияПараметров.Вставить(Элемент.Ключ,Элемент.Значение);
	КонецЦикла;
	
	табДок = СформироватьОтчетИСохранитьВФайл (ЗначенияПараметров);
	ИмяФайла = ПолучитьИмяВременногоФайла( "xls" );
	табДок.Записать( имяФайла, ТипФайлаТабличногоДокумента.xls );
	ДвоичныеДанные = Новый ДвоичныеДанные( имяФайла );
	УдалитьФайлы( имяФайла );
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.УстановитьТелоИзДвоичныхДанных( ДвоичныеДанные );
	Ответ.Заголовки.Вставить("Content-Type", "application/xlsx");
	Ответ.Заголовки.Вставить("Content-Disposition", "attachment; filename=" + КодироватьСтроку( "test.xls", СпособКодированияСтроки.КодировкаURL));
	Возврат Ответ;
КонецФункции

Функция СформироватьОтчетИСохранитьВФайл(ЗначенияПараметров)
	//1.получим необходимый вариант отчета
	ПараметрыОтчета = ПолучитьВариантОтчетаСНастройками(ЗначенияПараметров.reportid);
	//2 Инициализация отчета.
	РассылкаОтчетов.ИнициализироватьОтчет(Неопределено, ПараметрыОтчета, Истина); 
	//3 установим значение получателя
	// Заполнение персонализированных данных получателей.
	// Настройки подключения отчета.
	ПараметрыФормирования = Новый Структура;
	Получатель = Справочники.контрагенты.НайтиПоРеквизиту ("ИНН",ЗначенияПараметров.Beneficiarieid);
	Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда
		Если ПараметрыОтчета.СКД Тогда
			ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки;
			Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл
				Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ);
				Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
					Настройка.ПравоеЗначение = Получатель;
				ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
					Настройка.Значение = Получатель;
				КонецЕсли;
			КонецЦикла;
			ПараметрыФормирования.Вставить("ПользовательскиеНастройкиКД", ПользовательскиеНастройкиКД);
		Иначе
			Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл
				ПараметрыОтчета.Объект[КлючИЗначение.Ключ] = Получатель;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	ПараметрыФормирования.Вставить("Подключение", ПараметрыОтчета);
	Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Истина, Не ПараметрыОтчета.ОтправлятьЕслиПустой);
	Возврат  Формирование.ТабличныйДокумент ;
КонецФункции // СформироватьОтчетИСохранитьВФайл()



Функция ПолучитьВариантОтчетаСНастройками(ИмяОтчета)
	// определяем отчет по имени АПИ
	Если ИмяОтчета = "agent_var1" тогда
		НаименованиеНастроеннойРассылки = "АгентскиеАналитика_agent_var1";
		//ЗначениеВариантаОтчета = "ДетализацияРасчетовДоДокумента";
	КонецЕсли;
	////////////////////////////////
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	|	РассылкиОтчетовОтчеты.Ссылка КАК Ссылка,
	|	РассылкиОтчетовОтчеты.НомерСтроки КАК НомерСтроки,
	|	РассылкиОтчетовОтчеты.Отчет КАК Отчет,
	|	РассылкиОтчетовОтчеты.ОтправлятьЕслиПустой КАК ОтправлятьЕслиПустой,
	|	РассылкиОтчетовОтчеты.Настройки КАК Настройки
	|ИЗ
	|	Справочник.РассылкиОтчетов.Отчеты КАК РассылкиОтчетовОтчеты
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов
	|		ПО (РассылкиОтчетовОтчеты.Ссылка = РассылкиОтчетов.Ссылка)
	|ГДЕ
	|	РассылкиОтчетов.Наименование = &Наименование";
	Запрос.УстановитьПараметр("Наименование", НаименованиеНастроеннойРассылки);
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); 
	НайденныйОтчет = Новый Структура;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		НайденныйОтчет.Вставить("Отчет",ВыборкаДетальныеЗаписи.Отчет); 
		НайденныйОтчет.Вставить("ОтправлятьЕслиПустой",ВыборкаДетальныеЗаписи.ОтправлятьЕслиПустой);
		// Настройки
		Настройки = ВыборкаДетальныеЗаписи.Настройки.Получить();
		Если ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда
			ИтоговыеНастройки = Новый Структура;
			Найденные = Настройки.НайтиСтроки(Новый Структура("Использование", Истина));
			Для Каждого СтрокаНастройка Из Найденные Цикл
				ИтоговыеНастройки.Вставить(СтрокаНастройка.Реквизит, СтрокаНастройка.Значение);
			КонецЦикла;
		Иначе
			ИтоговыеНастройки = Настройки;
		КонецЕсли;
		//////////
		НайденныйОтчет.Вставить("Настройки",ИтоговыеНастройки);
	КонецЦикла;
	Возврат	НайденныйОтчет
КонецФункции // ПолучитьВариантОтчета()

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

Тестировалось на версии БП 3.0.88.28.
Платформа 8.3.18.1289.

API ; HTTP-сервис

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

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

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    8309    126    74    

78

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    15936    13    18    

13

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1542    12    3    

10

Обмен данными с сайтом. БП 3.0

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

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31524    111    100    

64

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17893    6    15    

12

Универсальный парсер интернет-магазинов

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

С того времени, как я начал парсить сайты, прошло много лет. За это время я спарсил более 100 сайтов и записал эти товары в 1С. В итоге на свет появился универсальный парсер, который поможет Вам спарсить интернет-магазин и при этом не написать ни строчки кода.

9600 руб.

19.10.2018    52198    220    99    

111
Оставьте свое сообщение