|   |   | 
| 
 | передать параметры в функцию | ☑ | ||
|---|---|---|---|---|
| 0
    
        dft2014 14.11.17✎ 17:37 | 
        На форме отчета есть два реквизита: Сотрудник и Подразделение. Если пользователь указал Сотрудника или Подразделение, то отчет должен сформироваться с отбором по Сотруднику или Подразделению. Если отбор на форме не указан, то отчет должен формироваться по всем Сотрудникам  или всем Подразделениям. 
 Проблема в том, что в отчете я использую типовую функцию. Условие с отбором по сотруднику срабатывает верно. Но не получается передать правильно параметры в эту функцию, чтобы выполнялись условия: - если не задан сотрудник, то формировать по всем сотрудникам; - если задано подразделение, то формировать только по этому подразделению; - если не задано подразделение, то формировать по всем. Помогите пож-та, ниже код: ЧтоИщу = "Подразделение, Должность, ТабельныйНомер, ФИО, Состояние"; Если ЗначениеЗаполнено(Отчет.Сотрудник) Тогда КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Отчет.Сотрудник, ЧтоИщу, ПериодОтчета); //это срабатывает правильно Иначе //вот здесь как задать условие, без отбора по Сотруднику КонецЕсли; Если ЗначениеЗаполнено(Отчет.Подразделение) Тогда //вот здесь как задать условие, с отбором по Подразделению Иначе //вот здесь как задать условие, без отбора по Подразделению КонецЕсли; //ИЗ ОПИСАНИЯ: Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт // Параметры: // ТолькоРазрешенные - Булево // СписокСотрудников - Массив ссылок на элементы справочника сотрудники или СправочникСсылка.Сотрудники. // КадровыеДанные - Строка - список полей данных, перечисленных через запятую // или Массив строк с полями данных, // которые необходимо получить. // // ДатаПолученияДанных - дата на которую необходимо получить данные сотрудников, // // ПоляОтбораПериодическихДанных - Структура, в качестве ключа указывается имя таблицы, содержащей // периодические данные (например ФИОФизическихЛиц, ГражданствоФизическихЛиц). // В качестве значений коллекция условий отбора, // соединяемых по "И" и применяемых к регистру сведений. // Коллекция строки которой имеют поля. // * ЛевоеЗначение - строка, имя поля регистра сведений. // * ВидСравнения - строка, вид сравнения, допустимый в языке запросов. // * ПравоеЗначение - значение для сравнения с полем ЛевоеЗначение. | |||
| 1
    
        Ёпрст гуру 14.11.17✎ 17:43 | 
        (0) передавай пустой список сотрудников     | |||
| 2
    
        Ёпрст гуру 14.11.17✎ 17:44 | 
        ну и в функции не видно, как там и чего фильтруется и как ты туда подразделения свои передаешь     | |||
| 3
    
        dft2014 14.11.17✎ 17:46 | 
        (1) Как передать пустой список (массив) сотрудников?
 Отборы передаются в пятом параметре функции: Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт | |||
| 4
    
        Ёпрст гуру 14.11.17✎ 17:48 | 
        (3) 
 СписокСотрудников = Новый СписокЗначений; | |||
| 5
    
        dft2014 14.11.17✎ 17:48 | 
        Отбор по сотруднику я передала во ВТОРОМ параметре, все отлично сработало:
 КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Отчет.Сотрудник, ЧтоИщу, ПериодОтчета); А вот остальные условия не удается сделать... | |||
| 6
    
        dft2014 14.11.17✎ 17:48 | 
        (4) Сейчас попробую...     | |||
| 7
    
        dft2014 14.11.17✎ 17:59 | 
        Написала, если нет отбора по сотруднику, но отчет ничего не вернул:
 СписокСотрудников = Новый Массив; КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ЧтоИщу, ПериодОтчета); | |||
| 8
    
        Ёпрст гуру 14.11.17✎ 18:00 | 
        покажи текст функции целиком     | |||
| 9
    
        breezee 14.11.17✎ 18:05 | 
        Может на СКД можно сформировать? Она умеет в пусты параметры через "{}"     | |||
| 10
    
        dft2014 14.11.17✎ 18:06 | 
        (8) Вот исходник:
 // Возвращает таблицу значений заполненную данными сотрудников, перечисленными в // параметре СписокНеобходимыхДанных. // // Параметры: // ТолькоРазрешенные - Булево // СписокСотрудников - Массив ссылок на элементы справочника сотрудники или // СправочникСсылка.Сотрудники. // КадровыеДанные - Строка - список полей данных, перечисленных через запятую // или Массив строк с полями данных, // которые необходимо получить. Ниже приведены идентификаторы // получаемых данных и описание значения, которое будет возвращено в // таблице значений // которые необходимо получить. Ниже приведены идентификаторы // получаемых данных и описание значения, которое будет возвращено в // таблице значений. // // ДатаПолученияДанных - дата на которую необходимо получить данные сотрудников, // применимо к данным, носящим периодический характер. // Если дату не указывать, будут получены самые последние данные. // // // ПоляОтбораПериодическихДанных - Структура, в качестве ключа указывается имя таблицы, содержащей // периодические данные (например ФИОФизическихЛиц, ГражданствоФизическихЛиц). // В качестве значений коллекция условий отбора, // соединяемых по "И" и применяемых к регистру сведений. // Коллекция строки которой имеют поля. // * ЛевоеЗначение - строка, имя поля регистра сведений. // * ВидСравнения - строка, вид сравнения, допустимый в языке запросов. // * ПравоеЗначение - значение для сравнения с полем ЛевоеЗначение. // // Список полей, допустимых в параметре КадровыеДанные см. КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников. // // Возвращаемое значение: // ТаблицаЗначений - Таблица значений, содержащая запрошенные данные. // Функция КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт // Подготовим Запрос и Менеджер временных таблиц. Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; // Сформируем временную таблицу ВТКадровыеДанныеФизическихЛиц. СоздатьНаДатуВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень); // Выберем кадровые данные физлиц из временной таблицы. Запрос.Текст = "ВЫБРАТЬ КадровыеДанныеСотрудников.* ИЗ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников"; КадровыеДанныеСотрудников = Запрос.Выполнить().Выгрузить(); Возврат КадровыеДанныеСотрудников; КонецФункции | |||
| 11
    
        dft2014 14.11.17✎ 18:08 | 
        // Формирует временную таблицу ВТКадровыеДанныеСотрудников, содержащую кадровые данные сотрудников,
 // переданных ей в качестве параметра на указанную дату. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в котором формируется временная таблица. // ТолькоРазрешенные - Булево // СписокСотрудников - Массив ссылок или ссылка на элемент справочника Сотрудники. // КадровыеДанные - см. описание к функции КадровыеДанныеСотрудников. // ДатаПолученияДанных - Дата, на которую необходимо получить "периодические" данные. // ПоляОтбораПериодическихДанных - см. описание к функции КадровыеДанныеСотрудников. // Процедура СоздатьНаДатуВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, Знач ДатаПолученияДанных, ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт // Проверим, если в качестве параметра СписокФизическихЛиц, передана ссылка, создадим массив. Если ТипЗнч(СписокСотрудников) = Тип("СправочникСсылка.Сотрудники") Тогда МассивСотрудников = Новый Массив; МассивСотрудников.Добавить(СписокСотрудников); Иначе МассивСотрудников = СписокСотрудников; КонецЕсли; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников); Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | &ДатаПолученияДанных КАК Период, | ДанныеСотрудников.Ссылка КАК Сотрудник |ПОМЕСТИТЬ ВТСписокСотрудников |ИЗ | Справочник.Сотрудники КАК ДанныеСотрудников |ГДЕ | ДанныеСотрудников.Ссылка В(&МассивСотрудников)"; УстановитьПривилегированныйРежим(Истина); Запрос.Выполнить(); УстановитьПривилегированныйРежим(Ложь); ОписательВременныхТаблиц = ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников( МенеджерВременныхТаблиц, "ВТСписокСотрудников"); СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, ТолькоРазрешенные, КадровыеДанные, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень); Запрос.Текст = "УНИЧТОЖИТЬ ВТСписокСотрудников"; Запрос.Выполнить(); КонецПроцедуры | |||
| 12
    
        dft2014 14.11.17✎ 18:19 | 
        Ап!     | |||
| 13
    
        Ёпрст гуру 14.11.17✎ 18:19 | 
        (11)
 судя по |ГДЕ | ДанныеСотрудников.Ссылка В(&МассивСотрудников)"; - никак не сделаешь. Только лили переделывать код процы СоздатьНаДатуВТКадровыеДанныеСотрудников или передавать массив всех сотрудников. А так, в своём коде не используй эту функцию вообще. | |||
| 14
    
        Ёпрст гуру 14.11.17✎ 18:20 | 
        напиши свою, которая вернёт что надо о и как надо.     | |||
| 15
    
        dft2014 15.11.17✎ 10:43 | 
        (13) А как передать массив всех сотрудников?
 (14) Мне надо использовать типовую, она уже готовая и возвращает то, что мне надо. | |||
| 16
    
        Ёпрст гуру 15.11.17✎ 10:48 | 
        (15)
 1. не надо этого делать 2. не надо использовать типовую | |||
| 17
    
        dft2014 15.11.17✎ 10:54 | 
        (16) Типовая функция, помимо этого:
 ЧтоИщу = "Подразделение, Должность, ТабельныйНомер, ФИО, Состояние"; тянет еще около 15-ти показателей, которые я просто не указала. Т.е. если писать свои функции, то это очень много времени займет. А тут все тянется с помощью одной типовой функции!!! | |||
| 18
    
        h-sp 15.11.17✎ 11:06 | 
        (17) посмотрите в типовой как в других местах вызывается эта функция, перенесите к себе     | |||
| 19
    
        Ёпрст гуру 15.11.17✎ 11:12 | 
        (17) как скажешь
 Запрос = Новый Запрос("выбрать ссылка из СправочникюСотрудники"); СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка"); | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |