Маленький ВЕБ-сервис с большими возможностями

26.12.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Демонстрационная база
.dt 89,17Kb ver:1.0.0.0
13
13 Скачать (1 SM) Купить за 1 850 руб.

При этом для использования в рамках платформы 1С совершенно не обязательно углубляться в собственную структуру веб-сервиса, разрабатывать его объектную модель и интерфейсы. Достаточно выставить через сервис фунцию вида CmdExec(ParamStructure: string):string и гонять между базами строки, получаемые функцией ЗначениеВСтрокуВнутр(). Если в одном из полей структуры передавать код обработки данных на языке 1С, получаем всемогущий инструмент. Итак, прототип функции веб-сервиса всего лишь

Функция CmdExec(ParamStructure)
 
 СтруктураПараметров = ЗначениеИзСтрокиВнутр(ParamStructure);
 Результат = Новый Структура;
 Если СтруктураПараметров.Свойство("КодОбработки") Тогда
  Попытка
   Выполнить(СтруктураПараметров.КодОбработки);
  Исключение
   Результат.Вставить("Ошибка",ОписаниеОшибки());
  КонецПопытки;
 Иначе 
  Результат.Вставить("Ошибка","WS.ПСГ_Общий.CmdExec: Входная структура не содержит свойства КодОбработки.");
 КонецЕсли; 
 ВозвращаемоеЗначение = ЗначениеВСтрокуВнутр(Результат);
 
 Возврат ВозвращаемоеЗначение;
 
КонецФункции

В прилагаемой демонстрационной базе создан веб-сервис ПСГ_Общий, выставляющий приведенную функцию CmdExec. Для удобства использования применяется функция ПСГ_ОбработчикиВебСервисов.ВыполнитьКомандуЧерезВебСервис(Адрес,СтруктураПараметров,КодОбработки), принимающая на входе адрес веб-сервера, произвольную структуру параметров и код обработки данных, и возвращающая структуру, созданную функцией CmdExec на целевой базе.

Функция   ВыполнитьКомандуЧерезВебСервис(Адрес,СтруктураПараметров,КодОбработки) Экспорт
 
 СтрокаСоединения = Адрес + "/ws/wsGeneral.1cws?wsdl";
 
 wsAccount = wsAccount();
 Определения = Новый WSОпределения(СтрокаСоединения,wsAccount.Логин,wsAccount.Пароль);
 Прокси = Новый WSПрокси(Определения,"http://www.promstroi-group.ru/general","ПСГ_Общий","ПСГ_ОбщийSoap");
 Прокси.Пользователь = wsAccount.Логин;
 Прокси.Пароль = wsAccount.Пароль;
 
 СтруктураПараметров.Вставить("КодОбработки",КодОбработки);
 ДанныеСтрокой = Прокси.CmdExec(ЗначениеВСтрокуВнутр(СтруктураПараметров));
 Если ДанныеСтрокой = Неопределено Тогда
  ВызватьИсключение("Не удалось получить данные");
 КонецЕсли; 
 
 Данные = ЗначениеИзСтрокиВнутр(ДанныеСтрокой);
 Если Данные.Свойство("Ошибка") Тогда
  ВызватьИсключение(Данные.Ошибка);
 КонецЕсли; 
 
 Возврат Данные;
 
КонецФункции

Здесь wsAccount() возвращает данные для авторизации в виде структуры("Логин,Пароль").


Рассмотрим простейший "Hello, world" для нашего веб-сервиса, команду Ping, выясняющую, доступен ли сервис.

Функция Ping(Адрес) Экспорт
 
 СтруктураПараметров = Новый Структура;
 КодОбработки = "Результат.Вставить(""Статус"",""онлайн"");";
 Результат = ПСГ_ОбработчикиВебСервисов.ВыполнитьКомандуЧерезВебСервис(стр.АдресWS,СтруктураПараметров,КодОбработки);
 Попытка
  Возврат Результат.Статус;
 Исключение
  Возврат ОписаниеОшибки();
 КонецПопытки; 
 
КонецФункции

Демонстрационная база содержит три других примера: обработку Демо, считывающую произвольный справочник целиком, обработку Тиражирование объектов WS, позволяющую скопировать объект в выбранные базы с совпадающей по составу объектов (но не обязательно реквизитов) структурой.

Для установки демонстрационной базы нужно загрузить прилагаемую dt-выгрузку в новую пустую базу 1С и опубликовать ее на веб-сервере. Далее, в клиенте нужно зайти в справочник Базы данных, и прописать адрес базы в поле Веб-сервер у базы данных База 1, и выставить константу Эта база данных = База1. После этого демонстрационные обработки уже могут общаться с самой этой же базой через ее веб-сервис. Но, конечно, значительно интереснее создать еще одну копию базы, прописать ее в справочник Базы данных как База 2 и посмотреть общение между этими базами.

Не лишне предупредить, что знающий логин и пароль wsAccount(), обладает, фактически правами пользователя wsAccount().Логин в базе, и правами пользователя, под которым работает сервер 1С (или IUSR в файловом варианте), в операционной системе.

Веб-сервис Обмен данными Универсальные механизмы

См. также

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

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

60000 руб.

07.05.2019    34397    65    45    

26

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2380    2    0    

9

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

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

57600 руб.

26.11.2024    2123    1    1    

4

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

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

36000 руб.

03.08.2020    18928    21    22    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    3727    3    2    

4

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

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

12000 руб.

02.02.2021    18689    53    50    

29

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    721    3    1    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 215 13.11.13 18:26 Сейчас в теме
что то после пива не совсем вкурил... чуствую, что что-то полезное, но пока не могу понять, что...
2. irreal 32 13.11.13 18:45 Сейчас в теме
Коротко говоря, отправляешь другой базе код, который нужно выполнить и его параметры структурой, и получаешь ответ структурой. Веб-сервис здесь лишь приспособленный к интернету транспорт. Практически вместо этого можно было бы применить COM-коннектор, но этот, прежде чем заработать, прокачает через инет весь cf. С веб-сервисом тоже прокачает, но не через инет, а между сервером 1с и веб-сервером, через инет пойдет полезный только объем.

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

База - сервер:

Функция ОбщийМодуль.БольшаяИСложнаяТаблица(СтруктураПараметров) Экспорт
...МногаБукав
КонецФункции

База-клиент:

СтруктураПараметров = Новый Структура;
...Заполнение структуры
КодОбработки = "Результат.Вставить(""БольшаяТаблица"",ОбщийМодуль.БольшаяИСложнаяТаблица(СтруктураПараметров));";
Результат = ПСГ_ОбработчикиВебСервисов.ВыполнитьКомандуЧерезВебСервис(стр.АдресWS,СтруктураПараметров,КодОбработки);

// Вот большая таблица и получена:
БольшаяТаблица = Результат.БольшаяТаблица;

Конечно, следует учитывать, в каких терминах будет этот ответ. Если это разные конфигурации, то ссылки "оттуда" потеряют смысл, и нужно возвращать гуиды и наименования. То есть, работа не похожа на работу с объектной системой ком-коннектора. Но в случае, если имеется много одинаковых баз, да еще поддерживается сквозная НСИ, все вообще великолепно.
3. cool.vlad4 2 13.11.13 22:32 Сейчас в теме
(2) конечно, замечательно, и идея достаточно простая и понятная, ну кто не думал, сделать Выполнить во внешней базе, и через внешнее соединение и даже через ВК (на этом сайте видел, 1CHServer как-то так называется). Вот только вопрос безопасности остался в сторонке. К сожалению в 1С нет безопасного Выполнить (или мне он неизвестен), т.е. правильно ли я понимаю, что работа таким образом через интернет это серьезная брешь в безопасности ИБ?
4. irreal 32 13.11.13 23:45 Сейчас в теме
(3) Снижение до уровня защиты в авторизации 1С - безусловно. К тому же, нужно извратиться, чтобы скрыть получение логина и пароля в коде, если к коду имеют доступ, например, аутсорсеры.
С другой стороны, выставить в открытый интернет базу данных я не решился бы и без этого. Интернет интернетом, но в рамках приличия - VNP. На предмет наличия злоумышленника, перехватывающего пакеты внутри сети - да, место слабое.

К слову сказать, мне пока не удалось заставить клиент веб-сервиса 1С авторизоваться по аутентификации ОС, поэтому в коде есть это самое wsAccount() - действие, чью имплементацию я намеренно вынес в отдельную функцию. Если бы удалось ввести виндовую авторизацию, дело обстояло бы гораздо лучше.

Один из способов эмуляции такого поведения на стороне кода в клиенте - вынести конфиденциальную информацию в базу SQL, закрыть доступ к таблицам и выставить только интерфейсную функцию, которая по авторизации ОС решит, что и давать ли вообще. Но уязвимость к перехвату внутри сети остается.
cool.vlad4; +1 Ответить
5. DitriX 2102 14.11.13 12:17 Сейчас в теме
(3) в платформе 8.3 появился Безопасный режим. Т.е. вы работать можете только в среде 1С, и вам не доступно внешнее окружение.
Однако, Выполнить, это не только брешь в безопасности, но и возможность получить кучу проблем. Хотели очистить регистр штрихкдов в 2 базах, и случайно очистили везде.
Т.е. Выполнить - не панацея. Это все равно что сидеть на сервере под учеткой админа, когда для ваших нужд вполне хватает обычного пользователя. А если что то надо админское, то вы запускаете программу от имени админа.

(0)Короче - это вариант не новый, его уже в разных видах представляли тут.
Вот если вы попробуете пройтись по всем аналогичным темам и решить все проблемы там описанные, ответить на все вопросы, вот тогда будет гут.
6. asved.ru 37 20.11.13 09:56 Сейчас в теме
Зачем применять строковое преобразование, если можно использовать прекрасно сериализующееся ХранилищеЗначения?
7. irreal 32 20.11.13 17:39 Сейчас в теме
(6) asved.ru, логично, можно и так.
8. artbear 1568 21.11.13 15:08 Сейчас в теме
Очень опасная схема :(
Кто угодно может выполнить код 1С в любой базе :(
9. irreal 32 21.11.13 21:44 Сейчас в теме
(8) artbear, Для этого "кому угодно" нужно, как минимум, знать логин и пароль веб-сервиса. Выполнение внешних обработок ползователями у нас запрещено, так что здесь не прорвешься, даже зная API. В конце концов, Выполнить() используется, например, в УниверсальныйОбменДаннымиXML. Можно, подсунуть вредоносные правила пользователю этой обработки, если она вдруг ему доступна.
10. quick 584 12.01.21 11:49 Сейчас в теме
Интересное решение.
В таком подходе весь код обмена достаточно хранить в каком то одном центральном узле и не требуется обновлять его в куче мест.
Для пущей безопасности можно например считать md5 присылаемого кода и вести учет разрешенных к выполнению. Тогда левый код не пройдет, а новый можно будет каким то механизмом разрешать к выполнению. Например держать список контрольных сумм в справочнике и для новых ставить признак "неподтверждено".
Оставьте свое сообщение