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

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.

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