|
Пятничный вопрос по запросам 1С 8… | ☑ | ||
---|---|---|---|---|
0
Wirtuozzz
04.08.17
✎
13:29
|
Всем привет. Сразу прошу не пинать, но пятница, очень хочется поговорить. Вопрос касается запросов 1С.
Итак у нас ситуация (это исключительно лабараторный эксперимент), допустим у нас есть некий регистр накопления, подчиненный регистраторам, а регистраторов у нас допустим 300 штук ( более 256 точно). В части регистраторов есть реквизит «Реквизит1». Вопрос как вывести все регистраторы, где этот реквизит1 заполнен запросом? Сделать это нужно максимально красиво и универсально. Всем спасибо за обсуждение. |
|||
1
Wirtuozzz
04.08.17
✎
13:30
|
Ну и что бы было весело, пусть это будет серверная база.
|
|||
2
vis_tmp
04.08.17
✎
13:30
|
Какой тип у реквизита «Реквизит1»?
|
|||
3
Wirtuozzz
04.08.17
✎
13:31
|
(2) Пусть тип будет Дата
|
|||
4
vis_tmp
04.08.17
✎
13:31
|
У части регистраторов такого реквизита нет?
|
|||
5
1c-bs
04.08.17
✎
13:31
|
Для начала отсеять регистраторы с нужным реквизитом через оператор ССЫЛКА например.
|
|||
6
Wirtuozzz
04.08.17
✎
13:32
|
(4) Да, у части реквизит есть, у части реквизита нет.
|
|||
7
vis_tmp
04.08.17
✎
13:33
|
(6)Хитрый )
|
|||
8
Wirtuozzz
04.08.17
✎
13:34
|
(5) вылетит в ошибку, т.к. построитель сделает столько левых соединений, сколько регистраторов, а если регистраторов более 256, то запрос вылетит в ошибку
|
|||
9
Wirtuozzz
04.08.17
✎
13:34
|
(7) ;)
|
|||
10
1dvd
04.08.17
✎
13:34
|
Добавить в реквизиты регистра Реквизит1 не предлагали ещё?
|
|||
11
vi0
04.08.17
✎
13:35
|
(8) разбей на несколько запросов
|
|||
12
h-sp
04.08.17
✎
13:36
|
(9) сейчас больше или меньше 256 уже никого не парит. Можно больше 256.
|
|||
13
ptiz
04.08.17
✎
13:36
|
(8) Обновить SQL
|
|||
14
Быдло замкадное
04.08.17
✎
13:36
|
так выведи реквизит.. в документах у которых его нет будет null. Нет?
|
|||
15
Wirtuozzz
04.08.17
✎
13:37
|
(10) принимается, но лучше все таки запросом
|
|||
16
H A D G E H O G s
04.08.17
✎
13:37
|
Если других отборов нет - никак. Ну, тоесть, из регистратора.
|
|||
17
Wirtuozzz
04.08.17
✎
13:38
|
(14) Через обращение к каждому типу с условием и конструкцию Объединить все?
|
|||
18
1dvd
04.08.17
✎
13:38
|
(15) т.е. скорость не важна?
Тогда в чем трабла? ГДЕ Регистратор.Реквизит1 = ... |
|||
19
Wirtuozzz
04.08.17
✎
13:39
|
(18) Регистратор.Реквизит1 - должна в ошибку вылететь, будет более 256 левых соединений.
|
|||
20
Быдло замкадное
04.08.17
✎
13:39
|
(17) нет. РегистрНакопления.Регистратор.Реквизит1
ВСЕ. |
|||
21
H A D G E H O G s
04.08.17
✎
13:39
|
(17) Бессмысленно.
|
|||
22
1dvd
04.08.17
✎
13:39
|
(19) сху.. с чего бы?
|
|||
23
H A D G E H O G s
04.08.17
✎
13:39
|
(19) Это если вы еще в прошлом десятилетии.
|
|||
24
Wirtuozzz
04.08.17
✎
13:40
|
(23) Да, мы в прошлом десятилетии
|
|||
25
h-sp
04.08.17
✎
13:40
|
(19) еще раз, не вылетит уже с такой ошибкой.
|
|||
26
Wirtuozzz
04.08.17
✎
13:41
|
(25) на новом SQL не вылетит, а 2008 ляжет. Так ведь?
|
|||
27
1dvd
04.08.17
✎
13:41
|
(24) достань доллар по 30, плиз
|
|||
28
Wirtuozzz
04.08.17
✎
13:42
|
(27) Иронично )
Я имею в виду, можно ли как то было в то время извернуться и решить эту проблему именно запросом. Понятно, что если была бы в 2008 году такая проблема это было бы архитектурной ошибкой, но все же. |
|||
29
h-sp
04.08.17
✎
13:47
|
(28) 2008 работает, не ляжет. Неужели у вас 8.1.8, ну вы динозавры?
|
|||
30
Wirtuozzz
04.08.17
✎
13:50
|
(29) Да хоть зубры, не важно. У меня в голове родился вопрос, я его решил обсудить с самыми жесткими гуру на форуме.
|
|||
31
Wirtuozzz
04.08.17
✎
13:50
|
(29) ну значит у нас такой sql, где он ляжет.
|
|||
32
H A D G E H O G s
04.08.17
✎
13:52
|
(31) есть еще отборы на регистр?
|
|||
33
Wirtuozzz
04.08.17
✎
13:54
|
(32) Приведи пример, я не понимаю.
Давайте пока без отборов, если они потребуются, то добавим, только какого рода отбора нам могут помочь? |
|||
34
h-sp
04.08.17
✎
13:55
|
(30) жесткие гуру сейчас в отпуске
|
|||
35
vi0
04.08.17
✎
13:56
|
(33) чем тебе не нравится мое предложение в (11) ?
|
|||
36
Wirtuozzz
04.08.17
✎
13:57
|
Ты хочешь в цикле что ли запрос строить? Как ты разбивать собрался?
|
|||
37
vi0
04.08.17
✎
13:57
|
(36) я никак не собирался
дальше сам думай простор для творчества |
|||
38
h-sp
04.08.17
✎
13:58
|
(31) ну тогда (10) без вариантов. Непонятно зачем выпендриваетесь, если у вас действиткельно такое невероятное старье. Доработка эта может на 1 час. Если сами не сможете вызовите специалиста.
|
|||
39
Wirtuozzz
04.08.17
✎
13:58
|
(37) Хорошо, у нас появились варианты:
1. Сделать общий реквизит у всех документов; 2. Сделать этот запрос в цикле (разбив большой запрос на кучу маленьких); Есть еще предложения как это сделать? |
|||
40
H A D G E H O G s
04.08.17
✎
13:59
|
(33) Ну, например, РН - это Продажи и у тебя есть список номенклатур или период, для которых нужен отчет (0). Тогда мы могли бы выбрать по этому периоду регистраторы в Выборку на сервере 1С, разбили бы их по типам в разные массивы и для каждого массива, в цикле, получили бы реквизит. Отобрали бы по реквизиту и отправили бы верные регистраторы в первичный запрос.
|
|||
41
vi0
04.08.17
✎
13:59
|
(39) не обязательно именно кучу маленьких
можно на допустимые для сервера порции |
|||
42
Леха Дум
04.08.17
✎
13:59
|
А что мешает сделать кучу запросов по каждому регистратору через ОБЪЕДИНИТЬ ВСЕ?
|
|||
43
2S
04.08.17
✎
14:01
|
(42) причем это можно сделать красиво в цикле
|
|||
44
mistеr
04.08.17
✎
14:02
|
(0) Сгенерировать запрос через объединение. Таблицы, где нет Реквизит1, участвовать не будут.
|
|||
45
Wirtuozzz
04.08.17
✎
14:02
|
(43) замечательно, а без цикла?
|
|||
46
Wirtuozzz
04.08.17
✎
14:02
|
(44) Не понял, можно простейший пример?
|
|||
47
Wirtuozzz
04.08.17
✎
14:03
|
(40) Варинант, т.е. через временные таблицы решить задачу, да?
|
|||
48
Wirtuozzz
04.08.17
✎
14:03
|
(47) не временные, а виртуальные
|
|||
49
Wirtuozzz
04.08.17
✎
14:04
|
(48) * все таки временные )))
|
|||
50
mistеr
04.08.17
✎
14:09
|
(46) Что непонятного...
ВЫБРАТЬ ... ИЗ Регистр ВНУТРЕННЕЕ СОЕДИНЕНИЕ Регистратор1 ПО ... ГДЕ Регистратор1.Реквизит1 <> '00010101' ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ... ИЗ Регистр ВНУТРЕННЕЕ СОЕДИНЕНИЕ Регистратор2 ПО ... ГДЕ Регистратор2.Реквизит1 <> '00010101' ... Генерируем, естественно, в цикле, выполняем один раз. |
|||
51
_Дайвер_
04.08.17
✎
14:11
|
Выбрать первые 256, Поместить в ВТ + Выбрать остальные и т.д.
|
|||
52
Wirtuozzz
04.08.17
✎
14:12
|
(51) Как отловить первые 256?
|
|||
53
Wirtuozzz
04.08.17
✎
14:14
|
(50) Чем ваше отличается от:
ВЫБРАТЬ РН.Регистратор.Дата ИЗ РегистрНакопления.НашРегистр КАК РН Где РН.Регистратор.Дата > ДатаВремя(1,1,1) ? |
|||
54
vi0
04.08.17
✎
14:15
|
(52) составляй текст запроса динамически
|
|||
55
xXeNoNx
04.08.17
✎
14:15
|
Через ВЫБОР..... ВЫРАЗИТЬ...
+ (54) |
|||
56
Wirtuozzz
04.08.17
✎
14:17
|
(55) Т.е. циклом, а когда формируается текст запроса, то через выразить обращаться к нужному реквизиту?
|
|||
57
xXeNoNx
04.08.17
✎
14:20
|
(56)
Как Вариант: ГДЕ ВЫРАЗИТЬ(ССЫЛКА КАК ВидДокумента1).Реквизит1 = &Значение ИЛИ ВЫРАЗИТЬ(ССЫЛКА КАК ВидДокумента2).Реквизит1 = &Значение |
|||
58
dezss
04.08.17
✎
14:20
|
Сперва подготовить список регистраторов с этим реквизитом, а потом их запихать в запрос.
|
|||
59
dezss
04.08.17
✎
14:21
|
(58) + ну и про 256 не забыть. Если превышен, то остальные в другую коллекцию и Объеденить.
|
|||
60
mistеr
04.08.17
✎
14:22
|
(53) Вместо соединений — объединения. Их может быть больше 256.
|
|||
61
Fragster
гуру
04.08.17
✎
14:25
|
самый правильный выход - добавить реквизит регистра и цеплять оттуда.
|
|||
62
Fragster
гуру
04.08.17
✎
14:25
|
а так - 256 таблиц никого не парит. и в данном случае от параллелизма sql профит будет :)
|
|||
63
Fragster
гуру
04.08.17
✎
14:26
|
уже лет 5 как в актуальных скуль серверах нет такого ограничения (хотя и было-то только в mssql)
|
|||
64
Wirtuozzz
04.08.17
✎
14:27
|
(61) Согласен.
|
|||
65
_Дайвер_
04.08.17
✎
14:41
|
(64) в (10) тебе тоже самое говорили
|
|||
66
Wirtuozzz
04.08.17
✎
15:09
|
(65) Я за это еще в (15) поблагодарил.
|
|||
67
vi0
04.08.17
✎
15:44
|
Для сферического коня описанного в (0) любое озвученное здесь решение можно считать идеальным
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |