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

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

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

В наличии

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

Категория:

Описание

Эта публикация написана мною, чтобы поделиться решением небольшой, но популярной задачи и, надеюсь, будет полезна определенному кругу читателей. Итак, сначала постановка задачи, необходимо обеспечить новому сотруднику доступ к данным из бухгалтерской базы, в частности это оплаты. Сотрудник при этом не бухгалтер и не работает в 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 части.

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