Добавление новых элементов на типовую форму отчёта средствами БСП
Всем доброго времени суток!
В типовой конфигурации «1С:ERP Управление предприятием 2» (2.5.22.145) среди общих форм есть форма ФормаОтчета, которую очень не хотелось бы изменять, в том числе расширениями. Есть самописный отчёт, использующий упомянутую типовую форму отчёта. В отображаемое пользователю диалоговое окно отчёта нужно добавить дополнительный элемент формы. Для таких нужд БСП, вроде бы, предусматривает специальный механизм программного изменения форм. Согласно описанию в документации БСП, в модуле отчёта создаю процедуры:
В отладчике вижу, что:
Форма.Элементы.КомпоновщикНастроекКомпоновкиДанныхНастройкиОтбор.Видимость = Истина
Тем не менее, добавленный элемент формы в диалоговом окне отчёта не отображается. У кого какие мысли по поводу того, как, всё же, добиться отображения добавленного элемента на форме?
В типовой конфигурации «1С:ERP Управление предприятием 2» (2.5.22.145) среди общих форм есть форма ФормаОтчета, которую очень не хотелось бы изменять, в том числе расширениями. Есть самописный отчёт, использующий упомянутую типовую форму отчёта. В отображаемое пользователю диалоговое окно отчёта нужно добавить дополнительный элемент формы. Для таких нужд БСП, вроде бы, предусматривает специальный механизм программного изменения форм. Согласно описанию в документации БСП, в модуле отчёта создаю процедуры:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
ТипСтруктура = Тип("Структура");
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
Если Настройки.Свойство("События") Тогда
Если ТипЗнч(Настройки.События) = ТипСтруктура Тогда
Настройки.События.Вставить("ПослеЗаполненияПанелиБыстрыхНастроек", Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
МсвРеквизитыФормыКДобавлению = Новый Массив;
МсвРеквизитыФормыКДобавлению.Добавить(Новый РеквизитФормы("КомпоновщикНастроекКомпоновкиДанных", Новый ОписаниеТипов("КомпоновщикНастроекКомпоновкиДанных")));
Форма.ИзменитьРеквизиты(МсвРеквизитыФормыКДобавлению);
ТекСхемаКомпоновкиДанных = ПолучитьМакет("Отборы");
Форма.КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(ТекСхемаКомпоновкиДанных,
Форма.КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(ТекСхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ЭлементФормы = Форма.Элементы.Вставить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтбор", Тип("ТаблицаФормы"), Форма.Элементы.КомпоновщикНастроекПользовательскиеНастройки);
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор";
КонецПроцедуры ПоказатьВ отладчике вижу, что:
Форма.Элементы.КомпоновщикНастроекКомпоновкиДанныхНастройкиОтбор.Видимость = Истина
Тем не менее, добавленный элемент формы в диалоговом окне отчёта не отображается. У кого какие мысли по поводу того, как, всё же, добиться отображения добавленного элемента на форме?
По теме из базы знаний
Найденные решения
(1) В итоге, работающая процедура ПослеЗаполненияПанелиБыстрыхНастроек выглядит так:
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
ТипКомпоновщикНастроекКомпоновкиДанных = Тип("КомпоновщикНастроекКомпоновкиДанных");
Для Каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл
Если РеквизитФормы.ТипЗначения.СодержитТип(ТипКомпоновщикНастроекКомпоновкиДанных) Тогда
Возврат;
КонецЕсли;
КонецЦикла;
ТипГруппаФормы = Тип("ГруппаФормы");
ТипДекорацияФормы = Тип("ДекорацияФормы");
ТипПолеФормы = Тип("ПолеФормы");
ЭлементыФормы = Форма.Элементы;
МсвРеквизитыФормыКДобавлению = Новый Массив;
МсвРеквизитыФормыКДобавлению.Добавить(Новый РеквизитФормы("КомпоновщикНастроекКомпоновкиДанных", Новый ОписаниеТипов("КомпоновщикНастроекКомпоновкиДанных")));
Форма.ИзменитьРеквизиты(МсвРеквизитыФормыКДобавлению);
ТекСхемаКомпоновкиДанных = ПолучитьМакет("Отборы");
Форма.КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(ТекСхемаКомпоновкиДанных, Новый УникальныйИдентификатор)));
Форма.КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(ТекСхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ЭлементФормыОтбор = ЭлементыФормы.Вставить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтбор", Тип("ТаблицаФормы"), ЭлементыФормы.КомпоновщикНастроекПользовательскиеНастройки);
ЭлементФормыОтбор.Отображение = ОтображениеТаблицы.Список;
ЭлементФормыОтбор.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор";
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборИспользова ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;
ЭлементФормы.Заголовок = " ";
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Использование";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборПредставле ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.Заголовок = " ";
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Представление";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормыГруппаКолонокОтбор = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокОтбор", ТипГруппаФормы, ЭлементФормыОтбор);
ЭлементФормыГруппаКолонокОтбор.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокОсновныеЭлементыОтбора", ТипГруппаФормы, ЭлементФормыГруппаКолонокОтбор);
ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокЛевоеЗначение", ТипГруппаФормы, ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора);
ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборЛевоеЗначе ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ЛевоеЗначение";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборВидСравнен ия", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ВидСравнения";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборПравоеЗнач ение", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ПравоеЗначение";
КонецПроцедуры ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Ну и вот это нужно переписать в соответствии с параметрами метода. Пока этой какой-то бред:
Тип("ТаблицаФормы")
Я конечно понимаю, что это платформенная таблица, но мне кажется, что программно в 1 элемент ее не добавить — колонки также нужно добавлять.
Ну и вот это нужно переписать в соответствии с параметрами метода. Пока этой какой-то бред:
Форма.КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(ТекСхемаКомпоновкиДанных,
Форма.КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(ТекСхемаКомпоновкиДанных.НастройкиПоУмолчанию);
(2) Спасибо, загвоздка была именно в этом. Отчего-то полагал, что для отбора компоновщика настроек компоновки данных колонки таблицы формы должны добавляться автоматически, как это и делается при ручном перетаскивании реквизита в элементы формы.
(2)
Этот код вполне рабочий, - проверено. То, для чего он был написан, он с успехом выполняет. Хотя, конечно же, более подробные соображения по поводу того, что в нём такого криминального, узнать было бы любопытно.
Ну и вот это нужно переписать в соответствии с параметрами метода.
Этот код вполне рабочий, - проверено. То, для чего он был написан, он с успехом выполняет. Хотя, конечно же, более подробные соображения по поводу того, что в нём такого криминального, узнать было бы любопытно.
(1) В итоге, работающая процедура ПослеЗаполненияПанелиБыстрыхНастроек выглядит так:
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
ТипКомпоновщикНастроекКомпоновкиДанных = Тип("КомпоновщикНастроекКомпоновкиДанных");
Для Каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл
Если РеквизитФормы.ТипЗначения.СодержитТип(ТипКомпоновщикНастроекКомпоновкиДанных) Тогда
Возврат;
КонецЕсли;
КонецЦикла;
ТипГруппаФормы = Тип("ГруппаФормы");
ТипДекорацияФормы = Тип("ДекорацияФормы");
ТипПолеФормы = Тип("ПолеФормы");
ЭлементыФормы = Форма.Элементы;
МсвРеквизитыФормыКДобавлению = Новый Массив;
МсвРеквизитыФормыКДобавлению.Добавить(Новый РеквизитФормы("КомпоновщикНастроекКомпоновкиДанных", Новый ОписаниеТипов("КомпоновщикНастроекКомпоновкиДанных")));
Форма.ИзменитьРеквизиты(МсвРеквизитыФормыКДобавлению);
ТекСхемаКомпоновкиДанных = ПолучитьМакет("Отборы");
Форма.КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(ТекСхемаКомпоновкиДанных, Новый УникальныйИдентификатор)));
Форма.КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(ТекСхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ЭлементФормыОтбор = ЭлементыФормы.Вставить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтбор", Тип("ТаблицаФормы"), ЭлементыФормы.КомпоновщикНастроекПользовательскиеНастройки);
ЭлементФормыОтбор.Отображение = ОтображениеТаблицы.Список;
ЭлементФормыОтбор.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор";
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборИспользова ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;
ЭлементФормы.Заголовок = " ";
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Использование";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборПредставле ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.Заголовок = " ";
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Представление";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормыГруппаКолонокОтбор = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокОтбор", ТипГруппаФормы, ЭлементФормыОтбор);
ЭлементФормыГруппаКолонокОтбор.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокОсновныеЭлементыОтбора", ТипГруппаФормы, ЭлементФормыГруппаКолонокОтбор);
ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборГруппаКоло нокЛевоеЗначение", ТипГруппаФормы, ЭлементФормыГруппаКолонокОсновныеЭлементыОтбора);
ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКолонок;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборЛевоеЗначе ние", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ЛевоеЗначение";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборВидСравнен ия", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ВидСравнения";
ЭлементФормы.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
ЭлементФормы = ЭлементыФормы.Добавить("КомпоновщикНастроекКомпоновкиДанныхНастройкиОтборПравоеЗнач ение", ТипПолеФормы, ЭлементФормыОтбор);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.ПравоеЗначение";
КонецПроцедуры Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот