Имя: Пароль:
1C
1С v8
Метод для регистра сведений возвращающий значение
0 El_lynx
 
28.12.16
09:16
Здравствуйте, помогите, пожалуйста, написать метод в модуле менеджера регистра сведений. Регистр: периодичность день, подчиненный регистратору, измерения "ТС" и "Дата", ресурсы "Водитель".
На вход получает значения ТС и Дата, должен возвращать Водителя.

    Функция РаспределиниеБригад (Дата, ТС)
    ???
    возврат
    КонецФункции

И еще вопрос, если у меня периодичность регистра день, нужно ли мне измерение дата, чтобы данный метод работал? Или можно сделать метод, сравнивающий полученную на вход дату с периодом?
1 butterbean
 
28.12.16
09:17
периодичность не нужна, т.к. на след день информация о водителе неактуальна
2 Лефмихалыч
 
28.12.16
09:18
измерение Дата вообще убери

у периодического регистра и так уже есть такой метод

РегистрСведенийМенеджер.<Имя регистра сведений>.ПолучитьПоследнее (InformationRegisterManager.<Имя регистра сведений>.GetLast)
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: Структура.
Возвращает структуру, содержащую значения ресурсов.
Описание:

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

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Применим только для периодических регистров сведений.
Пример:

Доллары = Справочники.Валюты.НайтиПоНаименованию("USD");
Отбор = Новый Структура;
Отбор.Вставить("Валюта", Доллары);
Курсы   = РегистрыСведений.КурсыВалют;
ТекКурс = Курсы.ПолучитьПоследнее(ТекущаяДата(), Отбор);
Сообщить("Текущий курс доллара: " + ТекКурс.Курс + " руб.");
3 Неверный Параметр И
 
28.12.16
09:19
(1) И отчеты за прошедшие периоды тоже можно выбросить. Кому они нужны?
4 butterbean
 
28.12.16
09:25
(3) они хранятся в измерении Дата
5 El_lynx
 
28.12.16
09:28
(1)(3)да я уже готова всё выбросить :)))
(2) т.е. я правильно понимаю, метод в регистре мне создавать не нужно? а чтобы обратиться к регистру из другого документа, и узнать, предположим, какой водитель на данную машину сегодня, я должна написать следующее:

    РегистрСведенийМенеджер.<Имя регистра сведений>.ПолучитьПоследнее (ТекущаяДата, ТС);

И он мне должен вернуть водителя?
6 Mankubus
 
28.12.16
09:30
>>И он мне должен вернуть водителя?
см. (2)
Возвращаемое значение:
Тип: Структура.
Возвращает структуру, содержащую значения ресурсов.
7 Лефмихалыч
 
28.12.16
09:30
(5) метод писать не нужно. Что должна написать, подробно и даже с примером описано в (2), прочитай внимательно.
8 butterbean
 
28.12.16
09:31
(5) он вернет не на выбранную дату, а просто срез последних на эту дату. Т.е. если на 5 декабря никто не был назначен, то вернёт того кто был на 4-е, или 3-е. Поэтому лучше здесь срезом не пользоваться.
9 Неверный Параметр И
 
28.12.16
09:40
(4) Дата чего?
10 Лефмихалыч
 
28.12.16
09:43
(5)Используй срез, не слушай (8)
он в целом неправды не сказал, но все сказанное сказано зря.
11 El_lynx
 
28.12.16
09:44
(7) (8) (10) Хорошо, про метод ПолучитьПоследнее я поняла, спасибо, попробую.
Проблема в том, что если сегодня на машину никто не назначен, для пользователя должна выдаваться ошибка и чтоб данную машину он не смог выбрать и отправить ее в рейс.
Если я буду пользоваться этим методом и на данный период (день) нет записи в регистре по машине, он вернет "не определено"? или вернет данные за прошлый период где эти записи есть?
12 h-sp
 
28.12.16
09:47
(11) лучше выбирайте запросом
13 butterbean
 
28.12.16
09:48
(10) очень жду комментариев для (11)
14 _stay true_
 
28.12.16
09:51
(11) 1. Лучше это реализовать запросом к регистру;
     2. Без фотокарточки не взлетит.
15 El_lynx
 
28.12.16
09:59
(12) (14) 1. а как именно это сделать запросом? У меня и возникла проблема написать данный метод в ручную))
2. фотокарточку потом)
16 zvial
 
28.12.16
10:21
Так, не?

Функция ДайВодилу(Дата, ТС)

Водила = Неопределено;

Запрос= Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
        |Водила
        |ИЗ
        |РегистрСведений.ВодилыНаТС
        |ГДЕ ТС = &ТС И Период = &Дата";
Запрос.Установитьпараметр("ТС", ТС);
Запрос.Установитьпараметр("Дата", Дата);

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    Водила = Выборка.Водила;
КонецЕсли;

Возврат Водила;

КонецФункции

Ну и экспортной ее в модуль менеджера
17 zvial
 
28.12.16
10:22
Теперь фотокарточку )
18 El_lynx
 
28.12.16
10:40
(16) (17) Спасибо) Попробую применить. Фотокарточку добавила))
19 Лефмихалыч
 
28.12.16
11:18
(11) (13) в том, что ПолучитьПоследнее вернет, будет поле Период, его можно сравнить с датой документа и на основании этого обложить пользователя обшибками
20 El_lynx
 
29.12.16
08:25
(19) спасибо, попробовала - работает.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший