Добрый день. 

Есть необходимость добавить пользовательское поле на одну из карточек, но данный вид карточке отсутствует в списке. К примеру есть еще продукт в счетах, но в данном списке он отсутствует. Как его можно добавить? Изображение удалено.

Нравится

8 комментариев

Уточните к какой версии относится ваш вопрос, я смутно догадываюсь что это 3.х?

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

Чем настраивать его для карточки детали, проще добавить обычное поле посредством TSAdmin или установив утилиту  FieldMaker.

Григорий Чех, она самая.

версия 3.4 

Григорий Чех пишет:

Уточните к какой версии относится ваш вопрос, я смутно догадываюсь что это 3.х?

спасибо, буду пробовать. 

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

// Подтягиваем Поставщика и Производителя

          var ProizvDataset = Services.GetNewItemByUSI('ds_Offering');

        ApplyDatasetFilter(ProizvDataset, 'ID', Dataset('OfferingID'), true);

        ProizvDataset.Open();

        var A =  ProizvDataset.Values('VendorID');

        var B =  ProizvDataset.Values('SupplierID');

        ///////////////-------------------------------------------

        var V = ProizvDataset.Values('vedID');  /////// ved

        ///////////////-------------------------------------------

        ProizvDataset.Close();

        

        var Proizv = Services.GetNewItemByUSI('ds_OfferingAlternativeCode');

        ApplyDatasetFilter(Proizv, 'OfferingID', Dataset('OfferingID'), true);

        Proizv.Open();

        var C =  Proizv.Values('PriceWithNDS');

        Proizv.Close();

        

        dlData.Dataset('ManufactorID') = A;

        dlData.Dataset('SupplierID') = B;

        dlData.Dataset('priceIn') = C;

         ///////////////-------------------------------------------

        dlData.Dataset('vedID') = V;     /////// ved

        ///////////////-------------------------------------------

Если это только с новым полем, которое вчера добавили, то могли что-то не учесть при добавлении в сервисы tbl, sq и ds.

А вообще, для чтения значения поля по ID записи есть готовая функция:

var AccountID = GetDatasetFieldValueByID('ds_Contact', ContactID, 'AccountID');

 

я не совсем понимаю механизм работы текущей карточки. dlData данной карточки не связан ни с одним ds сервисом. Но те заголовки которые есть в карточки по умолчанию они подтягиваются с нужной таблицы, а вот если добавить новое поле на карточку, при этом я создаю поля и в tbl, ds, sq, то в это новое поле ни заголовки не подтягиваются с tbl, та и даже просто записать туда любое значение не получается. так как по сути программа не понимает куда ей записать эти данные. как тогда остальные понимают куда записывать?

Сложно сказать, не зная, о какой карточке речь и не видя её кода. Может, для неё поля заполняются чисто программно, без датасета. Смотрите в скрипте карточки, как там реализовано.

Показать все комментарии

Перекопал все скрипты в террасофте, и Grep Search использовал, но так толком ничего и не нашел, с обычными полями понятно xxxControl.Caption = 'yyyy'; или xxxControl.DataField.Caption = 'yyyy';
А как можно обратиться подобным образом к пользовательскому полю и изменить его заголовок?

(P.S. Заменить пользовательские поля на фиксированные не предлагать, в моем случае нужно изменить именно пользовательское поле, и изменять динамически в зависимости от условий)

Нравится

2 комментария

Навскидку такой скрипт.

//пробежим по всем элементам окна
for(var i=0;i<Self.ComponentCount; ++i) {
    if (Self.Components(i).DataFieldName == 'INN') { //находим, нужное поле/поля (например по названию поля датасета, который привязан)
        Self.Components(i).Caption = 'Что-то другое';//ставим caption 
    }
}

Не проверял, не уверен, но быть может поможет.

"Сазанов Александр Владимирович" написал:

Навскидку такой скрипт.

//пробежим по всем элементам окна

for(var i=0;i<Self.ComponentCount; ++i) {

    if (Self.Components(i).DataFieldName == 'INN') { //находим, нужное поле/поля (например по названию поля датасета, который привязан)

        Self.Components(i).Caption = 'Что-то другое';//ставим caption

    }

}

Не проверял, не уверен, но быть может поможет.


Большое спасибо! Действительно работает, даже не догадался что можно просто перебрать все элементы окна)

Показать все комментарии
Наличие функции пользовательских полей в клиенте ставит под удар работу разработчиков. Реализация создания пользовательского поля не должна отличаться от возможностей разработчика. Динамическое появление контролов на форме, к которым непонятно как обращаться сомнительно(через дасет не в счет).
13 комментариев

не совсем согласна...
Мастер ускоряет создание поля как минимум в 2 раза (поле-справочника особенно). а контролы можно и вручную потом добавить на форму (главное не указывать типы записей) и прописать для них логику "появления" отдельно.
и даже если создано через мастер -- вот тут описано, как обращаться к таким полям.

"Ольга Прилипко" написал:Мастер ускоряет создание поля как минимум в 2 раза (поле-справочника особенно). а контролы можно и вручную потом добавить на форму

А можно сразу использовать FieldMaker.

Совсем не согласен)

Как пользовательские поля ставят под удар работу разработчиков?

Как пользовательские поля можно переносить в админку? Они созданы для того, чтобы пользователи могли простым и понятным способом создать себе поля. Это очень удобно тем, кто показывает демо-версии, и тем у кого отличия от базовой версии ограничиваются набором полей.
Опять же для того, чтобы изменять пользовательские поля нужны права администратора - а это должен быть человек ответственный, а не все подряд.

"Ольга Прилипко" написал:

не совсем согласна...

Мастер ускоряет создание поля как минимум в 2 раза (поле-справочника особенно). а контролы можно и вручную потом добавить на форму (главное не указывать типы записей) и прописать для них логику "появления" отдельно.

и даже если создано через мастер -- вот тут описано, как обращаться к таким полям.


1)Я всеми руками за мастер, но нормальный мастер и в нужном месте...
2)При создание пакета обновлений разработчик не должен переживать, что кто то создал новое поле... Источник обновлений должен быть в одном месте, если их несколько то это не должно приводить к фатальным последствиям.
3)Все таки можно дотянуться до контролов от пользовательских полей - это хорошо, но все равно крайне неудобно.

"Андросов Дмитрий" написал:

Совсем не согласен)

Как пользовательские поля ставят под удар работу разработчиков?

Как пользовательские поля можно переносить в админку? Они созданы для того, чтобы пользователи могли простым и понятным способом создать себе поля. Это очень удобно тем, кто показывает демо-версии, и тем у кого отличия от базовой версии ограничиваются набором полей.

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


1)У вас пакет обновлений с новым полем - нужно обновить таблицу, сервис sq_, dataset, имеем полную несовместимость с пользовательскими полями. И у меня до сих пор весит вропрос, какие точно сервисы меняються при создание пользовательского поля - как я могу быть уверен, что я не сломаю очередным апдейтом пользовательское поле?

"Борисов Михаил Евгеньевич" написал:разработчик не должен переживать, что кто то создал новое поле

так он и не должен - пусть переживает тот, кто это поле делает

"Борисов Михаил Евгеньевич" написал:как я могу быть уверен, что я не сломаю очередным апдейтом пользовательское поле?

если кто-то еще кроме вас может создавать поля (не важно пользовательские или нет), то согласовывать имена полей нужно обязательно

"Андросов Дмитрий" написал:если кто-то еще кроме вас может создавать поля (не важно пользовательские или нет), то согласовывать имена полей нужно обязательно

Оно сломается независимо от названия. Просто в обновлённых сервисах такого поля не будет. Поможет разве что выгрузка обоих в XML и merge вручную.

"Андросов Дмитрий" написал:
Борисов Михаил Евгеньевич пишет:

как я могу быть уверен, что я не сломаю очередным апдейтом пользовательское поле?

если кто-то еще кроме вас может создавать поля (не важно пользовательские или нет), то согласовывать имена полей нужно обязательно


Ну если без согласования, этим все равно не могут пользоваться и после согласования создает разработчику проблемы, то почему эту функцию не переместить в разработку?

"Зверев Александр" написал:Оно сломается независимо от названия. Просто в обновлённых сервисах такого поля не будет. Поможет разве что выгрузка обоих в XML и merge вручную.

Да, вы правы, но как принцип это нужно. Тогда можно хотя бы сделать merge без проблем.

"Борисов Михаил Евгеньевич" написал:почему эту функцию не переместить в разработку

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

если вам не нужен на данном этапе функционал ПП и вы боитесь конфликтов - просто скройте это действие в wnd_Main

"Андросов Дмитрий" написал:потому что удобно должно быть в первую очередь пользователю

Когда у сотен пользователей появиться возможно спонтанно по своему мнению подкидывать поля с произвольным именованием, флагом обязательности на формы - начнеться апокалипсис. -)

задублировалось

"Борисов Михаил Евгеньевич" написал:
Когда у сотен пользователей появиться возможно спонтанно по своему мнению подкидывать поля с произвольным именованием, флагом обязательности на формы - начнеться апокалипсис. -)

Это могут только пользователи с правами администратора.

Показать все комментарии

Здравствуйте.

Пока велась доработка в системе появилось новое пользовательское поле. После наката обновлений поле перестало работать(как минимум код формы был потерт и информация о пользовательском контроле потеряна). В тестовой среде было создано поле с таким же именем. Выгружены все сервисы содержащие слово Incident за исключением сервиса tbl_Incident. Произведен повторный накат на продуктив. Поле заработало, но доступ к нему есть не у всех. Вопрос:
1) Можно ли узнать список всех сервисов которые изменяються при создание нового пользовательсокго поля?
2) Как вести разработку если переодически появляються новые пользовательские поля? Только между измененим пользовательских полей можно копировать сервисы, изменять и возращать обратно?

С уважением. Михаил.

Нравится

7 комментариев

Борис, отвечаю на вопросы:
1. Сервисы, которые изменяются при создании поля: таблица ( tbl_Incident), запрос ( sq_Incident), датасет ( ds_Incident), карточка редактирования (wnd_IncidentEdit) и реестр записей (wnd_IncidentsGridArea).
2.

"Борисов Михаил Евгеньевич" написал:Только между измененим пользовательских полей можно копировать сервисы, изменять и возращать обратно?

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

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

Импортировал перечисленные сервисы:
tbl_
sq_
ds_
wnd_
поле даже не появилось. Трасировка показывает, что добавление пользовательского поля вызывает изменение таблицы сервисов, свойств сервисов, выставление grant может еще что то происходит, лог огромный.

"Бондарь Наталия" написал:карточка редактирования (wnd_IncidentEdit)

ой ли?

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

"Андросов Дмитрий" написал:
Бондарь Наталия пишет:

карточка редактирования (wnd_IncidentEdit)

ой ли?

мне тоже интересно, где хранится коллекция пользовательских полей? в поле tbl_Service.XMLData для записей сервисов uf_?


Ну отчасти верю, там вроде появляеться пустой блок fgUserFields. А вот содержимое наверняка тащиться из tbl_Service и вот ещё узнать каким кодом это выполняеться, подозреваю что ядро террасофт - не нашел как можно программно манипулировать контролами сгенерированными по пользовательским полям, только через DataSet.

Внесу небольшие корректировки: при добавлении пользовательских полей изменения вносятся в сервис таблицы, запроса, датасета и сервис пользовательских полей (uf_).
Окно карточки редактирования заполняется полями (поля помещаются динамически в группу фреймов fgUserFields) на основании содержимого сервиса uf_.
Логику наполнения сервисов при добавлении пользовательского поля выполняет ядро.

но где же все-таки сохраняется коллекция полей? неужели в записи для uf_ в tbl_Service?

Коллекция полей сохраняется в uf_ (можете посмотреть выгрузив сервис и открыв выгруженный xml файл на просмотр с помощью текстового документа).

Показать все комментарии

Как переносяться обновления с базы на базу сделанные через клинет(шаблоны сообщений, настройка пользовательских полей)?

SRM 3.x Service Desk (БД: MSSQL)

Нравится

6 комментариев

Какая БД, MSSQL или Oracle?

"Зверев Александр" написал:

Какая БД, MSSQL или Oracle?


MSSQL

С шаблонами сообщений можно вытянуть содержимое записей в таблице шаблонов утилитой SQL Script Generator, а затем написать insert или update вроде:

update [tbl_MailTemplateContent] set [Template] = 0x[много букв и цифр]
where [ID] = 'e41bd028-135e-4601-a5c0-c778868f633d';

Михаил, приветствую!

"Борисов Михаил Евгеньевич" написал:Как переносяться обновления

Этот вопрос можно разделить на два понятия:
1. Перенос доработок самой базы данных
2. Перенос данных из одной базы в другую

"Борисов Михаил Евгеньевич" написал:настройка пользовательских полей
- это как раз перенос настроек как БД, так и сервисов (выполняется в TS Admin.exe и с помощью SQL-скриптов);

"Борисов Михаил Евгеньевич" написал:шаблоны сообщений
- исключитеьно информация в БД (переносится с помощью SQL-скриптов).

Тут нужно понимать, какая задача перед Вами стоит? Если необходимо переход на новую версию, то в таком случае, мы предлагаем выполнять это с помощью специальных пакетов перехода, котрые мы подготовливаем на основании Вашей БД.

Подробную информацию и реализации и стоимости вы можете узнать у вашего ответственного менеджера.

Михаил, посмотрите также наше расширение, возможно окажется полезным:
PVC

Спасибо за ответы. Для себя вынес следующее:
1) Изменение из клиента может изменить сервис. Если не понятно есть оно или нет, собрать пакет и посмотреть разницу с эталном по сервисам.
2) Механизмов переноса данных БД по интересующим разделам нет. Если интересуют например шаблоны, открыть БД и написать скрипты перегрузки по этой части.
3) PVC полезно для поднятого вопроса в части:
выгрузка релизов проекта в виде файлов или пакета обновления (включая как сервисы системы, так и данные справочников и других таблиц);

Показать все комментарии

Здравствуйте.
Вопрос возник следующий: у меня есть созданный вручную сервис пользовательских полей для раздела "Продукты в договоре". Сервис исправно работает, если я создаю карточку продукта вручную из раздела по кнопке "Добавить продукт".
Но если я заполняю данные в карточке средствами импорта из Excel, то пользовательские поля в карточке не отображаются. Где можно посмотреть-подкрутить данную проблему?
Спсаибо.

Нравится

7 комментариев

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

Я сделал поля для всех типов специально, чтобы тестировать. Но все работает только при "ручном" добавлении продукта. При заливке списком - все пропадает. Т.е. заливаю продукт в карточку нужного типа, но он как-будто не учитывается вовсе при открытии карточки. Т.е. поля не появились. Как бы отследить - где прпадают UserFields?

Алексей, проиллюстрируйте скриншотами выполненные Вами настройки импорта, попробую воспроизвести со своей стороны.

Наталия, я честно говоря не знаю как показать настройки скриншотами, потому что развернутые поля не влезают в экран, а в свернутом виде это бесполезно, как я понимаю :sad:

Я посмотрел содержимое tbl_OfferingInContract. Там все записи, вставленные из Excel, в поле ContractTypeID содержат вот такую строку:'????????'. Т.е. ничего не связалось со справочником типов договоров. Может в эту таблицу нужно добавить не только поле ContractTypeID, а еще и поле, содержащее сам тип в виде строки?

Здравствуйте!
Перепроверьте обратные наличие обратной связи tbl_OfferingInContract.ContractTypeID = tbl_ContractType.ID и постарайтесь выгрузить скрин-шоты, это облегчить понимание происходящего.

Спасибо, Сергей!
Действительно не хватало Relations на таблицу tbl_ContractType.
Создал - все заработало.
Еще раз спасибо всем за помощь.

Показать все комментарии

Всем добрый день.

У нас в работе системы есть следующая проблема. Возникла она не сегодня, но решение ее стало актуальным сейчас.

У нас установлена версия Террасофте 3.3.2.254.
При настройке системы в некоторых карточках были использованы пользовательские поля.
В Контрагентах, в Проектах все работает абсолютно нормально. При том, что в этих разделах создано много таких полей.
А вот в Продажах происходит следующее: открывается карточка, потом система задумывается, потом карточка расширяется , добавляются поля, после этого карточка "дрожит", мерцает.
Для того, чтобы она вышла из этого состояния необходимо на нее кликнуть и как бы перетянуть в другое место.
На моем рабочем месте это происходит не очень быстро, а вот на чуть более медленных компьютерах такое действие иногда надо еще и повторить.

Я удалила из карточки несколько пользовательских полей, которые там уже не нужны, но это не повлияло на особенности работы. Пробовала в Администраторе установить большие размеры для карточки, но в начале просто отражается большая карточка, а поля прорисовываются все равно позже, а карточка дрожит.
Видела вот этот старый пост на форуме https://community.terrasoft.ru/forum/topic/1439, из него следует, что в моей версии программы такого быть уже не должно.
Более того проблема не исчезала даже при установке другой сборки Террасофта.
В коде wnd_OpportunityEditScript функция GetNewItemByUSI не используется, хотя мы переходили из версии в версию, и могли перетянуть ее в нашу версию. Может быть в каком-то другом связанном скрипте эта функция и есть.

Такое дрожание очень сильно замедляет работу сотрудников, и просто "нервирует".
Хотелось бы понять что сделать , чтобы устранить проблему.
Вариант с удалением полей не подходит, поскольку они активно используются.

Нравится

4 комментария

Такое может быть, если в зависимости от типа те или иные компоненты делаются видимыми и скрытыми. Если проблема в этом, в коде скрипта карточки должна быть функция, которая это делает.
Примерно такая:

function ShowEditControlsDueToOpportunityType(OpportunityTypeID) {
	Self.BeginUpdate();
	...
	edtField1.IsVisible = (OpportunityTypeID == opType1);
	...	
	Self.EndUpdate();
}

Название и код у вас будут отличаться, но суть та же. В зависимости от типа определяется видимость.
Так вот, BeginUpdate и EndUpdate в начале и конце отключают мигание. Если в вашей функции их нет - надо добавить.

Если подобной функции нет - проблема в чём-то другом.

Такой функции увы нет. И ничего на нее похожего.
В карточке кроме пользовательских полей в зависимости от типа ничего не изменяется.
Собственно все пользовательские поля одинаковы для всех имеющихся типов, в том числе и для того, который заполняется по умолчанию.

Что интересно : вот если я подвину дрожащее окно, оно дрожать перестает. А потом , не заполняя ничего в этом окне Продажи, перейду, например в отладчик и тут же обратно, то оно снова дрожит!
Если его опять подвинуть, то перестает, и так до бесконечности.
При обычном переходе в другую программу создается какая-то активность, подскакивает нагрузка и фактически система висит до того момента, как окно будет подвинуто.
Или еще можно по реестру клацнуть, тогда дрожание прекращается тоже.
Может дело и не пользовательских полях совсем ?

Добрый день!

Виктория, исходя из Вашего описания, причина должна быть на уровне конфигурации.
Предлагаю сделать обезличенную копию базы данных и передать в support с указанием данной темы.
Мы проведем тестирование и посмотрим, в чем проблема.

Показать все комментарии

Здравствуйте.

В системе существует пользовательское поле Уровень лояльности (type_loyal, тип - справочник) для Контрагента.
Необходимо в скрипте при редактировании записи Контрагента обратиться к текущему значению этого поля в открытой еще не сохранненой карточке.
Подскажите, как правильно написать название поля, где уже заполнено это значение.
Пробовала написать edttype_loyal, но видимо это не правильно.

Нравится

4 комментария

Попробуйте так:

var Field = Self.ComponentsByName('dlData').Dataset.DataFields.
    ItemsByName('type_loyal');

Для какой цели Вы хотите обратиться к полю?

Можно даже немного проще, чем предложил Олег.
Если Вы находитесь в скрипте карточки редактирования, то получить доступ к содержимому пользовательского поля можно так (даталинк dlData доступен напрямую):

dlData.Dataset('UserFieldID')

где UserFieldID - это значение из поля "Имя в базе данных", которое Вы задавали при создании пользовательского поля. Соответственно полученное таким образом значение Вы можете использовать дальше так, как Вам необходимо.

"Кулак Олег" написал:Для какой цели Вы хотите обратиться к полю?

Цель - при изменении этого поля : сравнить старое значение этого поля и новое, и запустить необходимый для выполнения скрипт, если эти значения разные.

Для этого Вам нужно в сервисе Вашего окна wnd_*Edit на вкладке невизуальных компонентов для даталинка dlData определить обработчик события OnDataChange (или перейти на него если уже есть).
В скрипте вначале должен быть объявлен глобальный объект скрипта. Допустим, что он называется YourScriptObject. Будем сохранять старое значения поля в виде YourScriptObject.OldYourUserFieldValue.
В коде обработчика пропишите фрагмент

	if (DataField.Name = 'TestUserFieldID') {
		if (!IsEmptyValue(YourScriptObject.OldYourUserFieldValue) &&
		   YourScriptObject.OldYourUserFieldValue != DataField.Value) {
			//Ваши действия здесь
		}
		YourScriptObject.OldYourUserFieldValue = DataField.Value;
	}

который и будет реализовывать Вашу задачу.

Показать все комментарии

Возможно ли, каким-либо образом, создать пользовательское поле схожее с Memo?

Нравится

5 комментариев

Думаю вряд ли.

Скорее всего нет, так для этого не предусмотрен механизм отображения пользовательских полей на карточке.

В Вашем случае проще будет организовать похожий механизм. Создайте на карточке компонент Memo и скрывайте/показывайте его (соответственно нужно будет изменять размер карточки) при изменении поля Тип. Получается не очень гибко, но может решить Вашу задачу.

"Александр Кравчук" написал:Получается не очень гибко, но может решить Вашу задачу.

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

Без изменения ядра системы никак не получится такое сделать (создать пользовательское поле схожее с Memo), нужно в пользовательские поля добавлять новую функциональность по работе не только с обычными компонентами (TextDataControl, IntegerDataControl, FloatDataControl и т.д.), а еще и с MemoDataControl. Вероятней всего это будет дополнительная опция для пользовательских полей с типом "Строка".

Я приму во внимание Ваше пожелание и постараюсь реализовать в следующих версиях.

"Александр Кравчук" написал:Я приму во внимание Ваше пожелание и постараюсь реализовать в следующих версиях.

спс :twisted:

Показать все комментарии

В Terrasoft Training 3.2.0, по умолчанию отключено отображение пользовательских полей. Это связано с принципом разработки данного продукта.
Для отображения созданных пользователем полей необходимо:
Загрузить сервис uf_Accounts из любого продукта Terrasoft CRM, в котором не созданы пользовательские поля (например из базовой версии Terrasoft X25)
Затем в wnd_AccountEdit в группу элементов fgCompany добавьте элемент UserFieldsGroup.
Перезагрузите Terrasoft CRM.

Нравится

Поделиться

4 комментария

Здорово. Вот, допусти, есть у меня лицензия Training. Где мне взять базовую версию.
И разве не надо UserFieldsGroup привязать к uf_Accounts?

Для получения uf_Accounts Вы можете обратиться в службу технической поддержки.
Переписав данный сервис Вы очистите список пользовательских полей в карточке [Пользовательские поля], а также UserFieldsGroup не будет отображать поля созданные до этого. Данное действие необходимо, так как в случае с Terrasoft Taining удаление созданных разработчиками полей неприемлемо - будет нарушена базовая логика раздела.

Конечно, при создании UserFieldsGroup необходимо указать связь с uf_Accounts.
Связь с uf_Accounts указываеться в созданном UserFieldsGroup следующим образом:
- в свойстве [DatasetLink], созданного компонента, указываем dlData
- в свойстве [UserFelds], созданного компонента, выбираем uf_Accounts.

"Клименко Николай" написал:Для получения uf_Accounts Вы можете обратиться в службу технической поддержки.

Проще и быстрее создать такой сервис самому :) И не надо поддержку лишний раз дергать.

А зачем было исключать, если теперь можно включить?

Показать все комментарии