Имя: Пароль:
1C
1С v8
Использование параметра (шаблона) в СКД
0 Ira_19
 
28.03.12
20:18
В отчете нужно вывести в определенном месте некоторое значение, например, название детали, для которой формируется отчет, или ФИО сотрудника, формирующего отчет.
Для этого создала пустую группировку (Детальные записи) в настройках отчета, затем на Макете для этой группировки определила параметр в формате "Деталь - [Деталь]", и в качестве Заполнения - Шаблон. Затем в параметрах для параметра Деталь заполнила Выражение "Представление(Деталь)" (данные берутся из запроса).
В итоге строка "Деталь - Значение" выводится столько раз, сколько строк в основной части отчёта.
Как сделать так, чтобы эта строка выводилась только один раз?
1 Ira_19
 
28.03.12
20:36
С этой частью справилась сама. Выводится 1 раз.
А вот как сделать так, чтобы выводилось ФИО, например, директора или другого сотрудника в шапке отчёта?
2 vmv
 
28.03.12
20:49
это задача требует решения в тихой обстановке: бар, ресторан, пляж
3 Новиков
 
28.03.12
21:11
ФИО пользователя - обычно делают через колонтитулы.

Но если очень хочется нарисовать свою шапку, тогда самый простой путь - это не лезь в настройки компоновки, как ты решила, а просто определить отдельный макет (общий) и его вывести в табличный документ (или в поле табличного документа), предварительно заполнив нужные тебе параметры. Так кстати работает типовой шаблон в типовых.
4 Ira_19
 
28.03.12
21:41
(3) А как использовать колонтитулы?
5 Ira_19
 
28.03.12
21:48
а если сделать собственную щапку, то как совместить стандартный макет СКД и собственный при формировании отчёта?
6 Новиков
 
28.03.12
22:11
(4)
ТабличныйДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабличныйДокумент.ВерхнийКолонтитул.НачальнаяСтраница = ...
ТабличныйДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева   = "Твой текст слева";
ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре = "Твой текст в центре";
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа  = "Твой текст справа";
   
(5) ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ну и дальше стандартный вывод собственно.
7 Ira_19
 
28.03.12
23:32
(6) я ещё не очень хорошо разбираюсь... дальше стандартный вывод - это какой?... может, есть, где почитать об этом?
8 Конфигуратор1с
 
29.03.12
00:06
(7)Хрусталева Разработка сложных отчетов
9 Ira_19
 
29.03.12
00:08
(8) спасибо! сейчас поищу и скачаю
10 Конфигуратор1с
 
29.03.12
00:20
(9)аяяй. Купили бы лучше
11 Новиков
 
29.03.12
09:08
Стр.478, "Вывод отчета средствами встроенного языка"
12 Ira_19
 
01.04.12
01:07
Спасибо большое Вам за помощь, но у меня всё равно не получается. Создала форму отчета, поместила в модуль формы код:

Перем Настройки;
Перем СхемаКомпоновкиДанных;

&НаСервере
Процедура УстановитьНастройки()
   Настройки = Отчет.КомпоновщикНастроек.Настройки;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии()
   СхемаКомпоновкиДанных = ПолучитьОтчет();
   Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   УстановитьНастройки();
   СформироватьОтчет();
КонецПроцедуры

Функция ПолучитьОтчет()
     Возврат Отчеты.ВедомостьНормВремени.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КонецФункции

///////////////////////////////
Процедура СформироватьОтчет() Экспорт
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                   Настройки, ДанныеРасшифровки);
                   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ДанныеРасшифровки);
   
   Элементы.Результат.Очистить();
   ДокументРезультат = Элементы.Результат;
   
   //Вывод результатов компоновки в табличный документ
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
   
   //Колонтитулы
   КолонтитулВывести(ДокументРезультат);
   //Колонтитулы
   
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры

//вывод колонтитула
Процедура КолонтитулВывести(ДокументРезультат) Экспорт

   ДокументРезультат.ВерхнийКолонтитул.Выводить = Истина;
   ДокументРезультат.ВерхнийКолонтитул.НачальнаяСтраница = 1;
   ДокументРезультат.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
   ДокументРезультат.ВерхнийКолонтитул.ТекстСлева   = "Твой текст слева";
   ДокументРезультат.ВерхнийКолонтитул.ТекстВЦентре = "Твой текст в центре";
   ДокументРезультат.ВерхнийКолонтитул.ТекстСправа  = "Твой текст справа";

КонецПроцедуры

Результат:
Если в СКД на закладке Настройки не выводить никаких группировок, отчёт будет пустым (код не сабатывает). Если выводить группировки, то собственно они выводятся.
НО колонтитулов не видно ни в одном из случаев. Что я не так делаю, подскажите, пожалуйста?
13 Ira_19
 
01.04.12
20:08
Аналогично, если добавить вывод колонтитула в печатную форму документа (добавила строки для колонтитулов в процедуру Печать, сформированную конструктором печати):

Процедура Печать(ТабДок, Ссылка) Экспорт
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   Макет = Документы.ВедомостьНормВремениДляПроизТМЦ.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   ..."; //текст запроса
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьНормыВремениШапка = Макет.ПолучитьОбласть("НормыВремениШапка");
   ОбластьНормыВремени = Макет.ПолучитьОбласть("НормыВремени");
   ТабДок.Очистить();

   ////////////////////////////////////////////////
   ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
   ТабДок.Автомасштаб = Истина;
   ТабДок.ВерхнийКолонтитул.Выводить = Истина;
   ТабДок.РазмерКолонтитулаСверху=7;
   ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх;
   ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=1;
   ТабДок.ВерхнийКолонтитул.ТекстВЦентре="Верхний колонтитул";
    ///////////////////////////////////////////////
   
   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
       Если ВставлятьРазделительСтраниц Тогда
           ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
       КонецЕсли;

       ТабДок.Вывести(ОбластьЗаголовок);

       Шапка.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Шапка, Выборка.Уровень());

       ТабДок.Вывести(ОбластьНормыВремениШапка);
       ВыборкаНормыВремени = Выборка.НормыВремени.Выбрать();
       Пока ВыборкаНормыВремени.Следующий() Цикл
           ОбластьНормыВремени.Параметры.Заполнить(ВыборкаНормыВремени);
           ТабДок.Вывести(ОбластьНормыВремени, ВыборкаНормыВремени.Уровень());
       КонецЦикла;

       ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры

Колонтитулов не видно ни при предварительном просмотре, ни после вывода на печать =(
14 Ira_19
 
02.04.12
21:18
Вопрос всё ещё актуален. Буду благодарна за помощь.
15 sanja26
 
02.04.12
21:21
(6) не надо никакого стандартного вывода
Достаточно

   ДокументРезультат.ВерхнийКолонтитул.Выводить = Истина;
   ДокументРезультат.ВерхнийКолонтитул.НачальнаяСтраница = 1;
   ДокументРезультат.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
   ДокументРезультат.ВерхнийКолонтитул.ТекстСлева   = "Твой текст слева";
   ДокументРезультат.ВерхнийКолонтитул.ТекстВЦентре = "Твой текст в центре";
   ДокументРезультат.ВерхнийКолонтитул.ТекстСправа  = "Твой текст справа";

в при компоновке результата. Ну и шрифт надо задать
16 sanja26
 
02.04.12
21:23
(14)    ТабДок.ПолеСверху = 10;
  ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
   ТабДок.Автомасштаб = Истина;
   ТабДок.ВерхнийКолонтитул.Выводить = Истина;
    ТабДок.РазмерКолонтитулаСверху=7;
    ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх;
    ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=1;
    ТабДок.ВерхнийКолонтитул.ТекстВЦентре="Верхний колонтитул";
17 Ira_19
 
02.04.12
21:36
(15), а то, что я писала в (12) правильно? Разве там не так?
18 sanja26
 
02.04.12
21:42
(17) колонтитул вывести в конец
19 sanja26
 
02.04.12
21:44
да, колонтитулы видны только на просмотр перед печатью
20 Ira_19
 
02.04.12
21:45
сейчас моя процедура такая:

Процедура СформироватьОтчет() Экспорт
   //В этот объект помещается информация о расшивровке данных
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   
   //Формирование макета компоновки данных
   //с помощью компоновщика макета
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   //В макет компоновки передаются СхемаКомпоновкиДанных, ее Настройки
   //и ДанныеРасшифровки для заполнения информации о расшифровке
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                   Настройки, ДанныеРасшифровки);
                   
   //Выполнение компоновки данных с помощью процессора компоновки
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ДанныеРасшифровки);
   
   //Очистка поля табличного документа - Результат
   Элементы.Результат.Очистить();
   ДокументРезультат = Элементы.Результат;
   
   //Вывод результатов компоновки в табличный документ
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
   
   //Колонтитулы
   КолонтитулВывести(ДокументРезультат);
   //Колонтитулы

КонецПроцедуры

правильно, в конце?

ничего не выводит
21 sanja26
 
02.04.12
21:50
А откуда взялись СхемаКомпоновкиДанных, Настрйки...
22 sanja26
 
02.04.12
21:54
СхемаКомпоновкиДанных = ПолучитьМакетНаСервере("ОсновнаяСхемаКомпоновкиДанных");
   Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
   
   РасшифровкаДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
   //ДанныеРасшифровки = ПоместитьВоВременноеХранилище(РасшифровкаДанных,Новый УникальныйИдентификатор);
   
   Данные = ПолучитьНаборДанныхОтчета(НачалоПериода,КонецПериода);
   
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ТаблицаДанных",Данные);
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,РасшифровкаДанных);
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,РасшифровкаДанных);
   
   ДанныеРасшифровки = ПоместитьВоВременноеХранилище(РасшифровкаДанных,Новый УникальныйИдентификатор);
   
   Результат = Элементы.Результат;
   Результат.Очистить();
           
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(Результат);

   Результат.ФиксацияСверху = 0;
   ПроцессорВывода.НачатьВывод();
   Попытка    
       Пока Истина Цикл                                
           ЭлементРезультата = ПроцессорКомпоновки.Следующий();  
           Если ЭлементРезультата = Неопределено Тогда
               Прервать;
           КонецЕсли;              
           Если Результат.ФиксацияСверху = 0 И ЭлементРезультата.ЗначенияПараметров.Количество() <> 0 Тогда
               Результат.ФиксацияСверху = Результат.ВысотаТаблицы;
           КонецЕсли;
           ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);            
       КонецЦикла;
   Исключение    
       Сообщить("Ошибка формирования отчета. Проверьте настройки");  
   КонецПопытки;    
   ПроцессорВывода.ЗакончитьВывод();  
   
   Результат.ПолеСверху   = 10;
   Результат.ВерхнийКолонтитул.Выводить = Истина;
   Результат.ВерхнийКолонтитул.НачальнаяСтраница = 1;
   Результат.ВерхнийКолонтитул.ТекстСправа ="[&НомерСтраницы]";
   НовыйШрифт = Новый Шрифт ("verdana",9,Истина); // получили такой же шрифт, но жирный
   Результат.ВерхнийКолонтитул.Шрифт = НовыйШрифт;
23 Ira_19
 
02.04.12
21:55
Я пишу запрос в СКД, получила набор данных. Потом создала форму отчёта, в модуле формы пишу всё, что есть в (12) (с исправлениями в (20).
24 Конфигуратор1с
 
02.04.12
21:59
(23) не получается, ибо нет фото в личке.
25 Ira_19
 
02.04.12
22:03
а у Вас тоже нет фотографии!
26 sanja26
 
02.04.12
22:04
(25) фотку в студию
27 sanja26
 
02.04.12
22:05
выдам секретную предопределенную процедуру
28 Ira_19
 
02.04.12
22:06
(24) и (26), как только вы разместите свои фото, я обещаю: свою тоже добавлю!

но вообще это к теме не относится.
(27) что за процедура?
29 sanja26
 
02.04.12
22:06
(28) ->(26)
30 Ira_19
 
02.04.12
22:08
Спасибо Вам за  "ПОМОЩЬ"
31 Ira_19
 
02.04.12
22:13
Может, играет роль версия 1с? У меня 8.2.
32 GenV
 
02.04.12
22:27
33 Ira_19
 
02.04.12
22:29
(32) о, спасибо. Надеюсь, будет полезно!
34 Конфигуратор1с
 
02.04.12
22:40
(32)Вот Вам не стыдно? Мы тут клиента уже почти дожали, а Вы все поломали ((((
35 GenV
 
02.04.12
22:47
(34) Собственно, клиент предлагал взаимный обмен фотка на фотку )
36 Ira_19
 
02.04.12
22:48
(34) какого ещё клиента?

а с тем, что предложил (32) нужно ещё разбираться, что-то я плохо поняла пока.
37 GenV
 
02.04.12
22:54
(36) Там предлагается создать группировки только для своих макетов шапки и подвала.
ЗЫ Вообще тебе уже предложили варианты вывода:
1) Колонтитулы
2) Программный вывод до/после формирования отчета своей области в Тб. документ - результат (так в типовых)
3) Использовать настройки группировок и собственные макеты
38 Ira_19
 
02.04.12
22:59
(37) я понимаю, что мне предложили много вариантов, и я очень всем благодарна, но у меня не получается выводить, например, ФИО пользователя, дату формирования отчета (хотя бы текст "Текст справа", "текст слева" и т.д.). Наверно, я что-то не так делаю...
поэтому я и выложила полный код, который пишу.
39 Конфигуратор1с
 
02.04.12
23:09
(35)ну так еще чучуть бы и перешла бы от обмена к демонстрации )))
40 Конфигуратор1с
 
02.04.12
23:10
(38) Еще раз. В (20) сам отчет выводит, а колонтитул не выводит или выдает пустой результат?
41 Ira_19
 
02.04.12
23:11
Пустой результат вообще: ни колонтитулов, ни самого результата
(на закладке Настройки в СКД нет никаких группировок - как описано в (12))
42 Конфигуратор1с
 
02.04.12
23:15
(41)группировки верните на место
43 Конфигуратор1с
 
02.04.12
23:16
(41) (22)Пробовали?
44 Ira_19
 
02.04.12
23:25
(43) пробовала. Ругается на некоторые строки:
ПолучитьМакетНаСервере
и
ПолучитьНаборДанныхОтчета
НачалоПериода
КонецПериода

ну начала и конца периода у меня просто нет, а вот с двумя другими функциями что делать? Это не стандартные функции (их нет в СП).
45 GenV
 
02.04.12
23:30
(37) Если не заморачисваться с программным выводом на УФ и если оставить типовой вывод отчета, то в ПриКомпоновкеРезультата достаточно:

Результат.ПолеСверху   = 10;
Результат.ВерхнийКолонтитул.Выводить = Истина;
Результат.ВерхнийКолонтитул.НачальнаяСтраница = 1;
Результат.ВерхнийКолонтитул.ТекстСправа ="[&НомерСтраницы]";
НовыйШрифт = Новый Шрифт ("verdana",9,Истина); // получили такой же шрифт, но жирный
Результат.ВерхнийКолонтитул.Шрифт = НовыйШрифт;
46 Ira_19
 
02.04.12
23:30
(42) если группировки оставить, то отчет сам выводится, колонтитулы нет (с моим кодом)
47 Ira_19
 
02.04.12
23:31
(45) Извините, но у где нужно писать процедуру / функцию ПриКомпоновкеРезультата и что там ещё нужно писать?
48 GenV
 
02.04.12
23:34
(47) Модуль отчета. Вывод стандартной кнопкой сформировать.

Процедура ПриКомпоновкеРезультата(Результат, ДанныеРасшифровки, СтандартнаяОбработка)
   
   Сообщить("ПриКомпоновкеРезультата");
   
Результат.ПолеСверху   = 10;
Результат.ВерхнийКолонтитул.Выводить = Истина;
Результат.ВерхнийКолонтитул.НачальнаяСтраница = 1;
Результат.ВерхнийКолонтитул.ТекстСправа ="[&НомерСтраницы]";
НовыйШрифт = Новый Шрифт ("verdana",9,Истина); // получили такой же шрифт, но жирный
Результат.ВерхнийКолонтитул.Шрифт = НовыйШрифт;

КонецПроцедуры
49 Ira_19
 
02.04.12
23:37
(48) УРА!!!!!!!!!!! Спасибо Вам большое. Номер страницы уже выводится, буду смотреть дальше.
50 sanja26
 
03.04.12
01:49
не прошло и полгода. Выдали тебе секретную процедуру)))
51 Ira_19
 
03.04.12
02:05
Хоть и отклонились уже от предмета вопроса, но... вот ещё бы хотелось выводить шапку отчета на каждой странице.

Нашла процедуру
Результат.ПовторятьПриПечатиСтроки = Результат.Область(ОбластьШапки.Верх, , ОбластьШапки.Низ);

только вот как получить эту ОбластьШапки, если макет сделан на СКД?
52 Ira_19
 
03.04.12
02:05
(50) мир не без добрых людей!
53 Ira_19
 
04.04.12
01:03
Всё сделала сама шапку на каждой странице. Всем спасибо, кто помогал с колонтитулами!