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

Автор: 1С
ОбщийМодуль.УправлениеДоступомСлужебныйКлиентСервер
БСП

Обработка проверки заполнения на сервере формы редактирования разрешенных значений. Только для внутреннего использования.

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

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

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

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

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

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

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

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

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

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

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

ПриЧтенииНаСервере (БСП)

Выгрузка Таблицы значений в Объект Таблица Значений на форме обработки (для передачи сервер - клиент)

TurboConf 6 - расширение Конфигуратора 1С