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