Мой опыт небольшого проекта с веб-сервисами (Часть 1)

08.08.18

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

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

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

Что нам необходимо:

1. Веб- сервер (я выбрал Apache 2.4)

2. Написать веб-сервис в конфигурации 1С (у меня это Бухгалтерия 2.0). Опубликовать базу на веб-сервере.

3. Любой язык для веб-разработки, так как конечный результат это страничка, которая будет отрываться в браузере. (у меня это PHP);

Наверно все, еще если делать это впервые, немного терпения.

Про установку Apache +PHP+1C, очень популярная тема для обсуждения (даже на этом ресурсе их дюжина)  в плане установки, каждый уважающий себя ит-шник , может начать кивать со знанием дела, услышав про установку Apache и 1С, и конечно же имел опыт публикации базы. Указанным мною дистрибутивам лет по 10, но они ничем принципиально не отличаются от более свежих, в рамках поставленной задачи

Устанавливаем веб-сервер, после установки для регистрации компоненты 1С на веб сервере в файле httpd.conf  из папки conf веб-сервера прописываем строку вида

LoadModule _1cws_module "C:/Program Files (x86)/1cv8/8.3.11.3034/bin/wsap24.dll"

в строке указывается путь к библиотеке 1С установленной текущей версии платформы. Запускаем веб-сервер.

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

Создаем новый веб-сервис, в модуле пишем основную функцию, например

Функция DocObmen(SubName, offset, limit)
		
	Код = "%"+SubName+"%";
	
	InTheEnd =  offset+limit-1; 

	
	ТипXDTOИнвойс = ФабрикаXDTO.Тип("http://www.sample-package.org", "Инвойс");
	XDTOИнвойс = ФабрикаXDTO.Создать(ТипXDTOИнвойс);
	
	Запрос = Новый Запрос;
		тхт = "ВЫБРАТЬ
		|	Поступление.Номер КАК Номер,
		|	Поступление.СуммаДокумента КАК Сумма,
		|	Поступление.Контрагент.Наименование КАК Контрагент,
		|	Поступление.Дата КАК Дата,
		|	""Поступление"" КАК Вид,
		|	Поступление.ДатаВходящегоДокумента КАК ДатаВх,
		|	Поступление.НомерВходящегоДокумента КАК НомерВх
		|Поместить Таб
		|ИЗ
		|	Документ.ПоступлениеТоваровУслуг КАК Поступление
		|ГДЕ
		|	Поступление.Контрагент.Наименование ПОДОБНО &Код
		|ОБЪЕДИНИТЬ ВСЕ
		|ВЫБРАТЬ
		|	Оплата.Номер,
		|	Оплата.СуммаДокумента,
		|	Оплата.Контрагент.Наименование,
		|	Оплата.Дата,
		|	""Оплата"",
		|	Оплата.ДатаВходящегоДокумента,
		|	Оплата.НомерВходящегоДокумента
		|ИЗ
		|	Документ.СписаниеСРасчетногоСчета КАК Оплата
		|ГДЕ
		|	Оплата.Контрагент.Наименование ПОДОБНО &Код
		|Индексировать ПО
		|	Номер
		|	,Дата
		|;";
		
		
		Если (limit>0) Тогда
		тхт = тхт + "
			|Выбрать * 
			|Из
			|	(Выбрать  top "+limit +" *
			|		Из (ВЫБРАТЬ top "+InTheEnd +" *
			|				ИЗ Таб
			|				УПОРЯДОЧИТЬ ПО Дата desc
			|			) КАК Таб_desc
			|    	УПОРЯДОЧИТЬ ПО Дата asc
			|	) КАК Таб_asc
			|УПОРЯДОЧИТЬ ПО Дата desc
			|";
		Иначе
		 тхт = тхт + 
		 	"Выбрать * 
		 	|ИЗ Таб";
	 	КонецЕсли;
	 
	Запрос.Текст = тхт;	
	
	Запрос.УстановитьПараметр("Код", Код);
	Выборка = Запрос.Выполнить().Выбрать();
	
	ТипXDTOДокумент = ФабрикаXDTO.Тип("http://www.sample-package.org", "Документ");
	
	Пока Выборка.Следующий() Цикл
		
		XDTOПозиции = ФабрикаXDTO.Создать(ТипXDTOДокумент);
		ЗаполнитьЗначенияСвойств(XDTOПозиции, Выборка);
		
		XDTOИнвойс.Приход.Добавить(XDTOПозиции);
		
	КонецЦикла;
	
	Возврат XDTOИнвойс;

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

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

Так как функция возвращает данные в виде набора данных, нужно добавить описание пакета. который будет передан браузеру, в 1С это xdto, то есть схема xml,

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

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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15748    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17551    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16360    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25741    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88582    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. pallid 270 08.08.18 13:45 Сейчас в теме
А почему web а не http сервис? Это же приводит к тому что при изменении параметров или операций в сервисе приходится делать изменения и в клиентской части
2. alex_bitti 139 08.08.18 14:36 Сейчас в теме
потому что http сервисы появились относительно недавно, и с целью интеграции мобильных приложений, насколько мне известно, если честно не пробовал их использовать, но что то мне подсказывает что плане времени обработки запроса там могут возникнуть вопросы, а может и нет
3. dsdred 3251 08.08.18 14:55 Сейчас в теме
(2)
http сервисы появились относительно недавно

4 года назад это
относительно недавно
?

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

Никаких вопросов там не возникнет.

А вообще тут и OData может сгодится, хотя...
4. pallid 270 08.08.18 15:36 Сейчас в теме
(3) OData монструозен ))) хотя как единственный выход в некоторых случаях
5. pallid 270 08.08.18 15:53 Сейчас в теме
Одна из опасностей OData - это невозможность контролировать генерируемый объем возвращаемой информации, нельзя установить максимальное количество. И если в базе данных много и кто-то решил забрать разом все, это может повлиять на работу...всех ))))
6. alex_bitti 139 08.08.18 16:42 Сейчас в теме
(5) стойте, odata вообще мимо, задача не как-то, а нормально по человечески сделать, да через апач, да на пыхе, но это нормальные теххнологии масштабируемые, odata это боль, причем ребята не 1С-ники "не поймут" выбор, если захотят участвовать в разработке клиента))

что имелось ввиду под "вопросами" по http -сервису, как бы вопрос немного раньше чем нужно, потому что речь про самопального веб-клиента пойдет во второй части, но почему мне предложенный способ больше нравится, я ставлю отдельный веб сервер и далаю на нем сайт, сайт посылает запрос получает ответ парсит его выдает результат на страницу, в случае с http-сервисом, ответ передается уже распаренный, получается 1С получает дополнительную нагрузку по ресурсу к серверу 1С на обработку, результата, правильно я понял? роль веб-сервера выполняет сам сервер 1С, ну вы понимаете к чему это я?
7. pallid 270 08.08.18 18:31 Сейчас в теме
(6)
ответ передается уже распаренный


вот тут не понятно, в смысле уже готовая страница?

при использовании http сервиса можно в принцепи и отдавать уже страницу, но обычно отдают xml или json

принцип почти тот же что и с web-сервисом и даже больше, только в случаи с web клиент завязан на soap
10. alex_bitti 139 09.08.18 08:38 Сейчас в теме
(7)
при использовании http сервиса можно в принцепи и отдавать уже страницу, но обычно отдают xml или json


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


У меня как раз наоборот. Изменять сервис мне не захочется, как раз пока вебщики не придумают чего нибудь еще,
13. pallid 270 09.08.18 09:07 Сейчас в теме
(10)
чем Вам не угодил SOAP?


привязкой к xml, связанность клиента и сервиса

в случаи с http сервисом есть возможность выбора что и как отдавать
9. dsdred 3251 08.08.18 21:52 Сейчас в теме
(6)
в случае с http-сервисом, ответ передается уже распаренный, получается 1С получает дополнительную нагрузку по ресурсу к серверу 1С на обработку, результата, правильно я понял? роль веб-сервера выполняет сам сервер 1С, ну вы понимаете к чему это я?


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

вот кстати из недавних обсуждений https://forum.infostart.ru/forum34/topic188597/
11. alex_bitti 139 09.08.18 08:45 Сейчас в теме
(9) http-сервис выдает "более готовый" результат, увеличивая нагрузку на 1С-сервер, ну это логично если где-то мы сокращаем потребление ресурса, где-то его увеличиваем, закон сохранения. Может для мобильного приложения это актуально и то вопрос? Если делать движок под мобилу, все равно что возвращает сервис, мне кажется http-сервис еще одна избыточная технология интегрированная в 1С, пока еще точно не определили зачем
14. neikist 09.08.18 11:01 Сейчас в теме
(11) в каком смысле "более готовый" результат? Как раз с веб сервисами работа с xml и xdto как отображением xml ресурсы поедает, а в http можно работать с чистыми ЗаписьXML, ЗаписьJSON, да хоть csv передать.
Хотя в итоге узким местом все равно скорее всего работа с БД будет, а не soap.
15. alex_bitti 139 09.08.18 12:14 Сейчас в теме
(14) еще раз, задача стоит сделать не что-то, а так как будет максимально правильно, я не спорю что http-сервис может выдавать готовую страницу, но ни один вебщик не полезет в 1С, и ни один 1С ник не полезет в веб, правильно? Из того что вы предложили это даже не полуфабрикат, не хочу хейтить но файл xml- это не то, txt тоже не то, задача сделать коннектор. SOAP отлично для этого подходит, я могу заказать сайт хоть у индусов передав им только параметры, с вашим вариантом мне как предлагать индусам писать в 1С, или сказать что у меня есть xml, и надо мной будут смеяться все миллионеры из трущоб
16. neikist 09.08.18 12:24 Сейчас в теме
(15) вообще то SOAP - это тоже вполне себе xml, причем в 1с еще и не сказать что по стандарту сделанный, сталкивались мы с проблемами на этой почве, да, было дело.

Ну и никто не предлагает отдавать верстку и подобное из 1с, сейчас в тренде (и я понимаю почему) RestAPI отдающий JSON. Он гораздо проще и приятнее для потребителя API чем SOAP. В пределе можно вообще graphQL запилить, пусть и с некоторыми ограничениями, и отдать разрабам сторонней системы, тогда даже в некоторых случаях правки на стороне 1с при изменении потребностей пользователей не потребуются.
ArchLord42; pallid; +2 Ответить
17. pallid 270 09.08.18 15:07 Сейчас в теме
(15)
(16)
причем в 1с еще и не сказать что по стандарту сделанный, сталкивались мы с проблемами на этой почве, да, было дело.


Было, было

писали soap, со своей стороны тестили его 1ским клиентом, потребитель был не на 1с, из-за одной недолгядки целый день потратили на поиск проблемы почему потребитель не работает с нами анаш тестовый клиент нормально работает )))
19. alex_bitti 139 09.08.18 17:34 Сейчас в теме
(17) есть же SoapUI, тестится все отлично, аж интересно в чем беда?
21. pallid 270 09.08.18 17:37 Сейчас в теме
(19) детали не помню, но что-то было с xdto пакетом, точнее что-то со свойством было

1с клиенту было все равно, все работало, а вот другой клиент при приеме данных сходил сума, и отказывался понимать что ему пришло
22. alex_bitti 139 09.08.18 17:40 Сейчас в теме
(21) единственное что там может вызвать проблему это пространство имен, конечно на симплах все работает, пока не переключишь на стандарт какой нибудь формализованный
24. neikist 09.08.18 18:11 Сейчас в теме
(19) лично у нас была проблема с тем что 1с не умеет в soap header, причем как на запрос к 1с, так и при вызове из 1с системы которая это поддерживает. Плюс иногда бывает что обе системы имеют ограничения по возможности описания формата в wsdl, и при несовпадении таких возможностей тоже начинаются проблемы.
18. pallid 270 09.08.18 15:14 Сейчас в теме
(15)
я не спорю что http-сервис может выдавать готовую страницу


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

отдаем json, морда на реакте, профит
20. alex_bitti 139 09.08.18 17:36 Сейчас в теме
(18) я Вас понял, просто не любите xml))
25. pallid 270 09.08.18 18:33 Сейчас в теме
(20) Люблю
(20)
просто не любите xml))


я такого не говорил ))) просто чем хорош soap - так это валидация на основе xdto (сильная связанность). а в решении нет необходимости в такой опции.

тем более на дворе 2018 год, IoT и прочий хайп ))) там точно никакого soap
26. dsdred 3251 09.08.18 18:42 Сейчас в теме
(11) Что такое "более готовый" результат?

Я понимаю Ваши ответы так: "Не читал, но презираю".
Вы же честно написали в самом начале:
если честно не пробовал их использовать



ни один вебщик не полезет в 1С

Я последнии полтора года очень плотно работаю с Веб программистом в крупной компании с большим документооборотом (там и производство и несколько розничных сетей и франшиза), он мне сам сказал отдавай мне JSON. За полтора года мы с ним хренову гору проектов сделали, при этом 65% данных он забирает по OData (с моей стороны только дать доступ к нужным ему объектам и нарисовать сам запрос), а остальные 35% я делаю ему http-сервисы (POST) и он подает некие параметры и получает JSON. Он доволен как "удав". Есть у нас и обратная взаимосвязь, он передает некие параметры и формирует через написанные мной http-сервисы некие объекты.
27. alex_bitti 139 10.08.18 08:45 Сейчас в теме
(26) у нас в организации нет веб- программистов, веб разработка заказывается, иногда даже не в нашей стране, потому что не все наши спецы по веб делают вещи, ваш ответ можно понимать "я знаю потому что спец", я читал изучал пробовал, но в серьезных проектах не считаю данную технологию применимой, odata это прозор, даже не о ней сейчас. мне почему то кажется я старше вас и с 2002 года занимаюсь 1С, с 1997 работаю программистом не надо искать в том что я пишу второй смысл
28. dsdred 3251 10.08.18 11:54 Сейчас в теме
(27)
у нас в организации нет веб- программистов, веб разработка заказывается, иногда даже не в нашей стране, потому что не все наши спецы по веб делают вещи, ваш ответ можно понимать "я знаю потому что спец", я читал изучал пробовал, но в серьезных проектах не считаю данную технологию применимой, odata это прозор, даже не о ней сейчас. мне почему то кажется я старше вас и с 2002 года занимаюсь 1С, с 1997 работаю программистом не надо искать в том что я пишу второй смысл


Во первых я не хотел никого обидеть и не хотел чтобы мои ответы были восприняты так как Вы их восприняли.
Я лишь так и не смог понять Ваш ответ который Вы повторяли как мантру - "Более готовый".
И так как Вы часто говорили, что веб программисты не должны программировать в 1с в ответ на предложение использовать http-сервисы, я описал ситуацию с текущего места работы. Конкретно написал, что веб программист сам попросил http-сервисы+JSON. При этом я не сомневаюсь в его квалификации, так как он пишет как для нашего, так и для зарубежного рынка.

Во вторых, мы с Вами работаем не охранниками, не грузчиками и т.д, поэтому не важно с какого года мы в 1С. Наши знания частично устаревают, а получение новых знаний зависит только от нас самих. Да я не сразу пошел в программисты 1С, до этого был администратором систем в банке. Да я не программировал на 6 и 7.7, а только забирал данные с 7.7. Да я в 1С с 2012. Но если посмотреть с какой периодичностью платформа выходила до версии 8.3, ясно что до 2014 развитие платформы можно назвать "тихим периодом".

П.С. Беседа уже пошла не в продуктивные и никому не нужные русла.
pfilyk; neikist; +2 Ответить
8. dsdred 3251 08.08.18 21:39 Сейчас в теме
(5)
Одна из опасностей OData - это невозможность контролировать генерируемый объем возвращаемой информации, нельзя установить максимальное количество. И если в базе данных много и кто-то решил забрать разом все, это может повлиять на работу...всех ))))


Порционно то кто запрещает выборку делать?

$count чтобы узнать количество записей. А далее $top и $skip

17.2.1.5.3. $top
Имеется возможность ограничить количество записей, возвращаемых при обращении к ресурсу. Для этого используется параметр $top.

17.2.1.5.5. $skip
Позволяет исключить из результата запроса первые несколько записей. Если параметры $top и $skip указываются одновременно, то параметр $skip будет применен раньше, чем параметр $top. Приоритет применения параметров не зависит от порядка их указания в теле запроса.
12. pallid 270 09.08.18 09:04 Сейчас в теме
(8)
Порционно то кто запрещает выборку делать?


я про то что никто не запрещает клиенту все сразу забрать - это опасность
23. dsdred 3251 09.08.18 18:02 Сейчас в теме
(12)
я про то что никто не запрещает клиенту все сразу забрать - это опасность


Согласен. С любым инструментом нужно разумно работать. Как говорится раз в жизни и палка стреляет ))

Я исходил из запроса статьи. Там по сути простейшая выборка двух типов документов... причем ни пометка на удаления не проверяется, ни провенность... Да и документы по наименованию контрагента выбираются... Без периода выборки. И в запросе "top", а не "Первые", но это уже просто признаки плохого тона (Встречал как то обработки где на трех языках написано было, "очень читабельно").
Видно, что руку еще набивают.

Я так понимаю в конторе небольшой документооборот просто. Но убей не приложу почему именно Веб-сервисы?
29. s_vidyakin 63 13.08.18 14:39 Сейчас в теме
(12) Можно минимальную прокладку сделать между клиентом и одатой, чисто для базового контроля
30. pallid 270 13.08.18 15:38 Сейчас в теме
31. s_vidyakin 63 13.08.18 18:12 Сейчас в теме
(30) пользователь не напрямую обращается к одате а к отдельному http-сервису, передавая те же параметры, а сервис проверяет их и уже сам вызывает одату и отдает что получил
32. pallid 270 13.08.18 18:23 Сейчас в теме
(31) обращается к самому же себе только не напрямую в базу а по OData? Зачем?
33. s_vidyakin 63 14.08.18 01:30 Сейчас в теме
(32) Напрямую в базу - это уже надо самому писать запросы, делать полноценное API, а так OData уже готовое, я же и говорю - легкий "прокси"-сервис.
То что к самому себе - какая разница, есть ведь обработки для тестирования http-сервисов, они тоже к той же базе делают запросы
Оставьте свое сообщение