Как работает автозаполнение в конфигурации Управление торговлей редакции 11

10 ноября 2013

Введение

В конфигурации "Управление торговлей" ред. 11 нет как таковых настроек пользователей для автозаполнения реквизитов создаваемых элементов справочников или документов как это было, например, в УТ версии 10.3 или УПП 1.3.

Форма редактирования настроек пользователей в конфигурации "УПП" 1.3

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

Далее рассмотрим принцип работы автозаполнения в конфигурации УТ 11.

"Интеллектуальная система"

Обратимся к документу "Заказ клиента". При его создании, вне зависимости от наличия документа-основания, выполняется процедура-обработчик модуля объекта:

"ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)"

Первым параметром передаются значения для заполнения нового документа в зависимости от основания и алгоритмов конфигурации. Второй параметр - это флаг стандартной обработки события.

Для документа "Заказ клиента" программный код обработчика заполнения следующий:

Процедура "ОбработкаЗаполнения" документа "Заказ клиента"

Нас интересует случай, когда данные заполнения пустые. Тогда заполнение выполняется не из данных заполнения, а с помощью специального алгоритма. На листинге выше он реализован в процедуре "ЗаполнитьПоЗначениямАвтозаполнения". Вот так выглядит программный код этого обработчика:

Процедура "ЗаполнитьПоЗначениямАвтозаполнения"

В случае, если данные заполнения не определены, то такие реквизиты как "Организация", "Склад" и "ХозяйственнаяОперация" заполняются автоматически с помощью процедуры "ЗаполнитьЗначенияСвойствАвтозаполнения" общего модуля "ОбщегоНазначенияУТ". При этом, если данные заполнения все же были переданы в виде структуры или документа, то при наличии значения заполнения в них, приоритет отдается данным заполнения.

Обратимся к процедуре "ЗаполнитьЗначенияСвойствАвтозаполнения":

// Получает значения автозаполнения по статистике 
// и заполняет ими переданную структуру
// Заполненные свойства не перезаполняются 
// и выступают в роли отбора
// Свойства, которые не найдены в метаданных 
// объекта удаляются из структуры
// 
// Параметры:
// ОбъектСсылка - ДокументСсылка - ссылка 
// на заполняемый документ
// СвойстваАвтозаполнения - Структура - свойства, 
// которые нужно заполнить
//
Процедура ЗаполнитьЗначенияСвойствАвтозаполнения(ОбъектСсылка,
                                       СвойстваАвтозаполнения) Экспорт
 // ....
КонецПроцедуры
В соответствии с описанием процедуры, первым параметром передается ссылка на документ, вторым - структура полей для автозаполнения. По тем полям в структуре, для которых не установлено значение заполнения, система формируем запрос на получение последних пяти элементов (в нашем случае документов "Заказ клиента"), в которых получает часто использованные значения заполнения. Вот пример запроса для документа "Заказ клиента":
Текст запроса для получения данных заполнения

Вот такой огромный, "страшный" запрос выполняется при каждом создании заказа клиента без документа-основания или других данных заполнения. Если кратко, то запрос получает 5 ближайших документов не помеченных на удаление, где автор документа - это текущий пользователь. Далее рассчитывается общий весь и вес каждого из значения реквизита. И в результате запрос возвращает значение, которое пользователь использовал наибольшее число раз. 

В запросе выше описанная операция выполняется трижды, для каждого из реквизитов автозаполнения: для организации, для склада и для хоз. операции. На листинге процедуры "ЗаполнитьЗначенияСвойствАвтозаполнения" выше Вы также могли видеть, что автозаполнение для заказа покупателя выполняется для реквизитов "БанковскийСчет" и "Касса".

Такой способ автозаполнения документов возможно упрощает жизнь внедренцам или администраторам, заполняющим настройки пользователей, но ни в коем случае не делает работу пользователей более удобной. Если пользователь был только что создан, то автозаполнение не будет работать. Тем более в большинстве ситуаций пользователю необходимо заполнение документа одним единственным складов, вне зависимости от значений, которое он заполнял ранее.


comments powered by Disqus