Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

СКД: передача параметра "Дата" во внешнюю Таблицу значений

СКД: передача параметра "Дата" во внешнюю Таблицу значений
Я
   Айвонттубифри
 
25.02.21 - 22:41
Пишу отчет на СКД, в качестве одного из набора данных передаю таблицу значений (ТЗ), которую сформировала заранее в модуле объекта отчета. Сейчас ТЗ формируется на текущую дату, строчка:
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата());


Как мне прописать, чтобы ТЗ формировалась на дату, заданную пользователем в параметрах отчета СКД? Ниже код из модуля объекта, где формируется ТЗ:

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

Настройки = КомпоновщикНастроек.ПолучитьНастройки();

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

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

ДокументРезультат.Очистить();

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    

КонецПроцедуры
   acht
 
1 - 25.02.21 - 22:48
МойПараметр = Новый ПараметрКомпоновкиДанных("ИмяПараметра");
ЗначениеМоегоПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(МойПараметр).Значение;
   Айвонттубифри
 
2 - 25.02.21 - 22:51
(1) Не совсем поняла, куда именно это вставлять и как мне это использовать в строчке ниже, вместо ТекущаяДата()?
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата());
   acht
 
3 - 25.02.21 - 22:57
(2) Логично
   Айвонттубифри
 
4 - 25.02.21 - 23:30
В СКД, на вкладке параметры, вручную добавила параметр "НаДату" и прописала его в коде ниже. Но теперь отчет вообще перестал формироваться. Вот код:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    НаДату = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаДату")).Значение.НаДату;//вот это не срабатывает!!!

    
    тзИтог = ПодготовимТЗИтог();
    ИменаКадровыхДанных = "Подразделение, Должность";
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Сотрудники.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    |    Сотрудники.ПометкаУдаления = ЛОЖЬ";
    СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка");
    
    // КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); //вот здесь как мне передать дату, заданную на форме СКД?

    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату);//вот это не срабатывает!!!

    
    Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл
        СтрокаИтоговойТЗ = тзИтог.Добавить();
        СтрокаИтоговойТЗ.Сотрудник = ДанныеСотрудника.Сотрудник;
        СтрокаИтоговойТЗ.Подразделение = ДанныеСотрудника.Подразделение;
        СтрокаИтоговойТЗ.Должность = ДанныеСотрудника.Должность;
    Иначе
        Продолжить;
    КонецЕсли;
КонецЦикла;

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

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

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

КонецПроцедуры
   AlvlSpb
 
5 - 25.02.21 - 23:36
(4) Настройки = КомпоновщикНастроек.ПолучитьНастройки();
НаДату = Настройки.ПараметрыДанных.Элементы.Найти("НаДату").Значение
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату);
   AlvlSpb
 
6 - 25.02.21 - 23:39
(5) Не надо создавать параметр, он у тебя создан в СКД. Надо найти этот параметр по имени и получить его значение. В примере (4) Параметр в СКД имеет имя НаДату, у тебя он может по другому назван, тогда просто поменяй имя
   Айвонттубифри
 
7 - 25.02.21 - 23:50
(6) Всё равно отчет перестал формироваться, ниже код... В СКД, на вкладке параметры, вручную добавлен параметр "НаДату".


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    //Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    //НаДату = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаДату")).Значение.НаДату; //вот это не срабатывает!!!

    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    НаДату = Настройки.ПараметрыДанных.Элементы.Найти("НаДату").Значение;//вот это не срабатывает!!!

    
    тзИтог = ПодготовимТЗИтог();
    ИменаКадровыхДанных = "Подразделение, Должность";
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Сотрудники.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    |    Сотрудники.ПометкаУдаления = ЛОЖЬ";
    СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка");
    
    // КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ТекущаяДата()); //вот здесь как мне передать дату, заданную на форме СКД?

    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату);//вот это не срабатывает!!!

    
    Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл
        СтрокаИтоговойТЗ = тзИтог.Добавить();
        СтрокаИтоговойТЗ.Сотрудник = ДанныеСотрудника.Сотрудник;
        СтрокаИтоговойТЗ.Подразделение = ДанныеСотрудника.Подразделение;
        СтрокаИтоговойТЗ.Должность = ДанныеСотрудника.Должность;
    Иначе
        Продолжить;
    КонецЕсли;
КонецЦикла;

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

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

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

КонецПроцедуры
   AlvlSpb
 
8 - 25.02.21 - 23:57
(7) Почему вручную? Ваше: "Как мне прописать, чтобы ТЗ формировалась на дату, заданную пользователем в параметрах отчета СКД?"
Т.е. этот параметр Дата уже есть в макете СКД, зачем его еще раз плодить? Вот имя параметра куда пользователь вставляет дату перед формирования отчета, надо найти и получить что там вставил пользователь
   AlvlSpb
 
9 - 25.02.21 - 23:58
(7) Покажи скрин закладки Параметры в макете СКД
   Айвонттубифри
 
10 - 26.02.21 - 00:10
(8) Вобщем отчет стал формироваться, после того, как в коде исправила НаДату на НаДату.Дата
//КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату);

КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, НаДату.Дата);


AlvlSpb и  acht - спасибо!
   AlvlSpb
 
11 - 26.02.21 - 00:19
(10) Это значит, что Параметр "НаДату" - стандартный период. Не было сказано ни слова об этом

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.