Реализация простого http-сервиса "Просмотр карточки номенклатуры(товара) в браузере"

0. dmitry1975 315 07.12.18 15:41 Сейчас в теме
Практический пример реализации простого http-сервиса средствами 1С Предприятие 8.3. Обеспечивает просмотр списка товаров и просмотр данных товара в браузере.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. efin 07.12.18 17:36 Сейчас в теме
Добавьте еще один гет-метод, который "по ссылке" отдает из базы файл картинки в поток (не в base64, а бинарно).
И в отображаемую страничку встраивайте картинки именно по этой ссылке.
Трактор; dmitry1975; +2 Ответить
2. dmitry1975 315 07.12.18 23:01 Сейчас в теме
(1) А каковы буду преимущества этого метода? Сейчас при формировании ответа, генерится полностью страничка вместе с картинками и отдается. В случае реализации метода, который предложили вы, возрастет нагрузка на сервис, поскольку вместо одного запроса, при наличии нескольких картинок на страничке буду дополнительно сделаны запросы в сервис по числу картинок. На мой взгляд это не сильно оптимально.. единственно, что страничка возможно будет быстрее отображаться..
3. efin 08.12.18 10:52 Сейчас в теме
(2) Ну Вы же сами пишите, хотел ссылки вставлять, не разобрался как. Вот я Вам и предлагаю вариант со ссылками, который будет работать не только в локальной сети с наличием файловой шары.
Так же я не уверен, что браузеру будет "хорошо" при большом количестве объемных картинок в формате base64
Ну и просто полезно такой код по отдаче картинок написать, ИМХО.
9. dmitry1975 315 08.12.18 14:15 Сейчас в теме
(3 )Да, спасибо за предложение! Скорее всего я реализую эту фичу, потому что мне самому интересно проверить, насколько это будет лучше работать. В моем случае картинки небольшие, и их заведомо не так много, а с учетом того, что база находится в локальной сети, то по скорости не будет больших задержек даже если картинки будут большими.. единственно может есть ограничения на объем передаваемых данных? Но в принципе это можно проверить :)
4. DO_WHILE_LOOP 358 08.12.18 11:15 Сейчас в теме
без пагинации на проде не взлетит, с ростом базы начнутся проблемы с выводом GetListNom
Трактор; dmitry1975; +2 Ответить
7. dmitry1975 315 08.12.18 14:10 Сейчас в теме
(4) Вы правы, по хорошему конечно нужно разделять информацию на порции..
У нас это не сильно актуально, потому что количество производимого товара не такое и большое, и новый товар появляется не настолько часто, а если появляется, то скорее всего что-то снимается с производства, поэтому я не стал акцентировать на этом внимание. Но дело даже не в этом.. Данная статья просто реализует пример http-сервиса, который конечно есть куда развивать и дорабатывать:)
Я не ставил задачей статьи показать законченное решение, а хотел поделиться с тем, с чем мне пришлось столкнуться в процессе решения своей задачи, с учетом того, что я с веб вообще не имею опыта работы, но знаю, что сейчас это актуально для многих.
Но в любом случае я благодарю вас, за то, что акцентировали внимание на этой важной детали! И обязательно учту это в будущем..
5. logarifm 1110 08.12.18 13:58 Сейчас в теме
В целом все отлично к статье никаких вопросов нет. А вот к способу выбора тут конечно возник вопрос. В целом, а почему именно вообще сервис сделан? Ну вот в чем его особенность. Поймите меня верно сейчас в сервисе, что есть? Необходимо знать ссылку куда зайти в него для кого это для менеджеров ? А если надо получить код товара то еще в браузере надо чего-то там в адресную строку добавлять. То есть возрастает ошибки ввода если это производит обычный менеджер, а не обученный ИТ-спец.

Если сделать обычный упрощенный вход в систему с узким набором динамического списка, где возможностей гораздо больше.
10. dmitry1975 315 08.12.18 14:56 Сейчас в теме
(5) Спасибо за комментарий!
Расскажу почему выбран именно http-сервис:

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

2. Упрощенный вход в систему и динамический список тоже не панацея, поскольку я писал, что данные по товару, которые должны видеть пользователи находятся не только в справочнике "номенклатура", а разбросаны по регистрам, доп. сведениям, характеристикам, фотографии находятся на сетевом ресурсе, и не скопом и соответственно в разных папках, подпапках. Поэтому динамический список конечно отразит справочник номенклатуры, но пользователю придется все равно собирать информацию по разным местам и это самый главный момент задачи. Пользователь должен видеть все важную информацию о товаре в одном месте!
3. Возможно я ошибаюсь, но в случае с интерфейсом ODATA, так же через web-интерфейс дается доступ к публикуемым объектам метаданных. Почему нас это не спасет написано выше, но еще раз повторюсь: информация о товаре нужна в одном месте, без лишних телодвижений.

А теперь чем мне понравился http-сервис?

1. Достаточно простая реализация. (я не работал с web-сервисами, читал, что там реализация сложнее, но конечно тоже надо будет попробовать и оценить для себя для каких задач это можно использовать)
2. Я реализовал только то, что мне было необходимо, минимальными затратами. Я не сторонник делать универсальные решения, когда нужно решить конкретную задачу! Потому что на универсальное решение затрачивается очень много времени, которого всегда не хватает!
3. Еще один момент, Http-сервисы в 1С это относительно новая и одна из последних фич платформы 1С, в смысле интеграции с WEB, поэтому просто хотелось разобраться как это работает на реальной задаче. Что и было сделано.

Еще отвечая на один ваш вопрос: "
А если надо получить код товара то еще в браузере надо чего-то там в адресную строку добавлять. То есть возрастает ошибки ввода если это производит обычный менеджер, а не обученный ИТ-спец"

У меня ссылка на метод получения информации по элементу, формируется автоматически при выводе, поэтому вводить что-то а в адресную строку не потребуется, и вероятность ошибки существенно снижается :)

Надеюсь, что я смог ответить на ваши вопросы.
14. logarifm 1110 08.12.18 23:45 Сейчас в теме
(10)
. Поэтому публикация базы не рассм

У меня была такая же проблематика конфа на ОФ (обычных формах) и постала задача чтобы поставщики могли работать с нашей номенклатурой и для автоматизации процеса делать в ней заявки. Сделал очень просто - ОБРАБОТКА на УФ (управляемой форме) в конфигурации свойство ест-но выставлено использовать ОФ и УФ. И все дал спец. роль и на рабочий стол выделил обработку.
17. dmitry1975 315 09.12.18 00:18 Сейчас в теме
(14) Да, в вашем случае это нормальное решение. Но здесь конкретная задача: только отображать информацию о товаре, а не редактировать ее, поэтому обработка здесь не будет оптимальным решением.
6. logarifm 1110 08.12.18 14:01 Сейчас в теме
Я к тому виду, что можно же было опубликовать саму 1С завести пользователей для входа или одного общего чтобы не парится и входите будьте здоровы. Лицензия один фиг нужна , что на веб-сервис, что на вход!
12. TitanLuchs 344 08.12.18 15:37 Сейчас в теме
(6) При прочих равных использование http--сервиса в данной задаче более оптаимльный вариант. Страница загружается значительно быстрее, чем интерфейс 1С, не требуется ввод логинов-паролей, установленная платформа 1С на компьютере не нужна, нагрузка на сервер ниже в разы. И лицензия на веб-сервис в клиент-серверном варианта съедаться не будет ни одна, достаточно лицензии на сервер 1С Предприятия.
8. logarifm 1110 08.12.18 14:13 Сейчас в теме
Ну и забыл. Вообще можно было без всех маневров использовать ОДАТА :)
11. TitanLuchs 344 08.12.18 15:33 Сейчас в теме
Хорошая реализация. Пара моментов:
1. HTML, который генерит 1С при сохранении табличного документа, сильно перегружен лишними стилями и прочими элементами. Будет быстрее работать, если создать шаблон строки таблицы (<tr>) и заполнять этот шаблон данными из 1С, таким образом собирать html всей страницы. Самый идеальный вариант -- отправлять в браузер только JSON с данными строки, а саму строку собирать на клиенте яваскриптом, но в этой задаче это конечно, излишне.
2. Для быстрого отбора неплохо добавить поле поиска. На его обработчик оnchange повесить функцию, которая дернет http-сервис 1С, передав в него еще один параметр - подстроку поиска. По этой подстроке можно выбирать нужную номенклатуру: по наименованию или коду, и формировать список номенклатуры с учетом этого отбора.
Sergynia; dmitry1975; +2 Ответить
15. dmitry1975 315 09.12.18 00:08 Сейчас в теме
(11)
1. Да, это верно подмечено! Содержимое файла, который получается после сохранения табличного документа в формате html, далеко от совершенства :)) Скорее всего попозже я реализую ваш метод.
2. Про поле "поиска" я думал, но пока для моей задачи это не особо актуально, но в принципе на будущее тоже можно будет сделать. Стандартным поиском по странице работает нормально..

Спасибо за советы!
13. DO_WHILE_LOOP 358 08.12.18 18:21 Сейчас в теме
вот как пример оптимизации, посмотрите на скорость загрузки при разбивке по категориям
https://superdealsae.github.io/category/

и при варианте полной загрузки каталога
https://superdealsae.github.io/search

при этом в обоих случаях данные хранятся в json формате отображается только видимая часть каталога и реализована ленивая подгрузка изображений
16. dmitry1975 315 09.12.18 00:13 Сейчас в теме
(13) Да видно, что существенно быстрее страничка отображается при разбивке по категориям. Есть куда стремиться.. Спасибо!
18. s_vidyakin 64 09.12.18 16:09 Сейчас в теме
генерить целиком html - так себе решение. У меня есть задумка сделать страницы на vue.js и коннектиться к 1С только за данными. Должны быть абсолютно независимыми представление (html+vue+vuetify) и бэкэнд (1С). Можно отдельно тестить и разрабатывать и то и другое, разными людьми. Было бы идеально, если 1С добавила в платформу поддержку html-макетов для объектов и js-библиотек в секции "Общие объекты". Пока что приходится городить костыли на текстовых макетах. А если вставить в него сжатую js-библиотеку, где несколько килобайт в одну строку, конфигуратор до сих пор падает.
19. TitanLuchs 344 09.12.18 20:10 Сейчас в теме
(18) Подобные решения в большинстве случаев передаются на поддержку 1Сникам, которые довольно слабо разбираются в vue. Я занимаюсь интеграцией 1С с веб с 2008 года, сделал много проектов на эту тему и всегда предлагаю клиенту варианты: передавать из 1С только JSON и собирать страницу в браузере, или сразу генерить в 1С готовый HTML. Только один выбрал первый вариант, и то потому, что выгружали огромную таблицу порциями, там на готовом HTML браузер начинал подвисать при добавлении новых строк в <table>. Все остальные выбирают генерацию html на стороне 1С, так как это проще и дешевле в сопровождении, но при этом отвечает требованиям по скорости отображения страниц и нагрузки на сервер.
20. Xershi 1389 09.12.18 20:25 Сейчас в теме
Возможно автор не знал что опубликовать базу было бы ещё проще. Открыл и работай.
21. dmitry1975 315 09.12.18 21:20 Сейчас в теме
(20) Я писал выше (пост 10), почему публикация базы в данном случае не подходит.
24. Xershi 1389 10.12.18 15:38 Сейчас в теме
(21) что-то вы лукавите. У вас простой вебсервис, функционал которого на УФ пилится за пол часа. Тут скорее нет опыта на УФ?
Тогда соглашусь в рамках цейтнота и нехватки знаний оптимальный вариант.
Тогда укажите это в начале статьи, а то до коментариев надо дойти же!
А то прочитав вашу статью складывает мнение, что вы безграмотный программист, а не решали задачу в заданных условиях...
25. dmitry1975 315 11.12.18 08:23 Сейчас в теме
(24) Я не понимаю с чего вы взяли, что у меня нет опыта работы на УФ. По большей части, пишу как раз на управляемых формах.

Но раз вы читаете статью по диагонали не вникая, я не вижу смысла повторяться и писать для вас, почему выбран именно http-сервис. Если интересно, прочитайте внимательно, а если вам просто отметится и написать что-нибудь, то не стесняйтесь! :) только извините, на такие комментарии :
А то прочитав вашу статью складывает мнение, что вы безграмотный программист,

я больше отвечать не буду. Каждый сам для себя решит- полезна ли ему статья или нет.
22. dsdred 2613 10.12.18 08:24 Сейчас в теме
Рад, что статьи пригодились.
23. dmitry1975 315 10.12.18 08:26 Сейчас в теме
(22) Да, еще раз спасибо за статьи! :)
Прекрасно когда уже есть информация, с которой можно начать изучение :)
26. yalex9 102 18.01.19 14:07 Сейчас в теме
Отличная статья и хоршие комментарии. Спасибо!
maxopik2; dmitry1975; +2 Ответить
27. dmitry1975 315 18.01.19 14:12 Сейчас в теме
28. Vagner_Hate 63 31.01.19 17:29 Сейчас в теме
Соглашусь, статья будет полезна тем, кто еще не имеет опыта в создании http-сервисов средствами 1с.
29. dmitry1975 315 04.02.19 11:10 Сейчас в теме
30. kanyuk 26.08.19 17:46 Сейчас в теме
Привет! можно посмотреть TestDb_HttpService.dt в деле
31. dmitry1975 315 26.08.19 20:28 Сейчас в теме
(30) Привет! Не совсем понял, это вопрос или утверждение? :)
32. user598128_able123 5 28.05.20 03:35 Сейчас в теме
интересно, если номенклатур например 2000,
можно ли вывести постранично, на странице 50 элементов,
и еще можно ли добавить отбор фильтр по списку?
Dmitri93; +1 Ответить
33. user1782657 13.07.22 12:34 Сейчас в теме
Подскажите, пожалуйста, у меня 1С УТ самый свежий релиз.
В 1с загружен каталог товаров с сайта Битрикс + могу выгрузить Excel файл с URL данных товаров на сайте :
мне нужно создать в 1с свойство товара, в которое загрузить URL товаров, чтобы попадать на страницу товара на сайте в браузере.
Такое возможно сделать?
34. dmitry1975 315 13.07.22 14:21 Сейчас в теме
(33) Вам нужно к товару из справочника номенклатура в 1С УТ привязать ссылку его описания на сайте?

Не вижу проблем.
1. Создаете доп. реквизит или доп. свойство для справочника номенклатура в 1С УТ.
Если товар выгружен из сайта в 1С, значит у вас должна быть связь между товаром из справочника номенклатура с товаром на сайте по какому-то признаку (код товара, артикул.. и т.п.)
2. Программно читаете excel с товаром, ищете товар в 1С по признаку (код товара, артикул) и пишете его URL в ранее созданный доп. реквизит или свойство. Ну и соответственно реализуете кнопку перехода по ссылке.
3. Профит.

Или я не правильно вас понял?
user1782657; +1 Ответить
35. user1782657 13.07.22 14:52 Сейчас в теме
(34) спасибо, я так и предполагала
решила вопрос так https://prnt.sc/7o_ze1sKYf5t
https://prnt.sc/wL6O__f8Mxwk
но возникла проблема - URL кончается в 1с на слэш, но при клике на URL из доп.реквизита на сайте открывает без слэша последнего и дает ошибку 404 (это редиректом решу, конечно) - но странно, почему / отваливается при переходе....
36. dmitry1975 315 13.07.22 16:20 Сейчас в теме
(35) возможно вот это поможет:
Источник: https://dev.1c-bitrix.ru/support/forum/forum6/topic36842/
Поместить в .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

Либо, можете через расширение реализовать кнопку, которая будет открывать ссылку с нужным адресом не отбрасывая конечный слэш.
37. user1782657 13.07.22 18:04 Сейчас в теме
(36) то есть это норма для 1С откинуть последний / из ссылки?
спасибо! самой в .htaccess лезть страшновато было - попробовала применить такой "костыль" - указываю в поле в 1С URL с двойным // на конце ссылки - и тогда 1 отваливается при переходе из 1С на сайт

(36)
через расширение реализовать кнопку
это для меня вообще тёмный лес!))
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 250 000 руб. до 300 000 руб.
Полный день

Консультант 1С
Москва
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Аналитик 1C
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Начальник отдела программирования
Уфа
зарплата от 125 000 руб.
Полный день

Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день