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