Прямые запросы к базе 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! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    122069    670    389    

712

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5742    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6284    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1742    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5386    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16169    skovpin_sa    14    

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

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

В принципе можно и в базу CMS писать/читать.
4. rk 20 10.10.17 14:25 Сейчас в теме
(3) "В принципе можно и в базу CMS писать/читать." Можно и так. Только теряется работа в реальном времени.
"Правильный способ это использовать параметры вместо плюсиков." - согласен. Пример приведен в качестве наглядной демонстрации. И плюсиками создается строка html. В реальности, создаются глобальные временные таблицы, а уже из них идет выборка. Причем, в другом соединении. Прямого взаимодействия с таблицами БД 1С нет.
5. A_Max 19 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 1448 11.10.17 20:07 Сейчас в теме
Как подзадолбали умники по поводу нарушения лицензионного соглашения.
Тот факт, что лицензионное соглашение нарушает закон РФ для ПО, не учитываем?

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

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

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

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


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

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