Прямые запросы к базе 1С на SQL-сервере. Зачем нужно? Насколько оправдано? Как сделать?

09.10.17

Разработка - Запросы

В современных бизнес-процессах встречаются довольно интересные задачи. Например, загрузка товаров в кассу, работающую, к примеру, на УКМ через интернет. Или создание портала к базе, чтобы крупные оптовики сами могли делать заказы. Да мало ли! Естественно, всё можно сделать средствами 1С. Сейчас в 1С есть возможность внешнего подключения. И механизмы работают достаточно стабильно. Но долго.

Уважаемый читатель! Я не буду здесь разбирать строки подключения к SQL-серверу. Я не буду рассматривать архивирование, переиндексацию БД командами из 1С. 

Итак, имеем портал. Есть у нас web-сервер, который подключается к 1с через WS, и обменивается данными в формате JSON. Как это происходит?

При получении данных из 1С:

Клиент авторизуется на сайте (авторизация совпадает с авторизацией 1С)
web-сервер (через PHP) авторизуется в 1С
Уходит запрос на сервер 1С
Сервер 1с интерпретирует запрос в формат SQL
Идет запрос на SQL-сервер
Сервер 1с разбирает ответ от SQL-сервера
Укладываем его в JSON
На web-сервере (через PHP) разбираем JSON
Отдаем клиенту

При записи данных в 1С:

Клиент авторизуется на сайте (авторизация совпадает с авторизацией 1С)
web-сервер (через PHP) авторизуется в 1С
Уходят данные на сервер 1С
Сервер 1С создает нужный документ, заполняет обработчиком поля,….

Видно, что запись документов лучше доверить серверу 1С. Тогда нам, по крайней мере, не придется дублировать программную часть 1С в PHP.

А вот чтение данных, вполне можно выполнять напрямую с сервера SQL. Этим самым, мы пропускаем циклы сборки-разборки JSON, что значительно ускоряет работу.

Более того, если запрос сделать в виде:

«
SELECT
'<td>'+q11._Description+'</td><td>'+q12._Description+'</td><td>'+convert(nvarchar(10), q13._Fld28515)+'</td><td>'+convert(nvarchar(10), q13._Fld28516)+'</td></tr>' from …
»
то он вернет кусок готового HTML-кода, который выводится совсем просто:
while(odbc_fetch_row ($per))
{
$i++;
echo '<tr><td>'.$i.'</td>';
echo odbc_result($per,1) ;
}

 

буквально «на лету».

Отличие от классической выгрузки-загрузки (например, в интернет-магазин) в том, что всё происходит в реальном времени. И все дисконты,.. считает 1с. Нет нужды дописывать математику в 1с и «магазине». 

 Основная нагрузка будет только при записи документа. Хотя, что нам мешает, для снижения нагрузки, писать в таблицу на том-же SQL-сервере, а 1с-кой просто «забирать» оттуда данные? Т.е., цены у контрагента будут актуальные, а документы мы будем забирать и проводить в «свободное» время.

Замечу, что и из 1с мы можем получать вместо JSON – а, текст с готовой HTML-разметкой. Но, как показала практика, это будет гораздо медленнее.

При таком подходе, не будет разницы, на каком сервере (MSSQL или PSQL) крутится 1С. Однако, если вы хотите записывать в базу 1С данные напрямую, исключая оболочку, то стоит помнить, что MSSQL блокирует таблицы при записи, а PSQL использует версирование. 

SQL обмен данными web

См. также

SALE! 15%

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    160581    890    399    

867

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    10147    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5360    XilDen    36    

81

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    8064    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2442    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8916    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3429    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nomadon 369 10.10.17 06:53 Сейчас в теме
xxs SQL injection?
ejijoka; DrAku1a; Aleskey_K; +3 Ответить
2. rk 20 10.10.17 08:58 Сейчас в теме
Способы борьбы те-же, что и на обычных сайтах. Отключи ошибки и передавай данные, форматированные в нужный тип и нужной длины.
3. A_Max 20 10.10.17 11:39 Сейчас в теме
(2) Правильный способ это использовать параметры вместо плюсиков.

А по сути если уж перешли на подключение к БД, то проблему общения тогда лучше было сделать через внешние источники. Создать отдельную базу куда из 1С складывать подготовленные данные и в обратную сторону получать документы для оформления.

В принципе можно и в базу CMS писать/читать.
4. rk 20 10.10.17 14:25 Сейчас в теме
(3) "В принципе можно и в базу CMS писать/читать." Можно и так. Только теряется работа в реальном времени.
"Правильный способ это использовать параметры вместо плюсиков." - согласен. Пример приведен в качестве наглядной демонстрации. И плюсиками создается строка html. В реальности, создаются глобальные временные таблицы, а уже из них идет выборка. Причем, в другом соединении. Прямого взаимодействия с таблицами БД 1С нет.
5. A_Max 20 10.10.17 17:38 Сейчас в теме
(4) Чем же теряется онлайновость если в 1С повесить подписки и в них делать "выгрузку". Ну и в качестве дальнейшего развития я бы вообще на MQ перевёл.
6. rk 20 11.10.17 08:31 Сейчас в теме
(5)"Чем же теряется онлайновость если в 1С повесить подписки и в них делать "выгрузку". В этом случае не теряется. Тоже можно так. Это даже позволит распределить железные ресурсы под портал, и под базу 1С. Можно даже в другую подсеть вытащить, ради большей безопасности...

Ну да, раз в сутки остатки обновлять, а потом просто движения добивать. Таблицы маленькие, нагрузка небольшая. Туда-же можно и заказы кидать, чтобы 1С потом забирала и документы создавала. Полная развязка по безопасности, и высокая скорость.
7. asved.ru 36 11.10.17 09:11 Сейчас в теме
Описанный метод доступа является нарушением лицензионного соглашения 1С.
t.v.s.; Andreeei; Reaper_1C; +3 2 Ответить
8. rk 20 11.10.17 09:32 Сейчас в теме
(7) Сам по себе, метод не может нарушать лицензионное соглашение. Это не решение. Потому, вопросы лицензирования не рассматриваются.
9. asved.ru 36 11.10.17 12:47 Сейчас в теме
(8) Лицензионное соглашение прямо запрещает именно использование методов, не предусмотренных в сопроводительной документации, для доступа к информационной базе.

Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:
...
осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;
Andreeei; Reaper_1C; +2 2 Ответить
10. rk 20 11.10.17 13:10 Сейчас в теме
(9) "Лицензионное соглашение прямо запрещает именно использование методов, не предусмотренных в сопроводительной документации, для доступа к информационной базе. " Ну так не используйте. Я вам не предлагаю решение, нарушающие лицензионное соглашение. И не заставляю вас что-то нарушать.

По вашей логике, ассемблер запретить надо, т.к. с его помощью можно убрать защиту с программы.
16. asved.ru 36 11.10.17 17:33 Сейчас в теме
(10)
(11)
Прокурору расскажете.

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

Думаете, Вы первый догадались, что технически с базой можно общаться и мимо платформы?
17. rk 20 11.10.17 17:52 Сейчас в теме
(16) - читай (14), (15). Можно пользоваться веб-сервером 1С. Здесь описан метод получения данных с SQL - сервера. При чем здесь лицензирование? Вопрос не по теме.
22. Nenaviju1C 16.10.17 15:12 Сейчас в теме
(16)
и прокурору расскажу ...

Повешу службу на IIS со своим веб сервисом и 1Ска будет общаться только с ним, а вот серверная часть службы напрямую с базой на SQL сервере. Что то разве нарушил? :)

Запросы к БД напрямую - это и хорошо и плохо, но все зависит от конкретных задач и от рук, которые пишут интеграцию
11. DenisCh 11.10.17 13:11 Сейчас в теме
(9)
осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;


MS mamagement Studio описана в документации?
12. rk 20 11.10.17 13:21 Сейчас в теме
(11) "MS mamagement Studio описана в документации?" - НЕТ.

Как и не описано, что нельзя выполнять прямой запрос к серверу из той-же 1С-ки.
Средствами 1С? - Да!
А уж как я обращаюсь - моё дело.

Ещё вопрос: зачем выпускается консоль запросов с трассировкой и показом плана запроса?
13. DenisCh 11.10.17 13:27 Сейчас в теме
(12)
"MS mamagement Studio описана в документации?" - НЕТ.


То есть архивацию средствами SQL-сервера делать нелья. И создавать базу тоже...
15. rk 20 11.10.17 17:13 Сейчас в теме
(13) Базу предполагается создавать с сервера 1с. А как-уж архивировать, я не знаю.... Видимо, запросом из другой базы 1с:)
(14)
1. Можно и на 1с.
2,3 Предполагается 1 раз НАПИСАТЬ прямой запрос, в который параметрами передавать данные.
4 Да! Но, с сервера приходит готовый html код.
19. Reaper_1C 122 12.10.17 17:01 Сейчас в теме
(13) Внимательно изучите документацию, там все есть:
https://its.1c.ru/db/v83doc#bookmark:cs:TI000000137
24. dg15000 11 05.01.18 10:43 Сейчас в теме
(19)
Для продолжения работы получите демодоступ или авторизуйтесь
- можете по русски написать?
14. man-1982 11.10.17 14:33 Сейчас в теме
Немного не понятна последовательность:
1. POST-ом с клиента отправляете запрос на веб-сервер 1с.
2. На сервере 1с обрабатывает запрос.
3. Преобразуется его в прямой запрос к SQL.
4. Данные обрабатываем сервером 1с и отправляем клиенту
Все верно?
18. artbear 1563 11.10.17 20:07 Сейчас в теме
Как подзадолбали умники по поводу нарушения лицензионного соглашения.
Тот факт, что лицензионное соглашение нарушает закон РФ для ПО, не учитываем?

Это инструменты, в умелых руках полезны, а незнайка может и застрелиться.
20. rk 20 13.10.17 03:31 Сейчас в теме
Раз уж подняли вопрос:

Будет-ли нарушением лицензионного соглашения 1С, если я грохну данные регистра версирования за определенный период, напрямую на SQL-сервере?

Замечу, что это не обслуживание базы SQL.
21. TODD22 19 13.10.17 04:46 Сейчас в теме
(20)
Будет-ли нарушением лицензионного соглашения 1С, если я грохну данные регистра версирования за определенный период, напрямую на SQL-сервере?

На сколько помню прямая работа с базой через SQL в обход платформы запрещена.


(18)
Тот факт, что лицензионное соглашение нарушает закон РФ для ПО, не учитываем?

Можно подробней что именно нарушает?
23. sinops 27.10.17 17:30 Сейчас в теме
(21) То есть вы хотите сказать, если у меня есть 1С 7.7 SQL версия (торговля) и для руководства у меня написано на 8-ке консоль отчетов, в которой я через внешние данные подключаюссь напрямую с к SQL базе торговли то моя конфа незаконна ?
Оставьте свое сообщение