Версия для печати темы (https://pro1c.org.ua/index.php?s=dbb5391db718a8e076e10851f01f04d9&showtopic=66711)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ почему запрос получает 5 строк, а на выходе дает 3 строки

Автор: lolmatrix 29.08.21, 19:12

1с 8.3.19.1150 управляемые формы
Здравствуйте, подскажите пожалуйста, новичку, передаю в запрос таблицу значений состоящую из 5 строк, в регистре сведений совпадает по видУслуги всего 3 строки , и на выходе получаю 3 строки подскажите как сделать чтобы 5 строк было в результате запроса, вот сам код:

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

заранее благодарен


Автор: sava1 29.08.21, 20:50

вместо ГДЕ впишите И

Автор: Batchir 30.08.21, 7:51

Условием

    |ГДЕ
    |    МЕСЯЦ(ПоказанияПриборов.МесяцРасчета) = МЕСЯЦ(&МесяцРасчета) - 1";

Вы из тех 5 строк отсекаете 2, т.к. они не соответствуют этому условию.
Как написали выше перенесите условие ГДЕ в левое соединение и тогда будет 5 строк, а для остальных строк будут значения NULL из таблицы ПоказанияПриборов.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua