Добрый день! В базовой версии имеется проверка на дубли Контактов и Контрагентов. Появилась необходимость в такой функциональности для проверки дублей в разделе "Продукты" - по имени продукта. Вопрос: возможно ли дописать своими силами еще такую проверку и насколько ресурскоёмко это будет? Заранее спасибо!
Нравится
Здравствуйте!
Мы проанализировали Ваш запрос и можем Вам сообщить следующее.
На самом деле Вы можете реализовать проверку дублирующихся значений в разделе продуктов. Проверку Вы можете осуществлять например, на нажатию на кнопку "ОК" карточки продукта. А именно, Вам необходимо добавить в запрос на выборку новый фильтр по названию продукта. Затем в обработчике события нажатия на кнопку "ОК" карточки продукта, необходимо "включить фильтр" (вызов функции ApplyDatasetFilter), а затем реализовать проверку наличия аналогичной записи и появление сообщения о наличии дублирующейся записи в датасете.
Как Вы наверное успели заметить, в приложении Terrasoft CRM настройка поиска дублирующихся значений по контактам и контрагентам осуществляется путем вызова окна. В том случае если Вам необходимо реализовать поиск дублирующихся значений аналогичным образом по продуктам, то это является значительной доработкой конфигурации приложения, реализовать которую у Вас есть возможность путем проектного решения специалистами отдела разработки Terrasoft.
Желаем удачи!
Здравствуйте!
А нельзя ли поподробней объяснить реализацию первого метода? Необходимо фильтровать сразу по двум параметрам.
Не совсем понятно, как будет происходить фильтрация записей, если датасет уже отфильтрован и в нем находится только одна запись(которая только что была добавлена). Или я что-то путаю?
Спасибо!!!
Здравствуйте.
Для реализации необходимой Вам функциональности требуется выполнить следующее:
1. В запросе на выборку SelectQuery раздела "Продукты" создать два фильтра сравнения CompareFilter по двум полям и с использованием необходимых параметров.
2. Затем в обработчике нажатия кнопки OK карточки Вам необходимо открыть новый датасет без фильтров (используя GetNewItemByUSI ('USI датасета продуктов')).
3. После открытия датасета необходимо применить созданные фильтры (ApplyDatasetFilter для каждого фильтра).
4. Затем открыть датасет Dataset.Open и проверить наличие в нем записей. По полученным результатам выполнить уже их обработку (либо запретить ввод значения, либо разрешить).
Terrasoft Support Team
Таким образом не удалось сделать, тк фильтры не применялись (запросы в базу не отправлялись).
Пошли другим путем. Использовали вот такую функцию:
function GetDatasetFilteredByParams(Dataset, Param1Name, Param1Val, Param2Name, Param2Val) {
var SelectQuery = Dataset.SelectQuery;
var PrimarySelect = GetSelectQueryPrimarySelect(SelectQuery);
EnableAllFilters(PrimarySelect.Filters, false);
EnableFilter(PrimarySelect.Filters, Param1Name, true);
EnableFilter(PrimarySelect.Filters, Param2Name, true);
SetParameterValue(SelectQuery.Parameters, Param1Name, Param1Val);
SetParameterValue(SelectQuery.Parameters, Param2Name, Param2Val);
var TempDataset = SelectQuery.Open();
EnableAllFilters(PrimarySelect.Filters, false);
EnableFilter(PrimarySelect.Filters, 'ID', true);
return TempDataset;
}
получилось громоздко, но результатом довольны. Функция вызывается из события BeforePost. Это показалось удобным, поскольку в случае дублирования записи свойству DoPost присваиваем false и запись в базу не идет.
Единственный вопрос, необходимо ли закрывать TempDataset? если да, то когда?