Странно как то делаю по инструкции которая описана тут для 7,10
Создание детали с редактируемым реестром
и не работает деталь, не отображается и в консоли нет ошибок.

В 7,9 делал аналогично и работало....на что обратить внимание?

Нравится

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

Здравствуйте, Марат!

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

В случае, если данная рекомендация не решит Вашей проблемы, пожалуйста, напишите письмо с детальным описанние проблемы в службу поддержки - support@terrasoft.ru

Андрей. в моем случае.
1. Создаю объект
2. Создаю деталь
3. Добавляю деталь через мастер раздела
4. Проверяю, появление детали, настраиваю колонки
5. Меняю код в детали который указан в инструкции
6. Детали нет в отображении раздела, а через мастер раздела она показывается и настроить можно.

в тех.поддержке мой тикет забрили т.к. я не разработчик

"Юсупов Марат" написал: Детали нет в отображении раздела

Деталь должна быть в карточке. В консоли тоже нет ошибок?

В консоли пусто по ошибкам.

Должно работать, попробуйте все еще раз почистить, перезапустить, итд. Редис, Кеш. Посмотрите в крайнем случае как сделаны базовые детали с ред. реесстром, может где-то опечатались. Если не поможет, попробуйте еще раз. Сделайте в соседнем разделе, тестовую деталь с ред. реестром. Без ошибок, без доступа к сайту, сложно что либо подсказать.

Коллеги, добрый день!
Та же проблема в 7.10
Пытаюсь создать деталь с редактируемым реестром на карточке ConfItem, по аналогии с деталью ServiceEngineer на ServiceItem.
Деталь видна только в мастере раздела ConfItem, а в отображении пусто.

Схема детали:

define("UsrServiceEngineerCiDetail", ["terrasoft", "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
	function(Terrasoft) {
		return {
			entitySchemaName: "UsrServiceEngineerCI",
			attributes: {
				"IsEditable": {
					"dataValueType": Terrasoft.DataValueType.BOOLEAN,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": true
				}
			},
			mixins: {
				ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities",
				OrderUtilities: "Terrasoft.OrderUtilities"
			},
			messages: {},
			methods: {},
			diff: [
				{
					"operation": "merge",
					"name": "DataGrid",
					"values": {
						"className": "Terrasoft.ConfigurationGrid",
						"generator": "ConfigurationGridGenerator.generatePartial",
						"generateControlsConfig": {"bindTo": "generateActiveRowControlsConfig"},
						"changeRow": {"bindTo": "changeRow"},
						"unSelectRow": {"bindTo": "unSelectRow"},
						"onGridClick": {"bindTo": "onGridClick"},
						"initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
						"activeRowActions": [
							{
								"className": "Terrasoft.Button",
								"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								"tag": "save",
								"markerValue": "save",
								"imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
							},
							{
								"className": "Terrasoft.Button",
								"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								"tag": "cancel",
								"markerValue": "cancel",
								"imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
							},
							{
								"className": "Terrasoft.Button",
								"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								"tag": "remove",
								"markerValue": "remove",
								"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
							}
						],
						"listedZebra": true,
						"activeRowAction": {"bindTo": "onActiveRowAction"},
						"multiSelect": false
					}
				}
			]
		};
	});

Схема ConfItemPage:

define("ConfItemPage", [], function() {
	return {
		entitySchemaName: "ConfItem",
		details: /**SCHEMA_DETAILS*/{
			"UsrServiceEngineerCiDetail": {
					"schemaName": "UsrServiceEngineerCiDetail",
					"entitySchemaName": "UsrServiceEngineerCI",
					"filter": {
						"detailColumn": "UsrConfItem",
						"masterColumn": "Id"
					}
				}
		}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
	{
					"operation": "insert",
					"name": "UsrServiceEngineerCiDetail",
					"values": {
						//"itemType": this.Terrasoft.ViewItemType.DETAIL
						"itemType": 2,
						"markerValue": "added-detail"
					},
					"parentName": "GeneralInfoTab",
					"propertyName": "items",
					"index": 4
				}
]/**SCHEMA_DIFF*/,
		methods: {},
		rules: {},
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
	};
});

Бакалов Павел очистите кэш. Иногда бывает что не отображается изза старых данных.
И еще момент смотрите в консоли ошибки.

Кэш и редис чистил - не помогает.

Напишите письмо с детальным описанние проблемы в службу поддержки - support@terrasoft.ru и предоставлением доступа к сайту. Пускай посмотрят на деталь по факту, дальше гадать что могло пойти не так на форуме сложно.

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

В примерах из документации для версии 7.10 для при создании схемы представления детали с полями в качестве базового объекта нужно указать Base fields detail ( BaseFinance ). Какой объект должен быть указан базовым в версии 7.9.1.3284?

Нравится

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

Вообще пользуйтесь мастерами деталей для создания детали, это намного проще.
https://academy.terrasoft.ru/documents/marketing/7-8/master-detaley
Для того что бы создать деталь мастером детали, предварительно нужно только в конфигурации создать объект на основании "base object".
Мастер создаст и схему детали, и схему страницы детали самостоятельно, а в созданных схемах уже и посмотрите от кого они наследуются.

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

"Максим Шевченко" написал:

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


Большое спасибо за подсказку!

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

На странице есть виртуальная колонка 'Project', а на детали есть кнопка, набор данных которой должен фильтроваться в зависимости от значения, установленного в поле 'Project'.
Каким образом возможно реализовать такую функциональность?
Для наглядности прикрепила скриншот.

Нравится

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

В bpm'online есть возможность выгрузки данных раздела в файл MS Excel для дальшейшего анализа данных.Но, к сожалению, для деталей такой возможности нет, хотя на самом деле её реализация совсем не трудоемкая и теоретически можно реализовать самостоятельно во всех нужных местах дублируя "кусочек кода". Есть предложение добавить это "кусочек кода" в базовую схему реестра детали.

1 комментарий

Добрый день, Алла!

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

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

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

В лиде есть деталь. Деталь стандартная, при нажатии на "+" открывается карточка создания.
задача состоит в том, чтобы из детали можно было открыть карточку редактирования по ссылке,а не через выбор пункта "изменить". например, как сделано с деталью Контакты в контрагенте. Делаю по аналогии, но у меня не работает. также в детали выведено поле UsrName и при клике на него нужно открыть объект UsrStructure.

есть особенность -объект детали был создан через конфигурацию,а не через мастер разделов. но у него есть страница редактирования,которая настраивается через деталь.

пробовала и через linkClicked и через on[ColumnName]LinkClick. первый вообще не вызывается. Второй тоже, но для него я знаю почему - так как в Terrasoft.configuration.ModuleStructure нет моей сущности.
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

подскажите, пожалуйста, как я могу реализовать эту задачу?

Нравится

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

"Zaitova Liubov" написал:подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали

"Варфоломеев Данила" написал:
Zaitova Liubov пишет:

подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали


я рассматривала метод addColumnLink. в нем есть следующая строка
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
но моей сущности нет в этой коллекции Terrasoft.configuration.ModuleStructure, потому что я создавала ее через конфигурацию,а не через мастер.

"Zaitova Liubov" написал:var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

Шаг 1: Нафиг выкинуть все методы террасофта
Шаг 2: Костыли. Я к примеру хочу в детали адрес контрагента лепить ссылку на поле "адрес":

addColumnLink: function(item, column) {
	var columnPath = column.columnPath;
	var onColumnLinkClickName = "on" + columnPath + "LinkClick";
	var profileColumns = this.getProfileColumns();
	var profileColumn = profileColumns[columnPath];
	var isProfiledLinkColumn =
		profileColumn && (profileColumn.type === Terrasoft.GridCellType.LINK);
	var isLinkColumn = this.getIsLinkColumn(this.getGridEntitySchema(), column);
	if ((isProfiledLinkColumn || isLinkColumn) && !this.getIsEditable()) {
		var referenceSchemaName = column.referenceSchemaName;
		var schemaConfig = Terrasoft.configuration.ModuleStructure[referenceSchemaName];
		var scope = this;
		if (column.isLookup && schemaConfig) {
			item[onColumnLinkClickName] = function() {
				var record = this.get(columnPath);
				if (!record) {
					return "";
				}
				var recordId = record.value;
				if (!recordId) {
					return "";
				}
				return scope.createLink.call(this, referenceSchemaName, columnPath,
					record.displayValue, recordId);
			};
		} else {
			var columnIdName = item.primaryColumnName;
			var entitySchemaName = this.getGridEntitySchemaName();
			var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
			if (entitySchemaConfig) {
				item[onColumnLinkClickName] = function() {
					var recordId = this.get(columnIdName);
					if (!recordId) {
						return "";
					}
					var displayValue = this.get(columnPath);
					if (scope.Ext.isEmpty(displayValue)) {
						return "";
					}
					var link =
						LinkColumnHelper.createLink(entitySchemaName, columnPath, displayValue, recordId);
					return link || scope.createLink.call(this, entitySchemaName, columnPath,
						displayValue, recordId);
				};
			}
		}
	}
	/**КОСТЫЛИ**/
	if (columnPath === "Address") {
		var scope = this;
		var columnIdName = item.primaryColumnName;
		var entitySchemaName = this.getGridEntitySchemaName();
		item[onColumnLinkClickName] = function() {
			var recordId = item.get("Id");
			if (!recordId) {
				return "";
			}
			var displayValue = item.get("Address");
			if (scope.Ext.isEmpty(displayValue)) {
				return "";
			}
 
			var editPageName ="AccountAddressPageV2";
			var link = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#CardModuleV2/"+editPageName+"/edit/"+recordId;
			return {
				caption: displayValue,
				target: "_self",
				title: displayValue,
				url: link
			};
		};
	}
	if (Ext.isEmpty(item[onColumnLinkClickName])) {
		item[onColumnLinkClickName] = function() {
			return (item.getLinkColumnConfig ? item.getLinkColumnConfig(column) : null);
		};
	}

Шаг 3: Вставить в methods детали.
Результат:
зшс

В чём проблема, то?:smile:

"Варфоломеев Данила" написал:В чём проблема, то?


видимо, во мне) большое спасибо, все работает!

В дополнение, у меня возникла проблема возврата в ту вкладку, из которой вызывалась страница. В addColumnLink сформировал ссылку. Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй. Те же ссылки стандартные, например, "Контрагент" переходят и возвращаются корректно. Что упустил - понять не могу.

"Лапшин Павел Александрович" написал:Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй.

Надо разбираться с HistoryState и браузерной строкой. Иногда при переходе по страницам bpm-ка не меняет путь и вот фиг знает, если честно, как система отреагирует на закрытие карточек(PushBackHistoryState событие). Надо тестить)

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

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

Как можно на детали с реестром добавить кликабельную картинку, которая подгружается по внешнему URL(хранящемся в поле объекта детали), при клике на которую, она бы загружается в полном размере?

Версия sales enterprise 7.9.1.3284

Нравится

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

Здравствуйте, таких базовых средств в bpm'online нет, но, обладая навыками разработчика вы можете попробовать сделать это самостоятельно.
Вот это может вам пригодится как пример:
https://www.w3schools.com/howto/howto_css_modal_images.asp
И если вы захотите сделать это как собственный контрол, то, вот эта инструкция так же будет полезной: svoy_kontrol__generator__diff.doc

Крапивницкий Николай,

Добрый день! Получилось реализовать задачу? 

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

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

Возникла проблема с деталями.

  1. Создала 2 объекта через конфигурацию, наследованные от базового объекта.
  2. а) Внешний объект с полем -ссылкой на Контакт
    b) Внутренний объект с полем ссылкой на Внешний объект

  3. Создала 2 детали. Внешняя деталь и внутренняя деталь.
  4. Добавила внешнюю деталь на страницу Контакта
  5. Добавила внутреннюю деталь на страницу Внешней детали

Когда из страницы Контакта нажимаем + и создаем внешний объект, то все работает корректно, ссылка на контакт прописывается. Когда дальше из внешнего объекта нажимаем на + и создаем внутренний, то поле - ссылка не заполняется и появляется ошибка.

"NullOrEmptyException"
"У схемы "ICLOuterEntity" не указана первичная отображаемая колонка"
Также показалось странным, что у обеих созданных сущностей(внешний объект и внутренний объект) папка Inherited Columns пустая, хотя в БД все стандартные колонки есть(дата создания. создал и пр) и при настройке страницы мастером разделов их можно вывести на форму .

В чем может быть дело?

Версия 7.10.0.1742

Нравится

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

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

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

Насчет того, что в Inherited Columns не отображаются системные колонки дата создания, создал и прочее, - это нормально, если Вы наследовались от Base Object.
А, если сделать наследника от Вашей схемы, тогда системные колонки уже в наследнике появятся)

Добрый день, Любовь!

Для того, чтобы увидеть InheretedColumns, необходимо в настройках объекта нажать галочку Показывать системные колонки - ведь у базовой сущности все колонки системные.
Ошибка же прямо указывается на источник проблемы. Первичная для отображения колонка - это та, которую видно в реестре или при выборе из объекта из справочника, например, имя у контакта или номер у счета:

Илья,

в дополнение: группу полей, в которых указаны системные колонки, на мой взгляд, логичнее переименовать на "Системные колонки" вместо "Исторические колонки" :wink:

В английской версии аналогично.

"Алла Савельева" написал:

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

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

Насчет того, что в Inherited Columns не отображаются системные колонки дата создания, создал и прочее, - это нормально, если Вы наследовались от Base Object.

А, если сделать наследника от Вашей схемы, тогда системные колонки уже в наследнике появятся)

Life is better than you think :-)

Большое спасибо! и правда, не была указана колонка, так как я и не знала про это свойство. Раз оно такое важное, может стоит его выносить в блок основных свойств?

"Мотков Илья" написал:

Добрый день, Любовь!

Для того, чтобы увидеть InheretedColumns, необходимо в настройках объекта нажать галочку Показывать системные колонки - ведь у базовой сущности все колонки системные.

Ошибка же прямо указывается на источник проблемы. Первичная для отображения колонка - это та, которую видно в реестре или при выборе из объекта из справочника, например, имя у контакта или номер у счета:

Прикрепленный файлРазмер

111.png
245.68 кб


Спасибо!

"Zaitova Liubov" написал:Большое спасибо! и правда, не была указана колонка, так как я и не знала про это свойство. Раз оно такое важное, может стоит его выносить в блок основных свойств?

Действительно, в большинстве случаев значение данного поля должно быть установлено.

Насчет вынесения в блок основных свойств - это вопрос к разработчикам платформы.

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

Добрый день, необходимо переименовать, удалить некоторые поля из детали "Связи" на странице активности:

Но при редактировании этой детали в мастере деталей ничего не отображается:

Подскажите пожалуйста, как можно реализовать данную задачу?

Нравится

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

Данные связи можно удалить только разработчику запросом в бд вроде этого:

DELETE FROM EntityConnection WHERE SysEntitySchemaUId = 'c449d832-a4cc-4b01-b9d5-8a12c42a9f89'
AND (ColumnUId = 'd6e94162-4354-413a-bc84-e118df5e852e'
OR ColumnUId = 'f6137557-741e-42f8-8bf6-69b2524a83f7')

где SysEntitySchemaUId это UId из SysSchema схемы объекта активности, а d6e94162-4354-413a-bc84-e118df5e852e её колонки UId которых можно прочитать в метаданных того же самого объекта активности.

Спасибо за помощь, подскажите, пожалуйста, где хранятся названия колонок, чтобы их переименовать по ColumnUId ? :smile:

Определить UID колонки можно в метаданных объекта Activity. Альтернатива - запрос к таблице SysEntitySchemaReference.

Спасибо, колонки успешно удалились, ColumnCaption изменили в SysEntitySchemaReference, но на странице активности название колонки отображается старое, кэш чистили, в чем может быть проблема?

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

Колонки в деталь "Связи" загружаются методом generateEntityConnectionButtonConfig() (схема EntityConnectionLinksUtilities).

Можно провести отладку этого метода, чтобы определить откуда ноги растут:smile:

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

Хотелось бы реализовать такую деталь, которая будет отображать некоторый набор информации, без возможности взаимодействия (создания/удаления), просто демонстрация данных, причем не хочется раздувать базу создавая под это дело реестрище.
Хочется при инициализации детали - сделать запрос, получить данные из которых сформировать несколько записей и отобразить их в этой детали, это возможно ?
Как бы виртуальные, динамические записи реестра в детали...
Просто предыдущий опыт показывает что добавление записей в реестр детали - напрямую связано с записью в БД, некий объект-реестр. Как собственно и первичное ее отображение связано с чтением из БД объекта-реестра.

Нравится

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

Добрый день, Илья!

К сожалению, реализовать такую деталь Вы не сможете, так как в любом случае деталь завязана на какой-то объект, то есть на таблицу в БД. Рекомендую посмотреть в сторону детали Средства связи контакта, она формируется динамически, возможно это поможет решить Вашу бизнес-задачу.

"Севостьянов Илья Сергеевич" написал:отобразить их в этой детали, это возможно ?

Создать коллекцию, в коллекцию ложить данные (каждая строка - baseviewmodel), выбранные esq запросом, всю коллекцию биндить в ContainerList, написать ручками генератор ряда, натянуть стили.
Не Grid, конечно, но тоже сойдёт

Добрый день, Илья! Получилось ли у вас это выполнить?

Добрый день. Что Вы имеете в виду, получилось ли посмотреть на деталь средств связи? Вы сами можете это сделать, это схемы BaseCommunicationDetail, AccountCommunicationDetail или ContactCommunicationDetail. 

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

Как  вариант, можно использовать обычную деталь, но использующую объект на основе view. Запрос в базу будет, но данные не хранятся в одной конкретной таблице, а берутся из нескольких или вычисляются. Можно, наверно, и к веб-сервису обратиться из скриптов на стороне сервера MS SQL.

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

Добрый день.
Подскажите как на кнопку детали свой метод сделать.
Смотрел деталь "график поставок" нашел как добавить свою кнопку...но как убрать стандартную?

Нравится

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

"Юсупов Марат" написал:Подскажите как на кнопку детали свой метод сделать.

переопределить метод addRecord
"Юсупов Марат" написал:но как убрать стандартную?

в диффе remove->addRecordButton

"Варфоломеев Данила" написал:Юсупов Марат пишет:

но как убрать стандартную?

в диффе remove->addRecordButton

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

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления записи

Юзкейз интересный, если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.
От себя могу предложить "костыль" в виде:
замещаем стандартный AddRecord метод, в котором перед родительской логикой (callParent)
делаем openLookup (открываем окно выбора) наполняя его само собой своей коллекцией вариантов,
ну а далее в коллбеке реагируем, в каких-то случаях идем по callParent варианту, в каих-то по своему кастомному. Вот...

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления записи

Юзкейз интересный, если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.
От себя могу предложить "костыль" в виде:
замещаем стандартный AddRecord метод, в котором перед родительской логикой (callParent)
делаем openLookup (открываем окно выбора) наполняя его само собой своей коллекцией вариантов,
ну а далее в коллбеке реагируем, в каких-то случаях идем по callParent варианту, в каих-то по своему кастомному. Вот...

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления

"Севостьянов Илья Сергеевич" написал:если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.

А в чём сложность-то? По кофигурации полно примеров.

{
	"operation": "merge",
	"name": "AddRecordButton",
	"values": {
		"click": Terrasoft.emptyFn, //перетираем стандартный обработчик клика
		"menu": {
			"items": [
				{
					"caption": "Нафига",
					"tag": "why",
					"click": {"bindTo": "onMyFuncClick"}
				},
				{
					"caption": "козе",
					"tag": "goat",
					"click": {"bindTo": "onMyFuncClick"}
				},
				{
					"caption": "баян?",
					"tag": "needs accordion",
					"click": {"bindTo": "onMyFuncClick"}
				}
			]
		}
	}
}

ну и дальше как угодно:
или биндим на каждый пункт свою функцию,
или делаем одну, отлавливаем tag через arguments,
или вообще items биндим на коллекцию и генерим её как делает террасофт с toolsMenu (+можно ещё присобачить bindConfig).
pic

"Варфоломеев Данила" написал:А в чём сложность-то? По конфигурации полно примеров.

Ну я просто не сталкивался с реализацией в UI, по этому не мог строить дедуктивное предположение о том, что это, где-то там есть, фактически я не знал что искать :) потому и не искал.
Спасибо, за пример - пригодиться.

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