Вход | Регистрация

1С:Предприятие ::

Метки: 

передать параметры в функцию

Я
   dft2014
 
14.11.17 - 17:37
На форме отчета есть два реквизита: Сотрудник и Подразделение. Если пользователь указал Сотрудника или Подразделение, то отчет должен сформироваться с отбором по Сотруднику или Подразделению. Если отбор на форме не указан, то отчет должен формироваться по всем Сотрудникам  или всем Подразделениям.
Проблема в том, что в отчете я использую типовую функцию. Условие с отбором по сотруднику срабатывает верно. Но не получается передать правильно параметры в эту функцию, чтобы выполнялись условия:
- если не задан сотрудник, то формировать по всем сотрудникам;
- если задано подразделение, то формировать только по этому  подразделению;
- если не задано подразделение, то формировать по всем.
Помогите пож-та, ниже код:


ЧтоИщу = "Подразделение, Должность, ТабельныйНомер, ФИО, Состояние";

Если ЗначениеЗаполнено(Отчет.Сотрудник) Тогда
    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Отчет.Сотрудник, ЧтоИщу, ПериодОтчета);//это срабатывает правильно

Иначе
    //вот здесь как задать условие, без отбора по Сотруднику    

КонецЕсли;

Если ЗначениеЗаполнено(Отчет.Подразделение) Тогда
    //вот здесь как задать условие, с отбором по Подразделению    

Иначе
    //вот здесь как задать условие, без отбора по Подразделению    

КонецЕсли;



//ИЗ ОПИСАНИЯ:

Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт
    //    Параметры:

    //    ТолькоРазрешенные - Булево

    //  СписокСотрудников - Массив ссылок на элементы справочника сотрудники или СправочникСсылка.Сотрудники.

    //  КадровыеДанные -     Строка - список полей данных, перечисленных через запятую 

    //                        или Массив строк с полями данных,

    //                        которые необходимо получить. 

    //

    //    ДатаПолученияДанных    - дата на которую необходимо получить данные сотрудников, 

    //

    //  ПоляОтбораПериодическихДанных - Структура, в качестве ключа указывается имя таблицы, содержащей

    //                                    периодические данные (например ФИОФизическихЛиц, ГражданствоФизическихЛиц).

    //                                    В качестве значений коллекция условий отбора, 

    //                                    соединяемых по "И" и применяемых к регистру сведений.

    //                                    Коллекция строки которой имеют поля.

    //                                        * ЛевоеЗначение - строка, имя поля регистра сведений.

    //                                        * ВидСравнения - строка, вид сравнения, допустимый в языке запросов.

    //                                        * ПравоеЗначение - значение для сравнения с полем ЛевоеЗначение.
 
 
   Ёпрст
 
1 - 14.11.17 - 17:43
(0) передавай пустой список сотрудников
   Ёпрст
 
2 - 14.11.17 - 17:44
ну и в функции не видно, как там и чего фильтруется и как ты туда подразделения свои передаешь
   dft2014
 
3 - 14.11.17 - 17:46
(1) Как передать пустой список (массив) сотрудников?

Отборы передаются в пятом параметре функции: Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт
   Ёпрст
 
4 - 14.11.17 - 17:48
(3)
СписокСотрудников = Новый СписокЗначений;
   dft2014
 
5 - 14.11.17 - 17:48
Отбор по сотруднику я передала во ВТОРОМ параметре, все отлично сработало:
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Отчет.Сотрудник, ЧтоИщу, ПериодОтчета);

А вот остальные условия не удается сделать...
   dft2014
 
6 - 14.11.17 - 17:48
(4) Сейчас попробую...
   dft2014
 
7 - 14.11.17 - 17:59
Написала, если нет отбора по сотруднику, но отчет ничего не вернул:

СписокСотрудников = Новый Массив;
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ЧтоИщу, ПериодОтчета);
   Ёпрст
 
8 - 14.11.17 - 18:00
покажи текст функции целиком
   breezee
 
9 - 14.11.17 - 18:05
Может на СКД можно сформировать? Она умеет в пусты параметры через "{}"
   dft2014
 
10 - 14.11.17 - 18:06
(8) Вот исходник:

// Возвращает таблицу значений заполненную данными сотрудников, перечисленными в 

// параметре СписокНеобходимыхДанных.
//

// Параметры:
//    ТолькоРазрешенные - Булево

//  СписокСотрудников - Массив ссылок на элементы справочника сотрудники или
//                          СправочникСсылка.Сотрудники.

//  КадровыеДанные -     Строка - список полей данных, перечисленных через запятую 
//                        или Массив строк с полями данных,

//                        которые необходимо получить. Ниже приведены идентификаторы 
//                        получаемых данных и описание значения, которое будет возвращено в 

//                        таблице значений
//                        которые необходимо получить. Ниже приведены идентификаторы 

//                        получаемых данных и описание значения, которое будет возвращено в 
//                        таблице значений.

//
//    ДатаПолученияДанных    - дата на которую необходимо получить данные сотрудников, 

//                        применимо к данным, носящим периодический характер.
//                        Если дату не указывать, будут получены самые последние данные.

//
//

//  ПоляОтбораПериодическихДанных - Структура, в качестве ключа указывается имя таблицы, содержащей
//                                    периодические данные (например ФИОФизическихЛиц, ГражданствоФизическихЛиц).

//                                    В качестве значений коллекция условий отбора, 
//                                    соединяемых по "И" и применяемых к регистру сведений.

//                                    Коллекция строки которой имеют поля.
//                                        * ЛевоеЗначение - строка, имя поля регистра сведений.

//                                        * ВидСравнения - строка, вид сравнения, допустимый в языке запросов.
//                                        * ПравоеЗначение - значение для сравнения с полем ЛевоеЗначение.

//
//    Список полей, допустимых в параметре КадровыеДанные см. КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников.

//
// Возвращаемое значение:

//   ТаблицаЗначений   - Таблица значений, содержащая запрошенные данные.
//

Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт
    
    // Подготовим Запрос и Менеджер временных таблиц.

    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    // Сформируем временную таблицу ВТКадровыеДанныеФизическихЛиц.

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

    Запрос.Текст = "ВЫБРАТЬ КадровыеДанныеСотрудников.* ИЗ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников";
    КадровыеДанныеСотрудников = Запрос.Выполнить().Выгрузить();
    
    Возврат КадровыеДанныеСотрудников;
    
КонецФункции
 
  Рекламное место пустует
   dft2014
 
11 - 14.11.17 - 18:08
// Формирует временную таблицу ВТКадровыеДанныеСотрудников, содержащую кадровые данные сотрудников,

// переданных ей в качестве параметра на указанную дату.
//

// Параметры:
//        МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в котором формируется временная таблица.

//        ТолькоРазрешенные - Булево
//        СписокСотрудников - Массив ссылок или ссылка на элемент справочника Сотрудники.

//        КадровыеДанные - см. описание к функции КадровыеДанныеСотрудников.
//        ДатаПолученияДанных - Дата, на которую необходимо получить "периодические" данные.

//        ПоляОтбораПериодическихДанных -  см. описание к функции КадровыеДанныеСотрудников.
// 

Процедура СоздатьНаДатуВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, Знач ДатаПолученияДанных, ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт
    
    // Проверим, если в качестве параметра СписокФизическихЛиц, передана ссылка, создадим массив.

    Если ТипЗнч(СписокСотрудников) = Тип("СправочникСсылка.Сотрудники") Тогда
        МассивСотрудников = Новый Массив;
        МассивСотрудников.Добавить(СписокСотрудников);
    Иначе
        МассивСотрудников = СписокСотрудников;
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
    Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных);
    
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    &ДатаПолученияДанных КАК Период,
        |    ДанныеСотрудников.Ссылка КАК Сотрудник
        |ПОМЕСТИТЬ ВТСписокСотрудников
        |ИЗ
        |    Справочник.Сотрудники КАК ДанныеСотрудников
        |ГДЕ
        |    ДанныеСотрудников.Ссылка В(&МассивСотрудников)";
    
    УстановитьПривилегированныйРежим(Истина);
    Запрос.Выполнить();
    УстановитьПривилегированныйРежим(Ложь);
    
    ОписательВременныхТаблиц = ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
        МенеджерВременныхТаблиц, "ВТСписокСотрудников");
    
    СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, ТолькоРазрешенные, КадровыеДанные, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень);
    
    Запрос.Текст = "УНИЧТОЖИТЬ ВТСписокСотрудников";
    Запрос.Выполнить();
    
КонецПроцедуры
   dft2014
 
12 - 14.11.17 - 18:19
Ап!
   Ёпрст
 
13 - 14.11.17 - 18:19
(11)
судя по
    |ГДЕ
        |    ДанныеСотрудников.Ссылка В(&МассивСотрудников)";

- никак не сделаешь. Только лили переделывать код процы
СоздатьНаДатуВТКадровыеДанныеСотрудников

или передавать массив всех сотрудников.
А так, в своём коде не используй эту функцию вообще.
   Ёпрст
 
14 - 14.11.17 - 18:20
напиши свою, которая вернёт что надо о и как надо.
   dft2014
 
15 - 15.11.17 - 10:43
(13) А как передать массив всех сотрудников?

(14) Мне надо использовать типовую, она уже готовая и возвращает то, что мне надо.
   Ёпрст
 
16 - 15.11.17 - 10:48
(15)
1. не надо этого делать
2. не надо использовать типовую
   dft2014
 
17 - 15.11.17 - 10:54
(16) Типовая функция, помимо этого:
ЧтоИщу = "Подразделение, Должность, ТабельныйНомер, ФИО, Состояние";
тянет еще около 15-ти показателей, которые я просто не указала. Т.е. если писать свои функции, то это очень много времени займет. А тут все тянется с помощью одной типовой  функции!!!
   h-sp
 
18 - 15.11.17 - 11:06
(17) посмотрите в типовой как в других местах вызывается эта функция, перенесите к себе
   Ёпрст
 
19 - 15.11.17 - 11:12
(17) как скажешь
Запрос = Новый Запрос("выбрать ссылка из СправочникюСотрудники");
СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка");


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