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

Результаты опроса: Нужен ли .Net Аксапте?
Конечно нужен, это ведь дополнительные возможности. 32 84.21%
Все что надо можно через DLL делать и не мучиться. 3 7.89%
Знал бы прикуп жил бы в Сочи. 3 7.89%
Голосовавшие: 38. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2008, 13:57   #1  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
? Покорить .NET в DAX чтобы сделать ручным ReportingServices
Здравствуйте уважаемые.
Обращаюсь с таким вопросом:
Надумал в DAX организовать увязку некоторых свойств для настройки отчетов на ReportingServer. Сразу прошу не надо обсуждать зачем нам это надо, так надо) Суть в том что не знаю как получить список доступных отчетов, список параметров в отчете и т.д.
После копания в документации закралась мысль что все это можно осуществлять через .NET. Опять же копаемся в документации находим примеры как работать с .Net наподобие вот этого:
X++:
static void MyFirstCLR(Args _args)
{
    MyFirstCLR.MyClass  mc;
    str                 s;
    int                 res;
    ;
    mc = new MyFirstCLR.MyClass();
    s = mc.sayRocks();
    print  s;
    res = mc.average(20,22);
    print  res;
    pause;
}

[/color]
Попробовал подключить в AOT/references сборку Microsoft.ReportViewer.ProcessingObjectModel и в коде много эксперементировал с разными вариантами, в основном получал ошибку не являются классами
X++:
Microsoft.ReportingServices     parm = new Microsoft.ReportingServices();
получаю в итоге такую ошибку
Код:
Переменная не относится к типу CLASS.
Я так понимаю что признак того что объект является классом наличие соответствующего значка при подстановке. Вот только я пытаюсь выбрать один из таких элементов и затем снова делаю определение через new. Результат снова плачевный
X++:
Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel      obj = new 
Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel();
ошибка
Код:
Класс  не содержит эту функцию.
Научите что и как делать пожалуйста? В чем ошибка?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 09.06.2008, 11:13   #2  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Люди добрые, что же никто не работал с .Net? В документации по RS я нашел нужную сборку, но как ее подключить если ее нет в списке по умолчанию не знаю
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 09.06.2008, 12:04   #3  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
К сожалению, я не работал с ReportingServices, но у вас, по-моему, проблем более общая.

Не очень понятно, что вы собственно хотите сделать. Для начала, необходимо подключить нужную сборку.

Как мне кажется, если вы хотите работать с ReportServices, то вам нужны сборки типа "Microsoft.ReportingServices.*", справку по которым вы можете найти по адресу http://msdn.microsoft.com/en-us/library/bb326309.aspx

Если же вы хотите работать с "Microsoft.ReportViewer.*", то вам, наверное, следует смотреть на пространства имен "Microsoft.ReportViewer.WebForms" или "Microsoft.ReportViewer.WinForms", в которых вы можете найти классы "Microsoft.Reporting.WebForms.ReportViewer" и "Microsoft.Reporting.WinForms.ReportViewer" соответственно. По ним справку можно найти здесь: http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx Сборки в этом случае уже "Microsoft.ReportViewer.WinForms.dll" и "Microsoft.ReportViewer.WebForms.dll"
За это сообщение автора поблагодарили: KingPeas (1).
Старый 09.06.2008, 12:23   #4  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Насколько я понял, в аксапте отображать .NET контролы отображать пока нереально, так что, если вы хотите показывать отчет в Аксапте, то следует использовать "Microsoft.Reporting.WebForms.ReportViewer".

UPD. В принципе, можно создать обычную System.Windows.Forms.Form, на которую поместить Microsoft.Reporting.WinForms.ReportViewer. Будет выглядеть как обычное окно, только снаружи от окна Аксапты.

Последний раз редактировалось RumataEstor; 09.06.2008 в 12:44.
Старый 11.06.2008, 21:11   #6  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Насколько я понял, в аксапте отображать .NET контролы отображать пока нереально, так что, если вы хотите показывать отчет в Аксапте, то следует использовать "Microsoft.Reporting.WebForms.ReportViewer".

UPD. В принципе, можно создать обычную System.Windows.Forms.Form, на которую поместить Microsoft.Reporting.WinForms.ReportViewer. Будет выглядеть как обычное окно, только снаружи от окна Аксапты.
Я делал через ActiveX Microsoft Web Browser. Так как на разработку своего небыло времени. А так быстро и удобно. С помощью параметров можно управлять свойствами и рендерить в разные форматы. Например неоткрывая отчет сразу рендерить в xsl.

Я это делал для 4-ки. Кстати в 5-ке много чего нового добавили в BI и отчеты.
Но я на практике еще не пробовал.

Делал и форму как Вы говорите, но неудобно, если что то поменять нужно.
Да и ограничения на фильтры.
Думаю можно сделать, что то универсальное чтобы умело параметры читать, показывать и обрабатывать их в генерируемых контролах, но это имхо через чур

Я с SSRS поработал только месяц. Вещь неплохая для некоторых решений. Плохо что не всегда можно через Perspectives сделать отчет, особенно если нужно много фильтров или они мудренные. Приходится тогда делать в VS. Но если хорошие навыки SQL и немного опыта, то получается быстрее и нагляднее делать чем в АХ.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 12.06.2008, 14:33   #7  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Спасибо всем за активное участие, вот только ушли куда то в сторону от обсуждения)
Попробую все таки объяснить чего я добиваюсь. В VS сделал отчет, достаточно сложный с большим числом параметров. На исполнение он запускается с различным сочетанием этих параметров. В итоге идеально подходит механизм управляемых подписок используемый службой RS2005.
Для генерации отчетов по подписке используется таблица из аксапты. В ней хранятся все необходимые данные для запуска отчета. Все это уже отлажено и работает. Кстати вывод в аксапту тоже реализован через ReportViewer(все благодаря помощи на форуме, в том числе уважаемого belugin-а), но это только для случаев запуска одного, а не нескольких отчетов одновременно. Для заполнения подписок, а также для генерации отчетов используется наследник RunBase. Делал это с умыслом, пользователи получают знакомый интерфейс для генерации отчета (добавились только два поля в каком формате отчет, и сгенерировать его или добавить в подписку). Таким образом все отчеты которые переводим на RS изменяем свойство Extends на новый класс и перекрываем пару методов определяющие в какой параметр чего сохранять. Думаю еще переделаю, пока работает так.
Добавление в подписку сводится просто к добавлению записи в таблицу аксапты, которую использует RS2005 для обработки управляемых подписок.
Теперь непосредственно над чем я сейчас бьюсь). Нашел в AOT класс SRSProxy. Он через COM позволяет получить данные о сервере отчетов и список его элементов. Таким образом я могу получить такую информацию как список всех отчетов на сервере. Создал две таблицы:

Первая содержит связь между кодом класса (который добавляет данные в таблицу параметров подписки в аксапте) и путем к отчету(уникальный путь на RS2005) для которого создаются подписки в аксапте;
Вторая таблица должна содержать привязку между полями таблицы параметров подписки в аксапте и названиями параметров в самом отчете на RS2005.

Получаем этакую настроечную таблицу. Планирую что в дальнейшем потихоньку и другие отчеты будут перетаскиваться на RS. Таким образом пытаюсь получить хоть какую то гибкость в настройке связей между параметрами подписок в аксапте и параметрами в отчетах на RS.

И вот тут то и встает вопрос как мне получить список параметров отчета на RS2005? В документации по SQL BOL содержит несколько примеров для получения данных. Вот шаги которые я для себя уяснил:
1) Получить новый экземпляр ReportingService
2) Указать путь к серверу и права
3) Найти отчет
4) получить коллекцию параметров
5) перебрать параметры и получить нужную информацию.
Сколько не копался в сборках .NET не нашел ни одного метода как пройти даже первый шаг.
Так что надеюсь на вашу помощь.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 12.06.2008, 17:05   #8  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Post
Уточните пожалуйста, как Вы хотите реализовать задачу, только средствами Аксапты или в стороннем приложение?

Приложил пример кода на C#, не уверен что тоже самое можне реализовать напрямую в Аксапте.
Вложения
Тип файла: zip ParamSample.zip (1.9 Кб, 91 просмотров)
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.

Последний раз редактировалось Link; 12.06.2008 в 17:30.
За это сообщение автора поблагодарили: KingPeas (1).
Старый 12.06.2008, 18:15   #9  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от KingPeas Посмотреть сообщение
И вот тут то и встает вопрос как мне получить список параметров отчета на RS2005? В документации по SQL BOL содержит несколько примеров для получения данных. Вот шаги которые я для себя уяснил:
1) Получить новый экземпляр ReportingService
2) Указать путь к серверу и права
3) Найти отчет
4) получить коллекцию параметров
5) перебрать параметры и получить нужную информацию.
Сколько не копался в сборках .NET не нашел ни одного метода как пройти даже первый шаг.
Так что надеюсь на вашу помощь.
Как видите, все пользующиеся ReportingServices (я, к сожалению, пока не имел возможности попробовать эту технологию), применяют ReportViewer, а не непосредственно ReportingService.

Из представленных выше примеров видно, что описание параметров отчета можно получить из объекта класса ServerReport, который вручную создать невозможно. Поэтому, чтобы получить список параметров необходимо:
  1. Создать Microsoft.Reporting.WebForms.ReportViewer.
  2. Установить его свойства на ваш отчет:
    • .ProcessingMode = ProcessingMode.Remote;
    • .ServerReport.ReportServerUrl = new Uri("http://ваш ури");
    • .ServerReport.ReportPath = "/ваш путь отчета".
  3. Получить список параметров с помощью метода ServerReport.GetParameters().

Еще хочу заметить, что для использования ReportViewer нужна сборка Microsoft.ReportViewer.WebForms.dll

Последний раз редактировалось RumataEstor; 12.06.2008 в 18:19.
Старый 12.06.2008, 18:27   #10  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Из представленных выше примеров видно, что описание параметров отчета можно получить из объекта класса ServerReport, который вручную создать невозможно. Поэтому, чтобы получить список параметров необходимо:
1. Создать Microsoft.Reporting.WebForms.ReportViewer.
2. Установить его свойства на ваш отчет:
.ProcessingMode = ProcessingMode.Remote;
.ServerReport.ReportServerUrl = new Uri("http://ваш ури");
.ServerReport.ReportPath = "/ваш путь отчета".
3. Получить список параметров с помощью метода ServerReport.GetParameters().
К сожаления я не нашел другого способа для DAX 4.0.
Возможно ситуация поменялась в 5.0, где интеграция более тесная.
Или может как то через веб сервисы можно получать.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 12.06.2008, 19:05   #11  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от Link Посмотреть сообщение
К сожаления я не нашел другого способа для DAX 4.0.
Возможно ситуация поменялась в 5.0, где интеграция более тесная.
Или может как то через веб сервисы можно получать.
Лично я не вижу связи между .NET классами и версией Axapta. В Axapta может поменяться способ использования сборок (например, вводом ключевого слова using и необязательностью полного квалификатора класса), но никак не интерфейс предоставляемый сборкой.
Старый 12.06.2008, 19:17   #12  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Лично я не вижу связи между .NET классами и версией Axapta. В Axapta может поменяться способ использования сборок (например, вводом ключевого слова using и необязательностью полного квалификатора класса), но никак не интерфейс предоставляемый сборкой.
Имелось в виду возможность реализации тех примеров, что я приложил, напрямую в DAX 4.0.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 12.06.2008, 19:48   #13  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от Link Посмотреть сообщение
Имелось в виду возможность реализации тех примеров, что я приложил, напрямую в DAX 4.0.
Опять же, не вижу разницы, из C# их использовать или из Аксапты. Подключил сборку, создал объект нужного класса и получил результат.
То, что в C# можно написать
Код:
using Microsoft.Reporting.WebForms;
...
var report = new ReportViewer();
, а в Аксапте это будет выглядеть как
Код:
Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer();
не меняет сути.
Старый 12.06.2008, 20:13   #14  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Опять же, не вижу разницы, из C# их использовать или из Аксапты. Подключил сборку, создал объект нужного класса и получил результат.
То, что в C# можно написать
Код:
using Microsoft.Reporting.WebForms;
...
var report = new ReportViewer();
, а в Аксапте это будет выглядеть как
Код:
Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer();
не меняет сути.
Да вроде так и есть. Только как бы не все доступно через сборки. Я оговорюсь, что я не .NET программист. Но все мои попытки сделать что то с SSRS через сборки к успехам не привели. Так что если можете показать практические пример работы через сборки только скажу большое спасибо
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 12.06.2008, 20:35   #15  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от Link Посмотреть сообщение
Да вроде так и есть. Только как бы не все доступно через сборки. Я оговорюсь, что я не .NET программист. Но все мои попытки сделать что то с SSRS через сборки к успехам не привели. Так что если можете показать практические пример работы через сборки только скажу большое спасибо
К сожалению, я пока не программист Акспаты , только готовлюсь к этому. Зато с .NET проблем нет. Так что практического примера показать пока не могу.
Старый 13.06.2008, 09:04   #16  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Ура у меня заработало) Спасибо всем за помощь, а особенно:

Цитата:
Сообщение от RumataEstor Посмотреть сообщение
...
Поэтому, чтобы получить список параметров необходимо:
  1. Создать Microsoft.Reporting.WebForms.ReportViewer.
  2. Установить его свойства на ваш отчет:
    • .ProcessingMode = ProcessingMode.Remote;
    • .ServerReport.ReportServerUrl = new Uri("http://ваш ури");
    • .ServerReport.ReportPath = "/ваш путь отчета".
  3. Получить список параметров с помощью метода ServerReport.GetParameters().

Еще хочу заметить, что для использования ReportViewer нужна сборка Microsoft.ReportViewer.WebForms.dll
Хотя остался один не ясный момент. Привожу код как я добился решения по своей задаче в аксапте 4.

X++:
static void RSGetReportParameter(Args _args)
{
    Microsoft.Reporting.WebForms.ReportViewer                   ReportViewer = new Microsoft.Reporting.WebForms.ReportViewer();
    Microsoft.Reporting.WebForms.ProcessingMode                 ProcessingMode;
    Microsoft.Reporting.WebForms.ServerReport                   ServerReport;
    Microsoft.Reporting.WebForms.ReportParameterInfoCollection  ParameterCollection;
    Microsoft.Reporting.WebForms.ReportParameter                ReportParameter;
    System.Uri                                                  url = new System.Uri('http://ax-dev/ReportServer');

    int         i;
    int         parmNum;
    str         name;
    ;

    //ReportViewer.set_ProcessingMode(?*?); Как установить не знаю по умолчанию Local
    ServerReport = ReportViewer.get_ServerReport();
    ServerReport.set_ReportServerUrl(url);
    ServerReport.set_ReportPath('/ABCD_New/ABCD_New');
    ParameterCollection = ServerReport.GetParameters();
    
    parmNum = ParameterCollection.get_Count();
    info (strfmt('Всего параметров: %1', parmnum));
    
    for (i = 0; i < parmNum; i++)
    {
        ReportParameter = ParameterCollection.get_Item(i);
        name = ReportParameter.get_Name();
        info (strFmt("%1 - %2",i,name));
    }
    
    info('Конец списка');

}
Не знаю как установить ProcessingMode. Доступа к константам хранящимся в ProcessingMode нет, есть только методы
  1. CompareTo()
  2. Equals()
  3. GetHashCode()
  4. GetType()
  5. GetTypeCode()
  6. toString()
Судя по названию методов через них установить значение не возможно.
Насколько это критично если я использую не Remote а Local подключение? И есть идеи как его установить?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
За это сообщение автора поблагодарили: iCloud (2).
Старый 13.06.2008, 13:08   #17  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.

По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например
Код:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Миниатюры
Нажмите на изображение для увеличения
Название: ProcessingMode.PNG
Просмотров: 222
Размер:	14.7 Кб
ID:	3530  
Старый 13.06.2008, 13:22   #18  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.

По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например
Код:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Собственно так я и подозревал. Вот как раз здесь и загвоздка в Аксапте.
X++:
ReportViewer.set_ProcessingMode(1);
выдает целый список ошибок
  • Типы операнда не совместимы с оператором.
  • Синтаксическая ошибка.
  • Для массива ProcessingMode задан недопустимый базовый тип.
  • Класс не содержит эту функцию.
X++:
ReportViewer.set_ProcessingMode(ProcessingMode);
вот так работает, но тогда встает вопрос как указать перечисление для самого объекта ProcessingMode
Как я писал ранее в Аксапте нет доступных методов для его установки
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 13.06.2008, 13:27   #19  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от KingPeas Посмотреть сообщение
Как я писал ранее в Аксапте нет доступных методов для его установки
ИМХО лучше не мучаться, написать dll и уже ее подключить в Аксапту.
Это и в будуещем пригодиться.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
За это сообщение автора поблагодарили: RumataEstor (1).
Старый 13.06.2008, 13:44   #20  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Можно попробовать использовать явное приведение типов (хотя не уверен, что в Аксапте такое пройдет).
Код:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Нашел на просторах инета такую фразу: "I do know 4.0 has ClrInterop:: parseClrEnum". Попробуйте использовать его для получения требуемого значения.

Последний раз редактировалось RumataEstor; 13.06.2008 в 13:47.
Теги
.net, отчет, reporting services

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
jinx: Microsoft Dynamics AX - X++ und .NET (CLR) Arrays Blog bot DAX auf Deutsch 0 03.03.2009 03:08
Dynamics AX: Vista, IIS 7 and .Net BC Blog bot DAX Blogs 0 14.06.2007 10:00
Dynamics AX: .Net BC Custom App, One Step Back! [Connection] Blog bot DAX Blogs 0 07.06.2007 22:41
Что сделать, чтобы связанные Data Source обновились? Maxim Gorbunov DAX: Программирование 4 11.04.2005 17:40
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.