Проблемка с запросом.

Версия для печатиPDF-версия

Здравствуйте.

У меня 1 регистр "Расселение"

Есть 2 документа :
        Заселение
        Выселение
Заселил я человека = мы видим что запись в регистре появилась( как там на рисунке, ссылка выше )
в документе есть реквизит(тип булево) при заселении он активен(истина).
При выселении этот реквизит не аткивен(ложь) - это автоматически ставится.
Хочу выселить его = он номер комнаты не запоминает(дабы запрос на проверку свободной комнаты работал, на картинке это видно).
Проблема в том что по факту когда человека выселил, он все равно видит что он есть.
Допустим Иванова заслил в 1 комнату, выселил его(тобишь в регистре запись появилась где не хранится значение номера комнаты), далее он вдруг приехал и опять хочет в 1 комнату заселится - Эта комната Занята.
Открываем документ Заселение. и вот этот код

// регистр Расселение
    Движения.Расселение.Записывать = Истина;
    Движение = Движения.Расселение.Добавить();
    Движение.Период = Дата;
    Движение.Клиент = ФИО;
    Движение.НомерКомнаты = НомерКомнаты;
    Движение.ДатаЗаселения = ДатаЗаселения;
    Движение.Статус = Занята;
    
    // регистр Заселение Приход
    Движения.Заселение.Записывать = Истина;
    Движение = Движения.Заселение.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Клиент = ФИО;
    Движение.НомерКомнаты = НомерКомнаты;
    Движение.ДатаЗаселения = ДатаЗаселения;
    Движение.Статус = Занята;


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

    КонецЕсли;
КонецЦикла;

через отладку смотрел, он подставляет получается не последнее значение в регистре сведений, а первое..почему?)

А где картинки?

Какова структура регистра (измерения, ресурсы, реквизиты)? Если Клиент и НомерКомнаты это измерения, то их надо в параметры виртуальной таблицы выносить.

Структура регистра(в пределах секунду, подчинение регистратору)

-измерения

Клиент

Статус

-ресурсы

НомерКомнаты

ДатаЗаселения

ДатаВыселения

Щас я код переделал.

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

В обработчике все правильно подставляет. но другой прикол, Щас ругается на регистр мой(ну я так думаю)

мол запись с такими ключ. параметрами существует

https://cloud.mail.ru/public/8ZEU/QtzQxCiBQ

 

Два момента!

1) при работе с регистром свелений надо бы задать период

2) если в измерении входит и статус, то необходимо в запросе определить и статус в качестве параметра.

В начале Вы пишите, что у Вас один регистр Расселение, а в коде записываете в 2 регистра Расселение и Заселение. Может я конечно не права, я только учусь программированию, но мне кажется учет жильцов должен быть в одном регистре. 

одна запись в регистр сведений, другая в регистр накопления

По идее для хранения текущего состояния комнаты (занята/свободна) надо сделать НомерКомнаты измерением регистра, а Состояние или Статус - ресурсом. И периодичность нужно сделать "По позиции регистратора".

А при выселении в регистр накопления расход записывается?