|   |   | 
| 
 | Запрос в цикле | ☑ | ||
|---|---|---|---|---|
| 0
    
        craxx 29.04.19✎ 12:23 | 
        Набившая оскомину тема. Запрос в цикле. Когда он выгоднее, чем запрос вне цикла?
 У меня на ум приходит только соединение двух больших таблиц, когда много соединений маленьких выполнится быстрее большого соединения. У кого какие еще примеры? | |||
| 1
    
        azernot 29.04.19✎ 12:26 | 
        >Запрос в цикле. Когда он выгоднее, чем запрос вне цикла?
 Правильный ответ - никогда. Если факт противоречит этому, это говорит о том, что неверно организован запрос вне цикла. | |||
| 2
    
        xXeNoNx 29.04.19✎ 12:27 | 
        (0) в комплексе с другими моментами когда количество итераций цикла известна заранее и решение того стоит     | |||
| 3
    
        craxx 29.04.19✎ 12:28 | 
        (1) неправильный ответ. в моем случае выгоднее именно в цикле. ибо сумма квадратов всегда меньше квадрата суммы     | |||
| 4
    
        xXeNoNx 29.04.19✎ 12:28 | 
        (1) >> Правильный ответ - никогда. 
 А обоснования данного тезиса у Вас есть? | |||
| 5
    
        ptiz 29.04.19✎ 12:30 | 
        (0) Например, запрос вызывается с такими разными наборами параметров, для которых неэффективно получать всё в одном запросе.     | |||
| 6
    
        xXeNoNx 29.04.19✎ 12:30 | 
        +(4) (1) Вы просто не умеете их готовить (с)ВР     | |||
| 7
    
        azernot 29.04.19✎ 12:35 | 
        (3) Не понимаю причём тут это.
 (4) Конечно. Как минимум не тратится время на иннициацию запроса, передачу параметров и т.п. Подчеркну, что сам вопрос подразумевает получение одних и тех же данных единым запросом, или несколькими однотипными запросами к одному источник в цикле. Речь не идёт о каком-то прикладном цикле, когда сам цикл скорее является инструментом для перебора разных источников. Т.е. если я устрою цикл из 4-х элементов (УУ, БУ, НУ, МУ) и далее отдельно формирую запросы к разным данным, я не считаю это "запросом в цикле". | |||
| 8
    
        xXeNoNx 29.04.19✎ 12:42 | 
        (7) >> я не считаю это "запросом в цикле"
 о как.., тут - это запрос в цикле, там нет Еще один пример: получение различных начислений по сотруднику так же не не запрос в цикле? | |||
| 9
    
        exwill 29.04.19✎ 12:43 | 
        (0) Запрос в цикле практически всегда лучше, чем решение той же задачи через запрос вне цикла.
 1. Лучше использовать явный цикл, чем неявный. Это понятнее и нагляднее. 2. Оптимизировать надо там, где есть потребность в оптимизации. 3. Незачем потакать лени разработчиков платформы. В чем проблема выносить запросы из циклов на уровне платформы? Разве не этим она должна заниматься? | |||
| 10
    
        H A D G E H O G s 29.04.19✎ 12:44 | 
        (0) Когда есть составное поле и ты не знаешь все его типы до выполнения запроса.     | |||
| 11
    
        craxx 29.04.19✎ 12:44 | 
        (10) Плюсану. Только что об это подумал     | |||
| 12
    
        H A D G E H O G s 29.04.19✎ 12:49 | 
        (9) вам лучше продолжать писать в политике.     | |||
| 13
    
        azernot 29.04.19✎ 12:54 | 
        (8) Хорошо скажем так, я под "запросом в цикле" подразумеваю один и тот же запрос (или с очень минимальными правками) в который передаются разные параметры, перебираемые в цикле. Т.е. цель цикла - именно в переборе параметров.
 В остальных случаях, когда цикл нужен просто для более удобной и универсальной компоновки текста запроса, перебора источников и т.п. я не считаю это "запросом в цикле", это просто метод программирования. И тут ответ на вопрос в (0) зависит от очень многих факторов, что на него просто невозможно ответить "вообще и в целом". | |||
| 14
    
        xXeNoNx 29.04.19✎ 13:03 | 
        (13) так точно -> (2) + (6) 
 Но однозначно сказать что запрос в цикле это плохо - нельзя! | |||
| 15
    
        craxx 29.04.19✎ 18:38 | 
        (14) У большинства другое мнение)     | |||
| 16
    
        polosov 29.04.19✎ 20:25 | 
        (0) Он выгоднее тогда, когда надо решить задачу, но ты не знаешь как сделать без него. 
 (10) Надо строить запрос кодом. (9) Я надеюсь это ты тралишь, а не выражаешь свое профессиональное мнение. Однозначно, выборка данных единым запросом лучше, чем дергание СУБД постоянными запросами поменьше, ибо возрастает вероятность блокировок. | |||
| 17
    
        H A D G E H O G s 29.04.19✎ 20:27 | 
        (16) В смысле - запрос - кодом?     | |||
| 18
    
        H A D G E H O G s 29.04.19✎ 20:29 | 
        Я вот про это:
 Выбрать Продажи.Регистратор.Номер как НомерДокумента из РегистрНакоплений.Продажи как Продажи Где Продажи.Период>&НачалоМесяца его нужно заменить на Выбрать Продажи.Регистратор как НомерДокумента из РегистрНакоплений.Продажи как Продажи Где Продажи.Период>&НачалоМесяца и постобработкой получить номера, с числом запросов= количеству различных типов регистратора. | |||
| 19
    
        polosov 29.04.19✎ 20:29 | 
        (17) Всмысле в зависимости от входных данных (например, анализа метаданных) строишь тело запроса. Что-то мне не верится, что для тебя такое в новинку     | |||
| 20
    
        polosov 29.04.19✎ 20:32 | 
        (18) В зависимости от типов своих регистраторов делаешь
 Выбрать ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ТВОЙ_ТИП_ДОКУМЕНТА).Номер как НомерДокумента из РегистрНакоплений.Продажи как Продажи Где Продажи.Период>&НачалоМесяца ОБЪЕДИНИТЬ ВСЕ и тд и тп | |||
| 21
    
        H A D G E H O G s 29.04.19✎ 20:42 | 
        (20) Откуда ты узнаешь, какие типы регистраторов попали в выборку ДО выполнения запроса?     | |||
| 22
    
        H A D G E H O G s 29.04.19✎ 20:44 | 
        Выбрать ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ТВОЙ_ТИП_ДОКУМЕНТА).Номер как НомерДокумента 
 из РегистрНакоплений.Продажи как Продажи Где Продажи.Период>&НачалоМесяца ОБЪЕДИНИТЬ ВСЕ легко заменяется на ВЫБОР КОГДА Продажи.Регистратор ССЫЛКА Документ.ТВОЙ_ТИП_ДОКУМЕНТА1 ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ТВОЙ_ТИП_ДОКУМЕНТА1).Номер КОГДА Продажи.Регистратор ССЫЛКА Документ.ТВОЙ_ТИП_ДОКУМЕНТА2 ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ТВОЙ_ТИП_ДОКУМЕНТА2).Номер | |||
| 23
    
        polosov 29.04.19✎ 20:54 | 
        (21) Хорошо. Если у тебя такая задача, то держи.
 1. Кодом получаешь типы регистраторов. 2. Строишь запрос. (22) Да, можно и так. | |||
| 24
    
        H A D G E H O G s 29.04.19✎ 20:57 | 
        (23) Каким кодом?     | |||
| 25
    
        H A D G E H O G s 29.04.19✎ 20:58 | 
        (23) "Да, можно и так."
 Весело там у вас. | |||
| 26
    
        polosov 29.04.19✎ 20:58 | 
        (24) запрос для поисковой машины: "Как получить типы регистраторов в регистре накопления"     | |||
| 27
    
        polosov 29.04.19✎ 21:01 | 
        (25) Вот тут не совсем понимаю. Хочешь сказать, что case сильно оптимальнее union?     | |||
| 28
    
        H A D G E H O G s 29.04.19✎ 21:02 | 
        (26) Ты прикалываешься?
 Еще раз вчитайся внимательно во фразу "Откуда ты узнаешь, какие типы регистраторов попали в выборку ДО выполнения запроса?" | |||
| 29
    
        polosov 29.04.19✎ 21:03 | 
        (28) ХЗ, может ты прикалываешься? У тебя нет доступа к РН до выполнения запроса?     | |||
| 30
    
        H A D G E H O G s 29.04.19✎ 21:03 | 
        (27) union потребует x поисков по таблице, где x - количество типов регистраторов с последующим merge     | |||
| 31
    
        polosov 29.04.19✎ 21:05 | 
        (30) Ты вроде с планами дружишь. Можешь быстренько глянуть? Я просто, утверждать не берусь, но подглядел такие union на взрослых системах еще во времена обучения.     | |||
| 32
    
        H A D G E H O G s 29.04.19✎ 21:05 | 
        (29) 
 с 1 января по 31 января были только ПТУ. 1 февраля были только РТУ. У нас выборка с 2 февраля. Вопрос - надо ли трогать таблицу ПТУ? | |||
| 33
    
        polosov 29.04.19✎ 21:07 | 
        (32) А что-то изменится, если в union all попадет выборка из РН по типу регистратора, которого нет за это период?     | |||
| 34
    
        H A D G E H O G s 29.04.19✎ 21:08 | 
        Вот жесть жеж.     | |||
| 35
    
        polosov 29.04.19✎ 21:10 | 
        (34) Не ну тебе виднее, ты же собак много съел на запросах.     | |||
| 36
    
        polosov 29.04.19✎ 21:12 | 
        (34) Мне просто нравится твоя жесть. Вытащить регистраторы запросом, а потом из выборки вытащить типы регистраторов, а потом построить запросы.     | |||
| 37
    
        H A D G E H O G s 29.04.19✎ 21:15 | 
        (36) Рекомендую собрать план запроса в какой-нибудь ERP для 
 ВЫБРАТЬ ПЕРВЫЕ 10 ДвиженияСерийТоваров.Регистратор.Номер КАК РегистраторНомер ИЗ РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров | |||
| 38
    
        DomovoiAtakue 29.04.19✎ 21:25 | 
        (0)Когда есть уже готовые запросы и их вызовы не создают видимые тормоза. Лучше использовать уже готовые запросы как например ПолучитьЦену() чем каждый раз клепать что-то свое. Все пишут запросы в цикле, странно, что кто-то еще говорит: "Запросы в цикле - зло".     | |||
| 39
    
        Garykom гуру 29.04.19✎ 21:31 | 
        (38) Странно это не понимать и не стараться избегать всеми силами.
 Там только на передаче данных туда-сюда между сервером 1С и sql сервером куча накладных расходов. | |||
| 40
    
        H A D G E H O G s 29.04.19✎ 21:37 | ||||
| 41
    
        H A D G E H O G s 29.04.19✎ 21:37 | ||||
| 42
    
        H A D G E H O G s 29.04.19✎ 21:38 | ||||
| 43
    
        polosov 29.04.19✎ 21:42 | 
        (37) У тебя вроде маркировка больная тема, отсюда и отсылки к своим любимым сериям. Но я человек простой, запросы строю за деньги. 
 (40) , (41) , (42) Ты уже принял писят грамм "чтобы спалось лучше"? )) | |||
| 44
    
        polosov 29.04.19✎ 21:43 | 
        (37) И да, традиционно: опиши задачу, возможно ты решаешь ее не правильно.     | |||
| 45
    
        Garykom гуру 29.04.19✎ 21:45 | 
        (36) >Вытащить регистраторы запросом, а потом из выборки вытащить типы регистраторов, а потом построить запросы.
 (43) >У тебя вроде маркировка больная тема, отсюда и отсылки к своим любимым сериям. Но я человек простой, запросы строю за деньги. Типовые конфы, метаданные сильно не исправишь, приходится выкручиваться чем можно. Ибо работать то надо на то что есть. | |||
| 46
    
        H A D G E H O G s 29.04.19✎ 21:46 | 
        (45) Можно денормализовать, но устроила постобработка.     | |||
| 47
    
        Garykom гуру 29.04.19✎ 21:47 | 
        (46) Блин напомнил про хитрый хак.
 Когда вместо исправления головоломного запроса на несколько экранов. Тупо и банально после него подсовываем (в т.ч. кодом) что надо для отчета. | |||
| 48
    
        Garykom гуру 29.04.19✎ 21:48 | 
        (47)+ В результат после выполнить подсоваем     | |||
| 49
    
        Garykom гуру 29.04.19✎ 21:48 | 
        (48) тьфу *подсовываем или изменяем данные как надо.     | |||
| 50
    
        polosov 29.04.19✎ 21:51 | 
        (47) Да все мы, бывает, говнокодим.     | |||
| 51
    
        H A D G E H O G s 29.04.19✎ 21:58 | 
        (50) нет.     | |||
| 52
    
        DomovoiAtakue 29.04.19✎ 21:59 | 
        (39)Избегать запросов в цикле?     | |||
| 53
    
        polosov 29.04.19✎ 22:01 | 
        (51) Ой не смеши.     | |||
| 54
    
        exwill 29.04.19✎ 22:59 | 
        (16) Я вроде бы достаточно ясно выразился.
 Простота кода важнее производительности, которую, в идеале, должна обеспечивать платформа. | |||
| 55
    
        palsergeich 29.04.19✎ 23:09 | 
        Пример, ранее обсосанный на форуме:
 Получить всех родителей элемента в иерархическом справочнике, если глубина иерархии неизвестна, и считается что может быть большой (больше 10). | |||
| 56
    
        craxx 30.04.19✎ 05:35 | 
        (54) ты это пользователям потом расскажешь, которые спросят за тормоза     | |||
| 57
    
        craxx 30.04.19✎ 05:36 | 
        (55) пример не совсем корректный ибо он изначально запросом не решается     | |||
| 58
    
        Лодырь 30.04.19✎ 05:54 | ||||
| 59
    
        craxx 30.04.19✎ 05:56 | 
        (58) Я знаю эту тему, пробовал собирать запросом, по скорости полный трэш, собрал программно в 20 раз быстрее.     | |||
| 60
    
        Лодырь 30.04.19✎ 06:05 | 
        (59) Ну так palsergeich и написал что быстрее ) Но ведь можно же.     | |||
| 61
    
        seevkik 30.04.19✎ 06:36 | 
        В чем заключается выгода?)
 Как-то надо было добавить поле со значением дополнительного реквизита, подумав "надо сделать все шикарно", я менял запрос в документе (не самый сложный, но далеко не простой), делов на 10 минут, как раз расширения стали популярны - добавил в расширение, поменял все в запросе, получил допреквизит, вроде по феншую. Периодически, при обновлении, этот участок кода менялся, иногда запрос, иногда код, доработка совсем мелкая, малозначимая, каждый раз мне приходилось заново в нее вникать, частенько я про нее забывал - тогда приходили тикеты, они отнимали мое время, мешали зависать на формуах тыжпрограммистов, смотреть на котиков в тырнетах, тратили силы и нервы. Я не мог больше работать. Я был в депрессии. Однажды мне это надоело. В цикле этого запроса воткнув "УправлениеСвойствами.ЗначениеСвойства" я получил большую выгоду в виде времени, с тех пор жизнь начала налаживаться, трава стала зеленее, солнце ярче, и я понял что запросы в цикле это не плохо | |||
| 62
    
        Провинциальный 1сник 30.04.19✎ 06:40 | 
        Когда делаешь запрос в цикле - ты можешь легко оценить оставшееся до завершения алгоритма время. В случае же, если мегазапрос выполняется sql-сервером, ты не видишь никакого прогресса, программа тупо "висит". Для пользователя приятнее видеть прогресс-бар минуту, чем полминуты зависшее окно.     | |||
| 63
    
        Simod 30.04.19✎ 07:30 | 
        (0) Когда необходимо ограничить размер выборки и обрабатывать по частям:
 <CODE> ВЫБРАТЬ ПЕРВЫЕ 1000 ... </CODE> | |||
| 64
    
        Prog111 30.04.19✎ 07:59 | 
        Выгоднее в случаях:
 1) Алгоритм будет использоваться редко (какая-нибудь разовая обработка, отчет, запускающийся раз в полгода). 2) Количество циклов предсказуемо и небольшое (например, количество районов в городе 4-5) и не влияет особо на скорость исполнения алгоритма. 3) Разработка более сложного кода (без циклов) будет более затратна, чем эффект от экономии использования более оптимального кода. | |||
| 65
    
        Dotoshin 30.04.19✎ 08:17 | 
        (0) Есть ситуации, когда запрос в цикле не выгоднее, а единственно возможное решение. Например разузлование спецификации номенклатуры или построение дерева затрат без СКД.
 Может я конечно чего-то не знаю, поэтому если есть способ без цикла и без СКД, то прошу поделиться. | |||
| 66
    
        H A D G E H O G s 30.04.19✎ 10:13 | 
        (62) включи ему gif-ку     | |||
| 67
    
        Успехов 30.04.19✎ 10:15 | 
        (65) Когда ты знаешь максимальную глубину вложенности можно и без запроса в цикле.     | |||
| 68
    
        kolts23381 30.04.19✎ 10:26 | 
        А что насчет запросов в цикле из временных таблиц?     | |||
| 69
    
        Конструктор1С 30.04.19✎ 10:28 | 
        Запрос в цикле допустим, если он:
 а) не губит производительность б) делает код проще и удобочитаемее, по сравнению с запросом "по феншую" | |||
| 70
    
        Вафель 30.04.19✎ 10:28 | 
        (65) скд теже циклы крутил. или раз я не пишу слово цикл - значит я молодец?     | |||
| 71
    
        Sammo 30.04.19✎ 10:33 | 
        Была ситуация (правда еще на 8.1 и 8.2) когда выборка более 1млн записей падала. А поскольку требовалось сформировать данные за месяц (порядка 20млн записей), то приходилось разбивать месяц по периодам и формировать кусками.     | |||
| 72
    
        stix2010 30.04.19✎ 10:55 | 
        а давате похоливарим на тему запросы в цикле от разработчиков типовых?     | |||
| 73
    
        Nikoss 30.04.19✎ 11:14 | 
        (69) если (а) никогда не выполняется, смысл писать про (б)?     | |||
| 74
    
        Nikoss 30.04.19✎ 11:18 | 
        (71) зачем нужна выборка на 1млн (или темболее 20млн) записей? Что с ними делать?     | |||
| 75
    
        Конструктор1С 30.04.19✎ 11:33 | 
        (73) в каком смысле не выполняется? У производительности тоже есть границы разумного. Допустим, в справочнике заведомо 100 элементов, за раз нужно получить 5 элементов. Тут совершенно пофиг, как ты там будешь получать эти данные из справочника, хоть через точку, хоть запросами в цикле, хоть "оптимальным" запросом, ибо всё оно будет выполняться моментально. Ну перепишешь ты запрос оптимально, выиграешь 0,00003 секунды, а пользователь этого никогда не заметит. Что это даст? 
 В то же время попытки получить данные одним большим запросом заведомо усложняют решение. | |||
| 76
    
        Вафель 30.04.19✎ 11:36 | 
        если данных слишком много, то за запрос без цикла ручки то нужно вырывать     | |||
| 77
    
        Nikoss 30.04.19✎ 11:41 | 
        (75) ок, тогда пункт (а) из (69) нужно разворачивать - "..., в границах разумного". Только у каждого свое понимание разумного. Какое понимание, допустим, у экзаменаторов 1С?     | |||
| 78
    
        Nikoss 30.04.19✎ 11:42 | 
        (76) ты мне про (74)?     | |||
| 79
    
        Конструктор1С 30.04.19✎ 11:55 | 
        (77) у экзаменаторов 1С какие-то свои представления о производительности. "Вот вам база из двух справочников по три элемента в каждом, пишите оптимальные запросы"
 пункт (а) из (69) разворачивать не нужно. Затраты в лишние 0,005 секунд на всю операцию субъективно никак не влияют на производительность. Такого "ухудшения производительности" никто и никогда не заметит. В то же самое время, не рентабельно тратить часы на оптимизацию и делать код менее читабельным, ради сомнительного выигрыша в 0,005 секунд. Всегда должен быть баланс между "легкостью" и производительностью кода | |||
| 80
    
        Nikoss 30.04.19✎ 12:14 | 
        (79) 0.005 сек - ок. А 0.5 сек? А 1 сек?
 Опять же, в контексте чего мы говорим: одно дело ночная регламентная процедура, и совсем другое когда пользователь жмет кнопку добавить в таб.части. | |||
| 81
    
        stix2010 30.04.19✎ 12:22 | 
        (79) мне кажется это самое логичное, если производительность не критична, то выигрывает скорость разработки.     | |||
| 82
    
        Провинциальный 1сник 30.04.19✎ 12:23 | 
        (66) Котик не вариант, прогресс должен быть информативным, дающим возможность оценить время, на которое пользователь может отвлечься)     | |||
| 83
    
        Вафель 30.04.19✎ 12:42 | 
        (79) на экзамене проверяют твое умение писть запросы не только в цикле     | |||
| 84
    
        Nikoss 30.04.19✎ 12:47 | 
        (81) скорость разработки и производительность - палка о двух концах. На момент разработки, процедура с запросом в цикле может выполняться мгновенно, а после, условного, года наполнения таблиц данными - вечность.     | |||
| 85
    
        Провинциальный 1сник 30.04.19✎ 12:48 | 
        (84) А бывает и наоборот.     | |||
| 86
    
        Конструктор1С 30.04.19✎ 13:04 | 
        (80) даже при интерактивном действии пользователь не заметит потерь в доли секунды
 (83) про "только в цикле" никто и не говорит. Скажем так, запрос в цикле иногда допустим, а маниакальное избавление от запросов в цикле приводит к неимоверному усложнению кода. (84) это уже вопрос прогнозирования объема данных и тестирования производительности | |||
| 87
    
        oslokot 30.04.19✎ 13:12 | 
        (62) один хрен форма зафризится, будь то запрос в цикле или один мега-запрос
 Все равно надо выполнять в фоне, а пользователю - кота | |||
| 88
    
        Ник080808 30.04.19✎ 13:59 | 
        (79) "Всегда должен быть баланс между "легкостью" и производительностью кода"+100500. Все зависит от ситуации. А то иногда месяц ваяют запрос без цикла, который собственно раз в году понадобится и сэкономит пользователю пару минут. по итогу затраты на разработку окупаются спустя десять лет экплуатации системы)     | |||
| 89
    
        Dotoshin 30.04.19✎ 14:34 | 
        (88) Когда разрабатывается тиражной решение, то не известно сколько раз в году будет выполняться запрос и сколько пользователей одновременно будут его выполнять и сколько пользователей и как долго будут пытаться заблокировать таблицы, которые читает запрос тоже неизвестно. Вот поэтому и требуют писать оптимально и без циклов.
 А когда делаешь отчетик для тети Мани, которая раз в год его запустит, то можешь хоть в цикле, хоть через три точки к данным обращаться... | |||
| 90
    
        Ник080808 30.04.19✎ 15:47 | 
        (89) так о том и речь, что многие воспринимают как догму рекомендации. мы пишем бизнес приложение и нужно оценивать задачу с точки зрения выгоды бизнеса. Тиражные решения пишут единицы, основная масса допиливает типовые или нетленки под конкретное предприятие. Поэтому нужно понимать, что дешевле - полдня работы 1снега или пять минут работы оператора ПК и от этого и отталкиваться - стоит заморачиваться с запросом или стоит наговнокодить.     | |||
| 91
    
        Сияющий в темноте 30.04.19✎ 17:07 | 
        Начнем с того,что 1с не умеет prepare  execute,что позволякт без.проблем гонять запросы в цикле.
 без этой особенности,мы получаем,что на каждый запрос выполняется построение плана,а это трата времени и лишняя нагрузка на сервер. однако,например,во всех конфигурациях,где есть регист ЦеныНоменклатуры,есть функция ПолучитьЦену,которая вызывается в цикле по таблице товароа,а это и есть запрос в цикле | |||
| 92
    
        Вафель 30.04.19✎ 17:11 | 
        (89) а потом когда в этот мега запрос нужно поле добавить - плюешься на разрабов типовых     | |||
| 93
    
        Ник080808 30.04.19✎ 19:45 | 
        (92) схема запросов рулит. я тут для себя открыл ее прелесть. Офигенный запрос собирается по 100500 процедурам в 100500 модулям. мучался мучался, потом перед передачей запроса в текст запроса прописал передачу в схему запроса, добавил нужное поле и обработанный текст отдал запросу. песТня!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |