|
Вопрос по СКД, контроль заполнения поля отбора | ☑ | ||
---|---|---|---|---|
0
Пират
16.05.13
✎
15:26
|
Заполненность параметров программно можно проверить так:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки); //Создадим и инициализируем процессор компоновки, предварительно проверим параметры Если НЕ МакетКомпоновки.ЗначенияПараметров.Найти("НачалоПериода") = Неопределено И НЕ МакетКомпоновки.ЗначенияПараметров.Найти("КонецПериода") = Неопределено И НЕ МакетКомпоновки.ЗначенияПараметров["НачалоПериода"].Значение = Дата(1,1,1) И НЕ МакетКомпоновки.ЗначенияПараметров["КонецПериода"].Значение = Дата(1,1,1) И МакетКомпоновки.ЗначенияПараметров["НачалоПериода"].Значение > МакетКомпоновки.ЗначенияПараметров["КонецПериода"].Значение Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата начала периода не должна превышать дату окончания"; Сообщение.Сообщить(); Возврат; КоллекцияЭлементовОтбораКомпоновкиДанных КонецЕсли; А как так же красиво проверить заполненность поля отбора? Поля отбора теряют там свое исконное имя и приобретают вид "П", "П1", "П2"... Помогите пожалуста! |
|||
1
Пират
16.05.13
✎
15:28
|
НастройкиОтчета.Отбор.Элементы - сравнивать по индексу тоже не гуд!
|
|||
2
mikecool
16.05.13
✎
15:28
|
их не надо проверять, система автоматически будет включать условия, если значения отборов заполнены
|
|||
3
Пират
16.05.13
✎
15:31
|
(2) есть отбор, значение которого надо устанавливать всегда.
Как проконтролировать, что оно было установлено? |
|||
4
mikecool
16.05.13
✎
15:34
|
(3) скрыть его от пользователя, назначить параметры - а значения параметров назначить значениями отбора
|
|||
5
Пират
16.05.13
✎
15:35
|
(4) как значения параметров назначить значениями отбора?
|
|||
6
Laerys
16.05.13
✎
15:35
|
(4) наверно оно и должно настраиваться пользователями
|
|||
7
mikecool
16.05.13
✎
15:36
|
(5) удалить крестом значение в поле отбора, выбрать из параметра
|
|||
8
Пират
16.05.13
✎
15:38
|
(7) была такая мысль. Не красиво на форме создавать две таблицы. Параметры и Отборы.
Действительно нельзя красиво проконтролировать было ли заполнено конкретное поле отбора? |
|||
9
Laerys
16.05.13
✎
15:40
|
(8) на форме можно проверять через условное оформление
|
|||
10
Пират
16.05.13
✎
15:43
|
(9) форму создавать не хочу.
Хочу проверить в модуле объекта в Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; МассивЗаголовковРесурсов = Новый Массив; НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки); //Создадим и инициализируем процессор компоновки, предварительно проверим параметры Если НЕ МакетКомпоновки.ЗначенияПараметров.Найти("НачалоПериода") = Неопределено И НЕ МакетКомпоновки.ЗначенияПараметров.Найти("КонецПериода") = Неопределено И НЕ МакетКомпоновки.ЗначенияПараметров["НачалоПериода"].Значение = Дата(1,1,1) И НЕ МакетКомпоновки.ЗначенияПараметров["КонецПериода"].Значение = Дата(1,1,1) И МакетКомпоновки.ЗначенияПараметров["НачалоПериода"].Значение > МакетКомпоновки.ЗначенияПараметров["КонецПериода"].Значение Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата начала периода не должна превышать дату окончания"; Сообщение.Сообщить(); Возврат; КонецЕсли; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина); //Создадим и инициализируем процессор вывода результата ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); //Обозначим начало вывода ПроцессорВывода.НачатьВывод(); ТаблицаЗафиксирована = Ложь; ДокументРезультат.ФиксацияСверху = 0; //Основной цикл вывода отчета Пока Истина Цикл //Получим следующий элемент результата компоновки ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда //Следующий элемент не получен - заканчиваем цикл вывода Прервать; Иначе // Зафиксируем шапку Если Не ТаблицаЗафиксирована И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда ТаблицаЗафиксирована = Истина; ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы; КонецЕсли; //Элемент получен - выведем его при помощи процессора вывода ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры |
|||
11
Пират
16.05.13
✎
15:51
|
Только вот так проверять в цикле что-ли?
НастройкиОтчета.Отбор.Элементы[ш].ЛевоеЗначение = (Новый ПолеКомпоновкиДанных("Товар")) |
|||
12
Пират
16.05.13
✎
16:03
|
Жесть какая-то получается
//проверим заполненность необходимых полей отбора СтруктураПроверяемыхНаЗаполнениеОтборов = Новый СписокЗначений; СтруктураПроверяемыхНаЗаполнениеОтборов.Вставить("Товар",Новый ПолеКомпоновкиДанных("Товар")); Для Каждого ЭлементОтбораКомпоновки Из НастройкиОтчета.Отбор.Элементы Цикл ПроверяемоеПолеОтбора = ЭлементОтбораКомпоновки.ЛевоеЗначение; ИмяПроверяемогоПоляОтбора = СокрЛП(ПроверяемоеПолеОтбора); Если СтруктураПроверяемыхНаЗаполнениеОтборов.Свойство(ИмяПроверяемогоПоляОтбора) Тогда Если Не ЗначениеЗаполнено(ЭлементОтбораКомпоновки.ПравоеЗначение) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не заполнено обязательное поле отбора!"; Сообщение.Поле = ""; Сообщение.УстановитьДанные(); Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецЦикла; |
|||
13
Пират
16.05.13
✎
16:55
|
прикольно когда пишешь тему на мисте и никто не может ответить на вопрос :)
Итак, в модуле объекта в процедуре ПриКомпоновкеРезультата пишем следующее: НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); //проверим заполненность необходимых полей отбора СтруктураПроверяемыхНаЗаполнениеОтборов = Новый Структура; СтруктураПроверяемыхНаЗаполнениеОтборов.Вставить("Контейнер", Новый ПолеКомпоновкиДанных("Контейнер")); //СтруктураПроверяемыхНаЗаполнениеОтборов.Вставить("Страна", Новый ПолеКомпоновкиДанных("Страна")); Для ш = 0 По НастройкиОтчета.Отбор.Элементы.Количество() - 1 Цикл ЭлементОтбораКомпоновки = НастройкиОтчета.Отбор.Элементы[ш]; ПроверяемоеПолеОтбора = ЭлементОтбораКомпоновки.ЛевоеЗначение; ИмяПроверяемогоПоляОтбора = СокрЛП(ПроверяемоеПолеОтбора); Если СтруктураПроверяемыхНаЗаполнениеОтборов.Свойство(ИмяПроверяемогоПоляОтбора) Тогда Если Не ЗначениеЗаполнено(ЭлементОтбораКомпоновки.ПравоеЗначение) ИЛИ НЕ ЭлементОтбораКомпоновки.Использование Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не заполнено обязательное поле отбора <"+ИмяПроверяемогоПоляОтбора+">"+"! Filter <"+ЭлементОтбораКомпоновки.ПредставлениеПользовательскойНастройки+"> is empty!"; Сообщение.Поле = "Отчет.КомпоновщикНастроек.ПользовательскиеНастройки"; //Сообщение.УстановитьДанные(); Сообщение.Сообщить(); Возврат; КонецЕсли; КонецЕсли; КонецЦикла; Пользуйтесь, кому надо!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |