как связать отрасль и вид деятельности?

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

Нравится

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

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

Для этого выполните такую последовательность действий:

  1. Добавить новое поле в сервис таблицы tbl_Field с типом идентификатор, которое будет ссылаться на таблицу tbl_Activity
  2. Добавьте два поля на выборку в сервис sq_Field; 1 поле - поле которое добавили ранее и 2 поле - это выборка поля Name из таблицы tbl_Activit по новому добавленному полю
  3. Добавить лукапное поле в сервис датасета ds_Field

Чтобы не ошибиться, делайте по аналогии с таблицей tbl_Country.

Сделал все изменения в файлах tpl, sq и ds по аналогии с country и terrytory, но справочники не объединяются

Немного не понятно, что имеете ввиду под "справочники не объединяются".

Добавьте свой справочник редактирования наследуясь от базового окна редактирования wnd_BaseDBEdit. Как пример, можете взять окно редактирования wnd_CityEdit.

После этого, в разделе [Справочники] необходимо изменить свойство справочника [Отрасли]. Установить значение полю [Окно реестре] = 'wnd_FieldEdit'.

Если изменение свойств будет заблокировано, в токам случае, выполните sql скрипт:

UPDATE tbl_Dictionary SET EditWindowCode = 'wnd_FieldEdit' WHERE DatasetCode = 'ds_Field'

где wnd_FieldEdit - Ваше окно редактирования справочника

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

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

приведу пример на окне редактирования [Контрагенты].

  1. 1. Открываем окно редактирования wnd_AccountEdit
  2. 2. Переходим в событие dlDataOnDatasetDataChange, не визуального компонента dlData
  3. 3. В событии dlDataOnDatasetDataChange добавляем строчку кода var FieldValue = DataField.Value;. Должно получится, что-то виде такого:
    	var FieldName = DataField.Name;
    	var Dataset = DataField.ParentDataFields.ParentDataset;
    	var FieldValue = DataField.Value;
  4. 4. В конец функции дописываем код:
    	if (FieldName == 'FieldID') {
    		if (IsEmptyValue(FieldValue)) {
    			Dataset.DataFields('ActivityID').Value = null;
    		} else {
    			Dataset.DataFields('ActivityID').Value = 
    				GetFieldValueFromLookupDatasetByLookupField(DataField, 'ActivityID');
    		}	
    	}
  5. 5. Сохраняем сервис

В результате у Вас должна получится функция:

function dlDataOnDatasetDataChange(DataField) {
	var FieldName = DataField.Name;
	var Dataset = DataField.ParentDataFields.ParentDataset;
	var FieldValue = DataField.Value;
 
	if (FieldName.indexOf('Communication') == 0) {
		var Index = FieldName.substr(13, 1);
		var CommTypeDataControl =
			Self.ComponentsByName('edtCommunication' + Index + 'Type');
		var CommDataControl =
			Self.ComponentsByName('edtCommunication' + Index);
		RefreshCommunicationActionSmartTag(CommTypeDataControl, CommDataControl,
			(FieldName.indexOf('Type') > -1));
	} 
	if (FieldName == 'FieldID') {
		if (IsEmptyValue(FieldValue)) {
			Dataset.DataFields('ActivityID').Value = null;
		} else {
			Dataset.DataFields('ActivityID').Value = 
				GetFieldValueFromLookupDatasetByLookupField(DataField, 'ActivityID');
		}	
	}
}

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

спасибо большое))

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