Как в СКД вывести дату и время формирования отчета? Есть несколько вариантов вывода информации перед основным отчетом,какой лучше?! - зависит от задачи:
Допустим нам нужно вывести дату и время формирования отчета и свою шапку отчета, например так:
Варианты решения:
1. Использование группировки и макета заголовка: 1. Создаем в схеме новую группировку (без поля) и установим имя группировке Шапка отчета.
2. Удалим у данной группировки из выбранных полей автополе
В других настройках выберем макет оформления "Без оформления" (иначе на наш макет будет накладываться стандартный макет и вокруг всех ячеек будет рамка)
На вкладке макеты добавляем макет заголовка группировки (при добавлении указываем наше имя группировки (Шапка отчета) и указываем область с нашими данными), справа в табличном документе пишем необходимый текст и параметр
Сохраняем, формируем и видим результат как выше
2. Программное изменение текста заголовка Код нужно установить в процедуре модуля отчета ПриКомпоновкеРезультата()
Код 1C v 8.2 УП ЗначениеПараметра = КомпоновщикНастроек. Настройки. ПараметрыВывода.
НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных( "Title" ) ) ;
ЗначениеПараметра. Значение= "Отчет сформирован " + Формат( ТекущаяДата( ) , "ДЛФ=DDT" ) ;
ЗначениеПараметра. Использование = Истина ;
еще пример:
Код 1C v 8.3 Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
КомпоновщикНастроек. Настройки. ПараметрыВывода. Элементы. Найти( "ВыводитьЗаголовок" ) . Использование = Истина ;
КомпоновщикНастроек. Настройки. ПараметрыВывода. Элементы. Найти( "ВыводитьЗаголовок" ) . Значение = ТипВыводаТекстаКомпоновкиДанных. Выводить;
КомпоновщикНастроек. Настройки. ПараметрыВывода. Элементы. Найти( "Заголовок" ) . Использование = Истина ;
КомпоновщикНастроек. Настройки. ПараметрыВывода. Элементы. Найти( "Заголовок" ) . Значение = "Пример вывода своего заголовка," + Символы. ПС
+ "Отчет сформирован " + Формат( ТекущаяДата( ) , "ДЛФ=DDT" ) ;
КонецПроцедуры
3. Вывод табличного макета с параметром перед формированием отчета Создаем макет ВыводСформирован , в нем создаем параметр Сформирован и назначаем имя области Заголовок
В модуле перед
Код 1C v 8.х МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
Пишем:
Код 1C v 8.х
МакетЗаголовка = ПолучитьМакет( "ВыводСформирован" ) ;
ОбластьЗаголовка = МакетЗаголовка. ПолучитьОбласть( "Заголовок" ) ;
ОбластьЗаголовка. Параметры. Сформирован = "Сформирован: " + Формат( ТекущаяДата( ) , "ДЛФ=DDT" ) ;
ТабличныйДокумент. Вывести( ОбластьЗаголовка) ;
в результате:
Категория:
Схема Компоновки Данных Как сформировать отчет СКД без проверки прав (в привилегированном режиме)? Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав!
Особенно если настроен RLS
Есть несколько способов как это сделать: 1. Установить привилегированный режим в модуле отчета
Форма отчета должна быть Управляемой, далее в модуле отчета процедура обработчика «При компоновке результата»:
Код 1C v 8.3
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
УстановитьПривилегированныйРежим( Истина ) ;
СформироватьОтчет( ДокументРезультат, ДанныеРасшифровки) ;
УстановитьПривилегированныйРежим( Ложь ) ;
КонецПроцедуры
2. Формирование в п ривилегированном режиме через Общий модуль с галкой Привелигерованный
Создаем общий модуль
так же как в пункте 1 в обработчике «При компоновке результата» пишем:
Код 1C v 8.3
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
МЕ_ДляОтчетаСКД_ПривелРежим. СформироватьОтчетПривРеж( ДокументРезультат, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек) ;
КонецПроцедуры
В общем модуле МЕ_ДляОтчетаСКД_ПривелРежим код:
Код 1C v 8.3 Процедура СформироватьОтчетПривРеж(ТабличныйДокумент, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек) Экспорт
ТабличныйДокумент. Очистить( ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки, , , Ложь ) ;
ВнешниеНаборыДанных = Новый Структура;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных, ВнешниеНаборыДанных, ДанныеРасшифровки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ТабличныйДокумент) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
КонецПроцедуры
3. Если включен режим Использовать ограничение на уровне прав доступа - RLS
Часто используется в типовых. Тут в модуле для текущего пользователя можно на время формирования отчету установить параметр сеанса ИспользоватьОграниченияПравДоступаНаУровнеЗаписей в Ложь и RLS не сработает.
Код 1C v 8.3 ПараметрыСеанса. ИспользоватьОграниченияПравДоступаНаУровнеЗаписей= Ложь ;
После завершения формирования, не забудьте включить rls обратно установив = Истина
4. Если в запросе используется конструкция вида регистратор.дата и это поле не отображается в полях отчета СКД
Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?
Проблема в том - что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все - поэтому через скд эта таблица целиком недоступна, решение:
1. открыть доступ на все регистраторы регистра
2. в запросе четко обозначить тип
Код 1C v 8.3
ВЫРАЗИТЬ( ДокументыОплаты. Регистратор КАК Документ. ПлатежноеПоручениеВходящее) . СуммаДокумента
ВЫБОР
КОГДА РАЗНОСТЬДАТ( ВЫРАЗИТЬ( ВзаиморасчетыПоДокументам. ДокументРасчетовСКонтрагентом КАК Документ. ПоступлениеТоваровУслуг) . Дата, КонецПериода, ДЕНЬ) > ВзаиморасчетыПоДокументам. ДоговорКонтрагента. ДопустимоеЧислоДнейЗадолженности
ТОГДА ДОБАВИТЬКДАТЕ( ВЫРАЗИТЬ( ВзаиморасчетыПоДокументам. ДокументРасчетовСКонтрагентом КАК Документ. ПоступлениеТоваровУслуг) . Дата, ДЕНЬ, ВзаиморасчетыПоДокументам. ДоговорКонтрагента. ДопустимоеЧислоДнейЗадолженности)
ИНАЧЕ ДАТАВРЕМЯ( 1 , 1 , 1 )
КОНЕЦ КАК ДеньВозникновенияЗадолженности
В дополнении у пункту 1, код процедуры сформировать отчет(). Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1 в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах:
Код 1C v 8.3
Процедура СформироватьОтчет(ТабличныйДокумент, ДанныеРасшифровки)
УстановитьПривилегированныйРежим( Истина ) ;
ВосстановитьНастройкиВыводаЗаголовка( ) ;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ТабличныйДокумент. Очистить( ) ;
УстановитьПараметрыОтчета( ) ;
СохранитьНастройкиВыводаЗаголовка( ) ;
ВыводитьЗаголовок = ВыводитьЗаголовокОтчета( ) ;
Если ВыводитьЗаголовок Тогда
ПрисоединитьЗаголовокОтчетаКТабличномуДокументу( ТабличныйДокумент, ПолучитьТекстЗаголовкаОтчета( ) ) ;
НайденнаяНастройкаВыводаЗаголовка = КомпоновщикНастроек. Настройки. ПараметрыВывода. Элементы. Найти( "ВыводитьЗаголовок" ) ;
НайденнаяНастройкаВыводаЗаголовка. Значение = ТипВыводаТекстаКомпоновкиДанных. НеВыводить;
НайденнаяНастройкаВыводаЗаголовка. Использование = Истина ;
КонецЕсли ;
КопияДополнительныхНастроек = УстановитьДополнительныеНастройкиДляРасшифровки( ) ;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
ВнешниеНаборыДанных = Новый Структура;
ТаблицаВнешнегоНабораДанных = ПолучитьТаблицуВнешнегоНабораДанных( ) ;
ВнешниеНаборыДанных. Вставить( "ТаблицаВнешнегоНабораДанных" , ТаблицаВнешнегоНабораДанных) ;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных, ВнешниеНаборыДанных, ДанныеРасшифровки) ;
ВывестиРезультатКомпоновкиСАвтофиксациейСтрок( ТабличныйДокумент, ПроцессорКомпоновкиДанных, ДанныеРасшифровки. Элементы, , , КоличествоФиксируемыхСтолбцов) ;
ДополнительнаяОбработкаРезультатаОтчета( ТабличныйДокумент) ;
Если ВыводитьЗаголовок Тогда
ВосстановитьНастройкиВыводаЗаголовка( ) ;
КонецЕсли ;
Для Каждого ЭлементСтруктуры Из КопияДополнительныхНастроек Цикл
КомпоновщикНастроек. Настройки. ДополнительныеСвойства. Вставить( ЭлементСтруктуры. Ключ, ЭлементСтруктуры. Значение) ;
КонецЦикла ;
ОчиститьСохраненныеНастройкиВыводаЗаголовка( ) ;
УстановитьВидимостьЗаголовкаОтчета( ТабличныйДокумент) ;
УстановитьВидимостьПараметровОтчета( ТабличныйДокумент) ;
УстановитьПривилегированныйРежим( Ложь ) ;
КонецПроцедуры
Категория:
Схема Компоновки Данных Как программно свернуть группировки в СКД (система компоновки данных)? При формировании отчетов на СКД по умолчанию все группировки развернуты, но бывает что необходимо сразу после формирования показать отчет со свернутыми группировками!
Данный код в модуле отчета позволяет свернуть группировки до необходимого уровня (0,1,2....):
Код 1C v 8.2 УП Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакет. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , ДанныеРасшифровки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
ДокументРезультат. ПоказатьУровеньГруппировокСтрок( 0 ) ;
КонецПроцедуры
Категория:
Схема Компоновки Данных Как свернуть группировки в СКД (система компоновки данных) По умолчанию в СКД группировки развернуты,
данный код в модуле отчета позволяет свернуть группировки до необходимого уровня YYYYY(0,1,2....)
Код 1C v 8.х
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакет. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , ДанныеРасшифровки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
ДокументРезультат. ПоказатьУровеньГруппировокСтрок( 0 ) ;
КонецПроцедуры
Категория: Нет
Печатная форма с использованием СКД Создаем макет СКД, там произвольно или с какими-нибудь условиями выбираем в наборе данных поля табличной части, ставим условие на документ владелец, и задаем оформление. В форме документа добавляем кнопку печать, прописываем в параметрах наш документ и оп-ля - печатная форма готова
Код 1C v 8.х Процедура ОсновныеДействияФормыПечать(Кнопка)
Если Ссылка = Документы. РасчетЗаказа. ПустаяСсылка( ) тогда
Предупреждение( "Документ не записан" ) ;
Возврат ;
Иначе
Схема = ПолучитьМакет( "Макет1" ) ;
Настройки = Схема. НастройкиПоУмолчанию;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных( ) ;
КомпоновщикНастроек. ЗагрузитьНастройки( Настройки) ;
ПараметрДок = Новый ПараметрКомпоновкиДанных( "документ" ) ;
ЗначениеПараметраДок = КомпоновщикНастроек. Настройки. ПараметрыДанных. НайтиЗначениеПараметра( ПараметрДок) ;
ЗначениеПараметраДок. Значение = Ссылка;
ЗначениеПараметраДок. Использование = Истина ;
Настройки = КомпоновщикНастроек. Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета. Выполнить( Схема, Настройки) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновки) ;
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ДокументРезультат. ОтображатьЗаголовки = Ложь ;
ДокументРезультат. ОтображатьСетку = Ложь ;
ДокументРезультат. АвтоМасштаб = Истина ;
ДокументРезультат. Показать( ) ;
КонецЕсли ;
КонецПроцедуры
Автор:
sanja Категория:
Схема Компоновки Данных Вывод картинки в строках отчета на СКД В этом примере показан метод вывода в строку отчета картинки, вид которой завист от значения другого поля.
Ради примера, в отчет выведем справоник «Банки» - реквизит «Ссылка» и картинку возле этого реквизита. Вид картинки зависит от значения реквизита «ЭтоГруппа»
Создаем новый
отчет - Основная схема компоновки данных:
В
Вычисляемые поля добавлено поле «ПолеКартинка». В выражение добавлено значение «%Картинка%», поэтому выражению будем искать область ячеек куда необходимо вставить нашу картинку:
В это поле будет выводится картинка.
В настройках указываем:
В модуле объекта пишем код:
Код 1C v 8.х Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ДокументРезультат. Очистить( ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , ДанныеРасшифровки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПолеПоКоторомуНеобходимоПолучитьЗначение = "Ссылка" ;
ПроцессорВывода. НачатьВывод( ) ;
Пока истина Цикл
ЭлементРезультата = ПроцессорКомпоновки. Следующий( ) ;
Если ЭлементРезультата = Неопределено Тогда
прервать ;
КонецЕсли ;
ПроцессорВывода. ВывестиЭлемент( ЭлементРезультата) ;
Если ЭлементРезультата. ЗначенияПараметров. Количество( ) > 0 Тогда
ЗначениеВыводимыхДанных = Неопределено ;
Для каждого ЗначениеПараметра из ЭлементРезультата. ЗначенияПараметров Цикл
Если ТипЗнч( ЗначениеПараметра. Значение) = Тип( "ИдентификаторРасшифровкиКомпоновкиДанных" ) Тогда
ПоляРасшифровки = ДанныеРасшифровки. Элементы[ЗначениеПараметра. Значение]. ПолучитьПоля( ) ;
Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
Если ПолеРасшифровки. Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
ЗначениеВыводимыхДанных = ПолеРасшифровки. Значение;
Прервать ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Если ЗначениеЗаполнено( ЗначениеВыводимыхДанных) Тогда
Рис = ДокументРезультат. Рисунки. Добавить( ТипРисункаТабличногоДокумента. Картинка) ;
Рис. РазмерКартинки = РазмерКартинки. РеальныйРазмер;
Индекс = ДокументРезультат. Рисунки. Индекс( Рис) ;
Если ЗначениеВыводимыхДанных. ЭтоГруппа Тогда
ДокументРезультат. Рисунки[Индекс]. Картинка = БиблиотекаКартинок. ГруппаИЭлемент;
Иначе
ДокументРезультат. Рисунки[Индекс]. Картинка = БиблиотекаКартинок. Сформировать;
КонецЕсли ;
ВысотаТабДок = ДокументРезультат. ВысотаТаблицы;
ОбластьДляКартинки = ДокументРезультат. НайтиТекст( "%Картинка%" ) ;
Если ОбластьДляКартинки < > Неопределено Тогда
ДокументРезультат. Рисунки[Индекс]. Расположить( ОбластьДляКартинки) ;
ОбластьДляКартинки. Текст = "%КартинкаДобавлена%"
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
ПроцессорВывода. ЗакончитьВывод( ) ;
КонецПроцедуры
В результате:
Скачать пример этого отчета(Работает в любой конфишурации где есть справочник Банки):
Скачивать файлы может только зарегистрированный пользователь! Категория:
Схема Компоновки Данных Пример вывода в шапке отчета произвольного текста и Картинки Многие спрашивают "Как в шапке отчета созданом с помощи СКД разместить произвольный текст и Картинку?", так вот:
1. Для примера буду использовать отчет созданный в
Пример разработки простого отчета - Схема Компоновки Данных (СКД)
2. В отчете создадим основную форму и для кнопки сформировать пропишем процедуру ПечатьНажатие:
Код 1C v 8.х Процедура ПечатьНажатие(Элемент)
СхемаКомпоновкиДанных = ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Настройки = КомпоновщикНастроек. Настройки;
МакетКомпоновки = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновки, , ДанныеРасшифровки) ;
ДокументРезультат = ЭлементыФормы. Результат;
ДокументРезультат. АвтоМасштаб = Истина ;
Макет = ПолучитьМакет( "НазваниеСРисунком" ) ;
ОбластьВывести = Макет. ПолучитьОбласть( "Вывести" ) ;
ОбластьВывести. Параметры. ТекДата= ТекущаяДата( ) ;
ДокументРезультат. Вывести( ОбластьВывести) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ДокументРезультат. ОтображатьСетку = Ложь ;
ДокументРезультат. ОтображатьЗаголовки = Ложь ;
ДокументРезультат. Показать( ) ;
КонецПроцедуры
3. И создаем макет "НазваниеСРисунком"
4. Сохраняем, запускаем, получаем:
Автор:
Евгений Мигачев Категория:
Схема Компоновки Данных