8.х Помогите с запросом

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

  1. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Сам запрос
    Код:
    	ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ШапкаДСП.Договор.Номер КАК Recid,
    |	ШапкаДСП.Договор КАК Договор,
    |	Оформленны######О.Серия КАК S_Pol,
    |	Оформленны######О.Номер КАК N_Pol,
    |	ШапкаДСП.ДатаНачала КАК Du_S,
    |	ШапкаДСП.ДатаОкончания КАК Du_F,
    |	ПОДСТРОКА(Недействительны######О.Номер, 1, 3) КАК S_Old,
    |	ПОДСТРОКА(Недействительны######О.Номер, 4, 10) КАК N_Old,
    |	Недействительны######О.Период КАК Du_I,
    |	ВЫБОР
    |		КОГДА СтатусДСП.Статус = ЛОЖЬ
    |			ТОГДА СтатусДСП.Период
    |	КОНЕЦ КАК Du_End,
    |	ВЫБОР
    |		КОГДА ШапкаДСП.Контрагент.ЮрФизЛицо = &ФизЛицо
    |			ТОГДА ""1""
    |		ИНАЧЕ ""2""
    |	КОНЕЦ КАК P_FU_S,
    |	ВЫБОР
    |		КОГДА СвойстваСтрахователя.Территория = &ИныеГосударства
    |			ТОГДА ""2""
    |		ИНАЧЕ ""1""
    |	КОНЕЦ КАК P_RZ_S,
    |	ПОДСТРОКА(КонтактнаяИнформацияСтрахователя.Поле1, 1, 6) КАК Index_S,
    |	КонтактнаяИнформацияСтрахователя.КодКЛАДР КАК Kladr_S,
    |	ВЫБОР
    |		КОГДА ШапкаОСАГО.Собственник.ЮрФизЛицо = &ФизЛицо
    |			ТОГДА ""1""
    |		ИНАЧЕ ""2""
    |	КОНЕЦ КАК P_FU_H,
    |	ВЫБОР
    |		КОГДА СвойстваСобственника.Территория = &ИныеГосударства
    |			ТОГДА ""2""
    |		ИНАЧЕ ""1""
    |	КОНЕЦ КАК P_RZ_H,
    |	ПОДСТРОКА(КонтактнаяИнформацияСобственника.Поле1, 1, 6) КАК Index_H,
    |	КонтактнаяИнформацияСобственника.КодКЛАДР КАК Kladr_H,
    |	ВЫБОР
    |		КОГДА ШапкаОСАГО.СписокЛицУправленияОграничен
    |			ТОГДА ""2""
    |		ИНАЧЕ ""1""
    |	КОНЕЦ КАК P_Dop,
    |	ШапкаОСАГО.ТипТСПоОСАГО КАК ТипТС,
    |	ТС.МощностьДвигателя КАК Power,
    |	ТС.ГодВыпуска КАК Year_M,
    |	ВЫБОР
    |		КОГДА ТС.Модель.Иномарка
    |			ТОГДА ""2""
    |		ИНАЧЕ ""1""
    |	КОНЕЦ КАК P_USSR,
    |	ШапкаДСП.Контрагент КАК Страхователь,
    |	ШапкаОСАГО.ЦельИспользования КАК ЦельИспользования,
    |	ТС.МаксМасса КАК Max_M,
    |	ТС.КолПассажирскихМест КАК N_Pl,
    |	ВЫБОР
    |		КОГДА ТС.МестоРегистрации.Родитель = &НеРФ
    |			ТОГДА ""1""
    |		ИНАЧЕ ""2""
    |	КОНЕЦ КАК P_Reg,
    |	Начисления.Премия КАК Sum_P,
    |	Начисления.Комиссия КАК Sum_KV
    |ИЗ
    |	РегистрСведений.ШапкаДСП.СрезПоследних(&ДатаОтч, ) КАК ШапкаДСП
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОбъектыИРискиДСП.СрезПоследних(&ДатаОтч, ) КАК ОбъектыИРискиДСП
    |		ПО ШапкаДСП.Договор = ОбъектыИРискиДСП.Договор
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПоОбъектуОСАГО.СрезПоследних(&ДатаОтч, ) КАК ШапкаОСАГО
    |		ПО (ОбъектыИРискиДСП.Объект = ШапкаОСАГО.Объект)
    |			И (ОбъектыИРискиДСП.Договор = ШапкаОСАГО.Договор)
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТранспортныеСредства КАК ТС
    |		ПО (ОбъектыИРискиДСП.Объект = ТС.Объект)
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Оформленны######О.СрезПоследних(&ДатаОтч, Вид.Тип = &ТипБСО) КАК Оформленны######О
    |		ПО ШапкаДСП.Договор = Оформленны######О.Договор
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиКонтрагентовПоОСАГО.СрезПоследних(&ДатаОтч, ) КАК СвойстваСтрахователя
    |		ПО ШапкаДСП.Контрагент = СвойстваСтрахователя.Контрагент
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиКонтрагентовПоОСАГО.СрезПоследних(&ДатаОтч, ) КАК СвойстваСобственника
    |		ПО (ШапкаОСАГО.Собственник = СвойстваСобственника.Контрагент)
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Недействительны######О.СрезПоследних(&ДатаОтч, ) КАК Недействительны######О
    |		ПО ШапкаДСП.Договор = Недействительны######О.Договор
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусДСП.СрезПоследних(&ДатаОтч, ) КАК СтатусДСП
    |		ПО ШапкаДСП.Договор = СтатусДСП.Договор
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияСтрахователя
    |		ПО ШапкаДСП.Контрагент = КонтактнаяИнформацияСтрахователя.Объект
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияСобственника
    |		ПО (ШапкаОСАГО.Собственник = КонтактнаяИнформацияСобственника.Объект)
    |		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |			НачисленияВалюта.Договор КАК Договор,
    |			СУММА(НачисленияВалюта.Премия * НачисленияВалюта.Курс * НачисленияВалюта.Кратность) КАК Премия,
    |			СУММА(НачисленияВалюта.Комиссия * НачисленияВалюта.Курс * НачисленияВалюта.Кратность) КАК Комиссия
    |		ИЗ
    |			(ВЫБРАТЬ
    |				НачисленияДСП.Договор КАК Договор,
    |				НачисленияДСП.Валюта КАК Валюта,
    |				НачисленияДСП.Премия КАК Премия,
    |				НачисленияДСП.Комиссия КАК Комиссия,
    |				КурсыВалют.Курс КАК Курс,
    |				КурсыВалют.Кратность КАК Кратность
    |			ИЗ
    |				РегистрНакопления.НачисленияДСП КАК НачисленияДСП
    |					ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОтч, ) КАК КурсыВалют
    |					ПО НачисленияДСП.Валюта = КурсыВалют.Валюта
    |			ГДЕ
    |				НачисленияДСП.Активность
    |				И НачисленияДСП.Регистратор.Организация В(&СписокОрганизаций)) КАК НачисленияВалюта
    |		
    |		СГРУППИРОВАТЬ ПО
    |			НачисленияВалюта.Договор) КАК Начисления
    |		ПО ШапкаДСП.Договор = Начисления.Договор
    |ГДЕ
    |	ШапкаДСП.Договор.Дата МЕЖДУ &ДатаОтчНач И &ДатаОтч
    |	И ШапкаДСП.Договор.Организация В(&СписокОрганизаций)
    |	И (Недействительны######О.Вид.Тип = &ТипБСО
    |			ИЛИ Недействительны######О.Вид ЕСТЬ NULL )
    |ИТОГИ ПО
    |	Договор
    |";
    
    выбираю из запроса данные обходом результата запроса по группировкам, и сталкиваюсь с проблемой... получаю следующие данные (скидываю только небольшой кусочек, чтобы было нагляднее :) )

    ДоговорВВВ0156419604
    ДоговорВВВ0156419604 ВВВ 0156419604 13.01.10 12.01.11 2 1 625013 7200000100002340007000000
    ДоговорВВВ0156419624
    ДоговорВВВ0156419624 ВВВ 0156419624 03.01.10 02.01.11 1 1 625026 7200000100002550001000000
    ДоговорВВВ0156419627
    ДоговорВВВ0156419627 ВВВ 0156419627 11.01.10 10.01.11 1 1
    ДоговорВВВ0156419627 ВВВ 0156419627 11.01.10 10.01.11 1 1
    ДоговорВВВ0156419627 ВВВ 0156419627 11.01.10 10.01.11 1 1 625000 7200000100002860001000000

    как мне отобрать только последнюю заполненную строку?
  2. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Условие на заполненность полей можно поставить. (экспериментировать с группировками я сейчас не особо в настроении, но вы вполне можете этим заняться, если условия на заполнение полей для вас не вариант)
  3. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    ой, оговорилась... запрос выбирает данные описанные выше, а если потом делать обход по групперовке то он зачищает все данные кроме самого договора, я понимаю что ему нечего группировать остальное... только как вот сделать так чтобы взять только последнюю строчку
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну тут еще стоит посмотреть сам обход погруппировке. И если Вам вообще не Итоги нужны а строки почему группировку не делаете а итоги.
    П именам полей я так понимаю куда то грузить собрались?
  5. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Мне итоговая сумма тоже нужна... это отчет по работе страховой компании... в группировку по умолчанию он все суммы закидывает а потом так же не может сгруппировать... потому что в одной строке есть эти данные а в другой нету...
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Сам обход по группировкам покажите
  7. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Код:
    РезультатЗапроса= Запрос.Выполнить();
    Таблица= РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    КолвоЗаписейРеестрДоговоров	= Таблица.Количество();
    
    Пока Таблица.Следующий() Цикл
    
    ФайлDBF.Добавить();
    ФайлDBF.Recid	= Таблица.Recid;
    ФайлDBF.S_Pol	= СокрЛП(Таблица.S_Pol);
    ФайлDBF.N_Pol	= СокрЛП(Таблица.N_Pol);
    ФайлDBF.Du_S	= Таблица.Du_S;
    ФайлDBF.Du_F	= Таблица.Du_F;
    и т.д.
    КонецЦикла;
    
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    вы хоть раз обход по группировкам видели в типовых отчетах?
    Где у Вас выборка с делатьными записями.

    Вот пример :

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

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    К сожалению с типовыми практически не сталкиваюсь... да и вот то что я вам скидывала - это типовой отчет... просто я ищу почему данные выводятся не правильно... посмотрела код... не могу сообразить - как привязать к моим данным? Если не сложно, прошу у Вас помощи... java script:emoticon(':rolleyes:', 'smid_14')
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Попробуйте что вот так выводит?

    Код:
    РезультатЗапроса= Запрос.Выполнить();
    ВыборкаОбщийИтог= РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    КолвоЗаписейРеестрДоговоров	= Таблица.Количество();
    Таблица=ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Таблица.Следующий() Цикл
    
    ФайлDBF.Добавить();
    ФайлDBF.Recid	= Таблица.Recid;
    ФайлDBF.S_Pol	= СокрЛП(Таблица.S_Pol);
    ФайлDBF.N_Pol	= СокрЛП(Таблица.N_Pol);
    ФайлDBF.Du_S	= Таблица.Du_S;
    ФайлDBF.Du_F	= Таблица.Du_F;
    
    КонецЦикла;
    
  11. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    пусто выводит по всем колонкам....
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А в отладчике в какой выборке данных нет?
  13. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    во втором обходе количество данных равно 0
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Попробуйте заменить
    Код:
    ВыборкаОбщийИтог= РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    на
    Код:
    ВыборкаОбщийИтог= РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ВыборкаОбщийИтог.Следующий();
    
  15. TopicStarter Overlay
    Kotya
    Offline

    Kotya

    Регистрация:
    14 фев 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Так выбирает только одну запись, спасибо Вам большое что пытались мне помочь! Я придумала как пойти в обход... через обход запрос - прямой а потм через условия отлавливаю последнюю запись... не совсем конечно профессионально, но по крайней мере работатет. Еще раз Вам огромное спасибо!
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да не за что тут просто бы это все в отладчике глянуть....

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