Имя: Пароль:
1C
1С v8
СКД: передача параметра "Дата" во внешнюю Таблицу значений
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) Это значит, что Параметр "НаДату" - стандартный период. Не было сказано ни слова об этом