Имя: Пароль:
1C
1С v8
Запрос в цикле
0 Конфигуратор1с
 
16.09.12
11:35
Нужно обработать все элементы нескольких справочников и документов. Вот думаю выбирать все и сразу или по видам объектов. Если все и сразу то данных дофига, а с другой стороны запрос в цикле - как бы некошерно.
1 Wobland
 
16.09.12
11:37
подумай про объединение
2 IamAlexy
 
16.09.12
11:40
(0) если разово обработка применяется то делай так как тебе быстрее наваять..

если обработка будет формироваться регулярно как правило запрос в  цикле это не есть хорошо
3 Конфигуратор1с
 
16.09.12
11:41
(1)Так речь как раз об этом и идет - то ли все в одном запросе через объединение то ли по видам метаданных. Просто когда будет все в одном запросе боюсь на файловой базе на обычном компе будет очень медленно
4 Конфигуратор1с
 
16.09.12
11:42
(2) в том и проблема что регулярно
5 IamAlexy
 
16.09.12
11:42
(4) ну тогда думай о всяких там левых соединениях
6 IamAlexy
 
16.09.12
11:43
а вообще любая решенная задача состоит из двух событий:

1. работает
2. работает оптимально
7 DrShad
 
16.09.12
11:50
[Нужно обработать все элементы нескольких справочников и документов] а что конкретно нужно с ними сделать?
8 Classic
 
16.09.12
12:51
Голосовалку давай
9 sanja26
 
16.09.12
12:57
перебор метаданных в цикле с использованием продолжить никак?
10 Nexux
 
16.09.12
22:39
пакетный запрос, не?
11 Конфигуратор1с
 
16.09.12
22:43
(9)это в смысле динамический текст запроса? Так я не о том как сделать а как лучше сделать.
(10)А чем он решит проблему производительности? Я так понимаю память он все равно отожрет одинаково что при пакетном запросе что при объединении.
12 Конфигуратор1с
 
02.10.12
00:22
Апну тему. А то чето мне все равно не спокойно. Ну не работал я с большими базами. Построил я запрос динамически. Выгреб все что нужно и теперь представил что этот запрос отработает на базе 10 летней да с огромным документооборотом. Нет у меня опыта работы с такой базой, но чую радаром что увалит такой запросище сервак. Успокойте кто нибудь мою совесть, а?
13 Лефмихалыч
 
02.10.12
00:24
(0) открой для себя план обмена
14 Конфигуратор1с
 
02.10.12
00:25
(13)и как он мне в отчете поможет?
15 H A D G E H O G s
 
02.10.12
00:28
(12) Че там? Очкуем?

Ничего страшного в запросах к простой табличке в цикле нет
16 Лефмихалыч
 
02.10.12
00:28
(14) ниипу - ты ж задачу не озвучил, а вместо этого принялся с ходу обсуждать какой-то убогий вариант реализации.
Но плн обмена - это тот самый объект, который при помощи таблицы регистрации изменений поможет тебе избежать запросов в цикле
17 H A D G E H O G s
 
02.10.12
00:28
Это Остатки выбирать в цикле - дикость, ибо их результат не увалит сервер SQL в аут (ну при разумном наборе измерений)
18 H A D G E H O G s
 
02.10.12
00:31
Вообше - прикинь по размеру - не уйдет ли у тебя выборка за 1 мегабайт (ибо такое по дефолту на sql серверах стоит ограничение).
19 Конфигуратор1с
 
02.10.12
00:36
(16)озвучил в (0)еще. Отчет, строится по метаданным. Выбираются все записи из выбранных справочников и документов. Вот если взять 20 справочников и 10 документов. Да за 10 лет. Проверить не могу, ибо отчет делаю на маленькой базе, больших нет. Но чето подсказывает что полученные несколько миллионов записей убъют сервак
20 H A D G E H O G s
 
02.10.12
00:37
(19) Убьют. Дальше что?
21 Лефмихалыч
 
02.10.12
00:38
(19) если ты хочешь меня убедить, что кто-то из юзеров в состоянии переварить отчет с декартовым произведением всего на все остальное за 10 лет, то оставь попытки - я железобетонно убежден, что это отчет ни кому не нужен, т.к. его не осилят.
22 H A D G E H O G s
 
02.10.12
00:39
(21) Не пытайся использовать здравый смысл там, где он не нужен.
23 Конфигуратор1с
 
02.10.12
00:39
(20)вот. Может выпишите мне индульгенцию на запрос в цикле и отпустите?
24 H A D G E H O G s
 
02.10.12
00:39
(23) выбирай порциями по 100000 записей и спи спокойно.
25 Конфигуратор1с
 
02.10.12
00:40
(21)-(22)Да это что то типа статистики. Переварят.
26 H A D G E H O G s
 
02.10.12
00:40
(21) У тебя классическая проблема рефлексирующего интеллигента - программист должен делать, а не думать!
27 Конфигуратор1с
 
02.10.12
00:41
(24)Спасибо, падре. Теперь моя совесть чиста. Когда в меня какашками будут бросать скажу у меня индульгенция с подписью и печатью
28 H A D G E H O G s
 
02.10.12
00:41
(21) Сходи интереса ради в алкогольную ветку, или к Дефендеру стукнись, поинтересуйся его макулатурными делами.
29 Лефмихалыч
 
02.10.12
00:42
(25) нет в природе пользователя, который что-либо осмысленное может сделать с отчетом в более, чем 5 колонок и 50 строк. А уж с отчетами, которые даже скуль переварить не может и подавно смысла связываться нет.
30 France
 
02.10.12
00:42
а чо это за сервер, убиваемый 10 лямами??... или, чо за прог, который себе такое позволяет..
31 France
 
02.10.12
00:43
(29) Лефмихалыч, дай зачетку))... а оппонентов учить фасми отправь))
32 H A D G E H O G s
 
02.10.12
00:43
(29) Скуль может все переварить. Порциями.
33 Конфигуратор1с
 
02.10.12
00:44
(30)Опять началось.
(29)ну это ты зря. Была у меня аналитик. Она универсальный отчет нашла и все. Никакие отчеты ей больше не нужны были)))
34 petrowsky
 
02.10.12
00:45
(25) так если это что-то вроде статистики, может при записи документа/справочника помещать нужные данные в один регистр, а потом уже из него тянуть
35 Лефмихалыч
 
02.10.12
00:47
(33) потому, что она не работой занималась а с усердием, достойным восхищения, нарабатывала себе репутацию эдакого шамана или оракула, которые хер ее знает, что там и как делает, но если ее уволить, то все пропало - ни кто не знает, что и как и чем и зачем и почему она делает
36 France
 
02.10.12
00:48
(33) ок, за "10 лямов" снимаю... а отчет, который не умещается на экране, сам по себе не нужен.... другое дело, что его скинут в эксель и начнут рихтовать... но, тогда опять - вопрос какой гад его писал??
37 H A D G E H O G s
 
02.10.12
00:50
(35) Конечно, конечно.
38 Лефмихалыч
 
02.10.12
00:51
(37) не надо меня успокаивать - это бесит
39 H A D G E H O G s
 
02.10.12
00:53
Ты какой-то агрессивный.
40 France
 
02.10.12
00:54
это нормально - агрессия, когда элементарных вещей не разумеют
41 Конфигуратор1с
 
02.10.12
00:55
Как же вам с юзверями не везло(((
42 Лефмихалыч
 
02.10.12
00:55
(39) отнюдь - я предельно дружелюбен и голову оторву любому, кто с этим не согласен
43 H A D G E H O G s
 
02.10.12
00:56
(41) Или наоборот
44 France
 
02.10.12
00:56
(41) тэкс, что за обобщения, и в чем невезение?))
45 Конфигуратор1с
 
02.10.12
00:58
Я изза вас с танчиков вышел. Тогда слушайте
(44) "а отчет, который не умещается на экране, сам по себе не нужен". Грамотным пользователям, которые работают а не фигней маются, нужны отчеты разные. И большие и маленькие.)))
46 Лефмихалыч
 
02.10.12
00:59
(45) ну, да - фкугсе - они их печатают, а потом линейкой крыжат. Иначе шреддеру кушать нечего
47 France
 
02.10.12
00:59
(45) сам какими либо отчетами для себя пользуешся, помимо того, что для других пишешь))
48 H A D G E H O G s
 
02.10.12
01:01
(47) Настоящие пацаны отчетами не пользуют.
Настоящие пацаны смотрят запросы в enterprise manager
49 France
 
02.10.12
01:02
(48) согласен... только с условием, что настоящие пацаны знают Group By c havig
50 Конфигуратор1с
 
02.10.12
01:03
(47)пользуюсь штатными и вот начал делать группу отчетов для типовой для контроля за юзверями. А то задрался их ошибки вылавливать типовыми отчетиками в две колонки и 5 строк(((
51 France
 
02.10.12
01:05
(50) попробуй искоренять причины, говорят последствия не придется разгребать))
52 Конфигуратор1с
 
02.10.12
01:05
(51)Причину искоренить не могу - бущек убить не разрешает ук, руководство не разрешает править типовую конфигурацию. (((
53 France
 
02.10.12
01:06
поставлю ка я (с) на 51  ))
54 Конфигуратор1с
 
02.10.12
01:08
(51)Когда пользователю написал в картинках инструкцию детальную и подробную, стрелочками прорисовал какие кнопочки за какими нажимать. Раз десять показал и рассказал, а они все равно умудряются делать одни и те же ошибки на протяжении полгода(((
55 GANR
 
02.10.12
11:32
ТекстЗапроса = "";
   Для Каждого ОбъектМетаданных Из Метаданные.Документы Цикл
       Если ТекстЗапроса <> "" Тогда
           ТекстЗапроса = ТекстЗапроса + "
           |ОБЪЕДИНИТЬ ВСЕ
           |";
       КонецЕсли;
       ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
       |    """ + ОбъектМетаданных.Имя + """ КАК ИмяОбъектаМетаданных,
       |    Ссылка КАК Ссылка
       |ИЗ
       |    Документ." + ОбъектМетаданных.Имя;
   КонецЦикла;
   
   ТекстЗапроса = ТекстЗапроса + "
   |ИТОГИ ПО
   |    ИмяОбъектаМетаданных";
   
   Запрос = Новый Запрос;
   Запрос.Текст = ТекстЗапроса;
   
   // нужно учесть одну вещь - SQL не выполнит запрос
   // если таблиц в конечном запросе более 256
   // с этим можно бороться, применив сочетание пакетного запроса
   // порциями по 256 таблиц с объединением
   
   Результат = Запрос.Выполнить();    
   ВыборкаИмяОбъектаМетаданных = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
   Пока ВыборкаИмяОбъектаМетаданных.Следующий() Цикл
       Выборка = ВыборкаИмяОбъектаМетаданных.Выбрать();
       Пока Выборка.Следующий() Цикл
           // обработка ссылок на документы
           // выбранного типа
       КонецЦикла;
   КонецЦикла;
56 GANR
 
02.10.12
11:35
(0) Вот как это делается - (55)
57 Конфигуратор1с
 
02.10.12
14:34
(56)Спасибо, но я и так знаю. Вопрос - при каком объеме данных ляжет сервер?
58 Ахиллес
 
02.10.12
14:43
(57) Найди в типовой конфе от 1С запрос в цикле и успокойся. Что можно прогам из 1С, то можно и тебе.
59 Ахиллес
 
02.10.12
14:44
Нельзя запросы в цикле писать только на экзамене в учебном центре, но ты же не на экзамене ;-)
60 GANR
 
02.10.12
14:47
(57) Сервер при более чем 256 таблицах, может и не ляжет, но исключение будет вызвано.
>Вопрос - при каком объеме данных ляжет сервер?
Сложный вопрос. Я своим запросиком, помню, как-то вешал сервак и блокировал работу всех пользователей во всех базах этого сервака. Таблиц было немного, но я элементарно забыл добавить условие соединения и, как следствие, получил огромную выборку, которая все ресурсы и засорила.
61 GANR
 
02.10.12
14:51
При соединении N таблиц происходит k1 * k2 * ... * kn проверок условий соединения. Вот и представь, сколько места выборка займет в оперативе, если условие соединения всегда "ИСТИНА", т. е. число строк в выборке k1 * k2 * ... * kn ??? 3 таблицы по 10000 строк соединить по ИСТИНА и получить выборку в 1000000000000 строк, думаю, будет достаточно, чтобы повесить сервак.
62 Classic
 
02.10.12
14:58
Делай в цикле - не парь мозг(и скульный сервак).
63 sergeante
 
02.10.12
15:24
(60) где ты там соединения увидел?? Там ОБЪЕДИНИТЬ ВСЕ.
64 GANR
 
02.10.12
15:30
(63) Да это я просто привел рецепт на тему "как повесить сервак". Но и ОБъединений тоже может быть достаточно, при большом объеме данных.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.