Гарри Поттер и подкапотное пространство веб-клиента

Публикация № 1501249 20.08.21

Интеграция - WEB-интеграция

При разработке сайтов, интегрированных с 1С через HTTP-сервисы, приходится бороться с кодировками, искать производительные интерфейсные решения и задумываться над безопасностью. В ходе онлайн-митапа «Web-клиенты для 1С» Юрий Лазаренко показал на практике, как работает магия самодельного веб-клиента и как решать проблемы, возникающие при интеграции.

Основой этого доклада стало мое выступление на Infostart Event 2019 «Как работают управляемые формы и тонкий клиент 1С, взгляд из-под капота» – именно поэтому в названии темы опять упоминается «подкапотное пространство».

В выступлении 2019 года я рассказывал о своем опыте создания веб-клиентов в сравнении с работой веб-клиента и тонкого клиента 1С. Данный доклад будет больше похож на мастер-класс – мне хочется подытожить теорию и рассказать подробнее, как это все работает. С кусками кода, особенностями и так далее.

 

Принципы работы самописного веб-клиента

 

 

Самописный веб-клиент – это чаще всего подсистема для конфигурации 1С на платформе 8.3 и выше, потому что ему для работы требуется наличие HTTP-сервисов, которые появились в платформе 8.3.6. Еще лучше, чтобы конфигурация работала на платформе от 8.3.9.1919, потому что с этой версии произошли серьезные улучшения в работе платформы с с веб-сервисами и HTTP-сервисами: появилось переиспользование сеансов, улучшилась скорость работы HTTP-сервисов. Если запустить свой веб-интерфейс на версии 8.3.9.1919 и более старой версии – вы заметите разницу.

Запросы от браузера принимаются HTTP-сервисом и передаются на исполнение общим модулям 1С. В процессе выполнения запроса производятся необходимые действия с объектами ИБ 1С – мы можем вызвать некий произвольный HTTP-сервис, передать ему название функции, которую мы хотим выполнить, и при необходимости передать ей параметры. Например, если мы напишем HTTP-сервису «Клиент, выполни функцию ТекущаяДата() и верни результат», он нам вернет обратно текущую дату. Но если мы ему напишем «Очисти информационную базу», он очистит информационную базу, поэтому к вопросу безопасности мы обязательно вернемся.

После того, как HTTP-сервис выполнил свои действия, он преобразует результат в формат HTML и возвращает его браузеру пользователя, который отображает информацию на странице сайта.

 

Два варианта интеграции с сайтом

 

Наш веб-клиент может использоваться в двух режимах:

  • интегрированный в сайт (чтобы запускать туда внешних пользователей);

  • как автономное веб-приложение в интрасети (для доступа сотрудников компании).

В первом случае используется промежуточный сайт на PHP, во втором случае промежуточные скрипты располагаются в интрасети, чаще всего на том же компьютере, что и веб-сервер, где опубликован HTTP-сервис 1С.

При этом вам никто не запрещает работать с HTTP-сервисами 1С напрямую, обращаясь к нему из JavaScript и не используя промежуточный PHP-сервер. У этого подхода есть существенный минус, потому что выставлять базу данных для доступа извне не очень хорошо, но такие вопросы тоже легко решаются.

 

Архитектура в режиме интеграции с сайтом

 

 

Перед тем, как перейти к практике, необходимо рассказать, как работает вся эта система.

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

В первую очередь, промежуточный сайт необходим с точки зрения безопасности, чтобы не выставлять базу данных наружу. Мы создаем промежуточный сайт и доступ к HTTP-сервису 1С открываем только для IP-адреса, которому соответствует промежуточный сайт. Если кто-то со стороны попробует задолбить базу 1С запросами, у него ничего не получится. Конечно, можно и сам сайт задолбить запросами, но в этом случае база 1С не “ляжет”.

 

 

Пользователь открывает страницу на сайте, у него запускается промежуточный инициализирующий JavaScript, который перенаправляет запрос в 1С. Задача скрипта – получить запрос, модифицировать его, добавив IP пользователя и другие служебные данные, и перенаправить все это веб-серверу, на котором расположена 1С.

 

 

Веб-сервер выполняет авторизацию с помощью указанного в default.vrd логина и пароля. Также можно указывать логин и пароль пользователя 1С в PHP – сохранить их в неком скрипте на стороне промежуточного сайта.

У нас авторизация происходит через промежуточного пользователя 1С, через которого работают все посетители сайта, – его логин и пароль прописаны в default.vrd.

 

 

Когда пользователь авторизуется на сайте, он указывает не логин и пароль пользователя 1С, который указан в конфигураторе, а логин и пароль из отдельного справочника «Посетители сайта». Этот логин и пароль обрабатывается с помощью HTTP-сервиса.

Такой подход позволяет переопределять сеансы – если мы каждого пользователя будем запускать под своим логином и паролем в конфигураторе, то под каждого из них на сервере 1С будет создаваться сеанс HTTP-сервиса.

При этом пользователь может ничего при этом не делать, но сеанс уже создался, он занимает место в оперативной памяти. Чем больше будет таких сеансов открыто, тем больше будет занято оперативной памяти – если у нас зайдут 100 пользователей, они создадут 100 сеансов на сервере 1С. И, ничего не делая, они могут отнять большое количество оперативной памяти и прочих ресурсов сервера.

В нашем случае все пользователи сайта работают через одного пользователя, и за счет переиспользования сеансов 100 пользователей могут работать на одном сеансе сервера 1С – это существенная экономия ресурсов.

 

 

Пользователю присваивается идентификатор сеанса – он записывается в регистр сведений, где мы фиксируем информацию о том, что сессия появилась сегодня, в такое-то время, она активна и соответствует такому-то пользователю.

Идентификатор сохраняется в cookies браузера и позволяет в дальнейшем авторизоваться без ввода логина/пароля.

Время от времени мы регламентным заданием чистим неактивные устаревшие сессии.

 

 

После успешной авторизации HTTP-сервис передает управление процедуре общего модуля подсистемы, которая анализирует параметры HTTP-запроса и в зависимости от них выполняет некую процедуру.

Например, мы говорим коннектору: «Выполни функцию ТекущееВремя()», после чего HTTP-сервис через стандартный 1С-ный метод Выполнить() или Вычислить() просто запускает эту функцию (в данном случае, ТекущееВремя()) и получает результат.

 

 

В зависимости от статуса выполнения запроса этот результат формируется в виде HTML-кода.

И с помощью HTTP-сервиса этот код HTML-страницы возвращается обратно пользователю.

 

 

Далее все повторяется по циклу: выполняется HTTP-запрос, соответствующий следующему действию пользователя.

 

Архитектура в режиме веб-приложения в интрасети

 

 

В случае работы в режиме веб-приложения в интрасети исключается промежуточный сайт – есть браузер и есть некий компьютер в локальной сети, который является веб-сервером, там расположены все скрипты и 1С.

Скрипты запускаются из браузера прямо с этого сервера.

 

 

Разница в том, что авторизация выполняется в данном случае платформой 1С.

 

 

Дальнейшие действия аналогичны тому, что выполняется при работе через промежуточный сайт.

 

Схема работы веб-клиента. Плюсы и минусы выбранных подходов

 

 

На схеме показан процесс выполнения запроса из браузера пользователя к 1С при варианте интеграции через промежуточный сайт.

Работа собственного веб-клиента состоит в том, чтобы показать пользователю некую страницу инициализации – мы ее называем «Главной страницей». На главной странице может быть все, что угодно – например, список документов.

А далее, в зависимости от того, что хочет пользователь, выполняются определенные действия. Если пользователь кликнул на строку списка, необходимо выполнить запрос, который проанализирует, какой в строке находится документ, откроет его форму и покажет пользователю.

 

 

В нашем случае все запросы выполняются через один HTTP-сервис, ему можно в параметрах передать название функции, которую необходимо выполнить. У этого подхода есть свои плюсы и минусы.

Плюсы

  • Ускоряется разработка кода. Если у вас появилась задача вызвать функцию, которую вы раньше не вызывали, вам не нужно дорабатывать HTTP-сервис, добавлять ему методы – вы вызываете функцию, указывая ее название на стороне клиента в JavaScript.

  • Если вы не доработали код, нет необходимости переопубликовывать базу, все будет работать.

Из минусов:

  • Можно выполнить любой код. При желании кто угодно может написать «Очистить информационную базу», и она действительно будет очищена. Чтобы этого не произошло, нужно проверять все входящие запросы.

 

 

При интеграции с сайтом используются промежуточные скрипты. Преимущества этого подхода:

  • база у нас доступна только для IP сайта – кто угодно не достучится до HTTP-сервиса;

  • вы защищены от DDOS средствами сайта.

Часто задают вопрос: что мы будем делать, если нас начнуть «ддосить»? Есть очень много инструментов, которые позволяют отловить DDOS для обычного сайта. Наши промежуточные PHP-скрипты – это и есть промежуточный сайт, для них действуют абсолютно те же правила, те же инструменты, как и для любого другого сайта. Поэтому отловить DDOS, определить его начало, легко и мы просто в определенный момент в нашем PHP-скрипте перестаем перенаправлять запросы в 1С. Наш веб-клиент при этом «ложится», но база 1С продолжает работать. На случай, если базу начинают долбить запросами, повиснет только промежуточная база – на работу основной базы это не повлияет. Но даже этот вопрос решается.

Из минусов:

  • незначительно увеличивается время HTTP-запросов.

 

Состав и интерфейс решения

 

Давайте покажу, как это выглядит на стороне 1С.

 

 

На стороне 1С веб-клиент – это набор объектов, общих модулей, справочников. Это все встраивается в родительскую конфигурацию, которая должна стать CMS-системой, СУБД для веб-клиента.

В этой же подсистеме находится HTTP-сервис, который принимает все запросы и вызывает исполнение общих модулей основной конфигурации.

Встраивание происходит бесшовно – можно взять весь этот набор объектов и встроить его в родительскую конфигурацию как расширение или путем объединения с cf-файлом.

Потребуется немного доработать один-два общих модуля, но этого достаточно для того, чтобы веб-клиент заработал.

 

 

Вот так выглядит набор промежуточных скриптов для сайта – здесь js, css и php.

Эти скрипты у нас лежат на сайте под nginx – они кэшируются, из 1С не берутся. Я не говорю о том, что брать скрипты из 1С – плохо, у каждого решения свои плюсы и минусы, но у нас сделано так.

 

 

Промежуточный скрипт PHP выглядит вот так. Здесь ничего сложного нет, он небольшого размера – всего 230 строк кода.

Для перенаправления запросов используется любимый всеми curl.

 

 

Вот так выглядит js-скрипт, который отвечает за фронт. Здесь строк намного больше – 5722. Это все написано за более чем 10 лет. Эта версия уже пятая, первую версию мы начали писать в 2008 году. Мы ей даже сами не смогли пользоваться. Вторую было стыдно показать людям. Только третью можно было использовать так, чтобы было не стыдно.

Итак, у нас есть скрипты сайта и подсистема в 1С – что мы получаем на выходе?

 

 

На выходе мы получаем возможность быстро и красиво выставить наружу данные этой 1С-ки, причем с соблюдением всех норм безопасности.

На экране – один из примеров нашего интерфейса, который называется «Заказ товаров».

 

 

При входе в личный кабинет пользователь видит свой список заказов.

 

 

Он может создать новый заказ и подобрать в него товары, причем, ему будут выведены цены, которые установлены для этого конкретного пользователя.

На выходе мы получаем возможность дать доступ в 1С кому угодно: от сотрудника собственной компании в интрасети до внешнего клиента. Причем это будет выглядеть непохоже на 1С и будет работать даже на мобильных устройствах.

 

Авторизация пользователей

 

 

Я уже говорил про то, что промежуточные скрипты помогают нам задействовать переиспользование сеансов за счет того, что для авторизации мы используем свой собственный справочник «Посетители сайтов». В этом справочнике указывается:

  • логин;

  • пароль пользователя;

  • его имя;

  • и объект ИБ – ссылка на элемент какого-либо справочника, которому соответствует посетитель сайта.

Кому соответствует посетитель сайта, зависит от конкретной конфигурации, например:

  • если речь идет о демонстрационной конфигурации «Заказы», то это будет контрагент (партнер);

  • если речь о конфигурации «1С:ITIL», посетитель будет пользователем.

 

 

Мы используем свой алгоритм авторизации. Его плюсы:

  • логин может быть привязан к справочнику любого типа – Пользователи, Контрагенты;

  • за счет переиспользования сеансов нагрузка на сервер снижается в разы.

Минус:

  • в ПараметрыСеанса.ТекущийПользователь всегда будет один пользователь – служебный, используемый для авторизации.

Минус не очень существенный, он ни на что не влияет, кроме RLS.

При поступлении HTTP-запроса в 1С вместе с его заголовками передается идентификатор сеанса, взятый из cookies. По этому идентификатору сеанса в регистре сведений мы находим посетителя сайта и подставляем его в документ.

 

 

Пароль служебного пользователя можно задать в файле default.vrd, но такой способ может вызывать ситуацию, когда после перехода на новую платформу веб-клиенты перестают работать. Это вызвано тем, что при перепубликации новой платформы пользователи на веб-сервере затираются.

Поэтому мы доработали свой скрипт init.php, добавили в инициализацию curl несколько строк:

  • Первой строкой для параметра CURLOPT_HTTPAUTH указываем, что у нас используется basic-аутентификация.

  • И второй строкой для параметра CURLOPT_USERPWD через двоеточие указываем имя и пароль пользователя.

Проблема уходит моментально. Вот два способа, чтобы запустить пользователя в 1С, не спрашивая у него логин и пароль.

 

 

В интрасети мы можем использовать стандартную авторизацию пользователей средствами 1С:

  • Это не требует доработки кода для определения параметра сеанса ТекущийПользователь – существенный плюс.

  • Но открытие отдельного сеанса на каждого пользователя значительно повысит нагрузку на сервер 1С – это существенный минус. От возможностей нашего сервера 1С зависит, сколько пользователей мы сможем запустить в базу данных.

Для внешних сайтов мы используем свой алгоритм авторизации через служебного пользователя. RLS в данном случае никак не работает, потому что все запросы будут выполняться под служебным пользователем – ограничения доступа к данным нужно эмулировать программно.

А для пользователей в интрасети, когда используется авторизация средствами 1С – RLS отработает нормально.

 

 

Покажу общий модуль «ЛичныйКабинетИнициатораСайт», в который приходят наши запросы.

Здесь происходит вызов функции НайтиПосетителяСайтаПоИдентификаторуСеанса(ПараметрыЗапроса), который в переменную ПосетительСайта возвращает нам ссылку на элемент справочника «ПосетителиСайта».

Если сайт используется в интрасети, тогда:

ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;

В этом случае у нас RLS нормально отработает.

Но если у нас используется служебный пользователь, мы пользователя определяем как:

ТекущийПользователь = ПосетительСайта.ОбъектИБ;

В этом случае RLS будет всегда одинаковым независимо от того, кто зайдет. В данном случае ограничения доступа к данным нужно отрабатывать программно здесь, в коде.

Например, если зайдет руководитель подразделения, мы отобразим ему часть страницы, которая предназначена для руководителя, но часть страницы, соответствующая рядовому сотруднику, не будет показана. И наоборот.

 

Как в браузере выполнить функцию 1С

 

 

Как в браузере выполнить функцию 1С, получить результат и отобразить его на странице?

Точно так же, как вы делаете при попытке достучаться из одной 1С-ки к HTTP-сервису другой 1С-ки – у вас для этого есть объект «Новый HTTPЗапрос()».

В JavaScript тоже есть его аналог, называется XMLHttpRequest, он работает с теми же принципами, все то же самое – вам необходимо указать наименование хоста, к которому вы присоединяетесь, передать параметры, получить результаты и обработать параметры.

Разница только в том, что в 1С, насколько я помню, до сих пор все HTTP-запросы синхронные, а здесь у вас запросы могут быть как синхронными, так и асинхронными.

 

 

Давайте на примере разберем, как нам выполнить функцию, которая получает цену товара. Например – мы добавляем в табличную часть номенклатурную позицию, и она добавляется вместе с ценой.

 

 

Как это происходит? Сначала нужно показать 1С-ке, для какого товара мы хотим получить цену. Давайте запустим отладку веб-страницы и вызовем в отладчике метод

ГлобальныйКонтекст.Формы.ТЧ_Товары.ТекущиеДанные()

Отладчик веб-страницы выводит нам абсолютно то же самое, что и отладчик 1С, когда мы пытаемся получить ТекущиеДанные() для динамического списка.

 

 

У нас есть структура, которая содержит данные колонок этой строки. Здесь выводится цена, номенклатура, характеристика, количество и т.д.

Чтобы получить актуальную стоимость товара, мы из текущих данных должны взять идентификатор ссылки (я чуть позже объясню, почему он здесь в таком непривычном виде) и передать его в 1С.

 

 

Как в 1С есть структура, точно так же в JavaScript есть ассоциативные массивы, у которых есть связка «Ключ/Значение».

В данном случае, мы для определенной строки хотим получить цену по определенному виду цен.

Соответственно, мы в ассоциативный массив «Параметры» передаем JSON-структуру с данными всей строки.

Далее мы выполняем функцию НоменклатураПриИзменении() общего модуля ЗаказТоваров и передаем в нее сериализованное значение ассоциативного массива Параметры.

Функция «ВыполнитьФункцию1С» достаточно простая, у нее есть четыре параметра:

  • ИмяФункции,

  • Параметры,

  • флаг «АсинхронныйВызов» – при асинхронном вызове мы функцию вызываем и интерфейс у нас освобождается, можно что-то параллельно делать. При синхронном вызове мы будем ждать до тех пор, пока 1С не выполнит запрос и не вернет данные.

 

 

Вот так выглядит функция «НоменклатураПриИзменении» в 1С – все данные из браузера передаются сюда в переменной «ПараметрыЗапроса» с типом Соответствие.

Через соответствие удобно получать параметры запроса в коде – например, получить вид цен через вызов ПараметрыЗапроса[“ВидЦен”]

Если параметр «ВидЦен» не будет передан в параметрах запроса, код не упадет, в значении ПараметрыЗапроса[“ВидЦен”] будет просто «Неопределено».

Обратите внимание, когда мы получили вид цен и данные текущей строки, мы получаем цену, помещаем ее структуру «ТекущиеДанные» и точно так же в виде структуры, конвертированной в JSON, возвращаем обратно в браузер.

И браузеры, и 1С работают в одинаковых терминах. Есть несколько уникальных типов данных, с которыми работает только 1С, но их немного. Поэтому разработать свой клиент 1С и работать с ним понятных 1С-нику терминах вполне реально.

 

Как передать ссылку из 1С в браузер и обратно

 

 

Я только что показал пример – чтобы получить цену номенклатуры, нам нужно передать ее (номенклатуру) в 1С.

У нас для этого есть две маленькие однострочные функции – ПредставлениеСсылкиДляСайта и ПредставлениеСсылкиОбъекта.

  • «ПредставлениеСсылкиДляСайта» возвращает структуру, куда упакована ссылка и ее представление.

  • ссылка упаковывается с помощью функции «ПредставлениеСсылкиОбъекта», где для нее сначала выполняется функция ЗначениеВСтрокуВнутр(), а потом КодироватьСтроку с параметром СпособКодированияСтроки.КодировкаURL..

Вот так мы получаем представление ссылочного объекта в 1С и передаем его в браузер, а потом из ссылочного представления получаем объект обратно.

Как видите, мы для этого используем функцию ЗначениеВСтрокуВнутр().

Конечно, сейчас правильнее использовать функцию XMLЗначение(), но для того, чтобы его использовать, нам необходимо помнить два параметра – ссылку и тип, к которому эта ссылка принадлежит.

А в случае использования функции ЗначениеВСтрокуВнутр() нам достаточно всего одного значения, выполняется функция довольно быстро, не тормозит. Если вдруг в каких-то будущих релизах платформы 1С эта функция перестанет работать, мы легко переделаем функцию ПредставлениеСсылкиОбъекта() – просто поменяем сериализацию на использование XMLЗначение(). Конечно, после этого в браузере представление ссылки будет выглядеть каким-то другим образом, но мы к этому тоже без проблем приспособимся.

Внизу на слайде показано, как сейчас в браузере выглядит представление ссылки.

Обратите внимание, здесь есть символы %22 и т.д. – это результат работы функции КодироватьСтроку(). Потому что результат функции ЗначениеВСтрокуВнутр() содержит фигурные скобки, а фигурные скобки по умолчанию в HTTP-запрос не пройдут – HTTP-запросы на таких служебных символах ломаются. Плюс JSON такое значение нормально не обработает, а мы любим JSON – в коде 1С мы все возвращаем через JSON, и в коде JS мы тоже сначала все данные кладем в ассоциативный массив, а затем при необходимости сериализуем в JSON.

Способ передачи данных между 1С и браузером – ассоциативный массив на стороне браузера и структура на стороне 1С. И наш любимый JSON.

Чтобы у вас все это нормально передалось, вам достаточно превратить ссылки в строку, чтобы не было служебных символов.

Любые другие строки, если вдруг в них будут знаки амперсанда, проценты, фигурные скобки и т.д., мы тоже обрабатываем функцией КодироватьСтроку(). А цифры и значения типа «Булево» передаются в JSON без изменений – этого достаточно, чтобы 1С и браузер могли обмениваться друг с другом информацией.

 

В итоге у вас на стороне клиента в конкретном поле input лежит ссылка на определенную номенклатуру – вы можете увидеть ее значение в атрибуте ref этого поля. А представление будет лежать в атрибуте value.

 

 

С точки зрения JS все сложнее – тут суть в том, что метод ГлобальныйКонтекст.Формы.ТЧ_Товары.ТекущиеДанные() возвращает массив со значениями полей текущей строки:

  • Ссылки «Номенклатура», «ЕдиницаИзмерения» и «Характеристика» у нас превращаются в ассоциативные массивы с полями «Ссылка» и «Представление».

  • «Количество» как было цифрой, так и осталось цифрой.

  • А служебный реквизит «Использовать характеристики» – это false, ложь.

Но если вам нужен простой веб-клиент, и вам достаточно хранения данных в элементах, используйте это – все будет нормально работать.

 

Решение проблемы с кодировкой

 

 

Когда вы разрабатываете под веб, у вас есть две боли.

  • Первая боль – гриды, таблицы.

  • Вторая боль – кодировка.

 

 

Когда в 2016 году мы разрабатывали подсистемы отправки файлов для нашего веб-клиента, нормально отправить файл в 1С нам удалось с 99 попытки.

Кодировки – это боль. Просто 1С-ники об этом не знают, потому что 1С за нас хорошо поработала, у нас в принципе нет этой проблемы.

Но когда вы передаете данные из браузера в 1С, вы с этим намучаетесь.

 

 

Чтобы у вас было меньше проблем с кодировкой:

  1. Кодировка вашего сайта должна быть только UTF-8. Если вам подсовывают другой сайт, у которого кодировка Windows-1251 и просят туда что-то интегрировать из 1С, всеми способами постарайтесь переделать в UTF-8. Вы потратите не один день, чтобы у вас в 1С приходили не кракозябры, а нормальная кириллица.

  2. Чтобы из браузера информация приходила красиво, используется функция encodeURIComponent – она преобразует служебные символы в трехсимвольные конструкции вида %22 и т.д.

  3. А в 1С вы просто эту закодированную строку пропускаете через функцию РаскодироватьСтроку. А если хотите передать это в браузер – используйте КодироватьСтроку.

  4. Файлы передавайте в виде двоичных данных.

Запомните эти четыре основных принципа, они сэкономят вам часы и дни.

 

Безопасность

 

 

Перейдем к вопросу безопасности.

Изначально у нас был один HTTP-сервис, которому можно написать что угодно, например: «Покажи зарплату директора», и он показывал.

Но, конечно, мы понимали, что в будущем будем эту ситуацию исправлять. Несколько последних лет мы постоянно занимаемся тем, что делаем наш сервис более безопасным. Мы прошли тесты по OWASP и много других. Недавно мы запустили проект, на котором было одним из основных требований было – сделать так, чтобы выполнить произвольный код извне было невозможно.

 

 

Какие есть способы обезопасить информацию.

Первое – запретить доступ к базе 1С посторонним людям. Для этой цели мы используем PHP-скрипты на сайте – база 1С непосредственно из браузера недоступна, доступ к ней организован через промежуточные скрипты.

 

 

 

При этом на промежуточном сайте у нас нет данных пользователей – злоумышленник никакой информации не получит.

Зато если мы на промежуточных скриптах отловим этого нехорошего человека, мы заблокируем его DDOS и избежим атаки на базу данных 1С.

 

 

При этом систему безопасности локальной сети можно настроить так, чтобы запросы принимались только с IP промежуточного сайта.

 

 

Доступ к конфигурации 1С осуществляется через объект конфигурации HTTP-сервис через служебного пользователя.

Но даже если кто-то узнал реальный адрес базы данных, видит HTTP-сервисы и хочет зайти в базу через служебного пользователя, он не сможет нарушить работу вашей системы, при условии, что вы для своего служебного пользователя установите соответствующие права.

Права должны быть такими, чтобы пользователь мог только читать объекты, которые видит на сайте и писать объекты, которые нужно писать – ему даже просмотр не нужен. И самое главное – запретите для служебного пользователя запуск тонкого и веб-клиента.

 

 

В нашу конфигурацию, отвечающую за генерацию веб-форм, встроены дополнительные меры безопасности:

  • Каждые 5 минут мы меняем идентификатор пользователя – пользователь не сможет перенести идентификатор на другую машину, чтобы зайти под другим пользователем, потому что пока он будет это делать, идентификатор «протухнет». Можно настроить так, чтобы делать это каждую минуту – проблем не возникнет.

  • Мы не используем OData, используем HTTP-сервисы – поэтому когда запрос приходит, то он отрабатывается в функцией модуля HTTP-сервиса, где мы можем проверить легитимность запроса программно.

 

 

Например, если мы хотим отобразить форму личного кабинета, то мы сначала проверяем посетителя сайта – найден он или нет. Если он не залогинен – мы возвращаем текст формы «ИнициаторНеАвторизован».

 

 

Текст формы личного кабинета мы вернем только если пользователь авторизован – иначе мы ему вернем сообщение, что не знаем его.

Но да, это нужно будет делать практически в каждой функции.

 

 

Также у нас есть система, которая проверяет запросы на внедрение кода.

Результат HTTP-запроса формирует функция ExecuteСформироватьРезультат() – в ней много разных проверок.

 

 

Запрос будет выполнен только если функция НетВнедренияКода() вернет «Истина».

 

 

Функция НетВнедренияКода() разбирает имя функции, которую просят выполнить – по точкам, по скобкам и т. д. И далее, путем парсинга мы определяем, является ли эта функция достойной выполнения.

 

 

Функции, достойные выполнения, сохранены в настройках сайта.

Например, сейчас мы можем выполнить только функции, которые лежат в общих модулях ЛичныйКабинетИнициатораСайт и ЛичныйКабинетИнициатораСайтPython.

В этой табличной части мы можем как перечислить все функции поименно в формате ТестовыйМодуль.Тест(), так и указать имена общих модулей, все функции которых разрешены к исполнению.

Все функции, которые находятся в разрешенных к выполнению общих модулях, проверяются на то, является ли текущий пользователь авторизованным. Если он не авторизован, функция выполнена не будет.

Это один из способов – таким образом мы запрещаем к выполнению даже функцию «ТекущаяДата», нам ее ни в коем случае не покажут.

 

 

В последней версии мы добавили дополнительные справочники, в которых можно указать обработчики событий пообъектно, задать общие и глобальные правила доступа к объектам.

Например, если определенный справочник могут видеть и изменять все, нам нужно явно указать галочками, что для него допустимы и открытие, и запись – иначе он никак не будет показан в интерфейсе, даже если передать HTTP-сервису команду показать форму этого справочника. Или, если мы хотим, чтобы список документов «Заказ» выводился с фильтрацией по ответственному пользователю – это тоже нужно явно настроить.

Проблемы с безопасностью есть, они существенные, но они решаемы. Но помните, чтобы их решить, вам надо будет приложить серьезные усилия.

 

Формирование отчета с параметрами

 

 

Одна из самых распространенных задач – запустить в базу своих сотрудников, чтобы они могли получить расчетные листки за определенный период, или внешних поставщиков, которые могли бы увидеть остатки в своих взаиморасчетах.

 

 

Чтобы пользователь мог сформировать такой отчет, нужно немного:

  • Дать пользователю возможность авторизоваться – я рассказал, как это делается.

  • Обеспечить возможность выбора элементов ссылочных типов. Чтобы иметь возможность формировать отчеты, вам нужно решить, как вы будете выбирать ссылочные типы, чтобы потом эту ссылку передать запросом. Это основная проблема, потому что не так просто сделать так, чтобы при нажатии на кнопку выбора организаций появился список объектов. Нам для реализации этой функциональности пришлось потратить очень много времени. Если у вас небольшой набор элементов, самое простое – реализовать обычный выпадающий список,. Но если у вас 200-300 элементов или иерархия – выпадающий список не подойдет, здесь нужен обычный грид, а это вторая боль, про которую я говорил. В разработке веб-клиентов для 1С есть две проблемы: кодировки и гриды.

  • Дать возможность ввести даты и время. Сколько бы нативным вам ни казался обычный элемент управления с типом date, он работает неправильно. Поэтому для ввода дат и чисел мы используем свои собственные обработчики.

 

 

Мы для ввода дат используем элемент управления типа text, к которому прикреплена библиотека xCal, отображающая календарь, и добавлены скрипты, которые обрабатывают нажатия клавиш, определяющие, какие символы мы можем сюда ввести. Только таким образом вы добьетесь нормального ввода дат и текста.

 

 

При формировании отчета вам нужно:

  • Вызвать функцию 1С, передать в нее параметры отбора – я уже рассказал, как это делается.

  • Проверить корректное заполнение параметров – это важно, потому что на сторону 1С можно передать все, что угодно

  • Сформировать отчет с помощью СКД.

  • Сохранить результат как табличный документ в формате HTML.

  • Прочитать этот HTML-файл и вернуть браузеру его содержимое.

Если посмотреть, не так уж много действий. Сделать свой веб-клиент сможет любой 1С-ник среднего уровня.

 

 

Но с передачей результата отчета в браузер тоже достаточно много проблем

  • Мы столкнулись с тем, что у диаграмм собственные стили – диаграммы в СКД очень красивые, выводятся в SVG-формате, но перед передачей результата стили у них нужно удалить.

  • Почему-то диаграммы лежат на месте пустых таблиц-контейнеров – нам их нужно как-то на место этих таблиц-контейнеров переложить, доработать.

  • Нам это вернется в виде HTML-документа с тегом body – получится один body внутри другого. Поэтому меняем корневой тег body на div.

  • Дорабатываем стили таким образом, чтобы они не пересекались со стилями других отчетов. Если мы решили отобразить две таблицы на одной странице, стили будут пересекаться друг с другом, и вместо двух таблиц будет каша.

 

 

Вот функция, которая отвечает за адаптацию HTML-документа в нормальный HTML-код – как видите, чтобы сделать HTML-документ нормально читаемым, потребовалось 200 строк кода.

Если вы захотите встроить формирование отчета 1С в существующий сайт, где будет много других стилей, все эти преобразования нужны.

Но если вы делаете простой вариант – просто страничку, куда ваш сотрудник может залогиниться и указать период, за который он хочет получить отчет – вы можете использовать для выбора периода стандартные нативные поля с типом date и ничего не конвертировать. Просто возвращаете текст вашего документа, и в 99% случаях он будет нормально работать. Свой веб-клиент – это несложно.

 

 

Очень важное замечание – бывало, что мы формируем отчет, но он нам не показывает ничего, потому что мы его сформировали с помощью СКД.

Дело в том, что изначально мы нашему служебному пользователю дали права только на чтение объектов.

Казалось бы, если мы прочитали данные запросом, вывели результат в HTML-код и вернули пользователю – мы должны увидеть таблицу. Но с отчетом это не прокатит – чтобы СКД сформировала данные и дала их отобразить, вам нужны права на просмотр объекта, а не только на чтение.

 

Интерфейс веб-приложения

 

 

Если вы научитесь формировать отчеты, у вас, чаще всего, будут покрываться 80% запросов ваших заказчиков, которые хотят выставить 1С-ку наружу.

 

 

На слайде перечислены элементы страниц, которых достаточно для формирования интерфейса. Динамический список – это обычная таблица table в терминах html, в данном случае у нее фиксированная шапка.

 

 

Для формирования страниц у нас используется два варианта.

В первом случае мы берем HTML, разбиваем на шаблоны, храним их в 1С, на стороне 1С полностью все собираем, возвращаем в виде HTML-кода.

Этот подход проще в освоении, разработка страниц занимает меньше времени. Проблема в том, что мы потом эти проекты отдаем на сопровождение обычным 1С-никам, которых пугают все эти фреймворки. И если что-то сломается, в нашем случае есть набор скриптов, которые не меняются годами, и там все 100% работает.

 

 

Во втором случае мы передаем на клиент только данные и при сборке страницы завязываемся на готовые фреймворки – такие как Vue, React, Angular.

В этом случае у нас появляются дополнительные места, которые могут сломаться. Поэтому сопровождение усложняется.

Поэтому второй вариант, когда мы собираем страницу уже на клиенте, для нас менее предпочтительный. Его минусы:

  • больше действий при разворачивании веб-приложения,

  • разработка занимает больше времени,

  • сопровождение для обычного 1С-ника становится более сложным.

 

 

Поэтому в реальности у нас клиенты предпочитают первый вариант, так как это значительно упрощает процесс сопровождения продукта силами собственных специалистов 1С.

На слайде приведена статистика – использование второго варианта за последние пять лет понадобилось только один раз из тысячи. Это 1% от общего числа выполненных проектов. И только на одной таблице из 10.

Поэтому мы выбрали простоту сопровождения для наших заказчиков.

 

Тяжелые HTTP-запросы

 

 

Давайте обсудим вопрос – какого размера строку мы можем передать?

 

 

Дело в том, что 1С довольно интересно работает с запросами больших размеров. Большие размеры начинаются примерно с 1 МБ. 3 МБ – это много для нее, 10 – очень много.

Например, мы из интерфейса нашего хелп-деска хотим передать в 1С файл.

Нам нужно из браузера, в котором есть JavaScript, в котором есть объект, XMLHttpRequest (по сути, HTTP-запрос в терминах 1С), сказать – вот двоичные данные, ты прими их платформой, передай HTTP-сервису – он знает, что с ними делать. Преврати эти двоичные данные в файл и передай в 1С.

 

 

Когда файлы у нас были размером 53 килобайта, все было окей. Но когда файлы стали размером 10 МБ, они стали загружаться за 51 секунду. При этом:

  • Сначала файл из браузера за секунду загружался на промежуточный сайт или напрямую в 1С. Отправляю файл, и счетчик загрузки за секунду доходит до 100%.

  • Но HTTP-сервис в отладчике запускался только через 50 секунд.

Проблема в том, что когда мы в 1С через HTTP-запрос пытаемся передать большой файл, он принимается платформой, платформа за секунду его закачивает, возвращает ответ, что его приняла. Но потом она что-то 50 секунд с ним делает, и все это время в HTTP-сервис файл не доходит.

И мы никак не можем повлиять на то, что файл так долго где-то висит. У нас были проблемы с тем, что пользователь пытался прикрепить файл, ему сайт не выводил никакой реакции о том, что файл прикрепился – пользователь повторял процедуру несколько раз, а мы потом получали сразу 10 файлов.

 

 

Даже если мы работали через промежуточной сайт, который превращал файл в двоичные данные в ОЗУ – в HTTP-сервис он все равно попадал только через 50 секунд.

 

 

Оказалось, 1С плохо принимает большие файлы, но легко их сама скачивает.

В чем преимущество промежуточного сайта на сервере:

  • Мы этот файл за 1 секунду закачиваем на промежуточный сайт и сохраняем как временный файл на диске.

  • Дальше перенаправляем HTTP-запрос в 1C, но не включаем в него данные файла, а просто говорим HTTP-запросу, что пришел файл – он лежит на PHP-сервере с таким-то названием.

  • 1С направляет HTTP-запрос на PHP-сервер, он забирает файл и загружает его за секунду.

В итоге вместо 51 секунды у нас получается 2,2 секунды.

Не знаю, почему так, возможно, есть более изящные решения.

Мы с этим столкнулись впервые в 2015 году, думали, что это проблема старых платформ, это исправится, но до сих пор не исправилось.

 

Вопросы

 

Какое у вас установлено время жизни сеанса и HTTP-соединения?

У нас используется стандартное время жизни сеанса – 20 секунд. Мы его никогда не меняли. В каких случаях есть смысл его менять? 1С долго запускается при первичном запуске. Если у нас кто-то зашел через HTTP-сервис и запустил 1С, в первый раз она загружается долго. При повторном запуске она будет загружаться быстро – это значит, что есть разогретый сеанс, который висит на сервере и через него все быстро выполняется. Есть смысл выставлять длительность жизни сеанса, чтобы хотя бы один сеанс висел разогретый и ждал, когда придет пользователь и захочет зайти в веб-интерфейс. Потому что на базах большого размера это заметно. Базы иногда могут подключаться по несколько секунд.

Как решается вопрос, если одновременно редактируется один и тот же документ?

Это, конечно же, необходимо блокировать на стороне сервера. Если честно, у нас пока такой необходимости не возникало. Если редактируется документ, он редактируется либо одним пользователем извне. Вопрос важный, для этого чаще всего нужно ставить программную блокировку. Либо сделать какой-то регистр сведений «Заблокированные объекты». Когда пользователь здесь открывает форму на просмотр, мы можем сразу создать соответствующую запись в регистре сведений и сказать, что этот документ менять нельзя.

Возможно ли заменить HTTP-сервис на SOAP веб-сервис? Если да, то какие различия в использовании будут при построении архитектуры?

Возможно, но зачем? HTTP-сервисы работают быстрее, они более оптимизированы для больших нагрузок. Если у вас нет HTTP-сервисов, потому что вы используете старую версию платформы – тогда да, возможно. Работать будет, но медленнее. У нас в промежуточном скрипте сейчас используется curl для HTTP-запросов, а здесь нужно будет поменять вызов curl на вызов веб-сервиса. И все будет работать.

В чем преимущество перед metadata.js – нагрузка на сервер ниже?

Про metadata.js ничего не скажу, это не наша разработка, у нас аналог. Но нагрузка на сервер у нас низкая – причем не в разы, а на порядки. В моем докладе 2017 года об этом подробно рассказано. Разница в экономии доходила до 50 раз – нам удавалось на одном сеансе веб-сервера запускать 50 пользователей.

А какой стандарт JSON используете? JSON-RPC?

Стандартный JSON, который отдает 1С или JS. Если нам нужно передать данные из браузера в 1С, я не собираю JSON руками. Я беру массив или ассоциативный массив и потом делаю JSON.stringify() и получают JSON. Аналогично и в 1С – я использую для этого ЧтениеJSON и ЗаписьJSON.

Получилось ли у вас реализовать постраничный вывод?

Да, он у нас не совсем постраничный. Это подгрузка строк. У нас есть справочник, в котором около 10 тысяч записей. Если бы мы их выводили сюда сразу все, то открытие этой формы заняло бы около 30 секунд. А сейчас у нас реализована порционная подгрузка – по сути, это тот же самый постраничный вывод, но здесь оно работает так же, как динамический список 1С. По умолчанию показываем 50 строк и потом подгружаем еще по 50. Обычный постраничный вывод тоже работает, но там есть особенности – для его отображения нужен индекс, по которому мы будем сортировать, получать эти порции. Пришлось помучиться. Но это реально, работать будет.

Доступно ли что-то из показанного вами в опенсорсе?

Мы этот вопрос существенно обсуждали с маркетологами и со специалистами разных областей. Они сказали, что не надо выкладывать, это сложный проект, сложный продукт. Если вы его выложите, у вас начнут просить дополнительную документацию по нему, вы погрязнете в объяснении, как это работает, а у людей сложится плохое мнение, потому что им не объяснили, как этим пользоваться. Поэтому у нас, к сожалению, есть возможность продавать за деньги и объяснять, как это работает только тем, кто заплатил за продукт.

Как выводится всплывающая форма?

Мы взяли здесь за основу Bootstrap. У нас не используется никаких глобальных библиотек, все свое, за исключением каких-то мелких компонент вроде xCal, который нам позволяет отображать календари. Мы взяли за основу окно Bootstrap, просто сделали для него собственный обработчик отображения. В данном случае, это div с классом modalwin. Только мы для него стиль display: block устанавливаем программно своим кодом. Плюс у него есть подложка. То есть реализовано совсем просто – это div с абсолютным положением на странице.

Как реализован ввод по строке – при каждом keyup происходит обращение к HTTP-сервису?

Не совсем при каждом, у нас реализовано отложенное выполнение функции, мы ждем 300 мс с момента окончания ввода текста – поэтому в итоге выполняется всего один запрос. Поищите в интернете информацию по ключевому слову debounce – вы найдете много статей на эту тему. В данном случае, у нас событие вызывается один раз при наступлении последнего нажатия.

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на онлайн-митапе "Web-клиенты для 1С". Больше статей можно прочитать здесь.

Приглашаем всех 11-12 ноября принять участие в INFOSTART EVENT 2021 в Москве: //infostart.ru/events/1451228/

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Snitkovski 88 21.08.21 11:21 Сейчас в теме
Давно внимательно наблюдаем за развитием Проекта - Юрию респект! 8-)
maksa2005; TitanLuchs; +2 Ответить
2. wacko 249 21.08.21 17:23 Сейчас в теме
3. krylovim 23.08.21 10:58 Сейчас в теме
Хорошая подробная статья, спасибо автору.

Самого всегда интересовали вопрос лицензирования в таком подходе.
Все собираюсь подробный вопрос отправить в 1С, но Ваша статья опередила, задам Вам :)

- считается ли такой подход мультиплексированием? (судя по ответам на типовые вопросы лицензирования - должен бы)

- есть ли различия в трактовке мультиплексирования при использовании промежуточных звеньев (бекенд, отдельные СУБД для сайта, обмен данными вместо прямого обращения)?
По сути это вопрос про грань между фронтенд на JS <-> 1C и, например, БУС <-> 1C

Прорабатывали ли Вы эти вопросы и как ориентируете пользователей продукта?
4. Pawlick 10 24.08.21 00:17 Сейчас в теме
(3) Присоединяюсь. Поскольку вызов 1С происходит под одной учётной, а по факту базу потенциально используют хреналион пользователей, то как на это смотрит отдел лицензирования 1С?
axelerleo; +1 Ответить
5. axelerleo 326 25.08.21 11:03 Сейчас в теме
Очень познавательная и информативная статья!
Пришел к похожим подходам для использования в корпоративной сети - скрипты и вспомогательные файлы - на веб-сервере. Но вместо возврата готового html сделал возврат json-а, а отрисовку, пагинацию и прочее реализовал уже средствами браузера.
За идею переиспользования одного служебного пользователя - спасибо, любопытный подход! Но тоже возник вопрос по лицензированию. Зная 1С, что-то мне подсказывает, что такая стратегия может выйти боком в случае проверки.

Хотя на самом деле это очень странная политика лицензирования.
Вот могу я например, подключить результаты http запроса в excel в качестве источника данных. Нужно ли мне на это дело отдельную лицензию?
Или допустим, интегрирована 1С и sharepoint portal. На портал могут заходить порядка 700 человек. Сам портал данные дергает из 1С ЗУП - кто в отпуске, у кого ДР, кто в командировке, и т.п. Нужно ли при этом 700 лицензий 1С? технически - не нужно, т.к. актуализация выполняется регламентировано раз в сутки по ночам... в общем, не совсем понятно.
А если так подходить к мультиплексированию, то давайте посмотрим на интернет-магазины: на сайте 10 000 человек, они видят остатки и номенклатуру, загруженную из 1С. Период обновления остатков, допустим, 30 минут. Нужно ли нам 10 000 лицензий? :)
6. AntonProgma 41 25.08.21 12:37 Сейчас в теме
Для выполнения лицензионной политики можно рассмотреть вариант базы данных на php-сервере. Минибитрикс. Таким образом это уже не прокси для работы с 1с, а отдельная система, с которой у 1с настроен обмен. Обмен может быть частым.
7. Pawlick 10 25.08.21 15:42 Сейчас в теме
Коллеги, тут в каком то обсуждении много копий на эту тему поломали. И в общем вердикт такой: нельзя так делать. Там где то в лицензионном соглашении есть формулировка со смыслом: один пользователь, получающих информацию из бд - одна лицензия.
Тут конечно можно долго спорить про формулировки, но применять такой подход в тиражом решении - крайне опасно. Потому как в случае чего суд однозначно станет на сторону 1С. И расходны, который понесёт изобратеталь будут несопоставимы с расходами на создание сервера баз данных с нуля, под управлением чего тот не пропиоритарного.
8. TitanLuchs 344 25.08.21 15:52 Сейчас в теме
Про лицензии. Есть официальный ответ от 1С, где сказано, что:

Данный подход - это типичное мультиплексирование и для каждого пользователя такого веб-клиента должны быть куплены лицензии. Они могут быть не активированы, просто стоять в шкафу, и если что - вот у нас 100 пользователей, вот 100 лицензий.

Поэтому мы каждому своему клиенту говорим то же самое.
Даже если между 1Ской и браузером пользователя есть прокладка в виде скриптов, даже если авторизация идет под одним сеансом - неважно: если в итоге на стороне первоначального отправителя запроса сидит живой человек, то это пользователь, и для него нужна лицензия. То есть, ботами, обменами и прочими роботами стучитесь сколько угодно. Человеками - только с лицензией. Фактически она не съедается, поэтому можно держать в шкафу нераспечатанной.

По поводу "а нафига тогда вообще весь этот сарафан, если сэкономить не получается". На самом деле очень даже получается хотя бы на железе. Подключение через http и переиспользование сеансов значительно экономит оперативку и прочие ресурсы сервера. Проводили расчеты для системы, к которой должны были подключаться несколько тысяч пользователей, экономия больше миллиона. Плюс на http-сервисах можно нарисовать любой интерфейс, и дело не только в раскраске, а в возможности запуститься на чем угодно, где есть браузер. Я могу написать веб-морду, которая без проблем заработает на древнем андроиде 4-й версии с экраном 4 дюйма, причем оно будет работать комфортно. Да, я в курсе, что сейчас таких нет, но это означает, что написанный сегодня интерфейс будет и через 10 лет работать так же хорошо, как и в день подписания актов и оплаты работ по его созданию.
9. Octopus 337 25.08.21 15:54 Сейчас в теме
(8) А что если у меня в условном вебе сидит пять человек, рисуют свои запросы, а я их потом одним сеансом отправляю в 1С?
10. TitanLuchs 344 25.08.21 15:56 Сейчас в теме
(9) Неважно, сколько сеансов. Важно, сколько человек (и на скольки девайсах, конечно же) рисуют.
Вопрос, конечно, как если что доказать, что вот тут у вас где-то 5 человек сидит, а не 1, не 50, не 500.
11. AntonProgma 41 26.08.21 11:17 Сейчас в теме
(10) а если добавить базу данных, к которой 1с будет обращаться, обмениваясь данными, а не наоборот, то все норм) Даже если обмен раз в секунду происходит.
TitanLuchs; +1 Ответить
12. TitanLuchs 344 26.08.21 15:05 Сейчас в теме
(11) Верно, но это будет уже не совсем онлайн со всеми его минусами. Самый главный минус - обмен может отвалиться, а пользователь об этом не узнает и будет работать с устаревшими данными, как с актуальными. Это в некоторых ситуациях и не минус вовсе, но в наших проектах чаще всего именно недостаток, а не преимущество. Ну и "холостые" обмены без активности пользователей тоже излишни. Да и любое дополнительное звено - потенциальная причина сбоя.
В общем, схема вполне работоспособная, жизнеспособная и возможно востребованная рынком, но не пересекается с нашей разработкой и поэтому нами мало изученная.
13. AntonProgma 41 26.08.21 15:32 Сейчас в теме
(12) база данных веб-сервиса может быть в оперативной памяти. А http запрос в локальной сети даже средствами 1с можно делать часто и не накладно. Наверное. Само собой всю схему придётся менять)
14. TitanLuchs 344 26.08.21 17:52 Сейчас в теме
(13) Я ж не утверждаю, что это не будет работать или будет работать плохо. При хорошем исполнении получится вполне достойный функционал.
15. AntonProgma 41 26.08.21 18:13 Сейчас в теме
16. Altez 256 30.08.21 06:14 Сейчас в теме
(15)
функциональность


Кто-нибудь объяснит преимущество длинного слова перед коротким?
Прикрепленные файлы:
17. AntonProgma 41 30.08.21 09:58 Сейчас в теме
(16) счит-ся, что эт корот. форма - жаргон и, как термин, обоз-ет нечто друг-е, чем набор функций
18. Altez 256 30.08.21 11:46 Сейчас в теме
(17) АИФ пишет, с короткой формы снято клеймо "спец., компм.жарг. " (https://aif.ru/society/education/funkcional_ili_funkcionalnost_kak_pravi­lno)

По личной статистике чаще от продаванов звучит длинная форма, от техников - короткая.
вот такая

А статья-огонь, хотелось бы и про metadata.js столь же доходчиво. Из коробки не стартануло у многих.
19. AntonProgma 41 30.08.21 11:56 Сейчас в теме
(18) должна написать Российская газета, чтобы это официально вступило в силу.
Оставьте свое сообщение

См. также

Что делать, когда методы объекта ПолеHTMLДокумента.Документ (УФ) недоступны?

WEB-интеграция Управляемые формы 8.3.14 Бесплатно (free)

Начиная с версии 8.3.14 некорректно загружаются некоторые веб-страницы в поле HTML-документа на УФ - методы ПолеHTMLДокумента.Документ недоступны. Методом "научного втыка" удалось обойти этот глюк системы.

27.02.2023    534    romasna    2    

8

Подробная настройка работы с сервисом 1С:Сверка

WEB-интеграция Анализ учета Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье будет описано, что такое сервис 1С:Сверка, для каких целей он необходим и как его корректно настроить, а именно: подключать 1С сервис, привязывать к нему электронную почту, отправлять запросы поставщикам, получать от них ответы, сверять данные, а также отвечать и писать клиентам.

19.01.2023    727    Koder_Line    0    

0

Пагинация в 1С

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Те, кому приходилось делать REST API на базе HTTP-сервисов 1С, могли в какой-то момент столкнуться с необходимостью разработки методов, которые позволяли бы возвращать данные с пагинацией, т.е. последовательными порциями. В языках общего назначения пагинация реализуется простым использованием операторов OFFSET и LIMIT в SQL-запросе к базе данных. В языке запросов 1С оператора OFFSET нет, поэтому всем приходится решать эту задачу обходными способами. Один из таких обходных способов представлен в этой статье.

09.01.2023    2733    aleksei_adamov    36    

21

1С бакэнд (каталог товаров)

WEB-интеграция Платформа 1С v8.3 1С:Розница 2 Россия Бесплатно (free)

Серверная часть на 1с8 для веб каталога. Попробую поделиться опытом, как я использовал 1С в качестве веб сервера для веб витрины.

01.01.2023    1548    aldar    7    

20

Новый SimpleWEB – тот же Simple, теперь еще web

WEB-интеграция Мобильная разработка Мобильная платформа Бесплатно (free)

Представляю новый отдельный проект на старой семантике – фремйворк для создания веб приложений. Для разработчика симпла ничего не меняется – все тот же стек разработки, тот же конфигуратор и принципы разработки, но конфигурации теперь можно запускать не только на Андроид, но и в виде веб – приложений. Т.е. теперь платформы две – мобильная и веб, в два раза больше поводов перейти на этот стек разработки. Проект пока на стадии альфы, но развивается.

19.12.2022    2832    informa1555    9    

39

Возможности доработки выгрузки из 1С в Битрикс

WEB-интеграция Платформа 1С v8.3 Управленческий учет Бесплатно (free)

В статье собраны некоторые полезные и интересные примеры доработок выгрузки из 1С на сайты на платформе Битрикс (Возможно, что-то подойдёт и для WordPress и других платформ, принимающих типовую выгрузку на сайт из 1С). Доработки рассмотрены без привязки к конкретным конфигурациям, примеры кода взяты в основном из доработок УТ 10 и 11. Некоторые доработки требуют изменений на стороне Битрикса, некоторые укладываются в типовой функционал. Примеры взяты из личного опыта, возможно, описание где-то не полное, т.к. доработки делались в разное время. Если материал будет интересен или будут аналогичные актуальные задачи, буду стараться дополнять статью более подробным описанием и примерами.

01.11.2022    1441    de0nis    2    

13

Реализация нестандартных (для 1С) интерфейсных решений в Web-клиенте

WEB-интеграция Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Онлайн-сервисы, построенные на 1С, могут использовать все многообразие веб-технологий. О том, как спроектировать, реализовать и красиво оформить интерфейс продукта 1С, в докладе на конференции Infostart Event 2021 Post-Apocalypse рассказал CTO компании WiseAdvice Олег Филиппов.

21.10.2022    7097    comol    15    

70

Rest API от чайника для чайников

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

На написание статьи побудило чтение книги "Технологии интеграции "1С:Предприятия 8.3"" Хрусталевой Е.Ю. В первой главе там постоянно чередуются слова REST, REST-интерфейс, архитектура REST и т.д. Мне стало интересно, я начал копать, что это такое, и тема оказалась достаточно интересной.

06.06.2022    14482    zeltyr    2    

11

Модуль переводов и платежей QIWI

Розничная торговля WEB-интеграция Платформа 1С v8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Инструкция по установке и работе "Модуля переводов и платежей QIWI" для УТ11.4. Публикация создана с целью размещения актуальной онлайн инструкции по работе пользователей с функционалом оформления платежей или переводов КИВИ через РМК в УТ11.4, а также для описания установки модуля в УТ 11.4 и размещения необходимых библиотек dll.

03.06.2022    759    Rastopchinss    5    

2

Загрузка выпусков подкаста Радио 1С Энтерпрайз

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Код для загрузки всех выпусков подкаста Радио 1С Энтерпрайз для оффлайн-прослушивания.

29.04.2022    1232    q_i    9    

16

УПП: Ошибка при взаимодействии с ФСС

Регламентированный учет и отчетность WEB-интеграция Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

При обновлении релиза УПП до 1.3.178.2 пользователи начали жаловаться, что не отправляются в ФСС документы "Ответ на запрос ФСС для расчета пособия" и "Сведения о застрахованных лицах, ФСС". В статье предложен вариант обхода данной ошибки, возможно, это кому-то поможет.

28.04.2022    1532    alex_bob    8    

3

Методика интеграции HTML редакторов в поле HTML документа базы 1С

WEB-интеграция Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

В статье описаны критерии WYSIWYG HTML редакторов и общая картина интеграции с платформенными механизмами. На момент платформы 1С 8.3 и возможно для будущих релизов описание будет скорее всего актуально. Апробировано на 1С 8.3.20 и 8.2.12, а также на мобильной платформе 8.3.19.59.

12.04.2022    1942    user1206119    2    

13

Создание кодогенератора для Postman

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Опишу порядок разработки кодогенератора для Postman c использованием OneScript и HTTPКоннектор.

13.03.2022    1551    malikov_pro    3    

9

Как из 1С отдать миллионы строк в BI и успеть это сделать быстро

Консолидация данных Анализ и проектирование ИТ-систем WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

На онлайн-митапе «Бизнес-анализ по данным базы 1С. Интеграция c платформами BI» выступил ведущий разработчик WiseAdvice.tech Дмитрий Фурцев. Дмитрий рассказал о том, как отдать миллионы строк из 1С в платформу бизнес-аналитики и не потратить на это сутки.

14.02.2022    5363    Fudj1k    11    

22

Передача сообщений из 1С в MS Teams

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример организации уведомлений в канал MS Teams.

09.02.2022    2305    Alex_YAM    4    

24

Работа с 1С через протокол OData

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В данной статье мы будем рассматривать работу с данными информационной базы через протокол OData (далее OData).

17.12.2021    34856    ProgrammingStore    27    

87

Подключение к HTTP-сервису с авторизацией посредством передачи клиентского SSL-сертификата

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

В статье хочу поделиться опытом настройки подключения 1С к стороннему HTTP-сервису, использующему авторизацию посредством передачи клиентского SSL-сертификата.

07.12.2021    11456    kholkin    12    

106

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С (Часть 2)

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Это вторая часть цикла статей, посвящённых типовому модулю интеграции 1С Предприятия и Битрикс24. Цель данной части: рассмотреть тонкости, связанные с обменом товарами и сопутствующими сущностями (спойлер - единицы измерения и свойства товаров). Также затронем некоторые нюансы связи сущностей 1С и Б24 (относящиеся не только к товарам) и их побочное влияние при переносе данных из модуля в модуль (при смене конфигурации, переустановки или обновлении модуля).

27.11.2021    9181    freegman74    16    

19

Web консоль управления сеансами 1С

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мы дали ему название adm1c, он позволяет посредством веб доступа удалять или смотреть на сеансы в 1С базах и при необходимости удалять их. Да и что тут такого, сказали бы, есть же консоль на win, с нее же это можно делать, и все верно, но есть пара но.

26.11.2021    3154    4ernuy    16    

28

Реализация перевода текста средствами Azure

WEB-интеграция Локализация решений Платформа 1С v8.3 Россия Бесплатно (free)

На днях взялся за реализацию печатной формы, где данные должны быть представлены на иностранном языке. На удивление нашёл крайне мало информации по данному вопросу. Поэтому решил написать эту статью.

19.11.2021    764    user1559835    2    

4

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Цель статьи - указать на подводные камни и нюансы, о которых “не пишут на заборах” и которые встретились мне за время внедрения типового модуля интеграции 1С и Битрикс24. Будет интересна для людей, кто подумывает о том, чтобы настроить интеграцию, и хотят понять, с чем столкнутся. А также для тех, кто уже работает с подобным обменом, столкнулся с какими-то из описанных ситуаций и хочет понять, что пошло не так и “как жить дальше”. Постараюсь все описать “человеческим” языком с минимальной долей терминов, так как статья, надеюсь, будет полезна не только программистам.

07.11.2021    12952    freegman74    13    

37

Окей, Google

WEB-интеграция Платформа 1С v8.3 Россия Бесплатно (free)

Пример интеграции Google Ассистента с 1С. В основе которого лежит платформа Dialogflow CX для понимания естественного языка.

28.10.2021    2176    Soloist    6    

29

Повышение производительности веб-сервисов. Переиспользование сеансов

WEB-интеграция HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Повышение производительности веб-сервисов. Переиспользование сеансов. Практическая реализация.

20.10.2021    4931    sorter1    3    

47

WEB/HTTP сервисы. Базовые отличия и применение на практике

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Рассказываем о WEB и HTTP сервисах, их практическом применении, о шишках, которые мы набили, и о выводах, которые сделали. Спойлер: тех, кто дочитает статью до конца, ждет бонус от автора.

04.10.2021    29982    Neti    23    

114

Быстрое чтение составных http сообщений multipart/form-data

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Алгоритм быстрого разбора составного http сообщения multipart/form-data.

26.09.2021    3127    cherkasovvitalik    4    

56

Интеграция 1С с Битрикс24 через вебхуки

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Пример получения токена и http запрос к API битрикса.

15.09.2021    9755    TyurinArt    11    

32

Обмен с HTTP сервисом файлами по формату multipart/form-data

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Потребовалось отправить картинку в теле запроса в HTTP сервис методом POST, куча реализаций, но есть маленькие нюансы, если хотя бы кому-то поможет, то уже это было не напрасно.

07.09.2021    11382    ix5s    25    

67

Разработка гибридного web-приложения на 1С, возможности и ограничения

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Все чаще разработчики склоняются к использованию 1C в качестве бэкенда при разработке веб-приложений. Но благодаря встраиванию веб-клиента 1С в сайт можно получить еще больше готовой функциональности. О том, как реализовать гибридное приложение за счет связки 1С с другими веб-технологиями, рассказал разработчик компании Neti Эльдар Мингалиев.

06.09.2021    5291    Бэнни    12    

51

Работа с WEB-сервисами под HTTPS на примере прямого обмена между базами (1С – 1С) 

WEB-интеграция Платформа 1С v8.3 Россия Бесплатно (free)

Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С. Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).

03.09.2021    12241    UltraUnion2005    9    

35

Умная маршрутизация: о сложностях интеграции с 1С (часть 2)

WEB-интеграция Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В статье будет много примеров кода с комментариями работы расширения для обмена данными УТ11.4 с Яндекс.Маршрутизацией через выгрузку/загрузку EXCEL файла.

27.08.2021    2842    greencactus    7    

18

Умная маршрутизация: кейс интеграции с 1С (часть 1)

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Как мы решали проблемы с доставкой в нашем интернет-магазине, внедрили новый бизнес-процесс за 3 месяца и научились меньшим количеством машин привозить больше заказов клиентам.

18.08.2021    6650    greencactus    42    

61

Сравнительный анализ вариантов интеграции между системами

Файловый обмен (TXT, XML, DBF), FTP WEB-интеграция Внешние источники данных Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup «Интеграционные решения для 1С» выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами кейсами из собственной практики: какие интеграционные решения остаются актуальными до сих пор, а каких приемов стоит избегать – даже в безвыходных ситуациях.

30.07.2021    4531    SergeyN    1    

10

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика (Украина)

WEB-интеграция Платформа 1С v8.3 Украина Бесплатно (free)

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика, Украина. Тестирование проводил на 1С:Предприятие 8.3 (8.3.10.2561).

28.07.2021    3365    Pervuy    5    

5

Доработка в расширении Яндекс маркета (скачать все этикетки)

WEB-интеграция Платформа 1С v8.3 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Бесплатно (free)

Доработка кнопки "Скачать все этикетки" - выбрали каталог и сохранили все за один раз, а не 100500 раз нажимаем кнопку сохранить.

08.07.2021    1435    rst_filippov    1    

2

Пример организации HTTP сервиса на 1С: Документооборот. Источник 1С: ЕРП => Приемник 1С: Документооборот

WEB-интеграция Платформа 1С v8.3 1С:Документооборот Бесплатно (free)

Статья - пример для разработчика, как можно, не используя подсистему Интеграция с Документооборотом, управлять процессами, а именно на нашем примере прерывать выполнение процессов в 1С: Документооборот. Используя данный пример, можно организовать http-сервис в любой конфигурации 1С, которая поддерживает механизм HTTP сервисов.

13.05.2021    4542    Flover    4    

24

Настраиваем авторизацию пользователей 1С через Okta

WEB-интеграция Платформа 1С v8.3 Бесплатно (free)

Чем больше в компании различных конфигураций и сервисов, тем актуальнее становится проблема единой системы авторизации single Sign-On. Его лидером практически безоговорочно считается Okta. Но на просторах интернета очень мало информации про интеграцию 1С с Okta через протокол OpenID Connect. Что ж, настало время восполнить недостающие пробелы и перевернуть эту печальную страницу в вашей истории

30.04.2021    6606    ripreal1    16    

41

Правила обмена больше не нужны

Внешние источники данных Обмен между базами 1C WEB-интеграция Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    19709    Nikola23    41    

80