Для реализации данного функционала, необходимо:

1. Создать справочник:



В результате, создадутся сервисы в ветке Accounts\Dictionaries\SubFields\

2. Проверить, создалось ли поле в таблице tbl_SubFields (Accounts\Dictionaries\SubFields\tbl_SubFields):

3. В сервисе запроса sq_SubFields (Accounts\Dictionaries\SubFields\sq_SubFields) добавить параметр:

4. Добавить фильтр сравнения:

5. Проверить, создалось ли поле в сервисе датасета ds_SubFields (Accounts\Dictionaries\SubFields\ds_SubFields):

6. Проверить, создалась ли карточка редактирования wnd_SubFieldsEdit (Accounts\Dictionaries\SubFields\wnd_SubFieldsEdit) и поле «Отрасль» в ней:

7. Добавить поле в сервис таблицы tbl_Account (Accounts\General\Main Grid\tbl_Account):

8. Добавить связь:

9. Добавить колонку в сервис запроса sq_Account (Accounts\General\Main Grid\sq_Account):

10. Присоединить таблицу к запросу:

11. Добавить колонку:

12. Создать поле в сервисе датасета ds_Account (Accounts\General\Main Grid\ds_Account):

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

14. Перейти на вкладку события и создать обработчик OnPrepareSelectWindow (дважды кликнув по пустому полю, в результате чего в нем появится запись edtSubFieldOnPrepareSelectWindow):

15. Добавить в созданный обработчик следующий код:

        var Dataset = dlData.Dataset;
        var LookupDataset = LookupDataControl.DataField.LookupDataset;
        var AccountFieldID = GetDatasetFieldValue(Dataset, 'FieldID');
        ApplyDatasetFilter(LookupDataset, 'FieldID', AccountFieldID, true);

В результате:

16. Сохранить изменения и перезапустить Terrasoft.

17. Заполнить справочник «Подотрасли».

В результате:

Источник: БЗ

Нравится

Поделиться

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

Нашла куда более адекватный вариант решения от Наташи Бондарь:

Для того, чтобы при выборе одного значения справочника, ограничивалось содержимое другого справочника необходимо:
1. Создать обработчик события OnPrepareSelectWindow поля-справочника, содержимое которого нужно ограничить:

2. В теле функции обработки события осуществлять фильтрацию записей справочника посредством вызова функции function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled). Обращаем Ваше внимание, в сервисе выборки данных (sq_xxx) справочника, значения которого нужно ограничить, обязательно должен присутствовать фильтр сравнения и параметр.
Реализацию подобной функциональности Вы можете посмотреть во многих карточках редактирования системы, например, для базовых полей «Страна», «Регион» карточек [Контакт], [Контрагент].

Ответ на 2 вопрос:
Для того, чтобы при заполнении одного поля, другое поле заполнялось автоматически необходимо:
В функции OnDatasetDataChange набора данных (датасета) делать проверку по полю. Если изменяется содержимое поля «Контакт», осуществлять фильтрация записей датасета контактов (ds_Contact) по текущему контакту (фильтрация выполняется посредством функции function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled)). После фильтрации получать значение подразделения контакта и присваивать его полю «Подразделение» датасета карточки редактирования.

var Dataset = dlData.Dataset;
            if (DataField.Name == 'ContactID' ) {
                        var DatasetContacts = Services.GetNewItemByUSI('ds_Contact');
                        ApplyDatasetFilter(DatasetContacts, 'ID', DataField.Value, true);
                        DatasetContacts.Open();
                        var Podrazdelenie = DatasetContacts('Podrazdelenie');
                        Dataset('Podrazdelenie') = Podrazdelenie;
                        DatasetContacts.Close();
            }
Показать все комментарии

Коллеги!
Подскажите примерный код функции автоматического связывания элементов проекта (аналог кнопки установить связь между элементами проекта). При этом нужно автоматически пересчитать даты стадий и связанные с проектом задачи?
Возможно есть готовая функция или несколько функций для этого?
Заранее спасибо!

Нравится

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

Вот часть скрипта, которая выполняется по кнопке "Связать элементы" (обработчик действия amiConnectElementsOnExecute в скрипте wnd_ProjectGanttAreaScript):

	var SelectedIDsArray = GetSelectedItemsIDsArray();
	if (SelectedIDsArray.length == 0) {
		ShowWarningDialog("Элементы не выбраны");
		return;
	}
	ConnectProjectElementsArray(Self, SelectedIDsArray, AreaObject);
	RefreshDataset(dlData.Dataset);

Основная функция связки - ConnectProjectElementsArray, которая вызывает AddProjectDependence из скрипта scr_ProjectDependenceUtils.

Пересчёт элементов выполняется функцией DoElementCalculation скрипта scr_ProjectElementLibrary. Посмотрите её реализацию, а также реализацию функций DoChildElementsCalculation и DoParentElementCalculation.

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