|   |   | 
| 
 | 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 | 
        Единственное.Как избавиться от того, что он выводит в браузере "Привет".     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |