|   |   | 
| 
 | v7: Запрос к ТЧ с отбором | ☑ | ||
|---|---|---|---|---|
| 0
    
        1С-ница 27.01.15✎ 12:04 | 
        "//{{ЗАПРОС(Сформировать)
 |ОбрабатыватьДокументы все; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; |Группировка Заезд; |Условие(Выезд=ДатаКон); |Условие(Заезд=ДатаНач); ДатаС и ДатаПо находятся в табличной части. Как я понимаю. сейчас он берет первую строку документа. Как сделать чтобы ДатаС была с первой строки, а ДатаПо - с последней? | |||
| 1
    
        Ёпрст гуру 27.01.15✎ 12:06 | 
        (0) скажем так, не первую, а проверяется условие для каждой строки документа     | |||
| 2
    
        Ёпрст гуру 27.01.15✎ 12:15 | 
        Ну, и если очень надо, то так, к примеру:
 Функция ПроверитьДаты(Док) Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда Возврат 0; ЕначеЕсли Док.Заезд<>ДатаНач тогда Возврат 0; КонецЕсли; Док.ПолучитьСтрокуПоНомеру(Док.КоличествоСтрок()); Возврат ?(Док.Выезд=ДатаКон,1,0); КонецФункции "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы все; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; |Группировка Заезд; // |Условие(Выезд=ДатаКон); // |Условие(Заезд=ДатаНач); |Условие(ПроверитьДаты(Резерв)=1); | |||
| 3
    
        1С-ница 27.01.15✎ 14:17 | 
        (2) Что то не работает, почему - не пойму((     | |||
| 4
    
        1С-ница 27.01.15✎ 14:21 | 
        Я же отладчиком не могу посмотреть, что делается в ф-ции ПроверитьДаты()?     | |||
| 5
    
        Ёпрст гуру 27.01.15✎ 14:22 | 
        можешь     | |||
| 6
    
        Ёпрст гуру 27.01.15✎ 14:22 | 
        а так, ну попробуй период указать в тексте запроса.
 Хотя, у тебя видать ни один документ не попадает в условия на даты твои. | |||
| 7
    
        1С-ница 27.01.15✎ 14:23 | 
        (5) что то не заходит. ОДну запись выводит.     | |||
| 8
    
        1С-ница 27.01.15✎ 14:25 | 
        (7) даты этой записи отличаются от ДатыНач и ДатыКон     | |||
| 9
    
        1С-ница 27.01.15✎ 14:26 | 
        (6) Указать так?:
 |ОбрабатыватьДокументы все; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; |Группировка Заезд; |Условие(Выезд='20150124'); |Условие(Заезд='20150111'); | |||
| 10
    
        Ёпрст гуру 27.01.15✎ 14:28 | 
        (9) нет
 Задать период в тексте запроса : |Период с ... ПО ... хотя, для документов (не помню ужо) он и не обязателен | |||
| 11
    
        Ёпрст гуру 27.01.15✎ 14:28 | 
        Запрос из (2), что возвращает ?     | |||
| 12
    
        1С-ница 27.01.15✎ 14:32 | 
        (10) Тогда будут выбираться документы  за выбранный промежуток. Даты их создания отличаются от ДатыС в табличной части     | |||
| 13
    
        1С-ница 27.01.15✎ 14:34 | 
        (11) ничего     | |||
| 14
    
        Ёпрст гуру 27.01.15✎ 14:36 | 
        (13) значит нет документов, которые удовлетворяют условию:
 ДатаС с первой строки табличной части = ДатаНач И ДатаПО с последней строки табличной части = ДатаКон | |||
| 15
    
        Ёпрст гуру 27.01.15✎ 14:40 | 
        если не веришь, можешь воткнуть тест на вшивость:
 Функция ПроверитьДаты(Док) Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда Сообщить(""+Док+" нет строк документа"); Возврат 0; ЕначеЕсли Док.Заезд<>ДатаНач тогда Сообщить(""+Док+" дата с первой строки:"+Док.Заезд+" не равна "+ДатаНач); Возврат 0; КонецЕсли; Док.ПолучитьСтрокуПоНомеру(Док.КоличествоСтрок()); Если Док.Выезд<>ДатаКон Тогда Сообщить(""+Док+" дата с последней строки:"+Док.Выезд+" не равна "+ДатаКон); КонецЕсли; Возврат ?(Док.Выезд=ДатаКон,1,0); КонецФункции "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы все; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; |Условие(ПроверитьДаты(Резерв)=1); | |||
| 16
    
        1С-ница 27.01.15✎ 15:06 | 
        Переписала так:
 Функция ПроверитьДаты(Док) Док.ВыбратьСтроки(); // Пока Док.ПолучитьСтроку() = 1 Цикл Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда Сообщить(""+Док+" нет строк документа"); Возврат 0; ИначеЕсли Док.ДатаС<>ДатаНач тогда //Сообщить(""+Док+" дата с первой строки:"+Док.Заезд+" не равна "+ДатаНач); Сообщить(""+Док+" дата с первой строки:"+Док.ДатаС+" равна "+Док.ДатаС); Возврат 0; КонецЕсли; Док.ПолучитьСтрокуПоНомеру(Док.КоличествоСтрок()); Если Док.ДатаПо<>ДатаКон Тогда Сообщить(""+Док+" дата с последней строки:"+Док.ДатаПо+" не равна "+ДатаКон); КонецЕсли; Возврат ?(Док.ДатаПо=ДатаКон,1,0); // КонецЦикла; КонецФункции Т к Док.Выезд - тип не дата. в Сообщить Док.ДатаС не выводится | |||
| 17
    
        SleepyHead гуру 27.01.15✎ 15:14 | 
        В запросе 1с77 в группировке должна быть СтрокаДокумента (предопределенная группировка).     | |||
| 18
    
        Ёпрст гуру 27.01.15✎ 15:27 | 
        (17) зачем?     | |||
| 19
    
        Ёпрст гуру 27.01.15✎ 15:28 | 
        (16) >>>>>Т к Док.Выезд  - тип не дата
 ????????????????????? Че ? И чего ты тогда хочешь, раз там не дата ? :)))))))))))))))))) | |||
| 20
    
        Ёпрст гуру 27.01.15✎ 15:30 | 
        И... почему ты пишешь Док.ДатаС, когда реквизит у тебя (судя по запросу из (0))  называется Заезд и Выезд..
 Опять обманываешь ? | |||
| 21
    
        Ёпрст гуру 27.01.15✎ 15:30 | 
        +20 а блин, это я косоглазый..     | |||
| 22
    
        Ёпрст гуру 27.01.15✎ 15:32 | 
        Надо так:
 Функция ПроверитьДаты(Док) Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда Сообщить(""+Док+" нет строк документа"); Возврат 0; ЕначеЕсли Док.ДатаС<>ДатаНач тогда Сообщить(""+Док+" дата с первой строки:"+Док.ДатаС+" не равна "+ДатаНач); Возврат 0; КонецЕсли; Док.ПолучитьСтрокуПоНомеру(Док.КоличествоСтрок()); Если Док.ДатаПО<>ДатаКон Тогда Сообщить(""+Док+" дата с последней строки:"+Док.ДатаПО+" не равна "+ДатаКон); КонецЕсли; Возврат ?(Док.ДатаПО=ДатаКон,1,0); КонецФункции "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы все; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; |Условие(ПроверитьДаты(Резерв)=1); | |||
| 23
    
        Ёпрст гуру 27.01.15✎ 15:32 | 
        проверяй.     | |||
| 24
    
        1С-ница 27.01.15✎ 15:37 | 
        Док.ДатаС - пусто     | |||
| 25
    
        Ёпрст гуру 27.01.15✎ 15:41 | 
        (24) и ?     | |||
| 26
    
        Ёпрст гуру 27.01.15✎ 15:41 | 
        условие никогда не выполнится     | |||
| 27
    
        Ёпрст гуру 27.01.15✎ 15:41 | 
        документов будет нема, разве тебе не этого надо было ?     | |||
| 28
    
        1С-ница 27.01.15✎ 15:48 | 
        Есть документы (как минимум один) с нужными датами!!!     | |||
| 29
    
        1С-ница 27.01.15✎ 15:49 | 
        Да и вопрос сейчас не в этом, ав том что в Сообщить пишет:
 Док. 000364 (27.01.2015) дата с первой строки: . . не равна 11.01.15 | |||
| 30
    
        Ёпрст гуру 27.01.15✎ 15:52 | 
        (28) тест на вшивость его находит ?
 Если нет - то таких документов просто нет! | |||
| 31
    
        Ёпрст гуру 27.01.15✎ 15:52 | 
        (29) и че ?
 Открой документ и посмотри, че там в реквизита ДатаС в ПЕРВОЙ строке табличной части документа | |||
| 32
    
        1С-ница 27.01.15✎ 15:57 | 
        11.01.2015     | |||
| 33
    
        1С-ница 27.01.15✎ 15:57 | 
        а сравнивает с 11.01.15. Может типы разные у 11.01.2015 и 11.01.15?     | |||
| 34
    
        Ёпрст гуру 27.01.15✎ 15:57 | 
        (32) не верю     | |||
| 35
    
        Ёпрст гуру 27.01.15✎ 15:58 | 
        Открой дерево метаданных и посмотри тип у реквизита многострочной части, какой он ?     | |||
| 36
    
        1С-ница 27.01.15✎ 15:59 | 
        Тип Дата     | |||
| 37
    
        1С-ница 27.01.15✎ 16:00 | 
        Вот что пишет про правильный документ:
 Док. 004139 (18.11.2014) дата с первой строки: . . не равна 11.01.15 Док. 004139 (18.11.2014) дата с первой строки: . . не равна 11.01.15 но в нем 100% первая строка ДатаС 11.01.2015 | |||
| 38
    
        1С-ница 27.01.15✎ 16:01 | 
        Почему он пишет дата с первой строки:  .  .   ??     | |||
| 39
    
        Ёпрст гуру 27.01.15✎ 16:02 | 
        (37) покажи весь свой код     | |||
| 40
    
        Ёпрст гуру 27.01.15✎ 16:02 | 
        (38) потому, что ПолучитьСтрокуПоНомеру(ОДИН)     | |||
| 41
    
        Ёпрст гуру 27.01.15✎ 16:03 | 
        тебе же ДатаС нужна была всегда с первой строки, разве нет ?     | |||
| 42
    
        Ёпрст гуру 27.01.15✎ 16:03 | 
        вот у тебя она пустая, покажи скриншот этого документа     | |||
| 43
    
        Ёпрст гуру 27.01.15✎ 16:06 | 
        ну и ..уверенна, что в документе от Ноября четырнадцатого года в табличной части писали дату 11 января Пятнадцатого года ?     | |||
| 44
    
        1С-ница 27.01.15✎ 16:07 | 
        (43) уверена
 (41) да | |||
| 45
    
        Ёпрст гуру 27.01.15✎ 16:08 | 
        (44) ну и ?
 ДатаС - какой тип в документе ? В самом документе в Первой строке ДатаС чему равна ? | |||
| 46
    
        Масянька 27.01.15✎ 16:08 | 
        (44) Короче, скриншот давай и код! Народ уже заждался :)     | |||
| 47
    
        1С-ница 27.01.15✎ 16:10 | 
        (45) написала же уже все     | |||
| 48
    
        1С-ница 27.01.15✎ 16:10 | 
        сейчас скину принтскрин     | |||
| 49
    
        1С-ница 27.01.15✎ 16:11 | ||||
| 50
    
        Ёпрст гуру 27.01.15✎ 16:14 | 
        (49) вот сюда помести и ссылку в форум
 http://pics.rsh.ru/ | |||
| 51
    
        1С-ница 27.01.15✎ 16:15 | 
        Функция ПроверитьДаты(Док)
 Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда Сообщить(""+Док+" нет строк документа"); Возврат 0; ИначеЕсли Док.ДатаС<>ДатаНач тогда Сообщить(""+Док+" дата с первой строки:"+Док.ДатаС+" не равна "+ДатаНач); Возврат 0; КонецЕсли; Док.ПолучитьСтрокуПоНомеру(Док.КоличествоСтрок()); Если Док.ДатаПО<>ДатаКон Тогда Сообщить(""+Док+" дата с последней строки:"+Док.ДатаПО+" не равна "+ДатаКон); КонецЕсли; Возврат ?(Док.ДатаПО=ДатаКон,1,0); КонецФункции //Ольга 27.01.15 Процедура Сформировать() АктДатаКон = ДатаКон; Если СформироватьПозициюДокумента(ДатаКон, 23, 59, 59, 1) > СформироватьПозициюДокумента(ПолучитьДокументТА()) Тогда АктДатаКон = ПолучитьДокументТА(); КонецЕсли; //Если ВыбГруппаЗаезда.Выбран()=1 тогда Запрос2 = СоздатьОбъект("Запрос"); ТекстЗапроса2 = "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы все; // |Период с '01012014' по '25012015'; //Ольга 20.01.15 //|ГруппаЗаезда = Документ.Резервирование.Заезд.ГруппаЗаезда; |Заезд = Документ.Резервирование.ДатаС; |Выезд = Документ.Резервирование.ДатаПо; |Резерв = Документ.Резервирование.ТекущийДокумент; |Группировка Резерв; //|Группировка Заезд; |Группировка СтрокаДокумента; //|Условие(Выезд=ДатаКон); //|Условие(Заезд=ДатаНач); |Условие(ПроверитьДаты(Резерв)=1); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос2.Выполнить(ТекстЗапроса2) = 0 Тогда Возврат; КонецЕсли; Т2 = СоздатьОбъект("ТаблицаЗначений"); СЗ = СоздатьОбъект("СписокЗначений"); Запрос2.Выгрузить(Т2,2,0); Т2.Выгрузить(СЗ,,,"Резерв"); Запрос3 = СоздатьОбъект("Запрос"); ТекстЗапроса3 = "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы все; |НаОсновании = Документ.Размещение.НаОсновании; |Размещение = Документ.Размещение.ТекущийДокумент; |Группировка Размещение; |Условие(НаОсновании в СЗ); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос3.Выполнить(ТекстЗапроса3) = 0 Тогда Возврат; КонецЕсли; Запрос3.Выгрузить(Т2,2,0); Т2.ВыбратьСтроки() ; Пока Т2.ПолучитьСтроку()=1 Цикл СЗ.ДобавитьЗначение(Т2.Размещение); КонецЦикла ; //Т2.Выгрузить(СЗ,,,"Резерв"); Если ПустоеЗначение(СЗ)=1 Тогда Сообщить("Нет документов по этому заезду!") ; Возврат КонецЕсли ; //КонецЕсли; ПерСУ=Перечисление.ВидыВзаиморасчетов.СписаниеУслуги ; ПерЗ=Перечисление.ВидыВзаиморасчетов.Зачет ; ПерВозврАванса=Константа.УслугаДляВозврата; РегУслуг="Взаиморасчеты"; ТекстЗапроса = " |Период с ДатаНач по АктДатаКон; |Разм = Регистр."+РегУслуг+".Размещение; |Контрагент = Регистр.Предоплата.Контрагент; |Бронь = Регистр."+РегУслуг+".Размещение.НаОсновании,Регистр.Предоплата.Бронь; //|Бронь = Регистр."+РегУслуг+".Размещение.НаОсновании; |Докум = Регистр."+РегУслуг+".ТекущийДокумент,Регистр.Предоплата.ТекущийДокумент; |Гость = Регистр."+РегУслуг+".ГостьИзм,Регистр.Предоплата.Гость; |ТипУслуги = Регистр."+РегУслуг+".ТипУслуги; |Услуга = Регистр."+РегУслуг+".Услуга; |ВидДвижения = Регистр."+РегУслуг+".ВидДвижения; |Сумма = Регистр."+РегУслуг+".Долг; |СуммаП = Регистр.Предоплата.СуммаБН, Регистр.Предоплата.Сумма; //|Функция ПрихСумма1 = Приход(Сумма) Когда((ВидДвижения<>ПерСУ) и (ВидДвижения<>ПерЗ)); //|Функция РасхСумма1 = Расход(Сумма) Когда((ВидДвижения<>ПерСУ) и (ВидДвижения<>ПерЗ)); |Функция ПрихСумма1 = Приход(Сумма) Когда((ВидДвижения<>ПерСУ) и (ВидДвижения<>ПерЗ) и (Услуга<>ПерВозврАванса)); |Функция РасхСумма1 = Расход(Сумма) Когда((ВидДвижения<>ПерСУ) и (ВидДвижения<>ПерЗ) и (Услуга<>ПерВозврАванса)); |Функция ПрихСуммаСУ = Приход(Сумма) Когда(ВидДвижения=ПерСУ); |Функция РасхСуммаСУ = Расход(Сумма) Когда(ВидДвижения=ПерСУ) ; |Функция ПрихСуммаЗ = Приход(Сумма) Когда(ВидДвижения=ПерЗ); |Функция РасхСуммаЗ = Расход(Сумма) Когда(ВидДвижения=ПерЗ); |Функция НачСумма = НачОст(Сумма); |Функция КонСумма = КонОст(Сумма); |Функция НачСуммаП = НачОст(СуммаП); |Функция ПрихСуммаП = Приход(СуммаП); |Функция РасхСуммаП = Расход(СуммаП); |Функция КонСуммаП = КонОст(СуммаП); |Условие(ПустоеЗначение(Гость)=0); |Условие(Бронь В СЗ);"; спДет=СоздатьОбъект("СписокЗначений"); // // Для ш=1 по Детализация.РазмерСписка() цикл Если Детализация.Пометка(ш)=0 тогда Продолжить; КонецЕсли; ТекстЗапроса=ТекстЗапроса+"Группировка "+Детализация.ПолучитьЗначение(ш); Если (Детализация.ПолучитьЗначение(ш)<>"Докум") тогда //и (Детализация.ПолучитьЗначение(ш)<>"ДокОснование") тогда ТекстЗапроса=ТекстЗапроса+" без групп"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+";"; спДет.ДобавитьЗначение(Детализация.ПолучитьЗначение(ш)); // КонецЦикла; Если ВыбГость.Выбран() = 1 Тогда Если ВыбГость.ЭтоГруппа() = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Условие (Гость в ВыбГость);"; Иначе ТекстЗапроса = ТекстЗапроса + "Условие (Гость = ВыбГость);"; КонецЕсли; КонецЕсли; Если ВыбГруппаЗаезда.Выбран()=1 тогда ТекстЗапроса=ТекстЗапроса+"Условие (Бронь в СЗ);"; КонецЕсли; Если ВыбТипУслуги.Выбран()=1 тогда ТекстЗапроса=ТекстЗапроса+"Условие (Запрос.ТипУслуги=ВыбТипУслуги);"; КонецЕсли; Запрос = СоздатьОбъект("Запрос"); Запрос.Выполнить(ТекстЗапроса); Т = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Т,2); ЗагПрих="Оплачено услуг"; ЗагРасх="Оказано услуг"; Таб = СоздатьОбъект("Таблица"); Таб.Опции(0, 0); Таб.ВывестиСекцию("Шапка"); НомВхода=0; ИтНачСумма=0; ИтПрихСумма=0; ИтРасхСумма=0; ИтКонСумма=0; ВывестиГруппировки(Запрос, спДет, Таб, НомВхода); НачСумма=-Запрос.НачСумма+Запрос.НачСуммаП ; КонСумма=-Запрос.КонСумма+Запрос.КонСуммаП ; РасхСумма=Запрос.РасхСумма1-Запрос.ПрихСуммаСУ+Запрос.ПрихСуммаП-Запрос.РасхСуммаП ; ПрихСумма=Запрос.ПрихСумма1-Запрос.РасхСуммаСУ ; ЗачетСумма=Запрос.РасхСуммаЗ-Запрос.ПрихСуммаЗ ; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать(); КонецПроцедуры | |||
| 52
    
        1С-ница 27.01.15✎ 16:16 | ||||
| 53
    
        Ёпрст гуру 27.01.15✎ 16:16 | 
        (51) выкинь группировка  СтрокаДокумента, это для начала     | |||
| 54
    
        1С-ница 27.01.15✎ 16:17 | 
        (53) выкидывала     | |||
| 55
    
        1С-ница 27.01.15✎ 16:18 | 
        Меня волнует ф-ция ПроверитьДаты(), почему Док.ДатаС пустая     | |||
| 56
    
        Масянька 27.01.15✎ 16:19 | 
        Мне интересно: а если тупо сделать выборку строк из данного дока и вывести НомерСтроки, ДатаС, ТипЗначения(ДатаС) - что покажет?     | |||
| 57
    
        1С-ница 27.01.15✎ 16:21 | 
        сделала такую проверку:
 ИначеЕсли Док.ДатаС<>ДатаНач тогда Сообщить(""+ТипЗначенияСтр(Док)+" :"+ТипЗначенияСтр(Док.ДатаС)+" "+ТипЗначенияСтр(ДатаНач)); Выводит Документ Дата Дата | |||
| 58
    
        Масянька 27.01.15✎ 16:22 | 
        (57) Добавь туда еще просто - Док.ДатаС (пусть значение реквизита покажет).     | |||
| 59
    
        Масянька 27.01.15✎ 16:22 | 
        + (58) И НомерСтроки.     | |||
| 60
    
        Salimbek 27.01.15✎ 16:23 | 
        (0) ИМХА, логичнее было бы укладывать такие данные в регистр, а потом уже оттуда собирать.
 З.Ы. Без SQL уже не могу инфу собирать, вот до чего хороший инстрУмент доводит. | |||
| 61
    
        1С-ница 27.01.15✎ 16:28 | 
        (58) (59) Номер строки 0, ДатаС - пустая (2 точки)     | |||
| 62
    
        Ёпрст гуру 27.01.15✎ 16:30 | 
        Короче, вот так поправь и усё заработает:
 Функция ПроверитьДаты(Вася) Док = Вася.Текущийдокумент(); Если Док.ПолучитьСтрокуПоНомеру(1) =0 Тогда | |||
| 63
    
        1С-ница 27.01.15✎ 16:32 | 
        Вау))     | |||
| 64
    
        1С-ница 27.01.15✎ 16:34 | 
        Сообщить() Рулит))     | |||
| 65
    
        Ёпрст гуру 27.01.15✎ 16:35 | 
        Работает ?     | |||
| 66
    
        Масянька 27.01.15✎ 16:35 | 
        (61) Я чёт не поняла - почему номер строки = 0?     | |||
| 67
    
        Ёпрст гуру 27.01.15✎ 16:35 | 
        только про (53) не забудь, это там лишнее     | |||
| 68
    
        1С-ница 27.01.15✎ 16:39 | 
        (66) Не хватало ТекущийДокумент()
 (67) выкинула Спасибо!! | |||
| 69
    
        Масянька 27.01.15✎ 17:02 | 
        (68) Двоешница :)))))))))))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |