Каталог решений - Формирование списка документов и скачивание печатной формы документа через веб-сайт с использованием HTTP-сервиса, плюс особенности авторизации

Формирование списка документов и скачивание печатной формы документа через веб-сайт с использованием HTTP-сервиса, плюс особенности авторизации

Формирование списка документов и скачивание печатной формы документа через веб-сайт с использованием HTTP-сервиса, плюс особенности авторизации

В наличии

В статье показан пример, как реализовать формирование списка документов клиента/пользователя по коду, а затем скачать его (документа) печатную форму по ссылке

Категория:

Описание

В продолжение публикации Реализация скачивания печатной формы документа через веб-сайт с использованием HTTP-сервиса , спасибо ув. ltfriend

Задача: По запросу вида http://<адрес_базы_1с>/hs/GetDocumentsPDF/list/<PIN&Date1&Date2> передавать список документов клиента со ссылками на скачивание по его Pin коду за период Date1-Date2. Выгрузка будет происходить из программы "Бухгалтерия Предприятия 3.0" (БСП 3). Выгружаем печатные формы Актов сверки, Реализаций и Счетов-фактур.

Создадим HTTP-сервис:

Так как http-сервис создавался в Расширении конфигурации, то добавим Подсистему и в нее включим наш сервис:

 

Шаблон №1. Получение списка документов Контрагента:

В созданный шаблон добавим HTTP-метод GET:

Обработчик этого метода:

 

Функция ПолучитьСписокДокументовGET(Запрос)	
	
	Ответ = Новый HTTPСервисОтвет(200);
	ПараметрыЗапроса = Новый Массив;
	Попытка
		ПараметрыЗапроса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Запрос.ПараметрыURL.Получить("PIN_Date1_Date2"),"&");
		Если ПараметрыЗапроса.Количество() <> 3 Тогда
			HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
			HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
			HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры'"));
			Возврат HTTPОтвет;
		Иначе
            //По условиям даты передаются в формате "20200101". Если иначе - меняем код.
			Попытка
				ПараметрыЗапроса[1] = Дата(ПараметрыЗапроса[1]+"000000");
				ПараметрыЗапроса[2] = Дата(ПараметрыЗапроса[2]+"235959");
			Исключение
				HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
				HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры даты'"));
				HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
				Возврат HTTPОтвет;
			КонецПопытки;	
		КонецЕсли;		
	Исключение
		HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры'"));
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		Возврат HTTPОтвет;
	КонецПопытки;
	
	ЗапросДокументов = Новый Запрос;
	ЗапросДокументов.УстановитьПараметр("Пин", ПараметрыЗапроса[0]);
	ЗапросДокументов.УстановитьПараметр("ДатаН", ПараметрыЗапроса[1]);
	ЗапросДокументов.УстановитьПараметр("ДатаК", ПараметрыЗапроса[2]);
	ЗапросДокументов.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","БиллингИД_Договоры"));
	ЗапросДокументов.Текст = 
	               "ВЫБРАТЬ ПЕРВЫЕ 1
	               |	ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка КАК Договор
	               |ПОМЕСТИТЬ ВТДоговоры
	               |ИЗ
	               |	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
	               |ГДЕ
	               |	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство
	               |	И ДоговорыКонтрагентовДополнительныеРеквизиты.Значение = &Пин
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	""АктСверкиВзаиморасчетов"" КАК Type,
	               |	АктСверкиВзаиморасчетов.Ссылка КАК Ref,
	               |	АктСверкиВзаиморасчетов.Номер КАК Number,
	               |	АктСверкиВзаиморасчетов.Дата КАК Date,
	               |	АктСверкиВзаиморасчетов.Представление КАК Present
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
	               |		ПО ВТДоговоры.Договор = АктСверкиВзаиморасчетов.ДоговорКонтрагента
	               |ГДЕ
	               |	АктСверкиВзаиморасчетов.Дата >= &ДатаН
	               |	И АктСверкиВзаиморасчетов.Дата <= &ДатаК
	               |	И АктСверкиВзаиморасчетов.Проведен
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	""РеализацияТоваровУслуг"",
	               |	РеализацияТоваровУслуг.Ссылка,
	               |	РеализацияТоваровУслуг.Номер,
	               |	РеализацияТоваровУслуг.Дата,
	               |	РеализацияТоваровУслуг.Представление
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	               |		ПО ВТДоговоры.Договор = РеализацияТоваровУслуг.ДоговорКонтрагента
	               |ГДЕ
	               |	РеализацияТоваровУслуг.Дата >= &ДатаН
	               |	И РеализацияТоваровУслуг.Дата <= &ДатаК
	               |	И РеализацияТоваровУслуг.Проведен
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	""СчетФактураВыданный"",
	               |	СчетФактураВыданный.Ссылка,
	               |	СчетФактураВыданный.Номер,
	               |	СчетФактураВыданный.Дата,
	               |	СчетФактураВыданный.Представление
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетФактураВыданный
	               |		ПО ВТДоговоры.Договор = СчетФактураВыданный.ДоговорКонтрагента
	               |ГДЕ
	               |	СчетФактураВыданный.Дата >= &ДатаН
	               |	И СчетФактураВыданный.Дата <= &ДатаК
	               |	И СчетФактураВыданный.Проведен";
	
    //В моем случае Pin - это дополнительный реквизит справочника договоры
    //Не закидывайте камнями раздел поиска Актов сверки. Клиент сказал, что по каждому договору
    //всегда отдельный акт, поэтому поиск по шапке (ну "Баба с возу...")
	Результат = ЗапросДокументов.Выполнить().Выгрузить();
	Результат.Колонки.Добавить("Link"); //Добавим колонку ссылки на скачивание
	Для Каждого Стр из Результат Цикл		
		Стр.Date = Строка(Стр.Date); //иначе не грузится в JSON
		Стр.Link = Запрос.БазовыйURL+"/download/"+XMLСтрока(Стр.Ref);
	КонецЦикла;
	Результат.Колонки.Удалить("Ref"); // ссылка на документ уже не нужна
	
    //Конвертируем в массив структур и закидываем в JSON
	МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(Результат);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	ЗаписатьJSON(ЗаписьJSON, МассивСтруктур); 
	
	СтрокаДляОтвета = ЗаписьJSON.Закрыть();
		
	Ответ = Новый HTTPСервисОтвет(200);	
	Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8"); //чтобы небыло ошибок с кодировкой русских букв
	
	Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
		
	Возврат Ответ;
	
КонецФункции

 

Шаблон №2. Почти ничем не отличается от приведенной выше публикации:

В созданный шаблон добавим HTTP-метод GET:

Обработчик этого метода:


Функция ПолучитьПечатнуюФормуGET(Запрос)
	
	Попытка
		// Получим переданный в HTTP-запросе идентификатор документа.
		Идентификатор = Новый УникальныйИдентификатор(Запрос.ПараметрыURL["Ident"]);
	Исключение
		// Полученный параметр не смогли преобразовать в тип "УникальныйИдентификатор".
		HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Передан неверный идентификатор'"));
		Возврат HTTPОтвет;
	КонецПопытки;
	
	// Найдём документ по полученному идентификатору.
    // Т.к. набор типов ограничен - можно использовать данную конструкцию, Если по всей базе, 
    // то на Infostart встречаются обработки поиска по GUID с перебором
	ДокументСсылка = Документы.АктСверкиВзаиморасчетов.ПолучитьСсылку(Идентификатор);
	ТипДок = "АктСверкиВзаиморасчетов";
	Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
		ДокументСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Идентификатор);
		ТипДок = "РеализацияТоваровУслуг";
		Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
			ТипДок = "СчетФактураВыданный";
			ДокументСсылка = Документы.СчетФактураВыданный.ПолучитьСсылку(Идентификатор);
		КонецЕсли;
	КонецЕсли;	
	
    // на всякий случай, вдруг не найдено
	Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
		// Документ с таким уникальным идентификатором не существует.
		HTTPОтвет = Новый HTTPСервисОтвет(404); // 404 - Not Found
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Документ не найден'"));
		Возврат HTTPОтвет;
	КонецЕсли;

	//Область формирования Печатных форм - В Акте сверки процедура не экспортная, поэтому требуется обвязка в расширении
	#Область ФормированиеПечатнойФормыДокумента
	Если ТипДок = "АктСверкиВзаиморасчетов" Тогда
		
		МассивОбъектов = Новый Массив;
		МассивОбъектов.Добавить(ДокументСсылка);		
		ОбъектыПечати = Новый СписокЗначений;
		ПараметрыПечати = Новый Структура;
		ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
		
		// Вызов вспомогательной процедуры из расширения.
		ТабличныйДокумент = Документы.АктСверкиВзаиморасчетов.HttpСервисПечатныеФормы_ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);

	ИначеЕсли ТипДок = "РеализацияТоваровУслуг" Тогда

		МассивОбъектов = Новый Массив;
		МассивОбъектов.Добавить(ДокументСсылка);		
		ОбъектыПечати = Новый СписокЗначений;
		ОбъектыПечати.Добавить(ДокументСсылка, "Документ_1");
		ПараметрыПечати = Новый Структура;
		ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
		ПараметрыПечати.Вставить("ИмяПараметровПечати", "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТОРГ12");
		ТаблицаСведенийТОРГ12 = Документы.РеализацияТоваровУслуг.ПолучитьТаблицуСведенийТОРГ12(МассивОбъектов, Истина);

		// Вызов типовой процедуры печати документа.
		ТабличныйДокумент = ПечатьТорговыхДокументов.ПечатьТОРГ12(ТаблицаСведенийТОРГ12, ОбъектыПечати, ПараметрыПечати)

	ИначеЕсли ТипДок = "СчетФактураВыданный" Тогда

		МассивОбъектов = Новый Массив;
		МассивОбъектов.Добавить(ДокументСсылка);		
		ОбъектыПечати = Новый СписокЗначений;
		ПараметрыПечати = Новый Структура;
		ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
		//ТекстЗапросаПечатьСчетовФактур = Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(,,Истина);
		// Вызов типовой процедуры печати документа.
		ПорядокПримененияФормСФ = 
			УчетНДСПереопределяемый.СоответствиеВерсийПостановленияФормамСчетовФактур();
		ТипМакета = ПолучитьМакетСФ(ДокументСсылка);
		Если ТипМакета = "КорректировочныйСчетФактура534Прослеж" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур534Прослеж(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура534Прослеж"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура534" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур534(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура534"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура981" Тогда	
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур981(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура981"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура952" Тогда	
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур952(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура952"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура1137" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур1137(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура1137"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура981Аванс" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьКорректировочныхСчетовФактур981Аванс(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура981Аванс"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "СчетФактура534Прослеж" Тогда	
			ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур534Прослеж(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура534Прослеж"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "СчетФактура534" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур534(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура534"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "СчетФактура981" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура981"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "СчетФактура1137" Тогда
			ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура1137"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "КорректировочныйСчетФактура" Тогда
			ТабличныйДокумент = УчетНДСБП.ПечатьКорректировочныхСчетовФактур(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьКорректировочныхСчетовФактур(ПорядокПримененияФормСФ["КорректировочныйСчетФактура"]), ПараметрыПечати);
		ИначеЕсли ТипМакета = "СчетФактура" Тогда
			ТабличныйДокумент = УчетНДСБП.ПечатьСчетовФактур(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура"]), ПараметрыПечати);
		Иначе
    		ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(ПорядокПримененияФормСФ["СчетФактура981"]), ПараметрыПечати);
		КонецЕсли;

	КонецЕсли;
	#КонецОбласти 
	
	// Запишем табличный документ в поток в памяти в формате PDF. Зачет автору Исходной публикации!
	Поток = Новый ПотокВПамяти;
	ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
	
	// Получим двоичные данные из потока для отправки клиенту
	ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
	
	#Область ОтправкаОтветаКлиенту
	
	// Сформируем имя файла, с которым печатная форма будет загружена у клиента.
	ИмяФайла = Строка(ДокументСсылка) + ".pdf";
	// Кодируем строку URL, чтобы избежать проблем с русскими буквами и другими символами (например, пробел).
	ИмяФайла = КодироватьСтроку(ИмяФайла, СпособКодированияСтроки.КодировкаURL);
	
	// Создадим ответ.
	HTTPОтвет = Новый HTTPСервисОтвет(200); // 200 - OK	
	
	HTTPОтвет.Заголовки.Вставить("Content-Type", "application/pdf"); // Чтобы браузер знал, что это PDF
	HTTPОтвет.Заголовки.Вставить("Content-Disposition", "attachment; filename=""" + ИмяФайла + """");
	
	HTTPОтвет.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные);	
	
	Возврат HTTPОтвет;
		
	#КонецОбласти 
	
КонецФункции

Функция ПолучитьМакетСФ(Объект)
	
	// Определим дату для получения версии печатной формы.
	Если ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураПолученный") Тогда 
		ДатаВерсии = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект, "ДатаВходящегоДокумента");
	Иначе
		РеквизитыСчетаФактуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект, 
			"Исправление, ВидСчетаФактуры, Дата, ДатаИсходногоДокумента, ДатаИсправляемогоКорректировочногоДокумента");
		Если РеквизитыСчетаФактуры.Исправление Тогда
			Если РеквизитыСчетаФактуры.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный Тогда 
				ДатаВерсии = РеквизитыСчетаФактуры.ДатаИсправляемогоКорректировочногоДокумента;
			Иначе
				ДатаВерсии = РеквизитыСчетаФактуры.ДатаИсходногоДокумента;
			КонецЕсли;
		Иначе
			ДатаВерсии = РеквизитыСчетаФактуры.Дата;
		КонецЕсли;
	КонецЕсли;
	
	Если УчетНДСПереопределяемый.ИспользуетсяПостановлениеНДС1137(ДатаВерсии) Тогда 
			
		ВерсияПостановленияНДС1137 = УчетНДСПереопределяемый.ВерсияПостановленияНДС1137(ДатаВерсии);
		
		Если Объект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный 
			ИЛИ Объект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыПолученного.Корректировочный Тогда
			
			Если ВерсияПостановленияНДС1137 >= 5 Тогда
				Если Объект.ЕстьПрослеживаемыеТовары Тогда
					Возврат "КорректировочныйСчетФактура534Прослеж";
				Иначе
					Возврат "КорректировочныйСчетФактура534";
				КонецЕсли;
			ИначеЕсли ВерсияПостановленияНДС1137 = 4 Тогда
				Возврат "КорректировочныйСчетФактура981";
			ИначеЕсли ВерсияПостановленияНДС1137 > 1 Тогда
				Возврат "КорректировочныйСчетФактура952";
			Иначе
				Возврат "КорректировочныйСчетФактура1137";
			КонецЕсли;
		ИначеЕсли Объект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.КорректировочныйНаАванс Тогда
			Если ВерсияПостановленияНДС1137 >= 5 Тогда
				Возврат "КорректировочныйСчетФактура534";
			Иначе
				Возврат "КорректировочныйСчетФактура981Аванс";
			КонецЕсли;
		Иначе
			Если ВерсияПостановленияНДС1137 >= 5 Тогда
				Если Объект.ЕстьПрослеживаемыеТовары Тогда
					Возврат "СчетФактура534Прослеж";
				Иначе
					Возврат "СчетФактура534";
				КонецЕсли;
			ИначеЕсли ВерсияПостановленияНДС1137 = 4 Тогда
				Возврат "СчетФактура981";
			Иначе
				Возврат "СчетФактура1137";
			КонецЕсли;
		КонецЕсли;
	Иначе
		Если Объект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный 
			ИЛИ Объект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыПолученного.Корректировочный Тогда
			Возврат "КорректировочныйСчетФактура";
		Иначе
			Возврат "СчетФактура";
		КонецЕсли;
	КонецЕсли;			
			
КонецФункции

Далее в ММ Акта сверки в расширении добавим вызов НЕэкспортной процедуры печати:


Функция HttpСервисПечатныеФормы_ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
	
	Результат = ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
	Возврат Результат;
	
КонецФункции

Таким образом при отправке запроса в браузере к опубликованной на Web-сервере базе (как опубликовать — гугл в помощь, статей — море) вида http://<адрес_базы_1с>/hs/GetDocumentsPDF/list/<PIN&Date1&Date2> мы получаем JSON структуру с готовыми ссылками на скачивание PDF-документов.

 

P.S. Теперь пару слов про авторизацию в 1С при таком подключении. При отправке запроса появляется окно авторизации:

Далее инструкция для сервера Apache 2.4. Для IIS — думаю не сильно сложнее.

Публикуем базу "Второй раз": в файле C:\Apache24\conf\httpd.conf (или другой путь как у вас) добавляем:

# 1c publication Основная
Alias "/YourBase_buh" "C:/www/YourBase_buh/"
<Directory "C:/www/YourBase_buh/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/www/YourBase_buh/default.vrd"
</Directory>

# 1c publication Для Http-сервиса
Alias "/YourBase_http" "C:/www/YourBase_http/"
<Directory "C:/www/YourBase_http/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/www/YourBase_http/default.vrd"
</Directory>

Перезапускаем службу web-сервера.

Теперь в файле C:/www/YourBase_http/default.vrd оставляем/добавляем следующее:

Логин пароль, выключаем обычный вход через Web : enable = "false".

Оставляем только http-сервисы: стандартные выключены, из расширений — включены. Если конфа измененная, то можно один оставить по имени.

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		base="/YourBase_http"
		ib="Srvr=&quot;127.0.0.1&quot;;Ref=&quot;YourBase_buh&quot;;Usr=HTTPService;Pwd=password" enable="false">
	<httpServices publishExtensionsByDefault="true">
		<service name="ExternalAPI"
				rootUrl="api"
				enable="false"
				reuseSessions="dontuse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="MobileAppReceiptScanner"
				rootUrl="MobileAppReceiptScanner"
				enable="false"
				reuseSessions="autouse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="ПередачаДанных"
				rootUrl="dt"
				enable="false"
				reuseSessions="use"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="ЭДО"
				rootUrl="edi"
				enable="false"
				reuseSessions="autouse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
	</httpServices>
</point>

 

Все!

has been added to your cart:
Оформление заказа