ОбработкаПроверкиЗаполненияНаСервере (БСП)

Автор: 1С
ОбщийМодуль.УправлениеКонтактнойИнформацией
БСП

Обработка проверки заполнения на сервере. Обработчик для события формы ОбработкаПроверкиЗаполненияНаСервере.

// Обработчик для события формы ОбработкаПроверкиЗаполненияНаСервере.
// Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы.
//
// Параметры:
//    Форма  - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации.
//    Объект - Произвольный - Объект-владелец контактной информации.
//    Отказ  - Булево - Если Истина, то во время проверки были обнаружены ошибки.
//
Процедура ОбработкаПроверкиЗаполненияНаСервере(Форма, Объект, Отказ) Экспорт
	
	ИмяОбъекта = Объект.Ссылка.Метаданные().Имя;
	УровеньОшибок = 0;
	ПредыдущийВид = Неопределено;
	
	ИменаТабличныхЧастейПоВидамКИ = Неопределено;
	
	Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
		
		ВидИнформации = СтрокаТаблицы.Вид;
		ТипИнформации = СтрокаТаблицы.Тип;
		Комментарий   = СтрокаТаблицы.Комментарий;
		ИмяРеквизита  = СтрокаТаблицы.ИмяРеквизита;
		СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, "ОбязательноеЗаполнение, РедактированиеТолькоВДиалоге");
		ОбязательноеЗаполнение = СвойствоВидаИнформации.ОбязательноеЗаполнение;
		
		Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда
			
			Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда
				Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина);
				ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид");
				ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта);
			КонецЕсли;
			
			ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации];
			ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти];
			
			Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл
				
				Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита];
				Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита;
				
				Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда
					
					ОбщегоНазначения.СообщитьПользователю(
					СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле);
					ТекущийУровеньОшибок = 2;
					
				Иначе
					
					Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"];
					
					ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации,
						ТипИнформации, ИмяРеквизита, , Поле);
					
					СтрокаТабличнойЧастиФормы[ИмяРеквизита] = Представление;
					СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = Значение;
					
				КонецЕсли;
				
				УровеньОшибок = ?(ТекущийУровеньОшибок > УровеньОшибок, ТекущийУровеньОшибок, УровеньОшибок);
				
			КонецЦикла;
			
		Иначе
			
			ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита);
			Если ЭлементФормы = Неопределено Или ВидИнформации.ПометкаУдаления Тогда
				Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация.
			КонецЕсли;
			
			Если (СвойствоВидаИнформации.РедактированиеТолькоВДиалоге 
				Или ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница)
				И Не УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияЗаполнена(Строка(Форма[ИмяРеквизита])) Тогда
				Представление = "";
			Иначе
				Представление = Форма[ИмяРеквизита];
			КонецЕсли;
			
			Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление)
				И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда
				// И нет других строк с данными для видов КИ с множественными значениями.
				
				ОбщегоНазначения.СообщитьПользователю(
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита);
				ТекущийУровеньОшибок = 2;
				
			Иначе
				
				ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.Значение,
					ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий);
				
			КонецЕсли;
			
			УровеньОшибок = ?(ТекущийУровеньОшибок > УровеньОшибок, ТекущийУровеньОшибок, УровеньОшибок);
			
		КонецЕсли;
		
		ПредыдущийВид = ВидИнформации;
		
	КонецЦикла;
	
	Если УровеньОшибок <> 0 Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОбработкаПроверкиЗаполненияНаСервереФормыРедактированияРазрешенныхЗначений (БСП)

ОбработкаПроверкиЗаполнения (БСП)

ОбработкаПроверкиЗаполненияПрисоединенногоФайла (БСП)

Проверка заполнения на клиенте

Проведение документа с проверкой заполнения

ПроверятьЭлектронныеПодписиНаСервере (БСП)

УстановитьПроверкуИмениСервераВПараметрыБлокировки (БСП)

ВидОбработкиЗаполнениеОбъекта (БСП)

1С Менеджер конфигураций