8.х Запрос из регистра сведений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Bajik, 12 авг 2007.

  1. TopicStarter Overlay
    Bajik
    Offline

    Bajik

    Регистрация:
    2 авг 2007
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Как сделать запрос из регистра сведений по 3 измерениям двух последних двух значений и поместить значения в табличную часть документа. Регистр сведений периодический.
    Насколько я понимаю решения этой задачки:
    1. ПолучтьПоследние (Конец месяца, ....)
    2. Присвоить значение ячейке документа табличной части (Вопрос: Как это сделать? Еще не опробывал, но как я понял, создается структура, а в ней все реквизиты и значение. Или получаем само значение, которое потом можно присвоить?
    2 Взять дату значения из регистра сведений (Вопрос: Как это сделать?)
    3. Полученную дату вставляем в следующий метод ПолучитьПоследние (Полученная дата - 1, .......)
    Помогите с данной задачей, и если можете поправьте алгоритм получения двух последних значений.
    Спасибо!
  2. Scorp_Progr
    Offline

    Scorp_Progr

    Регистрация:
    11 авг 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Для получения значений из регстра рекомендуется пользоватся запросами (для получения последнего значения используется виртуальная таблицу СрезПоследних(&НаДату) например:

    запрос=новый запрос;
    запрос.Текст=" Выбрать Курсы.Валюта,
    | Курсы.Курс
    | из РегистрСведений.КурсыВалют.СрезПоследних(&НаДату) КАК Курсы";

    Но данная таблица возвращяет только последнее значения, для получения двух последних значений придется делать запрос по основной таблице, что естественно замедлит работу, просто нужно сделать нечто типа такого:

    запрос=новый запрос;
    запрос.Текст=" Выбрать Курсы.Валюта,
    | Курсы.Курс,
    | Курсы.Период
    | из РегистрСведений.КурсыВалют КАК Курсы
    | Упорядочить по Период Убыв";

    а выборку организовать следующим образом

    рез=запрос.выполнить();
    ЕСли рез.Количество()=0 Тогда
    ....
    ИначеЕСли рез.Количество()=1 Тогда
    стрзн1=рез.выбрать().Следующий();
    .....
    Иначе
    выборка=рез.Выбрать();
    стрзн1=выборка.Следующий();
    ....
    стрзн2=выборка.Следующий();
    .....
    КонецЕСли;
  3. TopicStarter Overlay
    Bajik
    Offline

    Bajik

    Регистрация:
    2 авг 2007
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    На выходных попытался сделать без запроса, и вот что у меня получилось:

    Код:
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("Организация", Организация);
    СтруктураОтбора.Вставить("Комната", КомнатаСсылка);
    СтруктураОтбора.Вставить("Ячейка", ЯчейкаСсылка);
    СтруктураРесурсов = РегистрыСведений.ЯчейкиКомнат.ПолучитьПоследнее(КонецМесяца(ТекущаяДата()),СтруктураОтбора);
    Стр.ПредыдущиеПоказания = СтруктураРесурсов.Показания;
    
    
    Но данный код выдает ошибку:

    {Документ.СнятПокЯч.Форма.ФормаДокумента(14)}: Ошибка при вызове метода контекста (ПолучитьПоследнее): Недопустимое значение параметра (параметр номер "2")
    СтруктураРесурсов = РегистрыСведений.ЯчейкиКомнат.ПолучитьПоследнее(КонецМесяца(ТекущаяДата()),СтруктураОтбора);
    по причине:
    Недопустимое значение параметра (параметр номер "2")

    Изменял уже код и на:

    Код:
    ...
    СтруктураРесурсов = РегистрыСведений.ЯчейкиКомнат.ПолучитьПоследнее(КонецМесяца(ТекущаяДата()), Новый Структура ("Организация , Комната, Ячейка", Организация, КвартирыСсылка, СчетчикиСсылка));
    ...
    
    
    Хотя в другом документе, при такой же выборке, но с двумя параметрами отбора в структуре все нормально работает. Не пойму зачем мене использовать метод СрезПоследних. Мне известны все измерения по которым буду проводить отбор. Спасибо!!!
  4. Scorp_Progr
    Offline

    Scorp_Progr

    Регистрация:
    11 авг 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Ты-же говорил, что хочишь получить два последних значения, как ты с помощью функции ПолучитьПоследнее получишь 2 последних ? Или я чего-то не понял ?
  5. TopicStarter Overlay
    Bajik
    Offline

    Bajik

    Регистрация:
    2 авг 2007
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Это просто аналогичный документ, тут нужен последние показание. А с двумя параметрами я имел виду%
    Код:
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("Организация", Организация);
    СтруктураОтбора.Вставить("Комната", КомнатаСсылка);
    СтруктураРесурсов = РегистрыСведений.ЯчейкиКомнат.ПолучитьПоследнее(КонецМесяца(ТекущаяДата()),СтруктураОтбора);
    
    
    

Поделиться этой страницей