Разработка мобильных
приложений на
1С:Предприятие 8.3
Модуль 5
Отладка, публикация, HTTP-сервисы
Проект Курсы-по-1С.рф
2016
Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время
Оглавление
Публикация 1С на веб сервере ........................................................................................................................... 3
Отладка по HTTP............................................................................................................................................... 3
Особенности работы с отладкой по HTTP ...................................................................................................... 7
Публикация базы данных на веб-сервере ....................................................................................................... 11
Публикация базы данных на Apache ............................................................................................................ 12
Публикация базы данных на IIS .................................................................................................................... 16
Web-сервисы ...................................................................................................................................................... 22
Структура HTTP-сервисов .............................................................................................................................. 23
Строка URL .................................................................................................................................................. 24
Заголовок .................................................................................................................................................... 25
Тело запроса ............................................................................................................................................... 26
Методы запроса ......................................................................................................................................... 26
Код состояния............................................................................................................................................. 28
Итоги ........................................................................................................................................................... 29
HTTP-сервисы в 1С ......................................................................................................................................... 29
Итоги по HTTP-сервисам................................................................................................................................ 35
Протокол HTTPS.................................................................................................................................................. 37
Практические задания ....................................................................................................................................... 40
Задание 5.1 Оперативная информация ........................................................................................................... 40
Задание 5.2 Использование HTTPS ................................................................................................................... 41
Страница 2 из 41
В данном модуле речь пойдет о том, как настраивать веб-серверы, подключаться к ним из
мобильной платформы, а также об отладке мобильной платформы, установке защищенного
соединения и о многом другом.
Отладка по HTTP
В версии 8.3.7 появился новый вариант отладки – по HTTP. Выглядит это так:
Для того чтобы настроить сервер отладки по HTTP, нам не нужен веб-сервер (ни Apache, ни IIS),
поэтому, если вы планируете использовать только отладку по HTTP, вам не нужно устанавливать
какой-либо веб-севрер.
Страница 3 из 41
Именно она умеет слушать определенный порт и взаимодействовать с ним. Минимальная установка
может выглядеть так:
Теперь необходимо включить эту утилиту для возможности отладки по HTTP. Делается это так:
Страница 4 из 41
2. Тут нужно указать протокол отладки, в нашем случае это будет отладка по HTTP.
3. Указать сервер отладки (можно использовать как свой локальный сервер, так и удаленный
сервер или кластер в случае использования клиент-сервера).
Важно! Необходимо указать именно адрес сетевой карты, а не localhost или 127.0.0.1, так как у
1С утилита dbgs – не полноценный веб-сервер и умеет слушать только один конкретный IP
адрес! 127.0.0.1 или localhost можно указывать только в том случае, если вы планируете
отладку исключительно на текущем компьютере, но тогда использование данного вида отладки
не имеет никакого смысла.
Далее необходимо указать порт отладки, причем он не должен быть занят. Лучше указывать
порт, начиная с 10 000. И затем – перезапустить конфигуратор.
4. После перезапуска при первом включении – может появится вот такое окно:
Страница 5 из 41
В котором Windows просит открыть доступ для этого приложения на входящие соединения.
Если нажать «Разрешить доступ», то Windows создаст правило для входящих соединений в
брандмауэре. В случае отмены правило не будет создано, и его нужно будет создать
вручную. Если этого не сделать, то при перезапуске конфигуратора появится вот такое окно:
5. Если все настройки выполнены верно, то откроется окно конфигуратора. И теперь можно
делать отладку, в том числе и по сети. Кроме того, отладку можно проверить и через браузер,
для этого достаточно ввести в адресную строку адрес и порт, который мы указали в
настройках. Должно появится вот такое окно:
Страница 6 из 41
2. При настройке отладки можно указать дополнительно имя базы, но оно используется только в
том случае, если вы используете кластер отладки. То же самое касается и пароля для
сервера отладки.
3. В случае мобильного устройства отладку можно включать вручную, ее необходимо прописать
в настройках подключения базы данных, причем неважно, платформа ли это для
разработчиков (слева), или же скомпилированная версия (справа):
Страница 7 из 41
Страница 8 из 41
Страница 9 из 41
Как видите, теперь их намного больше. Но появились еще и шаблоны отладки, вот так выглядит их
настройка:
Т.е. мы можем настроить отдельно шаблон подключения к стационарной 1С или к мобильной и даже
указать, от каких пользователей ждем отладку, причем пользователи указываются в виде строки, а
не из списка, что позволяет контролировать отладку даже тех пользователей, которых нет в текущей
базе.
Таким образом, у нас появились новые механизмы для более удобной работы с отладкой, и больше
не нужно применять для выявления проблем такие ухищрения, как файлы логов.
Страница 10 из 41
Но стоит отметить, что, так как отладка по HTTP использует обычный протокол HTTP, каждый раз,
когда проверяется значение некой переменной, идет запрос на веб-сервер, и, естественно, если вы
хотите получить значение переменной вида ХранилищеЗначений, в котором содержится, например,
большое фото, то 1С начнет передавать это фото на сервер, и так будет каждый раз, когда вы
захотите получить значение этой переменной. Кстати, при отладке 1С сжимает трафик, так что нет
смысла специально помещать данные в хранилище с целью их архивации. Но все же лучше это
делать по другой причине, а именно – данные могут содержать запрещенные символы, поэтому
лучше или помещать их в хранилище, или же передавать в виде Base64.
1. Публикация базы для доступа к ней при помощи веб-браузера или тонкого клиента (возможна
работа только при использовании управляемых форм)
2. Публикация HTTP- и WS-сервисов, которые используются для доступа к внешним функциям
публикуемой базы из разных клиентов, например, другой базы 1С или интернет-магазина
3. Публикация протокола OData, который позволяет получить доступ к данным в виде xml
элементов специальной структуры, что дает возможность подключить 1С к программным
комплексам, которые способны понимать этот формат, например, Power Bi
4. В случае использования файловой базы данных – для работы фоновых заданий.
Текущая задача – рассмотреть особенности публикации 1С для доступа через веб и публикацию
HTTP-сервисов.
Страница 11 из 41
Для того чтобы опубликовать базу, достаточно зайти в настройки публикации (Администрирование
– Публикация базы на веб-сервере):
В нашем случае для публикации базы достаточно прописать имя (не забываем про регистр букв и
используем только латиницу) и указать путь (только латиница, без пробелов и короткий путь), куда
будет в дальнейшем добавлен специальный файл (default.vrd), необходимый веб-серверу, чтобы
знать, где находится база, какие опубликованные веб-сервисы присутствуют и т.д.
Страница 12 из 41
После указания всех параметров нажимаем Опубликовать, нас спросят, хотим ли мы перезапустить
Apache – соглашаемся. И теперь, если зайти по адресу: http://localhost:8080/DB (не забываем
указывать порт, если он отличен от 80), скорее всего, появится сообщение о том, что ресурс не
найден:
После перезапуска веб-клиент должен работать. Но, например, в случае браузера Chrome может
блокироваться часть опций 1С, так как браузер считает их всплывающими окнами и по умолчанию
блокирует их:
Страница 13 из 41
Потом нужно вручную перезагрузить страницу и после этого получится зайти в 1С.
Обратите внимание на путь, который нам отдает 1С: мы указали путь http://localhost:8080/DB, но 1С
сделала редирект (перенаправление) на адрес: http://localhost:8080/DB/en_US, и в этом случае будет
использоваться английский язык, но достаточно изменить путь на: http://localhost:8080/DB/ru_RU – и
все будет на русском. Это актуально, если локаль или язык системы/браузера отличается от того,
которым вы привыкли пользоваться. В данном случае – язык браузера английский (en), а локаль
США (US). Мы же можем прописать ru_RU (регистр букв важен), тогда локаль и язык будут русские, а
можем – ru_UA, тогда язык будет русский, а локаль – украинская.
Сразу отметим, что количество вариантов ограничено, и нельзя ставить язык английский, а локаль
русскую. Кстати, локаль – это форматирование представления данных по умолчанию, посмотреть
примеры можно в конфигураторе – Региональные установки ИБ:
Страница 14 из 41
Для подключения по тонкому клиенту достаточно добавить новую информационную базу и указать,
что она находится на веб-сервере:
Если такой опции нет, значит, при установке не был выбран тонкий клиент, просто нужно изменить
установку через панель управления и добавить этот пакет:
Страница 15 из 41
Для начала попробуем опубликовать базу без дополнительных настроек и подробно разберем все
нюансы.
Из описания ошибки понятно, что у пользователя IUSR нет доступа к каталогу с базой 1С. Значит,
его нужно предоставить.
Страница 16 из 41
После нажатия на кнопку Изменить будет показан список пользователей, у которых уже есть доступ
к этой папке:
Страница 17 из 41
Страница 18 из 41
Как видно, мы могли бы просто прописать имя пользователя прямо в этом поле, и если после
нажатия Проверить имена не появилось ничего, значит, имя указано верно, иначе – откроется окно
с заголовком «Имя не найдено».
Теперь наше окно со списком доступных пользователей выглядит вот так:
Страница 19 из 41
Увы, не работает, так как не подключен IsapiModule, а без него ничего не получится, этот модуль
является прослойкой между браузером и базой данных. Подключить модуль ISAPI можно через
Панель управления – Программы и компоненты – Включение компонентов Windows:
Страница 20 из 41
Для ее исправления необходимо зайти в Диспетчер служб IIS, открыть пулы приложений, нажать
правой кнопкой – Дополнительные параметры:
Страница 21 из 41
Кстати, обратите внимание на то, что теперь есть возможность работать сразу с нескольких веб-
серверов:
Но этого делать не следует, если есть необходимость установить несколько веб-серверов (обычно
это делается с целью распределения нагрузки), то лучше создавать несколько экземпляров одного
веб-сервера.
Web-сервисы
Достаточно давно в 1С появились WS-сервисы, которые представляют собой работу с SOAP
протоколом, где все данные описываются с помощью определенных правил, которые, в свою
очередь, каждый пользователь может создавать сам (XDTO пакеты), или же пользоваться
стандартными описаниями из пространства имен w3org (примитивные типы), или же v8 – где
описывались типы 1С (структуры, объекты, метаданные и т.д.).
Страница 22 из 41
Но обмен данными с внешними программами при таком подходе был затруднен, так как всегда
требовалось работать с SOAP библиотеками, а если еще учесть, что у 1С он немного отличался от
стандарта, то все это значительно усложняло реализацию обмена.
HTTP-сервисы базируются на стандартных HTTP-запросах, таких как POST, GET, PUT и т.д.
В целом разделение на методы условное и носит рекомендательный характер, так как почти все
задачи можно решить при помощи метода POST и GET.
Достаточно подробно про HTTP-запросы можно почитать тут. А в данном методическом пособии мы
коснемся некоторых вопросов – этого будет достаточно, чтобы понять, как создавать свои HTTP-
сервисы.
Структура HTTP-сервисов
В целом почти любой запрос состоит из нескольких основных составляющих:
1. URL, но URL может нести в себе информацию не только про адрес ресурса, но и, например,
дополнительные параметры
2. Заголовок запроса. Если попробовать перевести на язык 1С, то он представляет собой
массив соответствий, в которых описывается служебная информация, например, версия
клиента, тип передаваемых данных, язык, и много другое
3. Тело запроса. В теле запроса уже передается необходимая информация в обе стороны.
Информация может быть разного типа, и тип описывается в заголовках. Ранее мы уже с этим
сталкивались, когда работали с намерениями в Android, например, когда хотели открыть
картинку, мы должны были указать MIME-тип, вот и тут то же самое: чтобы сервер понимал,
что делать с этими данными, он смотрит на заголовок, а не на само тело. В некоторых
вариантах тело может не использоваться.
4. Метод запроса – те самые POST, GET и т.д.
5. Состояние запроса, обычно в виде кода, например, код 200 – говорит о том, что соединение
прошло успешно и был получен ожидаемый ответ от сервера. А вот код 500 – вернет нам в
теле ошибку сервера.
В целом алгоритм работы с HTTP-запросами можно описать достаточно просто. Представим себе,
что нам нужно отправить картинку на сервер и получить в ответ ее некий идентификатор.
Страница 23 из 41
b. Формируем заголовки запроса, тут следует указать, какой тип данных передается,
например, «image/png»
c. Формируем тело запроса, в данном случае – картинку можем передать как двоичные
данные.
3. Отправляем данные на сервер и указываем метод, который позволит это сделать, в нашем
случае это может быть метод POST
4. На сервере:
a. Проверяем, есть ли дополнительные параметры в URL
b. Проверяем, какой тип данных указан в заголовках, обычно в заголовках передается
размер данных в длине символов
c. Проверяем, что находится в теле, если это двоичные данные, то забираем и
обрабатываем, например, помещаем в некую таблицу
5. Готовим ответ для клиента:
a. Если мы успешно получили картинку и добавили ее в таблицу, то теперь в тело
запроса можем вернуть ID картинки, и устанавливаем код состояния = 201, что
соответствует понятию «создано»
b. Если же произошла ошибка, то нужно определить причину, и уточнить, где она
возникла: на клиенте или на сервере. Например, мы на сервере ожидаем тип
«image/png», но клиент отправил тип «image/jpg», а нам это не подходит, в этом случае
мы возвращаем клиенту код состояния = 415. Если мы попытались записать данные на
сервере, но произошла ошибка записи, тогда мы возвращаем код состояния 500.
6. Клиент, получив ответ от сервера, первым делом смотрит на код состояния, и, если он
отличен от 2ХХ, тогда произошла ошибка. Если же все хорошо, то мы получаем в теле
запроса ID картинки и считаем запрос выполненным успешно.
Далее – рассмотрим каждый из этих пунктов.
Строка URL
Строка URL – это URI (о том, что такое URI мы говорили ранее), в котором содержится вся
необходимая информация для однозначной идентификации ресурса. Общий вид URL выглядит так:
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
Примеры:
https://docs.google.com/document/d/1_3UVXw8yaBA/edit#heading=h.xnhq3
http://partners.v8.1c.ru/forum/message/1421?onlyMyThemesInput=true#m_142
Тут стоит сказать только о том, что параметры передавать на сервер можно любые, в том смысле,
что нет четкой привязки к имени параметра и его значению, параметры фильтрует уже сам сервер,
если он какой-то из них не понимает, то может либо выдать ошибку, либо проигнорировать. Т.е. это
не как в случае с 1С, где мы обязаны указывать определенное количество параметров при вызове
функции и не можем указать параметров больше, чем определено в функции, а тут – сколько хотим,
столько и делаем.
Страница 24 из 41
А <якорь> обычно используется для того, чтобы отобразить нужный элемент, например, вы можете
дать ссылку не только на форум, но и на конкретный комментарий.
Заголовок
Заголовок – это набор необходимых параметров, например, чтобы сервер знал, какой тип данных вы
ему отправляете, или наоборот – чтобы клиент понимал, например, состояние соединения.
1. OPTIONS http://192.168.0.2/
2.
3. --response --
4. 200 OK
5. Date: Thu, 26 Nov 2015 14:56:58 GMT
6. Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/0.9.8r
7. Allow: GET,HEAD,POST,OPTIONS,TRACE
8. Content-Length: 0
9. Keep-Alive: timeout=5, max=99
10. Connection: Keep-Alive
11. Content-Type: text/html
Как видно из статуса (4) – все прошло успешно. В (1) мы делаем запрос OPTIONS, а дальше – ответ
от сервера, в данном случае задача запроса только в одном – описать поддерживаемые типы
запросов, и они описаны в (7). Все строки (5-11) – это заголовки.
1. POST http://192.168.0.2/tst/hs/DT/SD/PostData
2. Content-Type: application/json
3.
4. -- response --
5. 500 Internal server error
6. Date: Thu, 26 Nov 2015 11:27:49 GMT
7. Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/0.9.8r
8. Content-Length: 78
9. Connection: close
10. Content-Type: text/plain; charset=UTF-8
11.
12. Ошибка инициализации библиотеки модулей
В строке (5), код состояния = 500, что соответствует ошибке со стороны сервера. А вот в (12) –
описывается причина ошибки, кстати (12) – это уже тело запроса. А (2) и (6-10) – это заголовки,
вначале заголовок от клиента, далее – от сервера.
В заголовках передается очень важная информация, как уже ранее было сказано, это и тип данных,
его размер, и различные дополнительные данные, такие как состояние соединения. И если, к
примеру, на некий популярный веб-сервер попробовать отправить запрос с целью разместить там
картинку, то он будет проверять соответствие данных в заголовках тому, что было отправлено в
теле, и, если не совпадет, например, тип данных, будет вызвано исключение.
Страница 25 из 41
Тело запроса
Тело запроса – это тоже строка, телом запроса считается все, что идет после заголовка. Тело и
заголовок должны быть разделены минимум одной пустой строкой. Обычно при передаче файлов
применяется подход, который заключается в том, что в заголовках указывают тип – multipart и
дополнительно указывают boundary=HD8WD43. Второй параметр указывает, какие части
используются.
Методы запроса
Как было сказано ранее, существуют разные методы работы с веб-сервисами. Рассмотрим те, что
поддерживает 1С, а их достаточно много, намного больше, чем обычно используется на практике.
Страница 26 из 41
Почти все описанные выше методы достаточно часто применимы в реальной практике, но кроме
этих методов есть еще и дополнительные методы (WebDAV), которые нацелены на расширение
методов запросов, однако они используются только в определенных случаях, например, при работе
с протоколом OData.
Особенностью данных методов является работа с данными на сервере, они поддерживают описание
коллекций и работу сразу с несколькими объектами. Основная цель этих расширений – работа с
объектами сервера. Если провести аналогию с 1С, то это очень похоже на работу с хранилищем, где
мы блокируем объекты, объединяем, создаем, заменяем и т.д., и это не странно, так как работа с
объектами и их версиями – одно из предназначений этих методов.
Страница 27 из 41
В данном случае мы пытаемся изменить свойство некоего объекта, например, документ продажи,
где мы удаляем договор и добавляем товар. Т.е. WebDAV – это надстройка над простым HTTP,
который предполагает обмен простыми текстовыми данными и превращает его в обмен
инструкциями.
Код состояния
Все, кто работает с интернетом, должны знать «страшное» число 404. Когда мы ищем важную
информацию, и тут попадается ссылка на ресурс, где точно есть то, что нужно, но при переходе на
него – появляется ошибка 404.
Вот эта цифра – это и есть код состояния запроса. Так как причин ошибок может быть много, но
вариант HTTP всегда предполагает работу в клиент-серверном варианте, то и ошибки можно
разделить на ошибки клиента и ошибки сервера. Но создатели пошли дальше – зачем
ограничиваться только ошибками? Ведь для HTTP нет разницы между тем, была ошибка на сервере
или нет, все равно придет ответ от сервера, или не придет, но соединение ведь было. Поэтому были
введены коды состояний, условно их можно разделить на 5 основных категорий:
1хх – информационные коды, они обычно используются для информирования клиента о неких
процессах на сервере и не выводятся пользователю вообще. Например, код 102 информирует о
том, что сервер получил данные, и теперь ведется их обработка, и она может занять длительное
время, тут же может быть возвращен ID сессии, по которому клиент может сделать повторный
запрос для получения текущего состояния процесса.
2хх – эта серия кодов говорит о том, что операция выполнена успешно, код 200 – сообщает о том,
что все прошло так, как было задумано. Однако если мы, к примеру, должны были создать в 1С
заказ покупателя, то после его добавления на сервере можем вернуть код 201 и вернуть клиенту
ссылку на этот документ.
3хх – информируют клиента о том, что необходимо сделать перенаправление на другой адрес. К
примеру, у нас есть веб-сервер, куда мы делаем запросы для получения картинки по коду, однако
случилось так, что сервер, где хранились фото, был перемещен в другую страну, и у него изменился
IP, но у нас есть множество ссылок у клиентов, которые все также заходят по старым IP, и вот чтобы
они были перенаправлены, мы говорим серверу, что надо сделать редирект на новый адрес.
4хх – ошибки клиента. Например, самая частая ошибка, с которой мы можем встречаться на пути
обучения – это ошибка с кодом 400, которая говорит о том, что произошла ошибка разбора запроса,
вторая по частоте – ошибка 403, которая говорит о том, что у нас нет права доступа к этому ресурсу.
Ну и самая популярная ошибка – 404, она значит, что запрашиваемый ресурс не найден.
Страница 28 из 41
Итоги
В итоге хочется отметить только одно: все ошибки, запросы, обработку данных и т.д. – необходимо
выполнять самостоятельно, т.е. если картинка неуспешно записалась на сервере, то мы
возвращаем код 5хх, а если успешно, то 2хх. Поэтому заметьте – если делать все по правилам, то
предстоит очень много работы, в отличие от 1С, где мы привыкли все делать через
попытку/исключение, ну и если ошибка, то описывается причина.
HTTP-сервисы в 1С
Выше была рассмотрена теория, причем неважно, на базе чего будет работать сам сервер, это
будет некая CMS, или 1С. Тут важен именно сам подход. Далее – решим задачу, которая
заключается в написании механизма для тестирования HTTP-сервисов, и по ходу его создания будут
разобраны некоторые особенности HTTP-сервисов в 1С. Ограничим задачу тем, что рассмотрим
только два метода – POST, GET и Любой метод.
Например:
http://192.168.0.2/DB/hs/DT/SD/12/New?P1=11111&P2=SomeStr
Обратите внимание: вначале идет адрес, потом имя базы, далее идет зарезервированный адрес hs,
именно он ведет нас к HTTP-сервисам, и он обязателен для заполнения. После этого идет корневой
URL, который мы указываем у добавленного HTTP-сервиса, и заканчивается все шаблоном URL,
причем шаблон может быть достаточно длинным, состоять из нескольких секций, разделенных «/».
Ну и в окончании идут параметры. Теперь рассмотрим все подробнее.
В первую очередь создаем сам сервис DT, после этого – шаблон URL, в нашем случае создаем два
шаблона SomeData и Test, а потом указываем методы, которые они смогут обрабатывать.
Страница 29 из 41
Обратите внимание на корневой URL, именно его мы в дальнейшем будем указывать в браузере,
поэтому сделаем его покороче. Не забываем про Apache, где важен регистр букв.
Для того чтобы можно было обратиться к этому сервису, необходимо указать следующий URL:
http://192.168.0.2/DB/hs/DT
Т.е. на текущий момент был создан путь до DT, но сам по себе HTTP-сервис делать ничего не умеет,
ему обязательно нужно подключить шаблоны и обработчики. Добавляем новый ШаблонURL и
укажем для него следующий шаблон:
Теперь уже сформирована полная строка URL, которая может выглядеть так:
http://192.168.0.2/DB/hs/DT/SD/12
Обратите внимание, так как указан не просто шаблон /SD, то необходимо добавить дополнительно
еще один параметр, в нашем случае это 12. Если он не будет указан, то это будет невалидный URL.
http://192.168.0.2/DB/hs/DT/SD/12
Страница 30 из 41
Будет вызвана функция SomeDataPostData. Если же мы делаем GET запрос, тогда будет вызвана
функция SomeDataGetData. А если сделаем, к примеру, PUT запрос, то будет вызвана ошибка от 1С
с кодом состояния 405 Method Not Allowed. Ну и конечно, если допустим ошибку в написании URL,
например, напишем так (в случае Apache):
http://192.168.0.2/DB/hs/DT/Sd/12
Теперь обновим функции и сделаем из них тестовые функции, чтобы более детально рассмотреть
запросы:
Функция SomeDataPostData(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type","text/plain; charset=UTF-8");
Ответ.УстановитьТелоИзСтроки(ВернутьДанныеЗапросаОтКлиента(Запрос));
Возврат Ответ;
КонецФункции
Функция SomeDataGetData(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type","text/plain; charset=UTF-8");
Ответ.УстановитьТелоИзСтроки(ВернутьДанныеЗапросаОтКлиента(Запрос));
Возврат Ответ;
КонецФункции
Функция ВернутьДанныеЗапросаОтКлиента(Запрос)
СтрОтвет = "";
СтрОтвет = СтрОтвет + "HTTPМетод: " + Запрос.HTTPМетод + Символы.ПС;
СтрОтвет = СтрОтвет + "БазовыйURL: " + Запрос.БазовыйURL + Символы.ПС;
СтрОтвет = СтрОтвет + "ОтносительныйURL: " + Запрос.ОтносительныйURL +
Символы.ПС;
СтрОтвет = СтрОтвет + Символы.ПС;
СтрОтвет = СтрОтвет + "Заголовки: " + Символы.ПС;
Для Каждого Стр Из Запрос.Заголовки Цикл
СтрОтвет = СтрОтвет + " " + Стр.Ключ + ": " + Стр.Значение + Символы.ПС;
КонецЦикла;
Страница 31 из 41
Обновим базу и опубликуем HTTP-сервисы. Делается это в той же настройке публикации базы
данных:
После публикации можно в браузере протестировать то, что мы написали, для этого перейдем по
ссылке:
http://192.168.0.2/tst/hs/DT/SD/12?P1=11111&P2=SomeStr
HTTPМетод: GET
БазовыйURL: http://192.168.0.2/DB/hs/DT
ОтносительныйURL: /SD/12
Заголовки:
Content-Length: 0
Accept-Language: en-US,en;q=0.8,ru;q=0.6
Host: 192.168.0.2
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/46.0.2490.86 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Cache-Control: max-age=0
Connection: keep-alive
ПараметрыURL:
ID: 12
ПараметрыЗапроса:
P1: 11111
P2: SomeStr
Страница 32 из 41
http://192.168.0.2/DB/hs/DT/
То в результате откроется пустая страница, не будет никакой явной ошибки, что URL указан
неверно, хотя, если открыть отладчик браузера, там будет видно:
Страница 33 из 41
Обратите внимание, на сам шаблон «/*» – это значит, что сюда будут попадать все запросы, которые
не смогли обработать остальные шаблоны.
В данном случае эта функция будет ловить все методы, которые не обработали другие методы. А
сама функция будет такая:
http://192.168.0.2/DB/hs/DT/
По начальной строке видно, что отработала функция-ловушка. Проверим еще один вариант:
http://192.168.0.2/DB/hs/DT/SD/12/New?qqwe
Страница 34 из 41
Получим ответ:
В данном случае мы тоже попали в функцию-ловушку, но уже ту, которая находится в шаблоне SD.
И обратите внимание на параметры URL – был указан URL с ориентиром на то, что задано 2
параметра в шаблоне, но у нас по факту только 1 параметр в шаблоне – {ID}, и если такое
происходит, то 1С не определяет никакой параметр. Вывод отсюда можно сделать такой:
неопределенные параметры URL не игнорируются, т.е. 1С не пытается определить первый
параметр, потом второй и т.д., в случае непопадания в шаблон – игнорируется запрос в целом.
Итоги по HTTP-сервисам
Как видно из материала, работа с HTTP-сервисами достаточно простая, и, по сути, не требует
знания HTML-языка вообще, если только не планируется делать сайт.
Сам HTTP-сервис можно представить в виде некой внешней функции, куда мы передаем параметры
и получаем результат, но, в отличие от WS ссылок, все происходит гораздо быстрее, так как не
нужно проходить валидацию данных, получать вначале описание типов, а потом формировать XDTO
пакеты и т.д. В этом большое преимущество HTTP-сервисов, перед WS-сервисами, но и это же
является их слабостью. Так как вся проверка данных лежит на сервере.
1. Можно сделать веб-страничку с заказами или остатками, чтобы любой торговый агент, даже без
мобильной платформы, мог отслеживать остатки/цены и т.д. То же самое касается ситуаций,
когда в магазинах выключают свет/интернет, и продавцы не могут пробить дисконты, цены,
остатки и т.д., а написав простую страничку, можно им позволить все это делать со своих
мобильных устройств, пока не появится возможность вести полноценную работу
2. Простыми POST-запросами можно получать мгновенно остатки, цены, статусы заказов в
мобильной платформе, или, например, на сайте. Теперь не нужно объяснять веб-
программистам, что такое SOAP (увы, далеко не все с ним сталкивались), а потом еще и
объяснять, что в 1С это не совсем то же самое, что и везде
Страница 35 из 41
Однако, стоить понимать, что, хотя 1С и позволяет делать rest-запросы, и мы можем, по сути,
написать много чего, не стоит путать 1С с полноценным веб-сервером, поэтому не нужно забывать
кешировать данные и пускать поменьше пользователей в центральную базу. С другой стороны,
всегда можно сделать вторую базу, куда будет стекаться вся нужная информация, и из нее уже
публиковать все, что нужно, это повысит безопасность и снизит нагрузку на центральную базу,
однако – не стоит применять 1С там, где применять ее не следует.
В видеоуроке «Создание простейшего сайта с поиском и отладка веб-страниц» пойдет речь о том,
как можно создать простейшую страничку, на которой, например, можно будет проверять остатки
товара, цены, дисконты. Особенно актуальна данная тема для розничных сетей: когда выключают
свет/интернет, тогда сотрудники могут получать информацию вот таким образом.
Также будет рассмотрен вопрос важности заголовков, отладки веб-страниц, особенностей IIS и
Apache, при запросе данных внутри самой страницы.
Страница 36 из 41
Далее смотрим видео «Подпись онлайн». Основная цель этого урока – сформировать понимание
того, как можно быстро переделать некоторые готовые решения для применения в сфере 1С. В
частности, рассмотрим, как можно передавать данные POST-запросом внутри самой страницы, и
применим полученные ранее навыки для решения данной задачи.
Протокол HTTPS
Из предыдущей темы видно, что HTTP-протокол – это просто общение с сервером при помощи
запросов в виде обычного текста. И пока мы говорим о неких безобидных данных, например, о
розничной цене на товар и остатках – все нормально. Но что, если мы хотим передавать данные,
которые являются коммерческой тайной, например, директору на мобильное устройство выгружаем
долги по клиентам и прибыль компании. Вот тут и появляется дополнительный вопрос – а насколько
это безопасно?
И действительно, протокол HTTP вообще не является безопасным, это же просто текстовые данные,
и он вообще никак не устойчив к атакам вида MITM (Man in the middle, или Человек посередине).
Суть данных атак заключается в том, что есть возможность вклиниться в передачу данных между
клиентом и сервером и не только скопировать эти данные, но и изменить их.
С другой стороны, мы можем защитить соединение, используя HTTPS протокол. По свой сути –
HTTPS протокол, это тот же самый HTTP протокол, однако он (в идеале) не подвержен MITM атакам,
за счет того, что данные между сервером и клиентом шифруются. В таком случае, если
злоумышленник перехватит ваш трафик, то он получит просто контейнер зашифрованных данных,
которые он не сможет просто так расшифровать.
Для того чтобы установить такое соединение между клиентом (в нашем случае мобильной
платформой 1С) и сервером, нам необходимо создать сертификаты, с их помощью и будет
устанавливаться безопасное соединение и шифроваться трафик.
Страница 37 из 41
При покупке сертификата можно выбирать разные варианты, например, это может быть:
Самый простой и дешевый сертификат (именно такой и нужен для мобильной платформы), в
браузере он выглядит вот так:
Либо это может быть сертификат с зеленой строкой, сайты где применяется такой сертификат
выглядят вот так:
Кроме этого, сертификаты покупаются обычно сразу на домен и субдомен, например, test.com
и www.test.com. Но можно покупать и на дополнительные субдомены.
Простота использования таких сертификатов заключается в том, что все центры сертификации,
которые выдают эти сертификаты, уже прописаны на всех устройствах, и устройства им доверяют
автоматически. Т.е. для установки HTTPS-соединения достаточно купить сертификат и подключить к
веб-серверу, и все будет работать.
Но, у таких сертификатов есть один минус (то что они платные, за минус не считаем). Минус
заключается в том, что они выдаются только на домен. Т.е. если необходимо настроить HTTPS-
соединение, нам необходимо купить сначала некий домен, который надо подтвердить в момент
покупки сертификата.
Страница 38 из 41
А что делать, если нужно построить безопасную сеть внутри компании? У нас там доменов нет, есть
IP адрес сервера 192.168.0.2, на него мы не можем получить сертификат, но ничего не стоит точно
также любому сотруднику запустить сниффер и получить данные в момент обновления отчета на
мобильном устройстве директора, и не только данные, но еще и пароль.
О том, как это все сделать, смотрим видео «Генерация SSL ключей»
В данном уроке будет рассмотрен вариант генерации сертификатов для сервера и центра
авторизации. Обратите внимание на заполнение полей.
О том, как подключить созданные ранее сертификаты – смотрите видео «Настройка HTTPS на IIS» и
«Настройка HTTPS на Apache». Стоит обратить внимание на то, каким образом правильно
подключаться именно по протоколу HTTPS. И как отключить HTTP.
Страница 39 из 41
Android:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found
На iOS:
На WinPhone:
Это значит, ошибка в том, что данное устройство не доверяет центру, выдавшему этот сертификат.
Практические задания
Задание 5.1 Оперативная информация
Нужно взять любую конфигурацию (неважно, управляемые формы или нет), на платформе 8.3.5 (или
выше) и переписать мини страничку с поиском таким образом, чтобы можно было выполнять поиск
остатков по товару. Товар искать по артикулу, коду, штрих-коду или наименованию.
В таблице выводить список складов и количество остатка на нем. Если найдено более одной
позиции – тоже выводить, если найдено более 10 позиций, тогда выводить сообщение с просьбой
уточнить поиск. Если не было найдено ни одной позиции – аналогично. Если в базе нет товаров, то
можно выводить любую другую информацию (например, долги по клиентам).
В качестве отчета предоставьте скриншоты экрана мобильного устройства, где видно поле ввода с
введенным артикулом товара и выведенным списком остатков (если нет базы с товарами, то можно
с любой информацией).
Страница 40 из 41
Страница 41 из 41