Имя: Пароль:
1C
1С v8
Запрос: одной функцией получить несколько значений???
0 листопад
 
10.05.15
20:51
Подскажите, можно ли в одной функции (у меня это ПолучитьДанныеТД()) передать несколько значений? Сейчас у меня передается только Выборка.ТДНомер, но мне надо получить еще Выборка.ТДДата. Подскажите, как это сделать???


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

&НаСервере
Функция ПолучитьДанныеТД(ФЛ)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КадроваяИсторияСотрудников.ФизическоеЛицо,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорНомер КАК ТДНомер,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорДата КАК ТДДата
    |ИЗ
    |    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    |ГДЕ
    |    КадроваяИсторияСотрудников.Регистратор ССЫЛКА Документ.ПриемНаРаботу
    |    И КадроваяИсторияСотрудников.ФизическоеЛицо = &ФЛ";
    
    Запрос.УстановитьПараметр("ФЛ", ФЛ);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.ТДНомер;
        //вот здесь как передать еще Выборка.ТДДата
    КонецЕсли;
    
КонецФункции
1 Остап Сулейманович
 
10.05.15
20:55
Например так :
Если Выборка.Следующий() Тогда
    Результат = Новый Структура;
    Результат.Вставить("ТДНомер", Выборка.ТДНомер);
    Результат.Вставить("ТДДата", Выборка.ТДДата);
    ...
    //Много разнообразных "Вставить"
    ...
    Возврат Результат;
    //Возврат Выборка.ТДНомер;
    //вот здесь как передать еще Выборка.ТДДата
КонецЕсли;
2 листопад
 
10.05.15
20:58
(1) Спасибо!
3 jsmith82
 
10.05.15
20:58
в первом запросе ФЛ это строка
во втором запросе справочник.ссылка
докум - переменная не определена
функция используется как процедура
про структуру трудно сообразить было?
какой стаж кодинга?
4 Провинциальный 1сник
 
10.05.15
20:58
(1) Угу.. а тех, кто возвращает значения путем изменения формальных параметров, на том свете ждет пожизненное программирование на фортране..
5 jsmith82
 
10.05.15
20:59
(4) ткни. чёто пропустил
6 листопад
 
10.05.15
21:01
Еще подскажите пож-та: в РегистреСведений КадроваяИсторияСотрудников может быть несколько документов ПриемаНаРаботу (так перенеслось из др.программы, если сотрудник принимался-увольнялся-принимался). Как мне получить последний документ ПриемНаРаботу?

Вот запрос:

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КадроваяИсторияСотрудников.ФизическоеЛицо,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорНомер КАК ТДНомер,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорДата КАК ТДДата
    |ИЗ
    |    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    |ГДЕ
    |    КадроваяИсторияСотрудников.Регистратор ССЫЛКА Документ.ПриемНаРаботу
    |    И КадроваяИсторияСотрудников.ФизическоеЛицо = &ФЛ";
    
    Запрос.УстановитьПараметр("ФЛ", ФЛ);
7 jsmith82
 
10.05.15
21:03
(6)
"ВЫБРАТЬ ПЕРВЫЕ 1
    |    КадроваяИсторияСотрудников.ФизическоеЛицо,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорНомер КАК ТДНомер,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорДата КАК ТДДата
    |ИЗ
    |    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    |ГДЕ
    |    КадроваяИсторияСотрудников.Регистратор ССЫЛКА Документ.ПриемНаРаботу
    |    И КадроваяИсторияСотрудников.ФизическоеЛицо = &ФЛ
    |УПОРЯДОЧИТЬ ПО
    |    КадроваяИсторияСотрудников.Регистратор.Дата УБЫВ";
8 листопад
 
10.05.15
21:05
(7) Спасибо!
9 Остап Сулейманович
 
10.05.15
21:05
(6) Если регистр периодический - юзать СрезПоследних.
Если нет и можно без изысков - включить в выборку даты документов и по ним отсортировать.

ЗЫ. Выбрать именно последний документ тоже можно. Но в твоем случае просто выбери даты и по ним отсортируй.