![]() |
|
HTTP Сервис | ☑ | ||
---|---|---|---|---|
0
MAPATNK2
naïve
27.07.16
✎
12:40
|
Здравствуйте. Такой вопрос. Как мне сохранить результат запроса в файл в HTTP сервисе. Вот мой код, он не полный. Главное, чтобы была возможность сохранить файл.
Функция HardVen(Запрос) Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8"); option = ОбщегоНазначения.ПолучитьПараметры(Запрос.ПолучитьТелоКакСтроку()); comment1 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment1")); comment2 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment2")); comment3 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment3")); Если comment1 = "1" тогда Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ | ЗаказПокупателя.Ссылка, | ЗаказПокупателя.Номер, | ЗаказПокупателя.Дата, | ЗаказПокупателя.Проведен, | ЗаказПокупателя.Ответственный.Наименование, | ЗаказПокупателя.СуммаДокумента, | ЗаказПокупателя.Контрагент.Наименование, | ЗаказПокупателя.Гарантия |ИЗ | Документ.ЗаказПокупателя КАК ЗаказПокупателя |ГДЕ | ЗаказПокупателя.Номер = &Номер И | ЗаказПокупателя.Контрагент.Код = &Код"; z=comment2; a=comment3; Запрос1.УстановитьПараметр("Номер",z); Запрос1.УстановитьПараметр("Код",a); Резик=Запрос1.Выполнить().Выгрузить(); СписокНоменклатуры1 = ""; Для Каждого стр Из Резик Цикл СписокНоменклатуры1 = СписокНоменклатуры1+"<tr><td>"+стр.Номер+"</td></tr>"; КонецЦикла; СтрокаВозврата= "<table border=""1"">"+СписокНоменклатуры1+"</table>"; ИначеЕсли comment1 = "2" тогда Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Номер, | РеализацияТоваровУслуг.Дата, | РеализацияТоваровУслуг.Проведен, | РеализацияТоваровУслуг.Склад.Наименование, | РеализацияТоваровУслуг.Ответственный.Наименование, | РеализацияТоваровУслуг.СуммаДокумента |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Номер = &Номер И | РеализацияТоваровУслуг.Контрагент.Код = &Код"; a=comment3; z=comment2; Запрос1.УстановитьПараметр("Номер",z); Запрос1.УстановитьПараметр("Код",a); Резик=Запрос1.Выполнить().Выгрузить(); СписокНоменклатуры2 = ""; Для Каждого стр Из Резик Цикл СписокНоменклатуры2 = СписокНоменклатуры2+"<tr><td>"+стр.Номер+"</td></tr>"; КонецЦикла; СтрокаВозврата= "<table border=""1"">"+СписокНоменклатуры2+"</table>"; ИначеЕсли comment1 = "3" ТОГДА Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ | ОплатаОтПокупателяПлатежнойКартой.Ссылка, | ОплатаОтПокупателяПлатежнойКартой.Дата, | ОплатаОтПокупателяПлатежнойКартой.Номер, | ОплатаОтПокупателяПлатежнойКартой.СуммаДокумента, | ОплатаОтПокупателяПлатежнойКартой.Ответственный.Наименование |ИЗ | Документ.ОплатаОтПокупателяПлатежнойКартой КАК ОплатаОтПокупателяПлатежнойКартой |ГДЕ | ОплатаОтПокупателяПлатежнойКартой.Номер = &Номер И | ОплатаОтПокупателяПлатежнойКартой.Контрагент.Код = &Код"; a=comment3; z=comment2; Запрос1.УстановитьПараметр("Код",a); Запрос1.УстановитьПараметр("Номер",z); Резик=Запрос1.Выполнить().Выгрузить(); СписокНоменклатуры3 = ""; Для Каждого стр Из Резик Цикл СписокНоменклатуры3 = СписокНоменклатуры3+"<tr><td>"+стр.Номер+"</td></tr>"; КонецЦикла; СтрокаВозврата= "<table border=""1"">"+СписокНоменклатуры3+"</table>"; КонецЕсли; //Таб = Новый ТаблицаЗначений; //Таб.Колонки.Добавить("Фрукт"); //Таб.Колонки.Добавить("Овощи"); //ТабДок1 = Новый ТабличныйДокумент; //Построитель = Новый ПостроительОтчета(); //Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таб); //Построитель.ВыводитьЗаголовокОтчета = Ложь; //Построитель.Вывести(ТабДок1); текФайл= новый ТекстовыйДокумент; текФайл.ВставитьСтроку(1,"Привет"); ИмяФайла = "c:\test26.txt"; текФайл.Записать(ИмяФайла); //ТабДок1.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS); //ЗапуститьПриложение(ИмяФайла); page = ОбщегоНазначения.ПолучитьШаблонСтраницы("Gone"); Ответ.УстановитьТелоИзСтроки(page+СтрокаВозврата); Возврат Ответ; КонецФункции |
|||
1
MAPATNK2
naïve
27.07.16
✎
12:41
|
Нужно, чтобы при нажатии на кнопку в браузере. Он сохранял документ на компьютер. Не важно какой. Как видно из кода я пытался сохранить и текстовый файл "привет". Подскажите как можно это сделать?
|
|||
2
badboychik
27.07.16
✎
13:03
|
надо заголовки установить правильные
|
|||
3
MAPATNK2
naïve
27.07.16
✎
13:03
|
(2) Всмысле? Где? Объясните подробней пожалуйста. Неделю голову ломаю.
|
|||
4
badboychik
27.07.16
✎
13:06
|
например "Content-Type: text/plain" если это текст
|
|||
5
MAPATNK2
naïve
27.07.16
✎
13:09
|
(4) Немножко не так поняли меня. Мне требуется в HTTP запросе сохранить документ в файл и отправить его по почте. К примеру я ввожу код контрагента, номер документа и тип, после чего нажимаю "отправить". Далее результат запроса с выбранными параметрами сохраняется в файл и отправляется по почте .
|
|||
6
Amfiaray
27.07.16
✎
13:23
|
(0) тебе надо в ответ отправить файл?
|
|||
7
MAPATNK2
naïve
27.07.16
✎
13:26
|
(6) КАк вариант Да.
|
|||
8
Amfiaray
27.07.16
✎
13:34
|
Я отправляю вот так:
HTTPОтвет = Новый HTTPСервисОтвет(200); XMLТекст = Новый ЗаписьXML; XMLТекст.УстановитьСтроку(); XMLТекст.ЗаписатьОбъявлениеXML(); XMLТекст.ЗаписатьНачалоЭлемента("root"); Запрос = Новый Запрос; Запрос.Текст = ""; Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл XMLТекст.ЗаписатьНачалоЭлемента("licevoy"); ВыборкаДеталей = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДеталей.Следующий() Цикл XMLТекст.ЗаписатьНачалоЭлемента("usluga"); XMLТекст.ЗаписатьАтрибут("naim", СокрЛП(ВыборкаДеталей.Услуга)); XMLТекст.ЗаписатьАтрибут("post", ВыборкаДеталей.Поставщик); XMLТекст.ЗаписатьАтрибут("saldo", СокрЛП(Формат(ВыборкаДеталей.Сумма, "ЧДЦ=2; ЧРГ=''"))); XMLТекст.ЗаписатьКонецЭлемента(); КонецЦикла; XMLТекст.ЗаписатьКонецЭлемента(); КонецЦикла; XMLТекст.ЗаписатьКонецЭлемента(); ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст(XMLТекст.Закрыть()); ИмяВременногоФайла = "ПутьКФайлу_"+Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd")+".xml"; ТекстДок.Записать(ИмяВременногоФайла); ИмяZIPФайла = " ПутьКФайлу _"+Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd")+".zip"; ЗаписьZIP = Новый ЗаписьZipФайла(ИмяZIPФайла); ЗаписьZIP.Добавить(ИмяВременногоФайла); ЗаписьZIP.Записать(); Ответ = Новый ДвоичныеДанные(ИмяZIPФайла); HTTPОтвет.УстановитьТелоИзДвоичныхДанных(Ответ); Возврат HTTPОтвет; |
|||
9
MAPATNK2
naïve
27.07.16
✎
13:39
|
(8) Спасибо, попробую. Просто ТекстДок.Записать(ИмяВременногоФайла);
вот эта строка не работает в моем коде. Он просто не реагирует. |
|||
10
Amfiaray
27.07.16
✎
13:44
|
А у пользователя под которым запускается 1с есть доступ в корень диска С:?
|
|||
11
MAPATNK2
naïve
27.07.16
✎
13:51
|
(10) Да есть.
|
|||
12
MM
27.07.16
✎
14:01
|
(11) База файловая или клиент сервер? Под каким пользователем ОС (с каким именем) выполняется код http-сервиса?
|
|||
13
MAPATNK2
naïve
27.07.16
✎
14:03
|
База Файловая. Все выполняется под именем администратора. Я тот же код во внешнюю обработку посылаю, там все сохраняется и отпраляется, а в сервисе не могу.
|
|||
14
MAPATNK2
naïve
27.07.16
✎
14:03
|
Может в моем коде проблема?
|
|||
15
MAPATNK2
naïve
27.07.16
✎
14:04
|
(8) Я не представляю как ваш метод к своему коду применить, только начинаю программировать. Уж извините за торможение.
|
|||
16
Amfiaray
27.07.16
✎
14:09
|
Попробуй так:
текФайл= новый ТекстовыйДокумент; текФайл.ДобавитьСтроку(1,"Привет"); ИмяФайла = "c:\test26.txt"; текФайл.Записать(ИмяФайла); HTTPОтвет = Новый HTTPСервисОтвет(200); Ответ = Новый ДвоичныеДанные(ИмяФайла); HTTPОтвет.УстановитьТелоИзДвоичныхДанных(Ответ); Возврат HTTPОтвет; |
|||
17
MM
27.07.16
✎
14:16
|
(13) На каком веб-сервере опубликован сервис? Подсказка для IIS при выполнении серверного кода 1С используется служебный пользователь с низкими правами.
|
|||
18
MAPATNK2
naïve
27.07.16
✎
14:17
|
(16) Пишет : {HTTPСервис.HHH.Модуль(141)}: Слишком много фактических параметров
|
|||
19
MAPATNK2
naïve
27.07.16
✎
14:18
|
(17) Апач
|
|||
20
MAPATNK2
naïve
27.07.16
✎
14:21
|
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8"); option = ОбщегоНазначения.ПолучитьПараметры(Запрос.ПолучитьТелоКакСтроку()); comment1 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment1")); comment2 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment2")); comment3 = ОбщегоНазначения.РаскодироватьСтрокуЭкспорта(option.Получить("comment3")); Если т.д и т.п КонецЕсли; текФайл= новый ТекстовыйДокумент; текФайл.ДобавитьСтроку(1,"Привет"); ИмяФайла = "c:\test26.txt"; текФайл.Записать(ИмяФайла); Ответ = Новый ДвоичныеДанные(ИмяФайла); Ответ.УстановитьТелоИзДвоичныхДанных(Ответ); Возврат Ответ; |
|||
21
MM
27.07.16
✎
14:23
|
(19) Убедись, что у пользоваеля под которым запущен апач есть права на корень диска.
Система прав файловой системы начиная с висты сильно усложнилась. Так что, попробуй создать файл test26.txt на рабочем столе, затем дай на него права группе Все (Everyone), а затем перемести (не скопируй) в корень диска С. Если запись в файл заработает, то дело в правах на файлы. |
|||
22
Amfiaray
27.07.16
✎
14:31
|
текФайл= новый ТекстовыйДокумент;
текФайл.ДобавитьСтроку("Привет"); ИмяФайла = "c:\test26.txt"; текФайл.Записать(ИмяФайла); Ответ = Новый ДвоичныеДанные(ИмяФайла); Ответ.УстановитьТелоИзДвоичныхДанных(Ответ); Возврат Ответ; |
|||
23
MAPATNK2
naïve
27.07.16
✎
14:35
|
(22) {HTTPСервис.HHH.Модуль(146)}: Метод объекта не обнаружен (УстановитьТелоИзДвоичныхДанных)
|
|||
24
MAPATNK2
naïve
27.07.16
✎
14:37
|
Не думал, что сохранить файл так сложно.
|
|||
25
MAPATNK2
naïve
27.07.16
✎
14:37
|
(21) Все проверил. Все хорошо. Но ничего не сохраняется
|
|||
26
Amfiaray
27.07.16
✎
14:40
|
(23) Сори, когда копировал накосячил.
текФайл= новый ТекстовыйДокумент; текФайл.ДобавитьСтроку(1,"Привет"); ИмяФайла = "c:\test26.txt"; текФайл.Записать(ИмяФайла); HTTPОтвет = Новый HTTPСервисОтвет(200); ОтветДД = Новый ДвоичныеДанные(ИмяФайла); HTTPОтвет.УстановитьТелоИзДвоичныхДанных(ОтветДД); Возврат HTTPОтвет; |
|||
27
Mauser
27.07.16
✎
14:44
|
(26) все равно не взлетит.
Ошибка во второй строке. |
|||
28
MAPATNK2
naïve
27.07.16
✎
14:45
|
(26) Та же ошибка.
|
|||
29
MAPATNK2
naïve
27.07.16
✎
14:48
|
(26) Он выдает в браузере. "Привет". Это немного не то, что нужно. XD
|
|||
30
MAPATNK2
naïve
27.07.16
✎
14:50
|
(26) исправил вторую строку. Все выгружает. Спасибо огромное!!!!!!!!!!!!!!!!!!!
|
|||
31
MAPATNK2
naïve
27.07.16
✎
14:51
|
Единственное.Как избавиться от того, что он выводит в браузере "Привет".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |