Имя: Пароль:
1C
1С v8
Получение различных данных запросом.
0 goleaff2006
 
09.10.14
12:00
Каким образом в 1с можно реализовать параллельное получение данных.
Пример есть регистр сведение.
Вызываем две одновременно обработки с одинаковыми запросами, пускай запрос выбирает первую 1000 записей.Необходимо, чтобы тогда вторая обработка получила первую 1000 за исключением той 1000 записей которые получила первая.Грубо говоря вторая обработка должна не видеть те записи которая получила первая.
1 Ненавижу 1С
 
гуру
09.10.14
12:02
одновременно? и кто из них первая?
2 Krolik Bezobraznik
 
09.10.14
12:02
А разве 1С реализовало потоки?
3 Килограмм
 
09.10.14
12:03
зачем это нужно?
какая задача изначально
4 kosts
 
09.10.14
12:03
(3) +1 Тоже интересно, вдруг пригодится...
5 goleaff2006
 
09.10.14
12:03
да не важно, суть в том что один и тот же запрос должен получить разные данные, кто первый тот и блокирует свою 1000 записей, а кто второй должен не видеть уже этим же запросом эти записи.
6 shuhard
 
09.10.14
12:03
(0) слишком общая постановка вопроса
7 DCKiller
 
09.10.14
12:04
(0) И как ты хочешь это параллельно реализовать? Вторая обработка у тебя в любом случае не выполнится, пока не выполнена первая, т.к. действие второй обработки напрямую зависит от результата выполнения первой.
8 goleaff2006
 
09.10.14
12:04
Задача есть большое количество записей обрабатываются последовательно одной обработкой, необходимо распарралелить работу.
9 Ненавижу 1С
 
гуру
09.10.14
12:04
ну пишите в РС данные какие нить и читайте
10 kosts
 
09.10.14
12:05
(5) Если записи упорядочены, то можно получить 2-ю тысячу. Если конечно между запросами ничего не произойдет...
11 DCKiller
 
09.10.14
12:05
...хотя многопоточность в 1С было бы неплохо реализовать. Потому что все равно иногда бывают такие обработки, которые могут выполняться независимо друг от друга.
12 shuhard
 
09.10.14
12:05
(8) вводи ещё одно измерения и по нему ставь Where
13 DCKiller
 
09.10.14
12:06
+(7) Можно все это запихать в 1 пакет запросов, но выполнить одновременно все равно НЕ ПОЛУЧИТСЯ
14 Килограмм
 
09.10.14
12:06
(5) да не уверен на счёт "не важно". Порой бывает просят расказать как реализовать что-то неведомое, а начинаешь спрашивать зачем им это, так в итоге оказывается, что им в итоге это неведомое даже и не нужно
15 Krolik Bezobraznik
 
09.10.14
12:07
Как мне кажется тут две задачи:

1. Реализовать многопоточность
2. Реализовать запросы

1. Технология параллельных вычислений для 1С 8.2/8.3 (бесплатная компонента)

О как!
16 goleaff2006
 
09.10.14
12:07
Как сейчас реализовано запросом получил н-записей и их последовательно обрабатываю,а хотелось бы чтобы запустить обработку несколько раз и каждая бы обрабатывала свой данные.
17 Krolik Bezobraznik
 
09.10.14
12:08
(0) Вызываем две одновременно обработки с одинаковыми запросами.

Если запросы одинаковые. то как вы хотите получить разные результаты?
18 goleaff2006
 
09.10.14
12:09
(17)как вижу я одна получила выборку и заблокировала эти данные, вторая запросом заблокированные данные не видела бы.Вот и интересуюсь возможно как то реализовать.
19 Krolik Bezobraznik
 
09.10.14
12:10
(16) Боюсь что это и серии "Уличная магия" и "Фантастика". Я считаю что в той формулировке, как вы написали это нельзя реализовать в 1С или потраченное время на реализацию превысит время работы вашей обработки без многопоточности =)))
20 shuhard
 
09.10.14
12:10
(16) ну ответ очевиден, избыточность должна быть либо в имеющихся измерениях, либо в отдельных

тогда обработки будут работать асинхронно
21 Krolik Bezobraznik
 
09.10.14
12:11
(18) В таком случае вам необходимо как то или оповестить систему что эти записи "заблокированы" или где то их хранить, чтбы при следующей итерации запрос отчленил уже найденные данные от запроса.
22 DCKiller
 
09.10.14
12:15
Можно попробовать реализовать многопоточность посредством бизнес-процессов (там, где есть разделение)... Правда, это будет не совсем многопоточность, но самое близкое к ней из того, чем это можно реализовать в 1С :)
23 hhhh
 
09.10.14
12:16
(18) вам надо не по тысячам их разбивать, а по измерениям. Например группа номенклатуры. Например, одну обработку запускаете на алкогольную продукцию, другую на молочку. У вас они и будут параллельно фигачить.
24 Krolik Bezobraznik
 
09.10.14
12:16
(22) Ну с многопоточностью он может чего и наколдует. А дальше то как реализовывать задачу? =)
25 Krolik Bezobraznik
 
09.10.14
12:17
(23) Ну для того чтобы они "фигачили" одновременно нужна "многопоточность", а идея я думаю имеет право на жизнь.
26 kosts
 
09.10.14
12:20
А что с данными будет делаться после запросов?
27 Defender aka LINN
 
09.10.14
12:21
(16) Запусти из обработки N фоновых заданий, в каждое передай параметры - количество записей и запись, с которой надо начинать
28 goleaff2006
 
09.10.14
12:24
(23)ага сколько групп столько и обработок на делать не вариант.
(16) а если я не знаю с какой записи начинать?
29 piter3
 
09.10.14
12:25
(28)упорядочить не поможет?
30 vasbur
 
09.10.14
12:26
(8) пусть одна обработка обрабатывает четные записи а вторая - нечетные.
как я понял, получение списка записей не проблема,  проблема в их обработке.
31 goleaff2006
 
09.10.14
12:27
Вот представте вам в месяц надо обработать большую гору записей, на обработку одной записи уходит какое то время, и в один прекрасный момент, месяца может не хватить чтобы обработать н-ое количество записей.Соответственно надо как то ускорить разделить рабочии процесс на несколько .
32 vasbur
 
09.10.14
12:29
(31) чем решение в (30) не устраивает?
33 johnny17
 
09.10.14
12:31
(32) а если действительно порядок в запросе поменяется? ))
34 johnny17
 
09.10.14
12:31
(32) там порядковых номеров нет...
35 goleaff2006
 
09.10.14
12:32
(32)Решение устраивает как и те что отборы по группам номенклатуы и т.д, задача не плодить обработки с небольшим изменение в запросе что самое простое, а использовать одну обработку с одним и тем же запросом , но может в недрах 1с существует какой нибудь механиз который бы позволил так реализовать.
36 kosts
 
09.10.14
12:34
Если результат запроса не огромный, то можно данные запроса получить одним запросом. А разделение уже сделать на месте.
37 vasbur
 
09.10.14
13:03
(35) Еще идея: у вас наверняка обработанные записи отличаются от необработанных.
Тогда обработка может поступать так: получать список необработанных записей, и обрабатывать не первые, а какие-нибудь случайные. Тогда вероятность пересечения будет минимальной, и вам легко будет запускать/гасить новые процессы.
38 shuhard
 
09.10.14
13:07
(35) а что мешает при запуске обработки писать в отдельный Рг сведений свой номер/свою НГ и тогда следующий экземпляр будет отрабатывать другую НГ, т.е. организовать семафорчик

при этом обработка естественно будет одна


в примитивном варианте можно просто тупо сделать цикл со счётчиком и передавать при запуске обработки счётчик как реквизит обработки/экспортную пернменную модуля
39 vasbur
 
09.10.14
13:07
(33) можно не четность использовать, а хэш како-нибудь считать по записи
40 vasbur
 
09.10.14
13:08
(38) лишние транзакции как минимум
41 shuhard
 
09.10.14
13:09
(40) да лан
у него обработка работает часами, а здесь одна запись в отдельный Рг/справочник
42 vasbur
 
09.10.14
13:10
(41) может нам много-много быстрых операций, а не мало-мало долгих.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший