![]() |
|
передать параметры в функцию | ☑ | ||
---|---|---|---|---|
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) как скажешь
Запрос = Новый Запрос("выбрать ссылка из СправочникюСотрудники"); СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ССылка"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |