Собственная проверка заполненонсти обязательных реквизитов справочников. 

Алексей Долгих
Дата создания: 26 апреля 2010 в 09:30

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

Согласитесь, было бы удобно, чтобы система показывала бы полный список незаполненных обязательных реквизитов. Сейчас мы ее этому научим.

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

1. Отключим системную проверку заполненности реквизитов. В событии "Карточка / Открытие" добавляем:

if not VarIsClear(Object.View)
  Object.Rules.Rules(CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID).Enabled = FALSE
endif

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

2. Нашу проверку прописываем в событие "Карточка / Сохранение возможность":

ReqList = РИТНезаполненныеОбязательныеРеквизиты(Object)
if ReqList.Count > 0
  Message = ''               
  foreach ReqName in ReqList
    Message = Format('%s%s%s'; arrayof(Message; CR; ReqName))
  endforeach
  Raise(CreateException(''; 'Незаполнены обязательные реквизиты:' & CR & Message; ecWarning))
endif

Необходимо вставить этот код в самое начало события, практически получится на место выключенной стандартной проверки, еще до остальных любых проверок перед сохранением.

3. Включим системную проверку обратно (в ней устанавливается утвержденность записи). В событие "Карточка / Сохранение возможность", сразу после нашей проверки:

Object.Rules.Rules(CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID).Enabled = TRUE

Упомянутая в коде функция РИТНезаполненныеОбязательныеРеквизиты():
1 параметр Obj вариантный

ReqList = CreateStringList()
Index = 1
while Index <= Obj.RequisiteCount
  Requisite = Obj.RequisiteByIndex(Index-1)
  if (Requisite.Required and (VarIsNull(Requisite.Value) or Requisite.Value == ''))
    ReqList.Add(Requisite.Title) 
  endif
  Index = Index + 1
endwhile
Result = ReqList

В результате пользователь видит такое предупреждение:

 

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

понравилась 13 пользователям

Находится в рубриках:
Комментарии (7)
Комментарии доступны только для зарегистрированных пользователей.




Теги
4.7 4.8 awards isbl is-builder sql server бизнес-решение введение в is-builder видео дайджест документ интеграция клик настройка отчет разработка сообщество справочник сценарий функция
показать все теги