Имя: Пароль:
1C
 
http сервис 1с
, ,
0 MAPATNK2
 
naïve
26.08.16
11:45
Здравствуйте. Проблема такая. Создал макет html с полями comment1,2.
Сервис открывает HTML ку, но при попытке вставить пост запрос для передачи параметров comment 1,2 выдает ошибку. Помогите разобраться.
Вот сервис:


Функция formget(Запрос)
        Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
    page  = ПолучитьШаблонСтраницы("feedback");
    Ответ.УстановитьТелоИзСтроки(page);    
    Возврат Ответ;
    

КонецФункции

Функция ПолучитьШаблонСтраницы(page, options=Неопределено, options_value=Неопределено) Экспорт

    page = ПолучитьОбщийМакет(page).ПолучитьТекст();
    
    Если НЕ options = Неопределено Тогда
        Для Каждого opt Из options Цикл
            value = options_value.Получить(opt);
            page  = СтрЗаменить(page, opt, value);    
        КонецЦикла;
    КонецЕсли;
    
    Возврат page;

КонецФункции // ПолучитьШаблонСтраницы()

Функция formpost(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
    option = ОбщегоНазначение.ПолучитьПараметры(Запрос.ПолучитьТелоКакСтроку());
    comment1  = ОбщегоНазначение.РаскодироватьСтрокуЭкспорта(option.Получить("comment1"));    
    comment2  = ОбщегоНазначение.РаскодироватьСтрокуЭкспорта(option.Получить("comment2"));
    Возврат Ответ;
    
    КонецФункции


Вот модуль общего назначения:


Функция РаскодироватьСтрокуЭкспорта(закодСтрока) Экспорт

    //application/x-www-form-urlencoded
    //Вместо пробелов ставится +, символы вроде русских букв кодируются их шестнадцатеричными значениями        
    закодСтрока = РаскодироватьСтроку(закодСтрока, СпособКодированияСтроки.КодировкаURL);
    закодСтрока = СтрЗаменить(закодСтрока, "+", " ");
    Возврат закодСтрока;
    
КонецФункции // РаскодироватьСтрокуЭкспорта()


// Функция возвращает шаблон страницы
// page - строка - url страницы
// options - массив параметров
// options_value - соответствие параметров и значений
Функция ПолучитьШаблонСтраницы(page, options=Неопределено, options_value=Неопределено) Экспорт

    page = ПолучитьОбщийМакет(page).ПолучитьТекст();
    
    Если НЕ options = Неопределено Тогда
        Для Каждого opt Из options Цикл
            value = options_value.Получить(opt);
            page  = СтрЗаменить(page, opt, value);    
        КонецЦикла;
    КонецЕсли;
    
    Возврат page;

КонецФункции // ПолучитьШаблонСтраницы()

// Кодировка application/x-www-form-urlencoded
Функция ПолучитьПараметры(Тело) Экспорт
    
    Результат = Новый Соответствие;
    
    ПарметрыЗначения = ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок(Тело,"&");
    Для Каждого Пар Из ПарметрыЗначения Цикл
        мПар = ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок(Пар, "=");
        Если мПар.Количество()>1 Тогда
            Результат.Вставить(мПар[0],мПар[1]);
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт  
    
    Результат = Новый Массив;
    
    Если ПропускатьПустыеСтроки = Неопределено Тогда
        ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
        Если ПустаяСтрока(Строка) Тогда
            Если Разделитель = " " Тогда
                Результат.Добавить("");
            КонецЕсли;
            Возврат Результат;
        КонецЕсли;
    КонецЕсли;

    Позиция = Найти(Строка, Разделитель);
    Пока Позиция > 0 Цикл
        Подстрока = Лев(Строка, Позиция - 1);
        Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
            Результат.Добавить(Подстрока);
        КонецЕсли;
        Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
        Позиция = Найти(Строка, Разделитель);
    КонецЦикла;
    
    Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
        Результат.Добавить(Строка);
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
1 MAPATNK2
 
naïve
26.08.16
11:46
Идет до сюда
Функция formpost(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
дальше выдает ошибку
Если бы можно было отладчик запустить, не спрашивал бы.
2 Stepa86
 
26.08.16
12:02
Чо за ошибка то? И почему отладчик недоступен? Ты в боевой разрабатываешь, чтоли?
3 MAPATNK2
 
naïve
26.08.16
12:11
Ну у сервиса отладчика нет. Не знаю как в версиях выше. у меня ниже 8.3.6 Ошибка инициализации библиотек модулей ( в браузере).
4 Stepa86
 
26.08.16
12:12
(3) Отладка - Подключение - Автоматическое подключение - Включи все галки
5 MAPATNK2
 
naïve
26.08.16
12:12
Просто месяц назад сервис писал так же, все супер, сейчас не работает. Ошибку посмотреть не могу никак. Может кто подскажет в чем тут проблема.
6 MAPATNK2
 
naïve
26.08.16
12:14
(4) Ну поставил, как отлаживаться то. Нажимаю отладку, запускаю сервис. ноль эмоций.
7 Stepa86
 
26.08.16
12:15
Точку останова то поставь
8 MAPATNK2
 
naïve
26.08.16
12:16
(7) Я ж не утупок. Я везде поставил. Ноль эмоций.
9 MAPATNK2
 
naïve
26.08.16
12:18
Как правильно то? Выбрал все галочки у отладчика. Выгрузил базу. Выгрузил сервис, поставил точки останова, дальше - отладка - начало отладки - веб клиент? . Выбрал веб клиент, перезагрузил страницу в браузере. Никакой отладчик не запустился
10 4St
 
26.08.16
12:21
(1) Отладчик в веб-сервисе запускается по-другому.
Во-первых, его надо явно разрешить в публикации.
Во-вторых, в меню "отладка" надо настроить "автоматическое подключение" - "веб сервисы".
И если база серверная, то надо разрешить отладку сервера.
11 Сниф
 
26.08.16
12:23
Меня вот этот момент часто в ума сводит: надо найти в папке публикации файл default.vrd и там руками прописать <debug enable="true"/>

Например:

<?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="/uprff"
        ib="File=&quot;D:\Базы 1С\Управление FireFox&quot;;"
        enableStandardOData="true"
        allowexecutescheduledjobs="">
        <debug enable="true"/>
    <ws enable="false"
            pointEnableCommon="false"/>
    <httpServices publishByDefault="false"/>
</point>
12 Сниф
 
26.08.16
12:24
+(11) после чего перезапустить апач
13 Stepa86
 
26.08.16
12:27
(11) А у меня прям в окне публикации все есть http://screencast.com/t/TcOrRHJh
14 Сниф
 
26.08.16
12:30
(13) Ну, если у коллеги отладка не идет - все равно полезно залезть в default.vrd и лично проконтролировать - появилось ли там <debug enable="true"/>  :)
15 Сниф
 
26.08.16
12:31
А еще если база не файловая, то сервер 1С нужно запускать в режиме отладки.. Кажется, это все особенности, которые я вспомнил.
16 4St
 
26.08.16
12:47
Вот только (9) непонятно. Как веб-сервис связан с веб-клиентом.
И текст ошибки так и не озвучен.
Впрочем, не мое дело.
17 MAPATNK2
 
naïve
26.08.16
12:51
(16) Ну у сервиса отладчика нет. Не знаю как в версиях выше. у меня ниже 8.3.6 Ошибка инициализации библиотек модулей ( в браузере).
4
18 MAPATNK2
 
naïve
26.08.16
12:52
(13) Такого нет.
19 MAPATNK2
 
naïve
26.08.16
12:52
поэтому и спросил. В чем может быть ошибка. Я указал где она начинается. Отправил полностью весь код.
20 MAPATNK2
 
naïve
26.08.16
12:54
(15) Файловая база
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс