AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

View Poll Results: Нужен ли .Net Аксапте?
Конечно нужен, это ведь дополнительные возможности. 32 84.21%
Все что надо можно через DLL делать и не мучиться. 3 7.89%
Знал бы прикуп жил бы в Сочи. 3 7.89%
Voters: 38. You may not vote on this poll

 
 
Thread Tools Search this Thread Display Modes
Old 05.06.2008, 13:57   #1  
KingPeas is offline
KingPeas
Участник
KingPeas's Avatar
 
163 / 35 (2) +++
Join Date: 09.01.2007
Location: Россия, Новосибирск
? Покорить .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();
получаю в итоге такую ошибку
Code:
Переменная не относится к типу CLASS.
Я так понимаю что признак того что объект является классом наличие соответствующего значка при подстановке. Вот только я пытаюсь выбрать один из таких элементов и затем снова делаю определение через new. Результат снова плачевный
X++:
Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel      obj = new 
Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel();
ошибка
Code:
Класс  не содержит эту функцию.
Научите что и как делать пожалуйста? В чем ошибка?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Old 09.06.2008, 11:13   #2  
KingPeas is offline
KingPeas
Участник
KingPeas's Avatar
 
163 / 35 (2) +++
Join Date: 09.01.2007
Location: Россия, Новосибирск
Люди добрые, что же никто не работал с .Net? В документации по RS я нашел нужную сборку, но как ее подключить если ее нет в списке по умолчанию не знаю
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Old 09.06.2008, 12:04   #3  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
К сожалению, я не работал с 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"
This post has been rated by: KingPeas (1).
Old 09.06.2008, 12:23   #4  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Насколько я понял, в аксапте отображать .NET контролы отображать пока нереально, так что, если вы хотите показывать отчет в Аксапте, то следует использовать "Microsoft.Reporting.WebForms.ReportViewer".

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

Last edited by RumataEstor; 09.06.2008 at 12:44.
Old 09.06.2008, 13:13   #5  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
можно написать свою ActiveX обертку. Пример http://erpkb.com/Axapta/JelementUpra...l'zovanija
Old 11.06.2008, 21:11   #6  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by RumataEstor View Post
Насколько я понял, в аксапте отображать .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. Ну а программистов будить нельзя вообще.
Old 12.06.2008, 14:33   #7  
KingPeas is offline
KingPeas
Участник
KingPeas's Avatar
 
163 / 35 (2) +++
Join Date: 09.01.2007
Location: Россия, Новосибирск
Спасибо всем за активное участие, вот только ушли куда то в сторону от обсуждения)
Попробую все таки объяснить чего я добиваюсь. В 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.
Old 12.06.2008, 17:05   #8  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Post
Уточните пожалуйста, как Вы хотите реализовать задачу, только средствами Аксапты или в стороннем приложение?

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

Last edited by Link; 12.06.2008 at 17:30.
This post has been rated by: KingPeas (1).
Old 12.06.2008, 18:15   #9  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Quote:
Originally Posted by KingPeas View Post
И вот тут то и встает вопрос как мне получить список параметров отчета на 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

Last edited by RumataEstor; 12.06.2008 at 18:19.
Old 12.06.2008, 18:27   #10  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by RumataEstor View Post
Из представленных выше примеров видно, что описание параметров отчета можно получить из объекта класса 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. Ну а программистов будить нельзя вообще.
Old 12.06.2008, 19:05   #11  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Quote:
Originally Posted by Link View Post
К сожаления я не нашел другого способа для DAX 4.0.
Возможно ситуация поменялась в 5.0, где интеграция более тесная.
Или может как то через веб сервисы можно получать.
Лично я не вижу связи между .NET классами и версией Axapta. В Axapta может поменяться способ использования сборок (например, вводом ключевого слова using и необязательностью полного квалификатора класса), но никак не интерфейс предоставляемый сборкой.
Old 12.06.2008, 19:17   #12  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by RumataEstor View Post
Лично я не вижу связи между .NET классами и версией Axapta. В Axapta может поменяться способ использования сборок (например, вводом ключевого слова using и необязательностью полного квалификатора класса), но никак не интерфейс предоставляемый сборкой.
Имелось в виду возможность реализации тех примеров, что я приложил, напрямую в DAX 4.0.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Old 12.06.2008, 19:48   #13  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Quote:
Originally Posted by Link View Post
Имелось в виду возможность реализации тех примеров, что я приложил, напрямую в DAX 4.0.
Опять же, не вижу разницы, из C# их использовать или из Аксапты. Подключил сборку, создал объект нужного класса и получил результат.
То, что в C# можно написать
Code:
using Microsoft.Reporting.WebForms;
...
var report = new ReportViewer();
, а в Аксапте это будет выглядеть как
Code:
Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer();
не меняет сути.
Old 12.06.2008, 20:13   #14  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by RumataEstor View Post
Опять же, не вижу разницы, из C# их использовать или из Аксапты. Подключил сборку, создал объект нужного класса и получил результат.
То, что в C# можно написать
Code:
using Microsoft.Reporting.WebForms;
...
var report = new ReportViewer();
, а в Аксапте это будет выглядеть как
Code:
Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer();
не меняет сути.
Да вроде так и есть. Только как бы не все доступно через сборки. Я оговорюсь, что я не .NET программист. Но все мои попытки сделать что то с SSRS через сборки к успехам не привели. Так что если можете показать практические пример работы через сборки только скажу большое спасибо
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Old 12.06.2008, 20:35   #15  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Quote:
Originally Posted by Link View Post
Да вроде так и есть. Только как бы не все доступно через сборки. Я оговорюсь, что я не .NET программист. Но все мои попытки сделать что то с SSRS через сборки к успехам не привели. Так что если можете показать практические пример работы через сборки только скажу большое спасибо
К сожалению, я пока не программист Акспаты , только готовлюсь к этому. Зато с .NET проблем нет. Так что практического примера показать пока не могу.
Old 13.06.2008, 09:04   #16  
KingPeas is offline
KingPeas
Участник
KingPeas's Avatar
 
163 / 35 (2) +++
Join Date: 09.01.2007
Location: Россия, Новосибирск
Ура у меня заработало) Спасибо всем за помощь, а особенно:

Quote:
Originally Posted by RumataEstor View Post
...
Поэтому, чтобы получить список параметров необходимо:
  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.
This post has been rated by: iCloud (2).
Old 13.06.2008, 13:08   #17  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.

По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например
Code:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Attached Thumbnails
Click image for larger version

Name:	ProcessingMode.PNG
Views:	487
Size:	14.7 KB
ID:	3530  
Old 13.06.2008, 13:22   #18  
KingPeas is offline
KingPeas
Участник
KingPeas's Avatar
 
163 / 35 (2) +++
Join Date: 09.01.2007
Location: Россия, Новосибирск
Quote:
Originally Posted by RumataEstor View Post
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.

По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например
Code:
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.
Old 13.06.2008, 13:27   #19  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by KingPeas View Post
Как я писал ранее в Аксапте нет доступных методов для его установки
ИМХО лучше не мучаться, написать dll и уже ее подключить в Аксапту.
Это и в будуещем пригодиться.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
This post has been rated by: RumataEstor (1).
Old 13.06.2008, 13:44   #20  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Join Date: 29.04.2008
Location: Москва
Можно попробовать использовать явное приведение типов (хотя не уверен, что в Аксапте такое пройдет).
Code:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Нашел на просторах инета такую фразу: "I do know 4.0 has ClrInterop:: parseClrEnum". Попробуйте использовать его для получения требуемого значения.

Last edited by RumataEstor; 13.06.2008 at 13:47.
Tags
.net, отчет, reporting services

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Как сделать фильтр по группе пользователей? 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
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.