AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2008, 10:27   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
А ЧЮ где?
__________________
С уважением,
Олег.
Старый 14.10.2008, 10:35   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Ну, я в конце смайл, вроде бы, вставил
__________________
Axapta v.3.0 sp5 kr2
Старый 09.02.2009, 15:05   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Интересный код обнаружился в Ax*-классах при доступе к полям-массивам: к примеру, в AxSalesTable, в методе dimensionElement() (для 3-ки) или же setDimensionElement() (для 4-ки и выше) вместо вроде бы очевидной конструкции
X++:
fieldId2Ext(fieldnum(SalesTable, Dimension), _array)
используется
X++:
new SysDictField(tablenum(SalesTable), fieldnum(SalesTable, Dimension), _array).id()
Кто виноват в использовании такого "оптимального" кода в 3-ке, выяснить не удалось, а в 4-ке виной тому автор класса AxGenerateAxBCClass, а именно его метода setDimensionElement() (метод setArrayElement() не лучше), где по каким-то причинам зашит такой шаблон для методов доступа к элементам полей-массивов.
Старый 08.01.2010, 13:59   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Атавизьмы
Класс RAssetDisposalValue.
Безобразная передача параметров при инициализации экземпляров RAssetSumCalc дожила c 3-ки до DAX2009
X++:
public server static RAssetAmount postValue(RAssetId         _assetId,
                                             RAssetPostValue  _postValue,
                                             RAssetAmount     _assetAmount    = 0,
                                             RAssetStandardId _assetStandardId,
                                             RAssetTransDate  _assetTransDate = systemdateget())
{
    RAssetSumCalc       rAssetSumTransThisYear,
                        rAssetSumTransPriorYear,
                        rAssetSumTransDate;
    RAssetTransDate     prior_Years,
                        this_Year;
    RAssetAmount        assetAmount;
    ;

    this_Year    = dateEndYr(systemdateget());
    prior_Years  = dateEndYr(prevyr(systemdateget()));


    rAssetSumTransThisYear  = RAssetSumCalc_Trans::newAssetPeriod(RAssetTable::find(_assetId).AccountNum,
                                                                  _assetStandardId,
                                                                  this_Year,
                                                                  prior_Years);
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 08.01.2010, 14:19   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
В 6ке им это придется пофиксить, так как компилироваться такое уже не будет
Старый 11.11.2010, 17:29   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
CustClassificationGroup
Если хочется от души посмеяться, рекомендую простенькую таблицу CustClassificationGroup из AX2009, особенно ее [нигде не используемые] методы find(), exist(). Из серии "как сделать в слове еще четыре ошибки"; так и представляется индус из Мумбая, которому дали тестовое задание - создать таблицу.
Старый 11.11.2010, 18:32   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Нуу, работать то будет. Чуть странно с concurrencyModel, первый раз такое видел в коде. А так - ну, подумаешь, indentation плохой.
Старый 11.11.2010, 19:05   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Нуу, работать то будет. Чуть странно с concurrencyModel, первый раз такое видел в коде. А так - ну, подумаешь, indentation плохой.
Там все чуть более запущено чем просто проблемы с отступами - обрати внимание на первичный ключ на табличке
Изображения
 
__________________
-ТСЯ или -ТЬСЯ ?
Старый 12.11.2010, 01:53   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Vadik Посмотреть сообщение
Там все чуть более запущено чем просто проблемы с отступами - обрати внимание на первичный ключ на табличке
RecId. Но и поиск тоже по RecId. То есть с точки зрения моделирования данных - все ОК.
Другое дело, что в этой табличке надо бы еще другой уникальный индекс создать. Но видимо табличка так часто используется, что пока не понадобилось
Старый 12.11.2010, 02:15   #10  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от kashperuk Посмотреть сообщение
RecId. Но и поиск тоже по RecId. То есть с точки зрения моделирования данных - все ОК
Да как сказать.. И рядом с ОК не стояло, если честно - см. на EDT, связь с другими таблицами не по RecId, а по Code строится. Представь на секунду, что ты в запросе связываешь клиентов и группы классификации - что получится?

Цитата:
Другое дело, что в этой табличке надо бы еще другой уникальный индекс создать. Но видимо табличка так часто используется, что пока не понадобилось
Это не другой уникальный индекс, это первичный ключ. Его обычно сразу (при проектировании) создают, а не "когда понадобится"

Я в принципе догадываюсь, зачем эти неиспользуемые find() и exist() методы создавались - чтобы тупо пройти формальную проверку на их наличие. Вопрос в том, как такое сумели в SYS слой закоммитить и на кой ляд вводили разрекламированные юнит-тесты
Изображения
  
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.11.2010, 20:28   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
AX 2009 SP1 RU5, \Macros\SQLFormatting - вот и пользуйся после этого стандартными макросами
X++:
#define.SQLfrom('FROM')
#define.SQLOr('FROM')
#define.SQLAnd('AND')
#define.SQLNot('NOT')
#define.SQLOrder('ORDER')
#define.SQLBY('GROUP')
За это сообщение автора поблагодарили: EVGL (1), Maximin (1), lev (1).
Старый 23.11.2010, 23:03   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Предположил, что расписывать на 13 и больше страниц коллега (или не коллега) EVGL уже не осилил
Но вы правы. Для полноты соответствия, надо еще проверку на больше 12 вставить. Можно и одной строкой

PS Хотя, как выяснилось, речь шла вообще о другом
__________________
Axapta v.3.0 sp5 kr2
Старый 14.01.2011, 10:01   #13  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
DAX2009, формы строк журналов ГК, переопределенные validate'ы и modified'ы - часто используются в анализе содержимого полей подобные конструкции :
X++:
if (ledgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans, AccountNum)).getValue()!="")
вместо нормального и привычного
X++:
if (ledgerJournalTrans.AccountNum)
Это какое-то новое мощное колдунство по новым технологиям DAX2009, индусский стиль или просто MBS перевел своих кодеров на посимвольную оплату труда ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 14.01.2011 в 10:04.
Старый 14.01.2011, 11:45   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Однозначно индусский стиль
Старый 14.01.2011, 13:26   #15  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Однозначно индусский стиль
И кто ж, как и на что их (вне привязки к национальности - скажем, "этих людей") в таком случае тестирует при найме (помню ты рассказывал как валят кандидатов не умеющих генерировать качественный (с) код). И через скольких (в среднем) людей проходит код перед тем как попадет в релиз? Если конечно это не секрет
P.S. Я не ерничаю, просто наблюдаю какой-то непонятный процесс (вернее, два - набор персонала и процесс проверки кода при переносе в релиз) и хочется разобраться
__________________
-ТСЯ или -ТЬСЯ ?
Старый 14.01.2011, 13:11   #16  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Там же, в LedgerJournalTransDaily на источнике данных LedgerJournalTrans ...
Метод active() постоянно вызывает метод setFurtherPostingProtection(), который меняет возможность редактирования 7 полей (тип счета и счет, тип корр.счета и коррсчет, суммы дебет/кредит и валюту) по факту заполненности полей FurtherPostingType и FurtherPostingRecId. Вот как это делает наш неизвестный герой:
X++:
void setFurtherPostingProtection()
{
    int i;
    DictTable       dictTable = new DictTable(ledgerJournalTrans.TableId);
    FormDataObject  objectLedgerJournalTrans;
    boolean         preventEdit;
    ;

    preventEdit = ledgerJournalTrans.FurtherPostingType && ledgerJournalTrans.FurtherPostingRecId;

    for (i = 1; i <= dictTable.fieldCnt(); i++)
    {
        objectLedgerJournalTrans = ledgerJournalTrans_ds.object(dictTable.fieldCnt2Id(i));
        if (objectLedgerJournalTrans)
        {
            if (preventEdit)
            {
                switch (dictTable.fieldCnt2Id(i))
                {
                    case fieldnum(LedgerJournalTrans, AccountType),
                         fieldnum(LedgerJournalTrans, AccountNum),
                         fieldnum(LedgerJournalTrans, OffsetAccountType),
                         fieldnum(LedgerJournalTrans, OffsetAccount),
                         fieldnum(LedgerJournalTrans, AmountCurDebit),
                         fieldnum(LedgerJournalTrans, AmountCurCredit),
                         fieldnum(LedgerJournalTrans, CurrencyCode)  :
                        objectLedgerJournalTrans.allowEdit(false);
                        break;
                    default :
                        objectLedgerJournalTrans.allowEdit(true);
                }
            }
            else
            {
                objectLedgerJournalTrans.allowEdit(true);
            }
        }
    }
}
Это SYS-слой...
Есть мнение, что за такое в таком месте - надо бить ...
Наверное даже ногами и наверное даже по голове ...
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 14.01.2011 в 13:17.
За это сообщение автора поблагодарили: fed (3), Vadik (5).
Старый 14.01.2011, 13:47   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Метод active() постоянно вызывает метод setFurtherPostingProtection(), который меняет возможность редактирования 7 полей
На сколько я вижу, код меняет доступность не только перечисленных 7 полей, но и всех остальных: "default: objectLedgerJournalTrans.allowEdit(true);" Может я чего-то не понимаю, но я не вижу как можно переписать этот код с сохранением всей заложенной в него лигики (ткните носом, кто видит)

Необходимо это или нет - это уже другой вопрос. А если это таким было ТЗ, тогда чего на кодера пенять? Это может быть баг, но это не wtf
Старый 14.01.2011, 13:58   #18  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Может я чего-то не понимаю, но я не вижу как можно переписать этот код с сохранением всей заложенной в него лигики (ткните носом, кто видит)
Не сильно компактнее (по строчке кода на каждую из семи таблиц написать все же придется), но гораздо проще и читабельнее делается с Global::allowEditFieldsOnFormDS_W(), которого на SYS слое нет. Видимо, с учетом корпоративных порядков подобную дрянь многократно писать проще чем добиться добавления полезного метода в Global
P.S. а может у автора этот код никакого дискомфорта не вызывает - у них вообще похоже свое, особенное чувство прекрасного
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 14.01.2011, 13:44   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
К сожалению, код пишется разными командами, в разных странах и условиях.
К примеру, команды в Редмонде все больше и больше полагаются на вендоров, теперь уже и при написании кода приложения. При этом уровень code review в таких командах обычно тоже намного ниже, чем хотелось бы.
То есть даже если в FTE там наняты хорошие сотрудники (хотя я уже высказывался по этому поводу в какой-то другой теме - мы не нанимаем людей со знанием АХ), то качество вендоров Вы врядли сможете себе даже представить.

Раз уж дискуссия идет в этой теме, приведу еще пример кода, тоже от вендоров. Код взят с одной из форм в АХ6. Приведу весь код метода, просто чтобы можно было оценить всю мощь гения:

X++:
public void setUnitOfMeasureState()
{
    UnitOfMeasure tblUnitOfMeasure;

    if (ecoResDomain.DataType == AttributeDataType::Integer ||
        ecoResDomain.DataType == AttributeDataType::Decimal)
    {
        // Enable unit of measure group
        if (!unitOfMeasureGroup.enabled())
        {
            unitOfMeasureGroup.enabled(true);
        }

        if (ecoResDomainUnitOfMeasure.RecId &&
            ecoResBoundedDomainValue.RecId)
        {
            // Enable bounded unit of measure combo boxes
            if (!intUnitOfMeasureComboBox.visible())
            {
                intUnitOfMeasureComboBox.visible(true);
            }

            // Populate the integer bounded unit of measure combo box
            intUnitOfMeasureComboBox.clear();
            while select Symbol from tblUnitOfMeasure
                where tblUnitOfMeasure.UnitOfMeasureClass == ecoResDomainUnitOfMeasure.UnitOfMeasureClass
            {
                intUnitOfMeasureComboBox.add(tblUnitOfMeasure.Symbol);
            }
            if (intUnitOfMeasureComboBox.count() > 0)
            {
                intUnitOfMeasureComboBox.selection(0);
            }

            if (ecoResValueLower_EcoResIntValue.RecId &&
                ecoResValueLower_EcoResIntValue.IntUnitOfMeasure)
            {
                // Set the unit of measure selection
                tblUnitOfMeasure = UnitOfMeasure::find(ecoResValueLower_EcoResIntValue.IntUnitOfMeasure);
                intUnitOfMeasureComboBox.selectText(tblUnitOfMeasure.Symbol);
            }
            else if (ecoResDomainUnitOfMeasure.DefaultUnitOfMeasure)
            {
                // Set the unit of measure selection
                tblUnitOfMeasure = UnitOfMeasure::find(ecoResDomainUnitOfMeasure.DefaultUnitOfMeasure);
                intUnitOfMeasureComboBox.selectText(tblUnitOfMeasure.Symbol);

                // Set the unit of measure foreign keys
                if (ecoResValueLower_EcoResIntValue.RecId)
                {
                    ecoResValueLower_EcoResIntValue.IntUnitOfMeasure = tblUnitOfMeasure.RecId;
                }
                if (ecoResValueUpper_EcoResIntValue.RecId)
                {
                    ecoResValueUpper_EcoResIntValue.IntUnitOfMeasure = tblUnitOfMeasure.RecId;
                }
            }
            else if (intUnitOfMeasureComboBox.count() > 0)
            {
                // Set the unit of measure foreign keys
                if (ecoResValueLower_EcoResIntValue.RecId)
                {
                    ecoResValueLower_EcoResIntValue.IntUnitOfMeasure = UnitOfMeasure::findBySymbol(intUnitOfMeasureComboBox.getText(intUnitOfMeasureComboBox.selection())).RecId;
                }
                if (ecoResValueUpper_EcoResIntValue.RecId)
                {
                    ecoResValueUpper_EcoResIntValue.IntUnitOfMeasure = UnitOfMeasure::findBySymbol(intUnitOfMeasureComboBox.getText(intUnitOfMeasureComboBox.selection())).RecId;
                }
            }

            if (!floatUnitOfMeasureComboBox.visible())
            {
                floatUnitOfMeasureComboBox.visible(true);
            }

            // Populate the float unit of measure combo box
            floatUnitOfMeasureComboBox.clear();
            while select Symbol from tblUnitOfMeasure
                where tblUnitOfMeasure.UnitOfMeasureClass == ecoResDomainUnitOfMeasure.UnitOfMeasureClass
            {
                floatUnitOfMeasureComboBox.add(tblUnitOfMeasure.Symbol);
            }
            if (floatUnitOfMeasureComboBox.count() > 0)
            {
                floatUnitOfMeasureComboBox.selection(0);
            }

            if (ecoResValueLower_EcoResFloatValue.RecId &&
                ecoResValueLower_EcoResFloatValue.FloatUnitOfMeasure)
            {
                // Set the unit of measure selection
                tblUnitOfMeasure = UnitOfMeasure::find(ecoResValueLower_EcoResFloatValue.FloatUnitOfMeasure);
                floatUnitOfMeasureComboBox.selectText(tblUnitOfMeasure.Symbol);
            }
            else if (ecoResDomainUnitOfMeasure.DefaultUnitOfMeasure)
            {
                // Set the unit of measure selection
                tblUnitOfMeasure = UnitOfMeasure::find(ecoResDomainUnitOfMeasure.DefaultUnitOfMeasure);
                floatUnitOfMeasureComboBox.selectText(tblUnitOfMeasure.Symbol);

                // Set the unit of measure foreign keys
                if (ecoResValueLower_EcoResFloatValue.RecId)
                {
                    ecoResValueLower_EcoResFloatValue.FloatUnitOfMeasure = tblUnitOfMeasure.RecId;
                }
                if (ecoResValueUpper_EcoResFloatValue.RecId)
                {
                    ecoResValueUpper_EcoResFloatValue.FloatUnitOfMeasure = tblUnitOfMeasure.RecId;
                }
            }
            else if (floatUnitOfMeasureComboBox.count() > 0)
            {
                // Set the unit of measure foreign keys
                if (ecoResValueLower_EcoResFloatValue.RecId)
                {
                    ecoResValueLower_EcoResFloatValue.FloatUnitOfMeasure = UnitOfMeasure::findBySymbol(floatUnitOfMeasureComboBox.getText(floatUnitOfMeasureComboBox.selection())).RecId;
                }
                if (ecoResValueUpper_EcoResIntValue.RecId)
                {
                    ecoResValueUpper_EcoResFloatValue.FloatUnitOfMeasure = UnitOfMeasure::findBySymbol(floatUnitOfMeasureComboBox.getText(floatUnitOfMeasureComboBox.selection())).RecId;
                }
            }
        }
        else
        {
            // Disable unit of measure combo boxes
            if (intUnitOfMeasureComboBox.visible())
            {
                intUnitOfMeasureComboBox.visible(false);
            }

            if (floatUnitOfMeasureComboBox.visible())
            {
                floatUnitOfMeasureComboBox.visible(false);
            }
        }
    }
    else
    {
        // Disable unit of measure group
        if (unitOfMeasureGroup.enabled())
        {
            unitOfMeasureGroup.enabled(false);
        }

        // Disable unit of measure combo boxes
        if (intUnitOfMeasureComboBox.visible())
        {
            intUnitOfMeasureComboBox.visible(false);
        }

        if (floatUnitOfMeasureComboBox.visible())
        {
            floatUnitOfMeasureComboBox.visible(false);
        }
    }
}
Если мне кто-то объяснит, что делает этот метод, дам +
Старый 14.01.2011, 14:32   #20  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
как правильно заметил TasmanianDevil основная идея - "закрыть на редактирование 7 полей независимо от других", а вот открытие всех остальных полей - явная "фича" метода, с которой придется бороться, если вам понадобится закрыть "свои" поля при других условиях.
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

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