Каталог решений - Подкапотное пространство веб-клиента

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

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

В наличии

Юрий Лазаренко, ведущий разработчик компании «Цифровой кот», на конференции Infostart Event 2021 Post-Apocalypse рассказал, как устроен самодельный веб-клиент, и какие практические приемы помогут эффективно интегрировать сайт с базой 1С.

Категория:

Описание

О своем веб-клиенте я на Infostart Event рассказывал уже три раза:

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

 

Компромисс. Что общего между Кадиллаком и веб-клиентом для 1С?

 

 

Я автомобилист, вожу машину с 1992 года. Права получил в 1994-м. На слайде представлены 2/3 моего автопарка. Как видите, у меня было очень много всяких разных машин, я долго подбирал себе что-то подходящее – менял машину в среднем каждые два года, потому что обязательно находился какой-то фатальный косяк.

 

 

Последние 7 с лишних лет я катаюсь на таком Кадиллаке. Это уже морально устаревшая модель, на таких давно никто не ездит, но мне он нравится – «зашел», что называется.

 

Мне нравится, что он безопасный, надежный, красивый, быстрый, мощный – честный E-класс за относительно небольшие деньги.

Но у этой машины есть недостаток, который мне не нравится.

И дело не только в том, что запчасти на него стоят в 10 раз дороже, чем на Ладу Весту. И не в том, что он жрет 20 литров – это приемлемо.

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

Когда у меня был BMW 84-го года выпуска, и в нем сгорала лампочка в фаре, я останавливался, поднимал капот, откручивал крышку, доставал лампочку, ставил новую (запасная всегда есть), закручивал крышечку, закрывал капот и ехал дальше. Прямо здесь же, на дороге. Две минуты и 200 рублей затрат.

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

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

Я этот Кадиллак называю «Компромисс». Потому что он, конечно, классный, мне нравится. Но с другой стороны, мне хотелось бы купить Бентли, чтобы кататься на чем-то лучшем.

 

 

При этом меня душит жаба, потому что обслуживать Бентли очень дорого.

Когда в 2008 году под окнами нашего офиса сломался Бентли, приехали специальные люди и тыкали в него всякими приборами. Вы когда-нибудь видели автослесарей в одинаковых красивых чистых комбинезонах? Они его диагностировали примерно два часа, потом пытались реанимировать. Когда им это не удалось, приехал специальный автовоз – Бентли погрузили и увезли.

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

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

Я понимаю, что хорошие вещи стоят дорого, и я готов за новую машину заплатить, как за новый Кадиллак. Но мне хотелось бы, чтобы у нее были мощность, комфорт и понты Бентли, а обслуживание – как у Лады Приоры. Чтобы ее можно было, если она на дороге сломалась, тут же починить и поехать дальше.

И если в мире автомобилей это – утопия, то в мире 1С таким компромиссом является собственный веб-клиент на 1С.

 

Преимущества собственного веб-клиента. Скидки в браузере одним запросом

 

 

Например, у вас есть компания, которая продает товары оптовикам – тысяча постоянных клиентов, 10 000 товаров, 15 видов цен, 3 вида скидок, 15 типовых соглашений, у 20% клиентов – индивидуальные соглашения.

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

 

 

А теперь посмотрите, как это делается в собственном веб-клиенте.

Если мы кликнем на ссылку «Рассчитать скидки», то видим, что там вызывается функция JavaScript «РассчитатьСкидки()». Идем в нее – и там, обратите внимание, всего одна строка, которая вызывает функцию «Рассчитать скидки» общего модуля.

 

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

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

 

Реалии стандартной интеграции 1С и веб-сайта

 

 

Но, когда вы хотите запустить WordPress + 1C + Обмен, разработчиков должно быть как минимум двое – 1С-ник и веб-программист.

А чаще всего, над ними нужен еще и третий, потому что эти двое обычно договориться не могут, и нужен третий, который их поставит и скажет: «Любитес!».

И это еще не все – чаще всего, нужен еще и фронтендер.

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

 

 

Потом они еще долго будут договариваться – спихивать друг на друга ответственность за возникающие проблемы: «Мы вам отправили JSON, а от вас ничего не пришло».

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

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

 

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

 

 

Что такое в принципе свой собственный веб-клиент на 1С?

 

Это подсистема, в которой есть HTTP-сервис, принимающий запросы от JavaScript, обрабатывающий их и возвращающий обратно в HTML. В принципе, все довольно просто.

 

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

  • В интрасети – когда мы организуем через веб-клиент доступ к базе для своих сотрудников.

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

Эти режимы работы отличаются.

 

 

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

 

 

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

Это – два основных отличия, но они очень много означают.

 

Авторизация: с помощью 1С или собственный алгоритм – в чем различия

 

 

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

 

 

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

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

 

 

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

При работе через промежуточные скрипты у нас создается справочник, который называется «Авторизация пользователей». Там есть реквизиты «Логин», «Пароль» и ссылка «Объект информационной базы». Это – ссылка на произвольный справочник базы – на справочник «Контрагенты», «Партнеры». Если у нас это кабинет партнера, логично, что мы здесь сразу укажем партнера, который у нас залогинился.

 

 

У этого алгоритма авторизации есть свои плюсы:

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

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

Минус у него такой:

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

 

 

Есть два основных варианта, которые позволяют задать этого пользователя:

  • Первый вариант – указываем логин и пароль в явном виде через default.vrd. Минус этого способа в том, что наша база торчит наружу и любой, кто знает адрес этой базы, туда автоматически залогинится.

  • Можно указать логин и пароль в параметрах curl. В этом случае любой, кто захочет достучаться до вашего HTTP-сервиса, получит окно ввода логина и пароля. Это – более безопасный вариант.

 

Преимущества работы через служебного пользователя

 

 

Чем так хорошо работать через служебного пользователя?

Когда кто-то подключается к базе через HTTP-сервис, на сервере создается сеанс, который называется «Соединение HTTP-сервиса».

Представьте, что это кафе на рисунке – ваш сервер, в котором по умолчанию четыре «кассы», больше он не вмещает. Пока никто не подключился, сеансов нет.

 

 

Может быть, вы замечали, когда через HTTP-сервис первый раз к базе подключаешься, она долго тупит – 3-5 секунд. И только потом появляется результат. Знаете, почему так?

Потому что требуется какое-то время на то, чтобы этот сеанс загрузился. Т.е. клиент пришел, и ему нужно 3-5 секунд подождать для того, чтобы база ему дала ответ.

 

Клиент ушел, но «касса» при этом остается работать. Т.е. сеанс у вас не гасится. А это означает, что если к вам заходит следующий клиент, то база готова принимать его запросы сразу.

 

 

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

 

 

Если вдруг так получилось, что пришло одновременно два запроса – не проблема, поднимается вторая «касса».

 

 

И так далее до тех пор, пока ваш «ресторан» не заполнится полностью.

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

 

 

Получается, что следующие клиенты – следующие HTTP-запросы – становятся в очередь.

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

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

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

А Иванов 1С запустил и ушел – у него автоматически каждые 60 секунд обновляется какая-то форма списка и не дает сеансу заснуть. Получается, что сервер забивается неработающими сеансами («кассирами»), которые место занимают, но ничего не делают.

 

 

Вот так выглядят открытые кассы на сервере 1С:Предприятие. Создаются сеансы, которые называются «Соединение HTTP-сервиса».

Вот этот скрин взят из моего доклада 2017-го года. Здесь сейчас поднято 5 сеансов. Как вы думаете, сколько реально пользователей через браузер работает здесь?

Это скриншот одновременной работы 1000 пользователей. Т.е. мультиплексирование здесь – 200, один кассир обслуживает сразу 200 пользователей. Нагрузка на сервер существенно отличается.

 

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

 

 

Поговорим немного про безопасность, потому что часто переживают: «Как же мы 1С выставим наружу, на нас же злодеи нападут!»

 

 

Если вы работаете в интрасети, у нас и так все от внешнего мира защищено – выставлять нестрашно.

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

К тому же зачем вам публиковать полностью всю базу? Вы публикуете только HTTP-сервис – не публикуете тонкий, веб-клиент, OData и все остальное. А работа через HTTP-сервис подразумевает, что в его модуле еще есть код, вы в коде можете свои проверки добавить.

 

 

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

 

Передача ссылки из 1С в браузер и обратно

 

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

 

 

Если мы в автоподборе выбираем элемент, его наименование помещается в реквизит «Номенклатура», а цена этого товара выводится в поле «Цена».

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

 

 

Как это делается?

В 1С это реализуется очень просто:

  • мы берем ссылку, кладем ее в функцию «ЗначениеВСтрокуВнутр», у нас получается строка, содержащая служебные символы;

  • чтобы избавиться от символов, выполняем функцию КодироватьСтроку();

  • далее – формируем из этого структуру, у которой есть два ключа – «Ссылка» и «Представление»;

  • упаковываем эту структуру в JSON и передаем на сайт – там у нас получается точно такая же структура.

 

 

Значения из этой структуры мы кладем в элемент HTML-формы input.

В его атрибут value мы кладем представление, а в реквизит ref – ссылку. Т.е. у нас в одном элементе хранится и представление, и ее уникальный идентификатор.

 

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

 

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

 

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

 

 

В JavaScript есть объект XMLHttpRequest – это полный аналог 1С-ного HTTP-запроса.

 

У нас есть структура данных строки – она так и называется «ДанныеСтроки». Мы ее упаковываем в JSON и выполняем функцию ПолучитьДанныеИз1С() – код этой функции можно посмотреть на нашем демо-сайте, если вызвать F12 и изучить текст скрипта v-can_site.js. Не передирайте скрипты подчистую для собственного использования, все-таки они у нас под авторскими правами, но посмотреть, как они работают – пожалуйста.

 

Что происходит после того, как мы вызываем эту функцию:

  • сначала в самой верхней строке мы превращаем эту структуру в настоящую ссылку;

  • а дальше у нас выполняется обычный 1С-ный код – мы рассчитываем процент скидки-наценки, саму цену, сумму и т.д.;

  • потом – превращаем все эти значения обратно в структуру и возвращаем ее назад.

15 строк кода, и у нас все работает.

 

Как правильно сгенерировать веб-форму

 

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

Но это в теории. На практике мы передаем HTML-код, и это та самая штука, из-за которой настоящие веберы меня давно хотят убить.

 

 

Я часто представляю, что иду по коридору, и веберы меня с двух сторон зажимают: «Лазаренко, ты что, формы передаешь в виде готового HTML? Это как?»

 

 

Как передать форму из 1С в браузер?

Вариант № 1: Мы в 1С из шаблонов собираем готовый HTML-код. Т.е. у нас в 1С, если мы передаем таблицу, есть шаблон шапки, шаблон строки, шаблон подвала таблицы. Мы это все компонуем в коде 1С и кидаем в виде готового HTML.

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

 

 

Они считают, что правильнее использовать вариант №2 – брать структуру данных, упаковывать в JSON, закидывать на клиент, где есть Vue, React и другие фреймворки, которые все это собирают.

Но когда мы делаем такие веб-интерфейсы, мы их отдаем обычным 1С-никам, и для них слова React, Vue и т.д. – это Бентли, которую нужно отвезти на сервис. А им в случае поломки нужно иметь возможность все починить на месте. Когда у нас код формируется полностью на стороне 1С, 1С-ник понимает, что происходит, и может это сопровождать.

На это веберы начинают мне возражать: «А как вы с помощью такого древнего способа будете обеспечивать 100 тысяч запросов в час?»

Да никак! Потому что мне это не нужно!

  • Представьте, что есть стандартный веб-клиент от 1С, который отлично выполняет свои функции в какой-то своей области.

  • Также есть привычная схема – WordPress, база 1С и обмен между ними. Она тоже прекрасно выполняет свои функции.

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

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

Мне для выступления нужна была штука для дачи с загогулиной на конце, и я попросил у терминатора привезти мне ее. Он мне на мою просьбу привез шотган, который мне пригодится только в параллельной реальности, если у меня на даче случится зомби-апокалипсис. Точно так же Vue, React и все остальное мне пригодятся только тогда, когда на меня повалится 100 тысяч HTTP-запросов в час, от которых нужно отстреляться.

Но у кого на даче когда-нибудь был зомби-апокалипсис? Для чего вы вообще на дачу ездите? Правильно, чтобы шашлыки жарить. Поэтому я попросил терминатора отправиться в прошлое еще раз и привезти мне другую загогулину – называется кочерга.

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

Точно так же, узкая специализация и у моего веб-клиента. Мне, чтобы построить веб-клиент с такой архитектурой, нужно изучить Vue, React и все это остальное. В результате у меня получится Бентли, с которым 1С-нику в случае поломки придется расстаться – он сам не поймет, как его починить или адаптировать под свою задачу.

Я не критикую тех, кто использует на своих проектах Vue, React и все остальное. Но помните, что мы разрабатываем свой софт в первую очередь для 1С-ников. Почему мы в этой нише в топе? Потому что если что-то сломалось – «открыл капот», поправил и дальше поехал.

 

В общем, реальность такова, что клиенты предпочитают вариант 1. Они говорят: «Не нужно нам этих ваших дополнительных фишек, чтобы наш 1С-ник потом не мог понять, как с ними поступать. Нас устраивает, что вы собираете код на стороне 1С. Потому что, если нужно, мы остановились отладчиком, поняли, откуда взялись данные, куда они положились, как вообще получилось так, что у нас эта ссылка на форме появилась и т.д.»

Тогда они получают прекрасный инструмент, который работает чуть-чуть медленнее, чем нужно для обработки 100 тысяч запросов в час. Просто потому, что нет в 1С таких баз, где нужно обрабатывать 100 тысяч запросов в час. Бывают, но очень редко.

Зачем нам Бентли, если нам нужно на дачу ездить?

 

Применение варианта №2 мне понадобилось только в двух случаях – это:

  • Загрузка таблиц с большим количеством колонок. Однажды мы столкнулись с тем, что при загрузке очень широкой таблицы, она очень долго собиралась в HTML. Поэтому нам было выгоднее JSON закинуть на клиента и там собрать эту табличку средствами JavaScript. Это намного быстрее работало. Но это – один случай из тысячи.

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

 

Формируем отчет с параметрами, отображаем в браузере и скачиваем в xls и pdf

 

 

Расскажу еще один кейс – как мы формируем печатную форму

 

 

Распространенная задача – сделайте так, чтобы можно было в списке кликнуть, сформировать печатную форму, нажать «Скачать», и она у нас в виде PDF-файла скачалась.

 

В табличной части у нас есть строка – элемент tr. У него есть атрибут ref – ссылка.

Когда мы в этой строке нажимаем на иконку печати, вызывается функция Взаиморасчеты_ПечатьНажатие().

 

 

В ней мы извлекаем атрибуты текущей строки списка:

  • doctype – это строка «Счет покупателю»;

  • ref – ссылка на конкретный документ.

Компонуем из этого структуру в виде JSON и передаем ее в 1С – мы уже знаем, как это делается.

 

 

На слайде показана вся функция, которая отвечает за формирование печатной формы. Она состоит из двух основных частей.

 

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

 

  • А в нижней части мы вообще используем типовой код формирования печатной формы из БСП. Передали ссылку в массив документов и на выходе у нас – табличный документ.

  •  

Как сделать из табличного документа печатную форму? Элементарно.

Табличный документ записываем в файл с типом HTML5.

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

 

 

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

Все это в целом – два часа работы.

 

Важный момент, который стоит помнить: когда вы формируете печатную форму с помощью СКД, у пользователя должны быть права не только на чтение, но и на просмотр объектов.

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

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

В интрасети при авторизации средствами 1С работать будет.

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

 

«Начинаю продолжать заканчивать» – что не так с закачиванием файлов в 1С?

 

 

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

 

Под тяжелыми HTTP-запросами я подразумеваю передачу файлов. Например, тяжелым HTTP-запросом может быть запрос длиной больше 4 Кб.

Многие пытаются закинуть данные в 1С через HTTP-сервис методом GET. А у большинства HTTP-серверов стоит ограничение, что длина тела HTTP-запроса, отправленного методом GET, не может быть больше 4Кб, он ее просто обрезает. Поэтому первая фишка – передавайте запрос методом POST.

При этом, если мы методом POST через XMLHttpRequest передаем какой-нибудь небольшой файл (например, размером 100 Кб), у нас данные до HTTP-сервиса 1С доходят примерно через секунду.

 

 

Но, когда мы передаем файлы от 3Мб, файл передается в платформу 1С, но на точке останова у нас ничего нет. Потом проходит 30 секунд, и данные приходят. Т.е. файл загрузился куда-то в платформу 1С, но там есть какое-то непонятное пространство, где большие файлы застревают. Такое ощущение, что на месте этой красной стрелки Суэцкий канал, в котором судно Evergreen перекосило, приезжают 1С-ные фиксики в желтых футболках и желтым экскаватором его раскапывают. Он там 50 секунд висит.

 

 

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

 

 

Решение – простое до элементарности. Оказывается, если один и тот же файл пихать в 1С напрямую, она ответит: «Нет, подожди 50 секунд». Но если ей сказать: «Скачай этот файл», она его идет и качает за одну секунду.

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

Все это занимает примерно 2.2 секунды.

 

 

 

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

Данная статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2021 Post-Apocalypse.

Больше статей можно прочитать здесь.

has been added to your cart:
Оформление заказа