Имя: Пароль:
1C
 
Проверить заполнение параметров СКД
0 NikePopov
 
11.08.14
14:37
Доброго всем дня!

Озадачился вопросом:
у отчета есть "ОбработкаПроверкиЗаполнения", реквизиты плодить не хочу - буду проверять параметры прямо через саму СКД. В модуле объекта увидел переменную "КомпоновщикНастроек" и испугался. Забыл зачем пришел.

Что собственно не устраивает:
окошко с надписью

"Ошибка исполнения отчета
по причине:
Не установлено значение параметра "Параметр1"" и красным крестиком.

Что хочу:

Заменить вышеуказанное окно привычным для ОбработкиПроверкиЗаполнения сообщением с учетом, что некоторые параметры могут использоваться не всегда(в зависимость от настройки параметров СКД).

Подскажите, Люди добрые!
1 NikePopov
 
11.08.14
15:31
Ап!
2 sapphire
 
11.08.14
15:35
И?
3 NikePopov
 
11.08.14
15:39
Есть ли идеи, что именно требуется проверять в реквизите "КомпоновщикНастроек", чтобы учитывать параметры данных СКД?
4 Defender aka LINN
 
11.08.14
15:44
(0) Если "некоторые параметры могут использоваться не всегда", то они должны быть необязательными в схеме.
5 NikePopov
 
11.08.14
16:01
Это понятно. Где мне найти коллекцию параметров СКД с их значениями?
Есть "ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы", но там не указано, обязательный параметр для заполнения или нет.
Есть "ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы" там тоже.
Есть "ЭтотОбъект.КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы" и тут нет.

Не могу найти свойство компановщика, где собраны все интересующие меня данные.
6 NikePopov
 
11.08.14
16:06
Хотелось бы узнать, как именно должен выглядеть код:

Для каждого ПараметрСКД из КомпоновщикНастроек.??? Цикл
    Если ПараметрСКД.Использование = ВидыИспользований.Авто Тогда
        Продолжить;
    ИначеЕсли ЗначениеЗаполнено(ПараметрСКД.Значение) Тогда
        Продолжить;
    КонецЕсли;
    Отказ = Истина;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку("Не заполнен параметр [ПредставлениеПараметра]!", новый Структура("ПредставлениеПараметра", ПараметрСКД.ПредставлениеПараметра);
    Сообщение.Поле = "Отчет." + ПараметрСКД.ИмяПараметра;
КонецЦикла
7 NikePopov
 
11.08.14
16:09
Up!
8 NikePopov
 
11.08.14
16:16
Меня полностью устраивает "СхемаКомпоновкиДанных", но в ней на этапе "ОбработкаПроверкиЗаполнения" не указаны значения параметров
9 NikePopov
 
12.08.14
09:39
Благодарю участников обсуждения. Выкрутился следующим образом:


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

У кого-нибудь есть идеи, какие тут могут быть подводные камни?
Ошибка? Это не ошибка, это системная функция.