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-клиент (через интернет-браузер).

22440 руб.

19.12.2023    6439    41    11    

37

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

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

24000 руб.

02.11.2024    919    4    0    

5

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

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

54000 руб.

10.09.2024    1132    2    4    

3

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

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

36000 руб.

03.08.2020    18787    20    22    

18

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

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31389    8    12    

30

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

Внешняя обработка адаптирована для 1C: УТ 11, предназначена для наполнения вашей базы данных товарами и сопутствующей информацией, предоставляемой b2b.4tochki.ru, обновления остатков и цен.

8160 руб.

31.01.2020    32121    15    7    

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