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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2019, 12:50   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
прежде всего, огромное спасибо.

Цитата:
Сообщение от Blog bot Посмотреть сообщение
For example, existing transactions presume to have values for the following dimension attributes.

это замечательно. но похоже, пример раскрывает как отфильтровать две ПОСЛЕДОВАТЕЛЬНЫЕ позиции. причем ничего не говорится, что в этих позициях могут находится и другие аналитики.

я думаю, что в статье обязательно требуется рассмотреть случай, когда в одной позиции могут находится несколько разных аналитик, в списке которых есть одинаковые значения. я навскидку уже не помню, но в демопримере был случай, когда во вторую позицию с одними счетами прибылей и убытков могли записываться либо CostCenter, а в другие счета прибылей и убытков во вторую позицию могли записываться Purpose. Или нечто подобное. Причем в обоих списках были значения 010.

возвращаясь к статье:

разбирать аналитики на примере банковских проводок - не очень. либо надо обосновать каким образом на банковских проводках могут возникнуть разные комбинации аналитик.

для каждой view стоит привести пример данных. Особенно для таких "By that we will get a Carthesian product of all possible combinations between them".


очень хотелось бы статью, в которой раскрывались бы решения для следующих обыденных задач:

задача 1: отфильтровать проводки по счетам прибылей и убытков с CostCenter = 010. В какой бы позиции не находился CostCenter. При условии, что эти же позиции могут занимать другие аналитики И в этих других аналитиках также может существовать значение 010.

задача 1': то же самое, что в задаче 1, только CostCenter = 01*.
задача 1'': то же самое, что в задаче 1, только CostCenter = 01*..02*,!021.


задача 2: отфильтровать проводки по счетам прибылей и убытков с CostCenter = 010 и Department = 010. В какой бы позиции не находились CostCenter и Department. При условии, что эти же позиции могут занимать другие аналитики И в этих других аналитиках также может существовать значение 010.

задача ***: отфильтровать с условием "или". в запросах по остальным значениям (не финансовая аналитика) в поисковом выражении можно использовать скобки.
https://axapta.mazzy.ru/lib/search/


Примечание: можно посмотреть в 1С:Бухгалтерию, в которой задача выборки по субконто давно решена. можно также рассказать какой ценой решили эту задачу в 1С:Бухгалтерии.

Цитата:
Сообщение от Blog bot Посмотреть сообщение
However, our selection can be different. For this exercice sake I opted for Business unit and Department.
опять же - и Business unit, и Department может находится в разных позициях в разных проводках.
в том числе, в некоторых случаях сначала может идти Business unit, а затем Department. а в некоторых - сперва Department, а затем Business unit. Причем между этими аналитиками могут быть расположены другие аналитики.

статья о фильтрации по чудо-финансовым-аналитикам без рассмотрения таких случаев не может трактоваться как полезная.

Цитата:
Сообщение от Blog bot Посмотреть сообщение
Let's solve this problem step by step.
му-ха-ха-ха!!!
ни в коем случае не хочу принижать достоинства статьи и изложенного подхода.
Хочу сказать лишь одно - архитекторы, которые это чудо задолжили в Аксапту... они как собирались выполнять фильтрацию? какой способ по их мнению должны были использовать пользователи?

приходит такой пользователь и спрашивает "как отфильтровать по CostCenter"
а архитектор отвечает - "нет-нет, ты еще не готов к этому" https://coub.com/view/1avfh5

а для продвинутых програмеров-в-закрытой-системе он начинает ответ с фразы "Let's solve this problem step by step..."


Цитата:
Сообщение от Blog bot Посмотреть сообщение
Now we create a view based on...
е-е-е-е-е!!!!
we - это пользователи? или программисты?
сколько таких вью должны создать программисты в закрытой системе, чтобы пользователи хотя бы перестали ругаться?

Цитата:
Сообщение от Blog bot Посмотреть сообщение
...without relation in outer join
серьезно?
и сколько значений сможет обслуживать этот подход к фильтрации?
можно ли вводить значения как критерий через запятую? со звездочкой? а с другими мета символами?

фиг с ними, с пользователями.
если использовать этот подход программно, то из кода сколько значений для фильтрации предполагается?

Цитата:
Сообщение от Blog bot Посмотреть сообщение
X++:
private static server str displayValueWithNA()   // X++
{
    str         sRet;
    tableName   viewName                = viewstr(CDPDimensionAttributeValuesUnionView);
    str         cDisplayValue  = SysComputedColumn::comparisonField(viewName,
                                                                                viewstr(CDPDimensionAttributeValuesSelectedView),
                                                                                fieldStr(CDPDimensionAttributeValuesSelectedView, DisplayValue));
    
    sRet =
        SysComputedColumn::if(SysComputedColumn::isNotNullExpression(cDisplayValue),
                                cDisplayValue,
                                SysComputedColumn::returnLiteral('n/a')
                            );
 
    return sRet;
}
серьезно?

опять же со всем восхищением к изворотливости ума.
но задача тривиальной фильтрации действительно требует вот такого кода?

Цитата:
Сообщение от Blog bot Посмотреть сообщение
X++:
private static server str finDimValues() // X++
{
return @"STUFF((SELECT '-' + t3.DisplayValue
from CDPDimensionAttributeValuesUnionView as t3
where
t1.DimensionAttributeValueSet = t3.DimensionAttributeValueSet
order by t3.DIMENSIONATTRIBUTE
for xml path('')), 1, 1, '')";
}
серьезно?!
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 10.08.2019 в 13:37.
Старый 10.08.2019, 14:03   #2  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
опять же со всем восхищением к изворотливости ума.
но задача тривиальной фильтрации действительно требует вот такого кода?
серьезно?!
Картинка прямо в тему
Название: sova.jpg
Просмотров: 945

Размер: 78.4 Кб
А чем для задачи Financial dimension sets не подошли, они вроде как раз для группировки нужны(если я правильно понял проблему)
Старый 10.08.2019, 14:57   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
А чем для задачи Financial dimension sets не подошли
понятия не имею. кстати, тоже бы посмотрел на ответ.

а вот пользователи точно НЕ формулируют свои вопросы в терминах Financial dimension sets
с удовольствием послушаю как можно применить Financial dimension sets в ответе на вопрос "как отфильтровать по CostCenter"
__________________
полезное на axForum, github, vk, coub.
Старый 10.08.2019, 21:55   #4  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
672 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от mazzy Посмотреть сообщение
понятия не имею. кстати, тоже бы посмотрел на ответ.

а вот пользователи точно НЕ формулируют свои вопросы в терминах Financial dimension sets
с удовольствием послушаю как можно применить Financial dimension sets в ответе на вопрос "как отфильтровать по CostCenter"
да никак. в том-то и пуля, что в транзакциях один набор используется, а пользователю хочется другой.

дополнительная проблема в том, что не для всех атрибутов есть наборы значений (затем и нужен тут тов. Декарт)
__________________
Felix nihil admirari
Старый 10.08.2019, 15:02   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
Картинка прямо в тему
и кстати, не соглашусь.
подход в статье очень интересный и хитроумный.

другое дело, что даже для proof of concept с такой фин.аналитикой нужно быть еще хитроумнее.

беда в том, что в ax2012 и выше для ответа тривиальный вопрос про фильтрацию по фин.аналитике требуется очень хитроумный ответ программиста.
Financial dimension values concatened by mask
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 10.08.2019 в 15:06.
Старый 10.08.2019, 21:40   #6  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
672 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от mazzy Посмотреть сообщение
прежде всего, огромное спасибо.
на здоровье! может, стоит слить оба топика, а то и так мозг плавится, а тут два треда получились?


Цитата:
Сообщение от mazzy Посмотреть сообщение
это замечательно. но похоже, пример раскрывает как отфильтровать две ПОСЛЕДОВАТЕЛЬНЫЕ позиции. причем ничего не говорится, что в этих позициях могут находится и другие аналитики.
твоё замечание я не понял, извини. что меняется, от того, последовательные они или нет? выборка идёт по всем наборам, так как они и использованы в транзакциях. в каждом наборе заданы атрибуты и их значения. какая нам разница, в каких они позициях? ты посмотри структуру всех вьюх, там всё ровно так, как оно и используется в аксе - никакой самодеятельности.

Цитата:
Сообщение от mazzy Посмотреть сообщение
я думаю, что в статье обязательно требуется рассмотреть случай, когда в одной позиции могут находится несколько разных аналитик, в списке которых есть одинаковые значения
решается задача, разумеется, группировки сальдо по выбранным значениям измерений (фильтрация по выбранному набору атрибутов), и никакой фильтрации по собственно значениям тут нет - это может делать уже сам пользователь в броузере.

Цитата:
Сообщение от mazzy Посмотреть сообщение
. я навскидку уже не помню, но в демопримере был случай, когда во вторую позицию с одними счетами прибылей и убытков могли записываться либо CostCenter, а в другие счета прибылей и убытков во вторую позицию могли записываться Purpose. Или нечто подобное. Причем в обоих списках были значения 010.
см. выше. пофиг на значения, они не сравниваются.

Цитата:
Сообщение от mazzy Посмотреть сообщение
возвращаясь к статье:

разбирать аналитики на примере банковских проводок - не очень. либо надо обосновать каким образом на банковских проводках могут возникнуть разные комбинации аналитик.

для каждой view стоит привести пример данных. Особенно для таких "By that we will get a Carthesian product of all possible combinations between them".
сделал. хотя не очень понимаю, чем облегчит муки и страдания.

Цитата:
Сообщение от mazzy Посмотреть сообщение
очень хотелось бы статью, в которой раскрывались бы решения для следующих обыденных задач:

задача 1: отфильтровать проводки по счетам прибылей и убытков с CostCenter = 010. В какой бы позиции не находился CostCenter. При условии, что эти же позиции могут занимать другие аналитики И в этих других аналитиках также может существовать значение 010.

задача 1': то же самое, что в задаче 1, только CostCenter = 01*.
задача 1'': то же самое, что в задаче 1, только CostCenter = 01*..02*,!021.


задача 2: отфильтровать проводки по счетам прибылей и убытков с CostCenter = 010 и Department = 010. В какой бы позиции не находились CostCenter и Department. При условии, что эти же позиции могут занимать другие аналитики И в этих других аналитиках также может существовать значение 010.
похоже, я точно что-то важное пропускаю с этими "позициями"... можешь попробовать прикрутить предложенное решение к таблице с твоими проводками и проверить, как оно работает? дать тебе проектик, чтоб не колупать руками?

Цитата:
Сообщение от mazzy Посмотреть сообщение
задача ***: отфильтровать с условием "или". в запросах по остальным значениям (не финансовая аналитика) в поисковом выражении можно использовать скобки.
https://axapta.mazzy.ru/lib/search/
это уже выкрутасы с собственно фильтрами. думаю в сторону регулярных выражений. на той выборке, которую дают мои вьюхи можно измываться уже с готовой строкой аналитик, как душеньке угодно.

Цитата:
Сообщение от mazzy Посмотреть сообщение
Примечание: можно посмотреть в 1С:Бухгалтерию, в которой задача выборки по субконто давно решена. можно также рассказать какой ценой решили эту задачу в 1С:Бухгалтерии.
ну, там можно много чего посмотреть, как можно было сделать в аксе. я с того свою забугорную карьеру и начал. пришёл на первое собеседование и сразу им сказал, что аксапту не знаю, но щас вам, парни, расскажу, как всё круто сделано в 1С. они меня и взяли сразу

Цитата:
Сообщение от mazzy Посмотреть сообщение
опять же - и Business unit, и Department может находится в разных позициях в разных проводках.
в том числе, в некоторых случаях сначала может идти Business unit, а затем Department. а в некоторых - сперва Department, а затем Business unit. Причем между этими аналитиками могут быть расположены другие аналитики.
ну, мы по кругу ходить не будем. это же одно и то же ты повторил многократно. если не работает, то приведи мне пример, где оно не так работает?


Цитата:
Сообщение от mazzy Посмотреть сообщение
статья о фильтрации по чудо-финансовым-аналитикам без рассмотрения таких случаев не может трактоваться как полезная.

му-ха-ха-ха!!!
да там не му-ха-ха! там гы-ы-ы-ы! потому что ты ещё не видел running totals по всем датам!

Цитата:
Сообщение от mazzy Посмотреть сообщение
ни в коем случае не хочу принижать достоинства статьи и изложенного подхода.
Хочу сказать лишь одно - архитекторы, которые это чудо задолжили в Аксапту... они как собирались выполнять фильтрацию? какой способ по их мнению должны были использовать пользователи?

приходит такой пользователь и спрашивает "как отфильтровать по CostCenter"
а архитектор отвечает - "нет-нет, ты еще не готов к этому" https://coub.com/view/1avfh5
это оч хороший вопрос. ау? где вы, архитекторы? я бы тоже с удовольствием послушал. по-моему, тут же была пара светлых голов, которые писали статьи на эту тему? trud?

Цитата:
Сообщение от mazzy Посмотреть сообщение
а для продвинутых програмеров-в-закрытой-системе он начинает ответ с фразы "Let's solve this problem step by step..."



е-е-е-е-е!!!!
we - это пользователи? или программисты?
сколько таких вью должны создать программисты в закрытой системе, чтобы пользователи хотя бы перестали ругаться?
разумеется, мы - программисты (народ мускулистый)

Цитата:
Сообщение от mazzy Посмотреть сообщение
серьезно?
и сколько значений сможет обслуживать этот подход к фильтрации?
какие тебе видятся проблемы с масштабированием? в каком именно месте?

Цитата:
Сообщение от mazzy Посмотреть сообщение
можно ли вводить значения как критерий через запятую? со звездочкой? а с другими мета символами?
куда ты собрался вводить? в постановке задачи можно лишь выбрать набор атрибутов (Dimension set)

Цитата:
Сообщение от mazzy Посмотреть сообщение
фиг с ними, с пользователями.
если использовать этот подход программно, то из кода сколько значений для фильтрации предполагается?
не понял вопроса.

Цитата:
Сообщение от mazzy Посмотреть сообщение
...without relation in outer join
серьезно?
а как ещё можно получить все возможные комбинации, как ни всех на всех перемножить? нормальный вариант, но нужно примерно представлять масштабы бедствия перед такими ковровыми бомбардировками. в моём случае всех значений всего 3500. перемножить на 2,3,....12 атрибутов - не бог весть какая беда.

Цитата:
Сообщение от mazzy Посмотреть сообщение
опять же со всем восхищением к изворотливости ума.
но задача тривиальной фильтрации действительно требует вот такого кода?
ещё разок: тут задача группировки, во-первых, а во-вторых, фильтрации по выбранным атрибутам, а не по значениям.


Цитата:
Сообщение от mazzy Посмотреть сообщение
серьезно?!
в аксе есть табличка со значениями выбранных атрибутов в столбцах, которые можно легко слепить в одну строку, но... ты просто загляни в неё... только сядь, если стоишь, а лучше ляг. я не в состоянии придумать динамический подход к этой подзадаче. поэтому просто провернул этот фокус с прямым запросом в сикеле. видимо, сказывается сертификация в QlikView.

моей первой реакцией на эту задачу было вынести всё это из аксапты к свиньям собачьим (то есть, в какой-нибудь там PowerBI или т.п.), но архитектор сказал "don't ссы и делай всё тута". ну, вот я и сделал.

спасибо за дискуссию. интересно обсудить этот сюжет с двух сторон: как вообще юзера должны управляться с измерениями, и как можно улучшить (или даже исправить косяки) этого конкретного решения.
__________________
Felix nihil admirari

Последний раз редактировалось wojzeh; 10.08.2019 в 21:51.
За это сообщение автора поблагодарили: mazzy (93).
Старый 25.09.2019, 16:33   #7  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
672 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от mazzy Посмотреть сообщение
серьезно?

опять же со всем восхищением к изворотливости ума.
но задача тривиальной фильтрации действительно требует вот такого кода?


серьезно?!
нам тут не до шуток!!! я тут вот заглянул в стандартный DimensionSetEntity, а там... а там... а там вот чо:

X++:
 ///  Each enterprise can expose different dimension attributes.  Therefore, we have determine what dimension attributes
    ///  columns are exposed, then concatenate the fields separated by the account delimiter.
    ///  Example: dimensionField1 - + dimensionField2 - + dimensionField3 ...
    /// </remarks>
    private static server str displayValue()
    {
        str displayValueSql;
        str accountDelimiterSql;
        str dimensionValueColumns;
        str accountDelimiterEscapedSql;

        SysDictEnum delimiterDictEnum = new SysDictEnum(enumnum(DimensionSegmentDelimiter));
        int enumValue = delimiterDictEnum.firstValue();

        for (int i = 1; i <= delimiterDictEnum.values(); i++)
        {
            str enumLabel = delimiterDictEnum.index2Label(enumValue);
            accountDelimiterSql += strfmt(
                "WHEN %1 THEN '%2'\n", delimiterDictEnum.index2Value(enumValue), enumLabel);

            accountDelimiterEscapedSql += strfmt(
                "WHEN %1 THEN '%2'\n", delimiterDictEnum.index2Value(enumValue), DimensionSetEntity::generateEscapedDelimiter(enumLabel));
            enumValue = delimiterDictEnum.nextValue(enumValue);
         }

        // Get the list of all dimension attributes that have metadata columns
        dimensionValueColumns = DimensionSchemaAndDataSynchronizationUtility::getSynchronizedDimensionValueColumnNames(
            tablestr(DimensionAttributeValueSet));

        if (strLen(dimensionValueColumns) == 0)
        {
            // No table extension columns.
            displayValueSql = SysComputedColumn::returnLiteral('');
        }
        else
        {
            str errorMessage = strReplace("@Dimension:DimensionEntitiesDimensionStructureNotCreated", "'", "''");
            LanguageId systemLanguageId = SystemParameters::find().SystemLanguageId;

            // Determine the error message based on system language
            if (systemLanguageId != '')
            {
                errorMessage = strReplace(SysLabel::labelId2String2("@Dimension:DimensionEntitiesDimensionStructureNotCreated", systemLanguageId), "'", "''");;
            }

            //Create view sql
            displayValueSql = strfmt(
                @"
                SELECT (
                   SELECT CASE WHEN
                            NonNullDisplayValue IS NOT NULL
                            THEN NonNullDisplayValue
                            ELSE '%4'
                        END
                        FROM
                        (
                        -- Remove initial delimiter
                        SELECT STUFF(
                            (SELECT
                                    -- Prepend with delimiter and escape internal delimiters
                                    DIMENSIONSEGMENTDELIMITER + COALESCE(
                                        REPLACE(REPLACE(DIMLIST.DISPLAYVALUE, '\', '\\'),
                                                DIMENSIONSEGMENTDELIMITER,
                                                DIMENSIONSEGMENTDELIMITERESCAPED),
                                        '')
                                FROM
                                    (SELECT TOP (1) DH.RECID
                                        FROM DIMENSIONHIERARCHY DH
                                        JOIN DIMENSIONHIERARCHYINTEGRATION DHI
                                            ON DHI.DIMENSIONHIERARCHY = DH.RECID
                                            AND DHI.ISDEFAULT = 1
                                            AND DHI.PARTITION = T1.PARTITION
                                        WHERE
                                            DH.PARTITION = T1.PARTITION
                                            AND DH.STRUCTURETYPE = %2
                                    ) AS DH
                                JOIN DIMENSIONHIERARCHYLEVEL DHL
                                    ON DHL.DIMENSIONHIERARCHY = DH.RECID AND DHL.PARTITION = T1.PARTITION
                                JOIN DIMENSIONATTRIBUTE DA
                                    ON DA.RECID = DHL.DIMENSIONATTRIBUTE AND DA.PARTITION = T1.PARTITION
                                LEFT JOIN
                                        (SELECT DIMENSIONATTRIBUTE, DISPLAYVALUE
                                            FROM
                                                (SELECT * FROM DIMENSIONATTRIBUTEVALUESET DAVS
                                                    WHERE DAVS.PARTITION = T1.PARTITION AND DAVS.RECID = T1.RECID) P

                                            UNPIVOT
                                                (DISPLAYVALUE for DIMENSIONATTRIBUTE IN (%3))
                                                        AS DIMENSIONVALUECOLUMNNAME
                                        ) AS DIMLIST 
                                    ON
                                        DIMLIST.DIMENSIONATTRIBUTE = REPLACE(DA.DIMENSIONVALUECOLUMNNAME COLLATE Database_Default, '.', '$')
                                ORDER BY DHL.DIMENSIONHIERARCHY, DHL.LEVEL_
                                FOR XML PATH(''), TYPE
                            ).value('(./text())[1]', 'NVARCHAR(MAX)'),
                            1, LEN(DIMENSIONSEGMENTDELIMITER), '')
                         AS NonNullDisplayValue)
                    AS DisplayValueFormat)
                    FROM
                        (SELECT TOP(1)
                                --Determine the account delimiter
                                CASE DIMENSIONSEGMENTDELIMITER
                                    %1
                                END AS DIMENSIONSEGMENTDELIMITER,
                            --Determine the account delimiter escaped
                            CASE DIMENSIONSEGMENTDELIMITER
                                %5
                            END AS DIMENSIONSEGMENTDELIMITERESCAPED
                        FROM DIMENSIONPARAMETERS
                        WHERE DIMENSIONPARAMETERS.PARTITION = T1.PARTITION
                    ) AS DIMENSIONPARAMETERS
                ",
                accountDelimiterSql,
                enum2int(DimensionHierarchyType::DataEntityDefaultDimensionFormat),
                dimensionValueColumns,
                errorMessage,
                accountDelimiterEscapedSql);
        }
        
        return displayValueSql;
    }
__________________
Felix nihil admirari
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
How to lookup and set a new value for Financial dimension Blog bot DAX Blogs 0 03.10.2015 02:35
emeadaxsupport: How to change the Storage dimension group on items with existing Inventory transactions Blog bot DAX Blogs 0 01.10.2015 21:11
NAV Team: Filtering on Dimension Values Blog bot Dynamics CRM: Blogs 0 12.06.2012 18:02
Khue Trinh: Setting up a link between a financial dimension and the site inventory dimension Blog bot DAX Blogs 0 27.09.2010 13:05
wiki.dynamicsbook: Changes Made in Navision Attain 3.60 Blog bot Dynamics CRM: Blogs 0 02.09.2008 13:23

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

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

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