![]() |
|
СКД: передача параметра "Дата" во внешнюю Таблицу значений | ☑ | ||
---|---|---|---|---|
0
Айвонттубифри
25.02.21
✎
22:41
|
Пишу отчет на СКД, в качестве одного из набора данных передаю таблицу значений (ТЗ), которую сформировала заранее в модуле объекта отчета. Сейчас ТЗ формируется на текущую дату, строчка:
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); Как мне прописать, чтобы ТЗ формировалась на дату, заданную пользователем в параметрах отчета СКД? Ниже код из модуля объекта, где формируется ТЗ: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; тзИтог = ПодготовимТЗИтог(); ИменаКадровыхДанных = "Подразделение, Должность"; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Ссылка |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.ПометкаУдаления = ЛОЖЬ"; СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка"); КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); //вот здесь как мне передать дату, заданную на форме СКД? Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл СтрокаИтоговойТЗ = тзИтог.Добавить(); СтрокаИтоговойТЗ.Сотрудник = ДанныеСотрудника.Сотрудник; СтрокаИтоговойТЗ.Подразделение = ДанныеСотрудника.Подразделение; СтрокаИтоговойТЗ.Должность = ДанныеСотрудника.Должность; Иначе Продолжить; КонецЕсли; КонецЦикла; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ВнешнийНаборДанных = Новый Структура("ТЗ", ТЗИтог); //Внешний набор данных записываем в структуру, где ключ = имени внешнего набора данных в СКД ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки); //Устанавливаем в СКД внешний набор данных ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
1
acht
25.02.21
✎
22:48
|
МойПараметр = Новый ПараметрКомпоновкиДанных("ИмяПараметра");
ЗначениеМоегоПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(МойПараметр).Значение; |
|||
2
Айвонттубифри
25.02.21
✎
22:51
|
(1) Не совсем поняла, куда именно это вставлять и как мне это использовать в строчке ниже, вместо ТекущаяДата()?
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); |
|||
3
acht
25.02.21
✎
22:57
|
(2) Логично
|
|||
4
Айвонттубифри
25.02.21
✎
23:30
|
В СКД, на вкладке параметры, вручную добавила параметр "НаДату" и прописала его в коде ниже. Но теперь отчет вообще перестал формироваться. Вот код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); НаДату = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаДату")).Значение.НаДату; //вот это не срабатывает!!! тзИтог = ПодготовимТЗИтог(); ИменаКадровыхДанных = "Подразделение, Должность"; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Ссылка |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.ПометкаУдаления = ЛОЖЬ"; СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка"); // КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); //вот здесь как мне передать дату, заданную на форме СКД? КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату); //вот это не срабатывает!!! Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл СтрокаИтоговойТЗ = тзИтог.Добавить(); СтрокаИтоговойТЗ.Сотрудник = ДанныеСотрудника.Сотрудник; СтрокаИтоговойТЗ.Подразделение = ДанныеСотрудника.Подразделение; СтрокаИтоговойТЗ.Должность = ДанныеСотрудника.Должность; Иначе Продолжить; КонецЕсли; КонецЦикла; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ВнешнийНаборДанных = Новый Структура("ТЗ", ТЗИтог); //Внешний набор данных записываем в структуру, где ключ = имени внешнего набора данных в СКД ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки); //Устанавливаем в СКД внешний набор данных ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
5
AlvlSpb
25.02.21
✎
23:36
|
(4) Настройки = КомпоновщикНастроек.ПолучитьНастройки();
НаДату = Настройки.ПараметрыДанных.Элементы.Найти("НаДату").Значение КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату); |
|||
6
AlvlSpb
25.02.21
✎
23:39
|
(5) Не надо создавать параметр, он у тебя создан в СКД. Надо найти этот параметр по имени и получить его значение. В примере (4) Параметр в СКД имеет имя НаДату, у тебя он может по другому назван, тогда просто поменяй имя
|
|||
7
Айвонттубифри
25.02.21
✎
23:50
|
(6) Всё равно отчет перестал формироваться, ниже код... В СКД, на вкладке параметры, вручную добавлен параметр "НаДату".
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; //Настройки = КомпоновщикНастроек.ПолучитьНастройки(); //НаДату = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаДату")).Значение.НаДату; //вот это не срабатывает!!! Настройки = КомпоновщикНастроек.ПолучитьНастройки(); НаДату = Настройки.ПараметрыДанных.Элементы.Найти("НаДату").Значение; //вот это не срабатывает!!! тзИтог = ПодготовимТЗИтог(); ИменаКадровыхДанных = "Подразделение, Должность"; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Ссылка |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.ПометкаУдаления = ЛОЖЬ"; СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка"); // КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); //вот здесь как мне передать дату, заданную на форме СКД? КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату); //вот это не срабатывает!!! Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл СтрокаИтоговойТЗ = тзИтог.Добавить(); СтрокаИтоговойТЗ.Сотрудник = ДанныеСотрудника.Сотрудник; СтрокаИтоговойТЗ.Подразделение = ДанныеСотрудника.Подразделение; СтрокаИтоговойТЗ.Должность = ДанныеСотрудника.Должность; Иначе Продолжить; КонецЕсли; КонецЦикла; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ВнешнийНаборДанных = Новый Структура("ТЗ", ТЗИтог); //Внешний набор данных записываем в структуру, где ключ = имени внешнего набора данных в СКД ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки); //Устанавливаем в СКД внешний набор данных ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
8
AlvlSpb
25.02.21
✎
23:57
|
(7) Почему вручную? Ваше: "Как мне прописать, чтобы ТЗ формировалась на дату, заданную пользователем в параметрах отчета СКД?"
Т.е. этот параметр Дата уже есть в макете СКД, зачем его еще раз плодить? Вот имя параметра куда пользователь вставляет дату перед формирования отчета, надо найти и получить что там вставил пользователь |
|||
9
AlvlSpb
25.02.21
✎
23:58
|
(7) Покажи скрин закладки Параметры в макете СКД
|
|||
10
Айвонттубифри
26.02.21
✎
00:10
|
(8) Вобщем отчет стал формироваться, после того, как в коде исправила НаДату на НаДату.Дата
//КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату); КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату.Дата); AlvlSpb и acht - спасибо! |
|||
11
AlvlSpb
26.02.21
✎
00:19
|
(10) Это значит, что Параметр "НаДату" - стандартный период. Не было сказано ни слова об этом
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |