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

22.04.21

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

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

Файлы

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

Наименование Скачано Купить файл
API 1С:
.cfe 8,94Kb
2 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Идея в следующем, Сайт 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) Россия Платные (руб)

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

24000 руб.

19.12.2023    10713    59    14    

54

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

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

36000 руб.

03.08.2020    22049    32    24    

26

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

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    3067    4    6    

3

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

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

9600 руб.

27.04.2022    12612    22    3    

13

Файловый обмен (TXT, XML, DBF), FTP Сайты и интернет-магазины 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Загрузка файла YML (формат Yandex Market Language(YML) — собственный стандарт Яндекса, основанный на XML) в УТ11.5 Создание дерева номенклатуры, создание карточек номенклатуры и доп реквизитов, загрузка картинок в карточку. Оптимизировано для выгрузки в Битрикс. Возможна загрузка нескольких Фид - предусмотрено разделение по площадкам

7000 руб.

01.11.2024    1403    1    1    

2

Прайсы Оптовая торговля Ценообразование, анализ цен Сайты и интернет-магазины Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Управленческий учет Платные (руб)

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

6960 руб.

17.04.2017    33625    30    28    

43
Для отправки сообщения требуется регистрация/авторизация