Имя: Пароль:
1C
1С v8
Хитрая задача на чтение из SQL...
0 seperblunt2
 
29.05.19
13:21
1. Выполняется запрос к MSSQL и затем читается через RecordSet.
2. Чтение происходит на сервере 1С.
3. Чтение происходит порциями(!).

Нужно сохранить указатель RecordSet между серверными вызовами.

В обычных формах проблем не было - сохранил в переменной и все работает.

В УФ средствами 1С - никак (ВремХранилище + Структура(RecordSet) - не предлагать).

Единственный вариант - чтобы указатели сохранялись в самом SQL.

Вопрос знатокам: есть ли такая возможность?
1 Джинн
 
29.05.19
13:26
SQL-сервер принципиально работает с наборами данных, а не с отделными строками. Вы требуете с него слишком многого.
2 shuhard
 
29.05.19
13:28
(1) курсор и есть набор отдельныз строк, требования не к сиквелу, а к хранению контекста ADODB на стороне клиента
3 MM
 
29.05.19
13:30
Если результат запроса монотонно упорядочен, то можно сохранить последнее значение ключа, по которому произведена сортировка, а при следующем запросе добавить условие, чтобы ключ был больше этого значения. Так работает динамическое чтение списков в 1С.
4 Джинн
 
29.05.19
13:30
(2) Курсор работает "на стороне сервера". Это его внутренняя процедурная обработка. Клиенту будет выдан набор данных.
5 seperblunt2
 
29.05.19
13:33
(3) увы, в общем случае не подходит.
6 seperblunt2
 
29.05.19
13:37
(1) по сути я его и прошу работать с набором.. просто нужно понять как можно обращаться к одному и тому же набору, без возможности сохранения указатели на клиенте
7 ptiz
 
29.05.19
13:40
А что насчет общих модулей с повторно возвращаемыми значениями?
8 Джинн
 
29.05.19
13:41
(6) Нет у него "указателя". Есть только ключ записи. Только он идентифицирует запись. Его и ищите и на него позиционируйтесь.
9 seperblunt2
 
29.05.19
13:50
(8) имею ввиду указатель на текущую запись.

1 вызов серверной процедуры: выполнил запрос SQL,получил рекорд сет, прочитал N записей
2. вызов серверной процедуры: прочитал следующие N записей из РекордСет-а

на ОФ было так...
10 seperblunt2
 
29.05.19
13:53
(8) да понял, не правильно формулирую. Сохранять мужду вызовами нужно не указатель, а сам объект RecordSet
11 END
 
29.05.19
14:00
(10) Может стоит все прочитать, загнать в ТЗ и, уже из нее читать порциями? Зачем нужно порциями непосредственно из рекордсета?
12 olegves
 
29.05.19
14:00
(9) а кто мешает к скулю подключиться с клиента?
13 olegves
 
29.05.19
14:01
+(12) или ты с планшета подключаешься?
14 seperblunt2
 
29.05.19
14:04
(11) это уже сделано, и хочется еще ускорить. Перегон РекордСета в ТЗ - занимает ощутимое время
15 seperblunt2
 
29.05.19
14:06
(12) с клиента нет доступа к SQL
16 Garykom
 
гуру
29.05.19
14:09
(0) Используй нечто внешнее относительно 1С
17 Garykom
 
гуру
29.05.19
14:10
18 Garykom
 
гуру
29.05.19
14:13
(17)+ Отдельную конфу 1С на сервере которая работает с MSSQL как с внешним источником.
В ней поднят веб или http сервис.
Из своей основной конфы хоть с сервера хоть с клиента хоть пока по http соединяешься с отдельной и как хочешь хоть целиком хоть порциями получаешь.

И не морочь уже голову некрофилией
19 Garykom
 
гуру
29.05.19
14:15
(18)+ Имхо я бы микросервис на golang (бэк обычный же по rest) за пару часов сваял.
Простой exe'шни в итоге который после запуска работает как веб-сервер на нужном порту, принимает запросы от 1С по http и работает с MSSQL.
20 Garykom
 
гуру
29.05.19
14:18
А это идея!

Хотя не верю что еще нет транслятора sql запросов по http в MSSQL сервер и получение обратно по http результата.
21 Garykom
 
гуру
29.05.19
14:20
(19) Я загнул про пару часов, часа за глаза ибо https://github.com/besser/go-mssql
22 olegves
 
29.05.19
14:20
(15) СОМ объект тебе недоступен? Им прекрасно можно к скулю подключаться
23 MM
 
29.05.19
14:26
(14) Можно сохранить не в ТЗ, а во "временную" таблицу SQL, с первичным ключом в виде числа. Затем выбирать (3). В конце очистить.
(22) Если клиент веб браузер или находится в интернете с медленным каналом, то как достучаться до SQL?
24 seperblunt2
 
29.05.19
14:35
(23) пожалуй вариант!
25 Garykom
 
гуру
29.05.19
14:43
(23) Вариант с "временной таблицей" слегка изврат, и предвижу кучу глюков.
Например дважды 1С запрос в двух сеансах тот же делает и что?
26 Garykom
 
гуру
29.05.19
14:44
(25)+ Имя таблицы по идентификатору сеанса или еще чего из 1С?
Или еще один ключ в таблицу и очищать только свои?
27 AquaMan
 
29.05.19
15:24
(0) гуглим OFFSET-FETCH
28 Defender77
 
29.05.19
15:41
(26) Временная таблица своя для каждого сеанса
29 Вафель
 
29.05.19
15:47
(26) временные таблицы вполне в рамках 1 сеанса, а вот глобальные временные -одни на всех