|
Отчет (СКД) Управляемые формы. Несколько схем компоновки данных | ☑ | ||
---|---|---|---|---|
0
kort-kort
19.12.14
✎
11:43
|
Всем привет.
Пишу отчет, в котором при определенных условиях должна выбираться разная схема компоновке данных. Проблема - не изменяются доступные поля выбора. Скрин и код сейчас добавлю |
|||
1
kort-kort
19.12.14
✎
11:47
|
&НаСервере
Процедура ПолеВыбора1ПриИзмененииНаСервере() // Вставить содержимое обработчика. Если ЭтаФорма.ПолеВыбора1 = "Все" Тогда // УСТАНОВКА СКД "ВСЕ" Настройки = Отчет.КомпоновщикНастроек.Настройки; ОбъектОтчет = РеквизитФормыВЗначение("Отчет"); СхемаКомпоновкиДанных = ОбъектОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); //Из схемы возьмем настройки по умолчанию Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //Помещаем в переменную данные о расшифровке данных ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); //Очищаем поле табличного документа Результат = ЭтаФорма.Результат; Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; УстановитьПараметрыВсе(ЭтаФорма.ОтборНоменклатуры); ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); //----------------------------------------------------------------------------------------------------------------------- ИначеЕсли ЭтаФорма.ПолеВыбора1 = "Оплаченые" Тогда // УСТАНОВКА СКД ОПЛАЧЕННЫЕ ОбъектОтчет = РеквизитФормыВЗначение("Отчет"); ОбъектОтчет.СхемаКомпоновкиДанных = ОбъектОтчет.ПолучитьМакет("СхемаОплаченные"); Настройки = ОбъектОтчет.СхемаКомпоновкиДанных.НастройкиПоУмолчанию; ОбъектОтчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОбъектОтчет.СхемаКомпоновкиДанных)); ОбъектОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); Настройки = ОбъектОтчет.КомпоновщикНастроек.Настройки; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(ОбъектОтчет.СхемаКомпоновкиДанных,Настройки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); //Очищаем поле табличного документа Результат = ЭтотОбъект.Результат; Результат.Очистить(); //// Если ЭтотОбъект.ОтборНоменклатуры = ИСТИНА Тогда Настройки.Структура[0].Структура[0].Структура[0].Использование = ИСТИНА; Настройки.Выбор.Элементы[6].Использование = ИСТИНА; //СУММА Настройки.Выбор.Элементы[4].Использование = ЛОЖЬ; ИначеЕсли ЭтотОбъект.ОтборНоменклатуры = ЛОЖЬ Тогда Настройки.Структура[0].Структура[0].Структура[0].Использование = ЛОЖЬ; Настройки.Выбор.Элементы[6].Использование = ИСТИНА; //СУММА Настройки.Выбор.Элементы[4].Использование = ЛОЖЬ; КонецЕсли; Пр_ДатаПо = Настройки.ПараметрыДанных.Элементы[0]; Пр_ДатаС = Настройки.ПараметрыДанных.Элементы[1]; От_Организация = Настройки.Отбор.Элементы[0]; От_Контрагент = Настройки.Отбор.Элементы[1]; От_Номенклатура = Настройки.Отбор.Элементы[2]; Если ЭтаФорма.НачПериода = Дата('00010101') Тогда Пр_ДатаС.Значение = Дата('00010101'); Пр_ДатаС.Использование = Истина; Иначе Пр_ДатаС.Значение = НачалоДня(НачПериода); Пр_ДатаС.Использование = Истина; КонецЕсли; Если ЭтаФорма.КонПериода = Дата('00010101') Тогда Пр_ДатаПо.Значение = Дата('22220101'); Пр_ДатаПо.Использование = Истина; Иначе Пр_ДатаПо.Значение = КонецДня(КонПериода); Пр_ДатаПо.Использование = Истина; КонецЕсли; Если ПустаяСтрока(Отчет.СписокНоменклатуры) Тогда От_Номенклатура.Использование = Ложь; Иначе От_Номенклатура.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; От_Номенклатура.ПравоеЗначение = Отчет.СписокНоменклатуры; От_Номенклатура.Использование = Истина; КонецЕсли; Если ПустаяСтрока(Отчет.Контрагент) Тогда От_Контрагент.Использование = Ложь; Иначе От_Контрагент.ПравоеЗначение = Отчет.Контрагент; От_Контрагент.Использование = Истина; КонецЕсли; Если ПустаяСтрока(Отчет.Организация) Тогда От_Организация.Использование = Ложь; Иначе От_Организация.ПравоеЗначение = Отчет.Организация; От_Организация.Использование = Истина; КонецЕсли; Настройки.ПараметрыВывода.Элементы[11].Значение = "Оплаченные за период с " + Формат(НачПериода, "ДЛФ=DD") + " по " + Формат(КонПериода, "ДЛФ=DD"); Настройки.ПараметрыВывода.Элементы[11].Использование = ИСТИНА; Настройки.ПараметрыВывода.Элементы[10].Значение = ИСТИНА; /// ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); ЗначениеВРеквизитФормы(ОбъектОтчет, "Отчет"); ИначеЕсли ЭтаФорма.ПолеВыбора1 = "Не оплаченые" Тогда // УСТАНОВКА СКД "НЕ ОПЛАЧЕННЫЕ" Настройки = Отчет.КомпоновщикНастроек.Настройки; ОбъектОтчет = РеквизитФормыВЗначение("Отчет"); СхемаКомпоновкиДанных = ОбъектОтчет.ПолучитьМакет("СхемаНеОплаченные"); Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); УстановитьПараметрыНеоплаченные(ЭтаФорма.ОтборНоменклатуры); //Из схемы возьмем настройки по умолчанию Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //Помещаем в переменную данные о расшифровке данных ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); //Очищаем поле табличного документа Результат = ЭтаФорма.Результат; Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); //----------------------------------------------------------------------------------------------------------------------- ИначеЕсли ЭтаФорма.ПолеВыбора1 = "Частично оплаченые" Тогда // УСТАНОВКА СКД "ЧАСТИЧНО ОПЛАЧЕННЫЕ" Настройки = Отчет.КомпоновщикНастроек.Настройки; ОбъектОтчет = РеквизитФормыВЗначение("Отчет"); СхемаКомпоновкиДанных = ОбъектОтчет.ПолучитьМакет("СхемаЧастичноОплаченные"); Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); УстановитьПараметрыЧастичноОплаченные(ЭтаФорма.ОтборНоменклатуры); //Из схемы возьмем настройки по умолчанию Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //Помещаем в переменную данные о расшифровке данных ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); //Очищаем поле табличного документа Результат = ЭтаФорма.Результат; Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПолеВыбора1ПриИзменении(Элемент) ПолеВыбора1ПриИзмененииНаСервере(); КонецПроцедуры |
|||
2
kort-kort
19.12.14
✎
11:48
|
P.S.
Смотреть только условие ИначеЕсли ЭтаФорма.ПолеВыбора1 = "Оплаченые" Тогда // УСТАНОВКА СКД ОПЛАЧЕННЫЕ Тренируюсь на этом условии |
|||
3
Cube
19.12.14
✎
11:51
|
||||
4
Любопытная
19.12.14
✎
11:52
|
(3) а ты читал? Там вроде ответа не нашли
|
|||
5
Cube
19.12.14
✎
11:53
|
(4) Я там даже писал :)
|
|||
6
kort-kort
19.12.14
✎
11:56
|
Все это уже пробывал..не помогает
|
|||
7
kort-kort
19.12.14
✎
11:56
|
дело в том, что в обычной форме все работает
|
|||
8
Cube
19.12.14
✎
11:57
|
(7) Я знаю :)
Я в 1С написал письмо с ошибкой 28.08.2012 - ответа нет до сих пор :) Может им напомнить? :) |
|||
9
Cube
19.12.14
✎
12:00
|
+(8) А, нет, ответили!)))
Ответ пришел 15.10.2013: Ответ от разработчиков: Не ошибка. При использовании не основной схемы компоновки данных нужно переопределять событие ПриКомпопоновкеРезультата, в котором формировать отчет. Для редактирования настроек нужно правильно инициализировать компоновщик настроек. См. статью ИТС http://its.1c.ru/db/metod81#content:3480:1 |
|||
10
kort-kort
19.12.14
✎
12:01
|
я уже все форумы и сайты и мануалы облазил....все меняется..кроме доступных полей...
|
|||
11
kort-kort
19.12.14
✎
12:02
|
спасибо)). попробую понять, что гуру 1с написали)
|
|||
12
Любопытная
19.12.14
✎
12:03
|
(9) а вот нефиг в формах заниматься формированиями отчетов. Правильно
|
|||
13
kort-kort
19.12.14
✎
12:03
|
http://hkar.ru/xhZe
скрин |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |