Обработка проверки заполнения на сервере формы редактирования разрешенных значений. Только для внутреннего использования.
// Только для внутреннего использования.
Процедура ОбработкаПроверкиЗаполненияНаСервереФормыРедактированияРазрешенныхЗначений(
Форма, Отказ, ПроверенныеРеквизитыТаблиц, Ошибки, НеПроверять = Ложь) Экспорт
Элементы = Форма.Элементы;
Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма);
Если Параметры.Назначение <> Неопределено Тогда
НазначениеПрофиля = НазначениеПрофиля(Параметры);
КонецЕсли;
ПроверенныеРеквизитыТаблиц.Добавить(Параметры.ПутьКТаблицам + "ВидыДоступа.ВидДоступа");
ПроверенныеРеквизитыТаблиц.Добавить(Параметры.ПутьКТаблицам + "ЗначенияДоступа.ВидДоступа");
ПроверенныеРеквизитыТаблиц.Добавить(Параметры.ПутьКТаблицам + "ЗначенияДоступа.ЗначениеДоступа");
Если НеПроверять Тогда
Возврат;
КонецЕсли;
ОтборВидовДоступа = ОтборВТаблицахФормыРедактированияРазрешенныхЗначений(Форма);
ВидыДоступа = Параметры.ВидыДоступа.НайтиСтроки(ОтборВидовДоступа);
ИндексВидаДоступа = ВидыДоступа.Количество()-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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПослеЗаписиНаСервереФормыРедактированияРазрешенныхЗначений (БСП)
ОбработкаПроверкиЗаполненияНаСервере (БСП)
ПередЗаписьюНаСервереФормыРедактированияРазрешенныхЗначений (БСП)
ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений (БСП)
ПриПовторномЧтенииНаСервереФормыРедактированияРазрешенныхЗначений (БСП)
ПараметрыФормыРедактированияРазрешенныхЗначений (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)