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

22.04.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
API 1С:
.cfe 8,94Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Идея в следующем, Сайт 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-сервис

См. также

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

20400 руб.

19.12.2023    4195    28    9    

27

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

В настоящее время система СБП очень часто стала использоваться в повседневной жизни. Одна из систем интеграции СБП через СБЕР. Данная конфигурация является инструментом интеграции СБП в Альфа Авто. Данная система не просто формирует статический QR, а динамический, а значит, в системе будет привязка и на покупателя, и на документ.

6000 руб.

25.10.2022    6126    31    4    

10

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

ВАЖНО: расширения не предназначены для модуля обмена Битрикс 8.х. Полный список ограничений см. ниже в разделе ОГРАНИЧЕНИЯ. Расширение предназначено для выгрузки на сайт Битрикс сопутствующих товаров, аналогов, рекомендованных и прочих связанных товаров.

3600 руб.

25.07.2018    45696    87    77    

95

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

Модуль выгрузки товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    17164    46    56    

40

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

Данный модуль предоставляет возможность выгружать заказы из 1С: Управление торговлей 11 версии в "MEASOFT" (ранее "Курьерская служба 2008").

9600 руб.

27.04.2022    11262    19    3    

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