Здравствуйте!
Пытаюсь создать преднастроенную страницу, содержащую справочники. Поля на странице относятся к разным объектам. Делал аналогично примеру из конфигурации (PreconfiguredPageV2)
При открытии справочник не получает верный конфиг.
При использовании примера из конфигурации ситуация в точности повторяется.
Подскажите пожалуйста, как побороть данную проблему?
Нравится
Уже разобрался.
Если кому-то понадобится, то необходимо переопределить 2 метода: LoadVocabulary и getLookupPageConfig
[javascript]
loadVocabulary: function(args, tag) {
var column = this.getColumnByName(tag);
args.schemaName = column.referenceSchemaName;
this.callParent(arguments);
},
/**
* Возвращает настройки страницы выбора из справочника.
* @private
* @param {Object} args Параметры.
* @param {String} columnName Название колонки.
* @return {Object} Настройки страницы выбора из справочника.
*/
getLookupPageConfig: function(args, columnName) {
var config = {
entitySchemaName: args.schemaName,
multiSelect: false,
columnName: columnName,
columnValue: this.get(columnName),
searchValue: args.searchValue,
filters: this.getLookupQueryFilters(columnName)
};
this.Ext.apply(config, this.getLookupListConfig(columnName));
return config;
}
[/javascript]
Возник еще один вопрос. Как сделать,чтобы в преднастроенной странице работала вся логика справочных полей?
Не работает фильтрация "на лету", когда пишешь в поле справочника и подтягиваются отфильтрованные данные (именно на странице, а не в окне лукапа)
Прикрепите пожалуйста скриншот внешнего вида того, что вы пытаетесь сделать, и код схемы. Не до конца понятно какую проблему вы пытаетесь решить. Возможно есть типовые решения, без необходимости прибегать к написанию кода.
Думаю, что по картинке станет понятна задача.
В БП используется преднастроенная страница. Кажется, что в ней не выполнилась подписка на базовые события для полей типа LOOKUP, либо я не подключил какой-то базовый модуль. Не могу понять, что именно. В обычных страницах при нажатии стрелок или начав писать текст в поле справочника мы получаем подсказку по наполнению, а в моем случае такой функционал не работает.
Полный код во вложении
preconfuguredpage.txt
Посмотрите в сторону схемы автогенерируемой страницы (AutoGeneratedPageV2) и ее реализаций loadVocabulary и остальных.
В автогенерируемых страницах фильтрация происходит.

И еще одну старую тему попробую оживить...
Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?
"Александр Кудряшов" написал:Александр, а то, что на SDK описано не подходит? Если вы хотите не в шапке страницы реализовать, то возможно для примера подходит страница "Отчет о проделанной работе" (раздел "Активности").И еще одну старую тему попробую оживить...
Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?
Прикрепленный файлРазмер
filter.jpg10.46 кб
"Мотков Илья" написал:то, что на SDK описано
Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk
А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)
"Александр Кудряшов" написал:
Мотков Илья пишет:
то, что на SDK описано
Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk
А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)
Но фильтры же правильней использовать для раздела или детали :wink:
Если уже для самообразования. то можно попробовать следующий алгоритм:
1. Модуль фильтров можно подключить как обычный модуль. Другой вопрос, что в раздел и деталь это сделать можно легко.
2. Как это примерно сделать – загрузить модуль и поддержать сообщения для работы с ним.
Сперва нужно поддержать сообщения
![]()
Потом на них сделать такую логику:
![]()
Для добавления фиксированных фильтров нужно сообщение

Его код должен возвращать конфиг, из статьи - http://www.academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/AddFix…
Загрузка самого модуля фильтров стандартная -
[javascript]
this.sandbox.loadModule("QuickFilterModuleV2", {
renderTo: "SectionFiltersContainer",// куда рисовать, контейнер в diff
id: this.getQuickFilterModuleId()// тут уникальный id модуля
});
[/javascript]
На 7.8 необходимо на преднастроенную страницу добавить справочное поле.
Добавляю в attributes:
[javascript]
"Contact": {
dataValueType: this.Terrasoft.DataValueType.LOOKUP,
type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
referenceSchemaName: "Contact",
},
[/javascript]
Добавляю элемент в diff.
Поле появляется, но при нажатии на лупу появляется ошибка:
Ошибка
на строчке:
[javascript]
args.schemaName = this.model.attributes[tag].referenceSchemaName;
[/javascript]
в методе:
[javascript]
loadVocabulary: function(args, tag) {
args.schemaName = this.model.attributes[tag].referenceSchemaName;
this.callParent(arguments);
},
[/javascript]
Здравствуйте, Игорь.
Попробуйте добавить свойство usLookup к атрибуту Contact:
[javascript]
isLookup: true,
[/javascript]
"Мотков Илья" написал:Здравствуйте, Игорь.Попробуйте добавить свойство usLookup к атрибуту Contact:
isLookup: true,
Не помогло. Проблема возникает при нажатии на лупу. Если использовать выпадающий список, то проблема не возникает.
Аналогичная проблема со справочными полями наблюдается и в других базовых преднастроенных страницах.
Игорь, для исправления данного поведения, необходимо добавить зависимость от LookupUtilities. А также переопределить метод loadVocabulary аналогично схеме AutoGeneratedPageV2.
Полный листинг кода схемы:
[javascript]
define("UsrSome", ["LookupUtilities", "CustomProcessPageV2Utilities"],
/**
* @class Terrasoft.configuration.PreconfiguredPageV2
* Пример преднастроенной страницы без EntitySchema по процессу
*/
function(LookupUtilities) {
return {
mixins: {},
attributes: {
"UsrContact": {
dataValueType: this.Terrasoft.DataValueType.LOOKUP,
type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
isLookup: true,
referenceSchemaName: "Contact",
},
},
rules: {},
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
methods: {
findEntityColumn: function(columnName) {
var column = this.callParent(arguments);
if (!column) {
column = this.getColumnByName(columnName);
}
return column;
},
loadVocabulary: function(args, tag) {
var column = this.findEntityColumn(tag);
if (!column || !column.isLookup) {
return;
}
var entitySchemaName = column.referenceSchemaName;
var config = {
entitySchemaName: entitySchemaName,
multiSelect: false,
columnName: tag,
columnValue: this.get(tag),
searchValue: args.searchValue
};
var handler = function(args) {
var columnName = args.columnName;
var collection = args.selectedRows.collection;
if (collection.length > 0) {
this.set(columnName, collection.items[0]);
}
};
LookupUtilities.Open(this.sandbox, config, handler, this, null, false, false);
},
init: function(){
this.callParent(arguments);
document.scope = this;
},
},
diff: /**SCHEMA_DIFF*/[
{
"operation": "remove",
"name": "TextParameter1"
},
{
"operation": "insert",
"parentName": "GeneralInfoBlock",
"propertyName": "items",
"name": "UsrContact",
"values": {
caption: "UsrContact",
contentType: Terrasoft.ContentType.LOOKUP,
bindTo: "UsrContact",
layout: {column: 0, row: 0, colSpan: 12}
}
}
]/**SCHEMA_DIFF*/,
userCode: {}
};
});
[/javascript]