|
|
|
Построитель отчетов (сбрасываются настройки макета) | ☑ | ||
|---|---|---|---|---|
|
0
interlamersha
11.09.09
✎
10:43
|
Есть небольшой отчет сформированный с помощью построителя. В отчете необходимо поменять названия колонок и ширину. Беру примеры из "брошурки" - "Профессиональная разработка в системе 1С:Предприятие 8" :) В итоге получается у меня вот такая процедурка вывода (немного сократила, но смысл остается):
Процедура ОтчетВывести() ЭлементыФормы.ПолеТабличногоДокумента.Очистить(); ПостроительОтчетаОтчет.Текст=ПереформироватьТекстПостроителя(); ПостроительОтчетаОтчет.ТекстЗаголовка = ПостроительОтчетаОтчет.ТекстЗаголовка + Символы.ПС+" за период с "+Формат(НачПериода,"ДЛФ=ДД")+" по "+Формат(КонПериода,"ДЛФ=ДД"); МакетПостроителя=ПостроительОтчетаОтчет.Макет; ПостроительОтчетаОтчет.Параметры.Вставить("КонПериода", КонПериода); ПостроительОтчетаОтчет.Параметры.Вставить("НачПериода", НачПериода); ПостроительОтчетаОтчет.Параметры.Вставить("Организация", Организация); ПостроительОтчетаОтчет.Параметры.Вставить("Подразделение", Подразделение); ПостроительОтчетаОтчет.Параметры.Вставить("Сотрудники", Сотрудники); ТекущаяОбласть=Неопределено; Если ПостроительОтчетаОтчет.ВыбранныеПоля.Найти("Расход")<>Неопределено тогда ТекущаяОбласть=ПостроительОтчетаОтчет.Макет.НайтиТекст("Расход",ТекущаяОбласть,ПостроительОтчетаОтчет.Макет.Область(),Истина,Истина,Истина,Ложь); ТекущаяОбласть.ШиринаКолонки=15; ТекущаяОбласть.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить; КонецЕсли; //ПостроительОтчетаОтчет.Макет=МакетПостроителя; ПостроительОтчетаОтчет.Выполнить(); ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями; ПостроительОтчетаОтчет.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика); ПостроительОтчетаОтчет.ОформитьМакет(); ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента); КонецПроцедуры Теперь собственно о самой проблеме. В отчете выводятся данные с группировкой и итогами по подразделению, сотрудкнику. При первоначальной настройке (конструкторской) подразделение и сотрудник располагаются в одной колонке т.е. Цех 1 10,20 Иванов 5,00 Петров 5,20 если я раскомментирую строчку //ПостроительОтчетаОтчет.Макет=МакетПостроителя; то у меня подразделение и сотрудник оказываются в разных графах. Т.е. Цех 1 10,20 Иванов 5,00 Петров 5,20 Мне же в свою очередь необходимо обеспечить чтобы измерения попадали в одну колонку. Не смотря на присудствие строчки ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; данные не объединяются в одну колонку. Кто знает в чем проблема, и как ее решить? |
|||
|
1
ТелепатБот
гуру
11.09.09
✎
10:43
|
||||
|
2
interlamersha
11.09.09
✎
10:49
|
Т.е. проще говоря, если мы в процедуре вывода отчета перед выполнением и выводом результатов построителем просто впишем две строчки
МакетПостроителя=ПостроительОтчетаОтчет.Макет; ПостроительОтчетаОтчет.Макет=МакетПостроителя; То у нас тут же летят настройки. Простое присвоение а=б, б=а. Без какого-либо преобразования. и вот такая вот ахинея получается. |
|||
|
3
SOAD
11.09.09
✎
10:55
|
(2) Это относится к вопросу в (0) ?
|
|||
|
4
interlamersha
11.09.09
✎
10:59
|
(3) да относится. Я сейчас эту штуку протестила. Т.е. я так понимаю это косяк 1Ски.
|
|||
|
5
SOAD
11.09.09
✎
11:01
|
это же два разных вопроса.. может отдельную тему создать?
|
|||
|
6
SOAD
11.09.09
✎
11:01
|
(0) нужно текст запроса изменить думаю
|
|||
|
7
SOAD
11.09.09
✎
11:08
|
(6) а именно:
В Итоги поместить Название Цехов и ФизЛиц. И не забыть выбрать размещение группировок в одной колонке |
|||
|
8
SOAD
11.09.09
✎
11:12
|
<<И не забыть выбрать размещение группировок в одной колонке
впринципе это у вас уже реализовано вот этой строчкой ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках=ТипРазмещенияИзмерений.Вместе; |
|||
|
9
interlamersha
11.09.09
✎
11:12
|
(6) но причем сдесь текст. Все в тексте нормально размещено, в итогах названия цехов и ФизЛиц размещено, размещение в группировках в одной колонке стоит.
В модуле в итоге прописивается: ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; Все прекрасно формируется, но если просто вписываем две строчки МакетПостроителя=ПостроительОтчетаОтчет.Макет; ПостроительОтчетаОтчет.Макет=МакетПостроителя; ничего при этом не меняя!!! , получаем совершенно другой макет. |
|||
|
10
SOAD
11.09.09
✎
11:13
|
я так понял проблема в (0) решена? Осталось решить проблему (2) ?
|
|||
|
11
interlamersha
11.09.09
✎
11:14
|
(8) строчку
ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; я не меняю, все остается как есть. Может попробуйте сделать любой простенький отчет через построитель, например данные по какому-нибудь регистру вытащить и сгруппировать в одну колонку. а потом залезть в модуль и вписать в процедуре вывода эти злополучные 2 строки. и проверите как изменится результат. (может это у меня с платформой глюк). |
|||
|
12
interlamersha
11.09.09
✎
11:19
|
(10) нет проблема (0) не решена, источником проблемы (0) является проблема (2)
|
|||
|
13
SOAD
11.09.09
✎
11:20
|
(11) Угу , у меня также как у вас.
|
|||
|
14
interlamersha
11.09.09
✎
11:20
|
(13) т.е. это баг платформы...?
|
|||
|
15
SOAD
11.09.09
✎
11:20
|
А в чем смысл этих строчек?
|
|||
|
16
SOAD
11.09.09
✎
11:20
|
(14) хз
|
|||
|
17
interlamersha
11.09.09
✎
11:22
|
(16) смысл в том что я делаю копию макета построителя, потом в копии делаю доработки, и эти доработаный макет загоняю обратно в построитель.
|
|||
|
18
SOAD
11.09.09
✎
11:24
|
(17) А что за доработки к примеру?
|
|||
|
19
interlamersha
11.09.09
✎
11:30
|
например. Я хочу поменять ширину колонки Расход, и сделать так чтоб наименование у меня в шапке переносилось. использую следующую конструкцию
МакетПостроителя=ПостроительОтчетаОтчет.Макет; ТекущаяОбласть=Неопределено; Если ПостроительОтчетаОтчет.ВыбранныеПоля.Найти("Расход")<>Неопределено тогда ТекущаяОбласть=МакетПостроителя.НайтиТекст("Расход",ТекущаяОбласть,МакетПостроителя.Область(),Истина,Истина,Истина,Ложь); ТекущаяОбласть.ШиринаКолонки=3; ТекущаяОбласть.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить; КонецЕсли; ПостроительОтчетаОтчет.Макет=МакетПостроителя; В результате цель достигнута, ширина колонки изменилась, название шапки перенеслось, но вся общая настройка макета полетела к чертям. Пробуем обойтись без копии макета, и пишем следующий код: ТекущаяОбласть=Неопределено; Если ПостроительОтчетаОтчет.ВыбранныеПоля.Найти("Расход")<>Неопределено тогда ТекущаяОбласть=ПостроительОтчетаОтчет.Макет.НайтиТекст("Расход",ТекущаяОбласть,ПостроительОтчетаОтчет.Макет.Область(),Истина,Истина,Истина,Ложь); ТекущаяОбласть.ШиринаКолонки=3; ТекущаяОбласть.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить; КонецЕсли; В результате как была широченная строка расход, такая она и осталась, и наименование в колонке не переносится. Но и настройка макета остается прежней. |
|||
|
20
interlamersha
11.09.09
✎
11:39
|
Может есть какой другой способ?
|
|||
|
21
SOAD
14.09.09
✎
04:19
|
получилось... оказалось все просто
|
|||
|
22
SOAD
14.09.09
✎
04:24
|
вот проверенный мною рабочий код -выводит как надо
Процедура ОтчетВывести() //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ(Отчет) // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! ЭлементыФормы.ПолеТабличногоДокумента.Очистить(); //Настройки для построителя.Вот этот кусок я перетащил на верх, до нашего текста изменения ширины колонки -и тогда он не сбрасывает настройки ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.Отдельно; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.Отдельно; ПостроительОтчетаОтчет.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика); // //наш код изменения ширины колонки МакетПостроителя=ПостроительОтчетаОтчет.Макет; ТекущаяОбласть=Неопределено; Если ПостроительОтчетаОтчет.ВыбранныеПоля.Найти("Наименование")<>Неопределено тогда ТекущаяОбласть=МакетПостроителя.НайтиТекст("Наименование",ТекущаяОбласть,МакетПостроителя.Область(),Истина,Истина,Истина,Ложь); ТекущаяОбласть.ШиринаКолонки=3; ТекущаяОбласть.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить; КонецЕсли; ПостроительОтчетаОтчет.Макет=МакетПостроителя; //тут уже построитель запускается - взяв все наши настройки ПостроительОтчетаОтчет.Выполнить(); ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента); //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ КонецПроцедуры |
|||
|
23
SOAD
14.09.09
✎
04:47
|
а вообще проще сделать свой макет,отредактировать его вручную как надо и подсунуть его построителю.
|
|||
|
24
SOAD
14.09.09
✎
04:50
|
(23)
Процедура ОтчетВывести() //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ(Отчет) // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! ЭлементыФормы.ПолеТабличногоДокумента.Очистить(); ПостроительОтчетаОтчет.Выполнить(); ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.Отдельно; ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.Отдельно; ПостроительОтчетаОтчет.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика); //вот эту строку я заремил //ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента); //и вместо неё добавил следующее ПостроительОтчетаОтчет.Макет=ПолучитьМакет("СобственныйМакет"); ПостроительОтчетаОтчет.Выполнить(); ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента); //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ КонецПроцедуры |
|||
|
25
SOAD
14.09.09
✎
04:53
|
(24) верхняя строка: ПостроительОтчетаОтчет.Выполнить(); конечно же лишняя
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |