AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2006, 12:03   #61  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
AndyD... Есть ощущение, что мы несколько перестарались с массивами...
Сейчас проверил - работает и обычный Range, без всяких FormulaArray...
Просто выстраиваем наш "массив массивов" из 10 строк и 2 столбцов в диапазоне A1:B10 и передаем его OpenText... о блин!
X++:
static void Test_OpenText_NoArray_3(Args _args)
{
    COM xlApp;
    COM rng;
        
    COM wbks, wbk;
    COM wkss, wks;
    COM cells;
    ;
        
    xlApp = new COM('Excel.Application');   
    xlApp.Visible(true);
        
    wbks = xlApp.Workbooks();   
    wbk = wbks.Add();
        
    wkss = wbk.Worksheets();
    wks = wkss.Item(1);
        
    cells = wks.Cells();
        
    // первый СТОЛБЕЦ листа - номера полей A1:A10
    COM::createFromVariant( cells.Item( 1, 1) ).Value2(  1);
    COM::createFromVariant( cells.Item( 2, 1) ).Value2(  2);
    COM::createFromVariant( cells.Item( 3, 1) ).Value2(  3);
    COM::createFromVariant( cells.Item( 4, 1) ).Value2(  4);
    COM::createFromVariant( cells.Item( 5, 1) ).Value2(  5);
    COM::createFromVariant( cells.Item( 6, 1) ).Value2(  6);
    COM::createFromVariant( cells.Item( 7, 1) ).Value2(  7);
    COM::createFromVariant( cells.Item( 8, 1) ).Value2(  8);
    COM::createFromVariant( cells.Item( 9, 1) ).Value2(  9);
    COM::createFromVariant( cells.Item(10, 1) ).Value2( 10);
        
    // второй СТОЛБЕЦ листа - типы полей B1:B10
    COM::createFromVariant( cells.Item( 1, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 2, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 3, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 4, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 5, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 6, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 7, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 8, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 9, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item(10, 2) ).Value2(  2);
    
    // !!!!!! обычный Range без всяких FormulaArray :)
    rng = wks.Range('A1:B10');
    
    wbks.OpenText
    (
    'C:\\demo.txt', //FileName
    1251, // Origin,
    1, // StartRow,
    1, // DataType
    1, // TextQualifier
    false, // ConsecutiveDelimiter,
    true, // Tab,
    false, // Semicolon,
    false, // Comma,
    false, // Space,
    false, // Other,
    '', // OtherChar,
    rng // FieldInfo
    );
    
}
Старый 22.06.2006, 12:07   #62  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от AndyD
PS 2 Gustav.
А как это будет выглядеть на английской версии? Если все Ok, то исправлю выгрузку
Всё равно предлагаю довести этот "эксперимент в эксперименте" до конца. Потому что тему с массивами затронули весьма интересную.
На английской версии проверю чуть позже. Обязательно сообщу.


P.S. иех, почему я не проверил сразу просто Range?.. наверное, слово Array меня смутило... В общем, "Болван... - Согласен!" (с) Операция Ы

Последний раз редактировалось Gustav; 22.06.2006 в 12:11.
За это сообщение автора поблагодарили: oip (2).
Старый 22.06.2006, 16:57   #63  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от AndyD
А как это будет выглядеть на английской версии? Если все Ok, то исправлю выгрузку
Проверил на английской версии Excel 2003.
Всё - ОК! OpenText отрабатывает, файл загружается.

Строка для FormulaArray формируется корректно.
Когда в региональных настройках Windows "Десятичный разделитель" - "запятая", то в виде (содержимое любой входящей в массив ячейки Excel):
Код:
={1\1; 2\2; 3\2; 4\2; 5\2; 6\2; 7\4; 8\2; 9\1; 10\2}
Когда "Десятичный разделитель" - "точка", то в виде:
Код:
={1,1; 2,2; 3,2; 4,2; 5,2; 6,2; 7,4; 8,2; 9,1; 10,2}
(пробелы добавил от себя, чтобы не рябило в глазах от знаков пунктуации)


P.S.Forward
Цитата:
Сообщение от AndyD
Выгрузку исправил.
Ок. Проверил. Джоб ExportExcelTXT1 для 50 тыс.записей - те же 14 сек, что и джоб ExportExcelTXT.

Последний раз редактировалось Gustav; 22.06.2006 в 20:20.
Старый 22.06.2006, 17:25   #64  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Выгрузку исправил
__________________
Axapta v.3.0 sp5 kr2
Старый 29.06.2006, 01:57   #65  
KSS is offline
KSS
Коллективное бессознательn ое
 
116 / 10 (1) +
Регистрация: 09.12.2002
Адрес: Москва
! Завтра забуду, поэтому предложу еще вариант
Сразу извиняюсь, что тестирование не по правилам - ночь на дворе, предлагаю просто в качестве идеи.

Выгрузку ниже делал дома, подключившись через интернет к терминальному серверу. Файл "111.xls" лежит у меня дома на диске "С", т.е. файл пишется через интернет.
Код ниже прошел за 59 секунд.
Тут использовались "самодельные" классы-оболочки АДО, но идея проста - берем АДОКомманд и пишем запрос "INSERT INTO".
Единственный момент - видимо, придется до начала процедуры задать имена столбцов обычным способом, а потом уже грузить данные.
CREATE COLUMN я не пербовал, но может и пройдет, зависит от драйвера, если пройдет, будет быстрее.

Код:
static void Job122(Args _args)
{
    ADOConnection connection;
    ADOCommand    command;
    int           i;

    int           timeFullStart, timeFullFinish, timeFullTotal;

    ;
    timeFullStart = timenow();

    connection = ADODB::establishConnection("C:\\111.xls", false);
    command    = new ADOCommand();
    command.ActiveConnection(connection);

    while(i<50000)
    {
        command.CommandText(strFmt("INSERT INTO [Лист1$] (Field1, Field2) VALUES (100000000000000000000, 20000000000000000)"));
        command.Execute();
        i++;
    }

    connection.Close();

    timeFullFinish = timenow();
    
    timeFullTotal = timeFullFinish - timeFullStart;
    
    info('Время выполнения, сек');
    info(int2str(timeFullTotal));
}
__________________
Жизнь такова, какова она есть и больше никакова.
Старый 29.06.2006, 10:02   #66  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от KSS
Сразу извиняюсь, что тестирование не по правилам - ночь на дворе, предлагаю просто в качестве идеи…
идея проста - берем АДОКомманд и пишем запрос "INSERT INTO"….
Большое спасибо за приобщение к эксперименту и приятно встретить сторонника ADO – надеюсь, эта аудитория на Форуме будет расширяться.

Но зачОт пока поставить не могу.

В первую очередь, конечно, потому, что далековато от «Условий конкурса»: фактически у Вас в цикле 50 тыс. раз вставляется одна и та же запись, т.е. нет фетча по таблицам Аксы, а на фетч тратится довольно большой процент времени.

В вторую очередь - это даже не "очередь", а мое очень субъективное "ИМХО" - потому что Ваш вариант несколько тяжеловат – существует, опять же ИМХО, более элегантное решение, приведенное здесь (Господи, не дай возгордиться и захвалиться!). Там на стороне Axapta данные загружаются в ADODB.Recordset в оперативной памяти (без связи с БД, как в массив), а на стороне Excel вставляются – не устаю восхищаться! – одной единственной командой Range.CopyFromRecordset. Посмотрите, сравните. Это не может не понравиться. Хотя по скорости, конечно, несколько уступает быстрокрылым способам AndyD-а, но не на порядок (чуть позже я выложу свою «конкурсную» версию). Зато прозрачность реализации подкупает.

Однако, я совсем не отговариваю Вас от Вашего подхода. Оформите джобик «по правилам» и выкладывайте – будем его хронометрировать на моей «эталонной» машине и сохранять для благодарных потомков.
Старый 14.07.2006, 20:43   #67  
KSS is offline
KSS
Коллективное бессознательn ое
 
116 / 10 (1) +
Регистрация: 09.12.2002
Адрес: Москва
Цитата:
Сообщение от Wamr
Вот такой код отрабатывает за 35 сек на
Celeron-2,5/ 512Mb
Excel-2000
Win2000
На этом методе,кстати, построено дополнение, которое написал Денис Трунин года два с половиной назад, когда мы работали на техносиле.
Оно позволяло выгружать в экселевские файлы данные из стандартного диалога печати аксапты.
Колумбус, помнится, его продавал...
__________________
Жизнь такова, какова она есть и больше никакова.
Старый 22.09.2006, 16:45   #68  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
[QUOTE=Wamr;110027]Вот такой код отрабатывает за 35 сек на
Celeron-2,5/ 512Mb
Excel-2000
Win2000
QUOTE]

Здесь, кстати, не мешало бы использовать функцию, как в одном из методов, предоставленных AndyD - для смены раскладки.
Старый 23.09.2006, 00:40   #69  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
2 kashperuk: Иван, как приятно Ваш комментарий
Цитата:
Спасибо. Очень рад, что вы такой бескорыстный
к репутации AndyD'у за этот его пост контрастирует с
Цитата:
Сообщение от KSS Посмотреть сообщение
Колумбус, помнится, его продавал...
Спасибо! В общем, "Can't Buy Me Love", короче!
Старый 24.09.2006, 00:32   #70  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Gustav Посмотреть сообщение
2 kashperuk: Иван, как приятно Ваш комментарий к репутации AndyD'у за этот его пост контрастирует с Спасибо! В общем, "Can't Buy Me Love", короче!

Побольше бы таких вот бескорыстных.
Работа бы была - просто в кайф. Она и щас ничего, конечно.
Старый 09.07.2007, 18:18   #71  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Цитата:
Сообщение от AndyD Посмотреть сообщение
Опробовал еще на одной машине
Конфигурация клиента - Celeron 2800, 256Мб
...
Ну и в завершение - тестовый джоб
Автору - респект за Job.
Нам очень понадобилось, поэтому переделал в класс.
Собственно, выкладываю класс.
В нем из любого места можно вызвать - просто посмотреть в коде пример использования - это ExXML::Test().
Вложения
Тип файла: xpo ExXML.xpo (16.0 Кб, 470 просмотров)
Старый 10.07.2007, 09:57   #72  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Лично я взял вариант, использующий ADO, склеил его с COM, и получил класс, который мы сейчас используем повсеместно.

Вариант через XML мне очень нравиться.
В приведенном выше посте неплохой JOB - но, во-первых, не полностью компилируется (метода salesTotals нету на таблице SalesTable в стандарте), а во-вторых, код ну уж очень трудно-читаемый.

Вариант с использованием Dynamic data exchange (DDE) тоже быстр. Его не пробовал сильно.

По скорости эти три варианты получились приблизительно одинаковы.Разница несущественна, по сути. Поэтому, это уже что кому больше нравиться.

думаю, технологию здесь стоит выбирать по тем ограничениям, которые присущи каждому из подходов (они также описаны в этой теме)
Старый 10.07.2007, 10:02   #73  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от otkudao Посмотреть сообщение
Чем окончился эксперимент? Какой способ лучше? Желательно закрепить пример-победитель в первом посте (или добавить "нулевой").
Не будучи активным участником эксперимента, тем не менее, отмечу вот что. Для начала, как в очередной раз выяснилось, "не бывает серебряных пуль" - одного самого-самого способа, наилучшего всегда и везде, на мой взгляд, не оказалось. Из особенно шустрых методов я для себя выделил следующие: с использованием AsciiIo, csv, txt, clip buf, dde, xml. Мне лично кроме прочего очень понравился способ выгрузки через xml: при всей простоте реализации он позволяет без использования шаблонов (точнее, за счет их фактического включения в код) реализовать совершенно произвольное форматирование выходного файла, причем без каких-либо потерь в производительности. Но у него, к сожалению, есть определенный недостаток как раз-таки в плане форматирования, связанный, впрочем, с глюками Excel. И это легко обходится при использовании временного файла.
По-моему, лучше не искать в данной теме "самый лучший" способ, а изучить все рассмотренные, чтобы затем можно было использовать тот или иной способ, в зависимости от ситуации.
Старый 10.07.2007, 10:10   #74  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Лично я взял вариант, использующий ADO, склеил его с COM, и получил класс, который мы сейчас используем повсеместно.
Аналогично В нескольких отчетиках использую xml, чтобы «без шума и пыли» получилось красивое форматирование, в остальном остановился на варианте с ADO.
Старый 10.07.2007, 11:24   #75  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от otkudao Посмотреть сообщение
была сказка про лису и кого-то еще (хорька, что ли), попавших в яму. У лисы была тысяча способов и она так и провыбиралась среди них, пока не пришел охотник и не сделал из нее шубу. А у хорька был один способ. Который его и спас. Такое вот лирическое отступление.
«Специализация парализует, ультраспециализация - убивает»
Старый 10.07.2007, 11:26   #76  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от otkudao Посмотреть сообщение
была сказка про лису и кого-то еще (хорька, что ли), попавших в яму. У лисы была тысяча способов и она так и провыбиралась среди них, пока не пришел охотник и не сделал из нее шубу. А у хорька был один способ. Который его и спас.

Такое вот лирическое отступление.

1. Способов <<1000

2. Каждый способ это компромисс между скоростью легкостью в реализации и пр. Например, XML не поддерживается версиями Excel раньше XP, а ADO не поддерживает вывод форматирования.
Старый 10.07.2007, 11:49   #77  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
2. Каждый способ это компромисс между скоростью легкостью в реализации и пр. Например, XML не поддерживается версиями Excel раньше XP, а ADO не поддерживает вывод форматирования.
Согласен, более правильно разбить стандартные задачи на сектора и определять оптимальный способ уже в нем. Например, если требуется оформление различным шрифтом и цветом без использования шаблона, то без COM не обойтись, хотя наверное можно и через dll как то реализовать.
А оформить задачки можно так
Задача выгрузки в excel.
1 Условия: продвинутое форматирование, с шаблоном....
Реализация. .....
Пример...
2 Условия: продвинутое форматирование, без шаблона....
Реализация. .....
Пример...
За это сообщение автора поблагодарили: belugin (4).
Старый 10.07.2007, 14:54   #78  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Продолжаю наслаждаться комбинацией несвязанного ADODB.Recordset в оперативной памяти и последующего Range.CopyFromRecordset в Excel. Пристегиваю этот способ ко всем новым задачкам, в которых требуется вывод в Excel.

Способ не наибыстрейший, но вполне комфортный по скорости. Тестовое задание этой ветки (50 тыс.строк X 10 полей) выполняется примерно за 80 сек. Это уже не просто джобом, а классом, который сам настраивает Recordset и может резать выводимую выборку как по критерию "65 тыс строк" на лист, так и по произвольно задаваемому групповому критерию - типа "все сотрудники на А на первый лист, на Б - на второй и т.д." - т.е. сам процесс вывода продирается через эти "рогатки".

Основная причина же этой моей симпатии - возможность управления типами данных выводимых столбцов. Ради этой возможности я согласен ждать 50-60 лишних секунд

Форматирую, если требуется, после вывода. Сразу большими Range'ми (целыми строками, столбцами, заголовками, областью данных), необходимые ссылки на которые создаются и запоминаются классом в процессе вывода. Это что касается спискообразных "автоотчетов".

Для развесистых стандартных шаблонов (типа акта ОС-1) теперь тоже использую такой вывод с CopyFromRecordset. В файле шаблона создаю еще один лист, можно скрытый, на который вывожу одну строку с необходимыми данными. А в ячейках самого шаблона прописываю формулы-ссылки на ячейки этой выводимой строки. Подход родился в процессе решения задачи по пакетной печати нескольких тысяч актов ОС-1. Один CopyFromRecordset вместо многих присваиваний Range.Value(...) увеличил скорость процесса примерно в 30 раз (иначе можно было бы тихо загнуться на этой печати).
За это сообщение автора поблагодарили: player (1).
Старый 20.01.2010, 18:04   #79  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Опробовал еще на одной машине
Конфигурация клиента - Celeron 2800, 256Мб
Сеть - сервер б/д тот-же, что и в предыдущем случае, но подключение ч/з 3 хаба.
Excel 2003

Время через файл 40-45 с, напрямую в Excel - 35 c

Почему через файл дольше - на мой взгляд из-за версии XML (на первой машине XML 6.0) и способа выгрузки во втором случае - передаются не все данные сразу, а по несколько тысяч строк. По всей видимости, XML 4 хуже работает с большими по размеру документами (в данном случае - больше 30 Мб)

Ну и в завершение - тестовый джоб
\

У меня при использовании этого механизма для выгрузки в Excel, если количество полей больше определенного порога, выдается ошибка

X++:
 "value"  COM-  "Range"    0x800A03EC (<>),  : <>.
Никто не сталкивался с этой ошибкой?
Старый 13.02.2014, 13:18   #80  
kaw is offline
kaw
Участник
 
122 / 35 (2) +++
Регистрация: 23.03.2004
Адрес: Новосибирск
я ищу причину ошибки:
Цитата:
Метод "item" в COM-объекте класса "Range" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: <неизвестно>.

в ходе поиска получил близкую ошибку:

Цитата:
Метод "value" в COM-объекте класса "Range" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Общий сбой.
Ошибка появляется в момент, если в тег с типом Number выводить число "1 234.00", т.е. нужно убрать пробел "1234.00"

Именно этот job на больших данных мне конкретно пишет:
Цитата:
Ошибка времени выполнения: Недостаточно памяти для исполнения кода.
Другие варианты вывода в xml большого кол-ва отвечали:
Цитата:
Exception of type `SystemOutMemoryException` was thrown

Пытался добиться своей ошибки выводом в xml строк больше1 048 576
но система спокойно выводит последнюю строку, а остальные "скромно" пропускает.
Теги
benchmark, download, excel, faq, xml, законченный пример, производительность, экспорт/импорт

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta программирует Excel на VBA Gustav DAX: База знаний и проекты 10 13.03.2006 11:42
Использование OWC.Spreadsheet для ускорения экспорта/импорта в/из Excel. storer DAX: Программирование 24 28.03.2005 19:10
Передача данных из 1С в Axapta 3.0 через COM Connector isbist DAX: Программирование 10 03.12.2004 10:58
Особенности экспорта данных в Excel Roman-sp DAX: Функционал 18 01.03.2004 12:07
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:16.