8.х Запрос по 2-м условиям

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

  1. TopicStarter Overlay
    Sereg@
    Offline

    Sereg@

    Регистрация:
    5 янв 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    У меня снова проблема.
    Есть непериодический Регистр Сведений "ППУ" с измерениями: ЛицевойСчет, Услуга, Предыдущие и документ с такими же реквизитами.
    Запрос:
    Код:
    СтрПС = ЭлементыФормы.ПоСчетчикам.ТекущиеДанные;
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	Начисление.ЛицевойСчет,
    |	Начисление.ПоСчетчикам.(
    |		Услуга
    |	),
    |	ППУ.ЛицевойСчет КАК ЛицевойСчет,
    |	ППУ.Услуга,
    |	ППУ.Предыдущие
    |ИЗ
    |	РегистрСведений.ППУ КАК ППУ,
    |		Документ.Начисление КАК Начисление
    |ГДЕ ППУ.ЛицевойСчет = Начисление.ЛицевойСчет
    |			И ППУ.Услуга = Начисление.ПоСчетчикам.Услуга";
    Запрос.УстановитьПараметр("Период", Период);     
    Запрос.УстановитьПараметр("Услуга",СтрПС.Услуга);
    Запрос.УстановитьПараметр("ЛицевойСчет",ЛицевойСчет);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    
    РезультатЗапроса.Следующий();
    
    СтрПС.Предыдущие = РезультатЗапроса.Предыдущие;
    
    Проблема в том, что результат запроса берется только по последней записи из регистра сведений.
    Например:
    В документе у меня 2 строки с 2-мя разными услугами. Данные В регистр заполняются правильно по каждой услуге.
    А вот ИЗ регистра проблема, Начинаю заполнять "Холодную воду", а показания из регистра берутся по "Горячей".
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Вы с запросами давно работаете? Совет: прочитайте. Запросы проще всего составлять через конструктор.
    Скорее всего, запрос должен быть таким:
    Код:
    СтрПС = ЭлементыФормы.ПоСчетчикам.ТекущиеДанные;
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ППУ.ЛицевойСчет КАК ЛицевойСчет,
    |	ППУ.Услуга,
    |	ППУ.Предыдущие
    |ИЗ
    |	РегистрСведений.ППУ КАК ППУ,
    |ГДЕ ППУ.ЛицевойСчет = &ЛицевойСчет
    |			И ППУ.Услуга = &Услуга";
    Запрос.УстановитьПараметр("Услуга",СтрПС.Услуга);
    Запрос.УстановитьПараметр("ЛицевойСчет",ЛицевойСчет);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    
    РезультатЗапроса.Следующий();
    
    СтрПС.Предыдущие = РезультатЗапроса.Предыдущие;
    
    ЗЫ Данные из регистра сведений проще получать не запросом, а через объект. Смотрите метод "Получить" в системе помощи раздел РегистрСведенийМенеджер.<Имя регистра сведений>
  3. TopicStarter Overlay
    Sereg@
    Offline

    Sereg@

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


    Спасибо.
  4. TopicStarter Overlay
    Sereg@
    Offline

    Sereg@

    Регистрация:
    5 янв 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Опять 25.
    При заполнении табличной части документа результатом запроса начинают дублироваться записи. Причем, 2 документа заполнялись нормально, а с 3-го каждая строка дублируется.
    [​IMG]
    Вот запрос:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Начисление.Абонент КАК Абонент, Начисление.ЛицевойСчет 
    |    КАК ЛицевойСчет, Услуги.Счетчик КАК Счетчик,
    |    Услуги.Услуга КАК Услуга
    |ИЗ
    |    Документ.Начисление КАК Начисление,
    |        РегистрСведений.Услуги КАК Услуги
    |ГДЕ
    |    Начисление.Абонент = &Абонент И Счетчик = ИСТИНА И
    |        Начисление.ЛицевойСчет = &ЛицевойСчет";
    Запрос.УстановитьПараметр("ЛицевойСчет", ЛицевойСчет);     
    Запрос.УстановитьПараметр("Абонент",Абонент);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();    
    ПоСчетчикам.Очистить();
    Пока    РезультатЗапроса.Следующий()>0 Цикл
    НоваяСтрока = ПоСчетчикам.Добавить();
    НоваяСтрока.Услуга = РезультатЗапроса.Услуга;
    КонецЦикла;
    
    
  5. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    а как же соединение? =\ 295 страница 1С Предприятие 8.1 Конфигурирование и администрирование. Глава 5 работа с запросами. Подглава описание источника запроса.

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