8.х результаты запроса в таблицу вывести

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

  1. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Здравтсвуйте! Бьюсь над запросом уже несколько дней. Помогите кто чем может? Текст запроса такой
    Код:
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказыПокупателейОстатки.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстатки.Номенклатура),
    ЗаказыПокупателейОстатки.КоличествоОстаток КАК КолЗаказов,
    КомплектующиеНоменклатуры.Комплектующая КАК Комплектующая,
    ПРЕДСТАВЛЕНИЕ(КомплектующиеНоменклатуры.Комплектующая),
    КомплектующиеНоменклатуры.Количество КАК КолВКомплекте,
    ЗаказыПокупателейОстатки.КоличествоОстаток * КомплектующиеНоменклатуры.Количество КАК ИтогПоЗаказу
    ИЗ
    РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
    ПО ЗаказыПокупателейОстатки.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
    ГДЕ
    ЗаказыПокупателейОстатки.КоличествоОстаток > 0
    </span>
    СГРУППИРОВАТЬ ПО
    ЗаказыПокупателейОстатки.Номенклатура,
    ЗаказыПокупателейОстатки.КоличествоОстаток,
    КомплектующиеНоменклатуры.Комплектующая,
    КомплектующиеНоменклатуры.Количество
    ИТОГИ
    СУММА(ИтогПоЗаказу)
    ПО
    Комплектующая"
    </FONT></FONT></pre>

    Так вот мне нужно результаты запроса в таблицу вывести. Частично получилось. Не могу вытащить Сумма(ИтогПоЗаказу) по каждой номенклатуре(((
  2. dud_ivan
    Offline

    dud_ivan

    Регистрация:
    7 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    результат = запрос.выполнить();
    ОбщиеИтоги = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ОбщиеИтоги.Следующий();
    ОбщиеПоНоменклатуре = ОбщиеИтоги.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Тут и оно!!


    Получается первый обход по группировкам- это общий, а последующее обращение по группировкам выводит итоги по группам в соответствии с заданной группировкой.
  3. dud_ivan
    Offline

    dud_ivan

    Регистрация:
    7 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    после первого обхода Следующий в цикле использовать не надо так как это выборка первого уровня, скажем так головная, которая хранит общие итоги по всем группировкам.
  4. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    получается сначала просматриваются ОБЩИЕ итоги а потом уже ПО ГРУППИРОВКАМ?
  5. dud_ivan
    Offline

    dud_ivan

    Регистрация:
    7 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    так точно
  6. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    если я правильно понял (3), то мы пропускаем общие итоги и сразу обходим группировку Номенклатура?
  7. dud_ivan
    Offline

    dud_ivan

    Регистрация:
    7 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Код:
    результат = запрос.выполнить();
    ОбщиеИтоги = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ОбщиеИтоги.Следующий();
    
    Этим мы добираемся до первичной выборки, которая содержит один элемент, с обобщеннми данными.
    Код:
    ОбщиеПоНоменклатуре = ОбщиеИтоги.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ОбщиеПоНоменклатуре - это выборка по номенклатуре с суммами.

    Код:
    результат = запрос.выполнить();
    [b]ОбщиеИтоги [/b]= Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ОбщиеИтоги.Следующий();
    
    Этим мы добираемся до первичной выборки, которая содержит один элемент, с обобщеннми данными.
    Код:
    ОбщиеПоНоменклатуре = [b]ОбщиеИтоги[/b].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ОбщиеПоНоменклатуре - это выборка по номенклатуре с суммами.

    Не получилось красиво сделать.
    Обрати внимание, когда делаем выборку по номенклатуре, ио используем ОбщиеИтоги как источник данных, а не результат запроса.
  8. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    чтобы были общие итоги, то и Итоги надо считать по "ОБЩИЕ"
    т.е.
    Код:
    ИТОГИ
    СУММА(ИтогПоЗаказу)
    ПО
    ОБЩИЕ,
    Комплектующая
    
  9. dud_ivan
    Offline

    dud_ivan

    Регистрация:
    7 мар 2007
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Согласен, проглядел, значит первый обход по результатам и есть искомый.
  10. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Спасибо. Попробую)
  11. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Ребят такой вопрос еще. Выше я спрашивал как вытащить нужное поле, которое я сгруппировал в тексте запроса. А вот скажем если я в таблицный документ вывожу КолЗаказов и КолВКомплекте и потом уже захочу их проссумировать? Пробовал. Столкнулся с несоответствием типов. Так вот как можно перебрать табличный документ и если в его ячейках есть числа то с ними производить арифмитические операции? Может как в дельфях преобразование есть символ в число?
  12. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Есть, и его не надо производить явно, но если строку не получится преобразовать в число будет ошибка. Так что ищи поле в котором строка которую не может 1ска преобразовать в число, например пустая строка.
    я делаю обычно так
    Код:
    Результат = перемЧисло + ?(ПеремСтрока="",0,ПеремСтрока);
    
  13. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    где можно про "?" подробнее прочесть? в справке?
  14. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    отладчиком сейчас пробежал. Ошибка появляется как разтаки если одно из значений "пусто". Получается Если "Пусто" тогда присвоить "0" к примеру?
  15. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Про ?(,,) читать в справке, стандартная функция
    даже лучше будет так
    Код:
    ?(ПустаяСтрока(ПеремСтрока),0,ПеремСтрока)
    
  16. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    я просто проверку сделал
    Если КолЗаказов = Неопределено тогда КОлЗаказов = 0
    и все. вроде работает. теперь попробую в нужную ячейку воткнуть))
  17. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну так конструкция ?(,,) это таже проверка :)
    Конструкция
    Код:
    КОлЗаказов = ?(КолЗаказов = Неопределено, 0, КОлЗаказов)
    
    
    
    еквивалентна
    Код:
    Если КолЗаказов = Неопределено Тогда
    КОлЗаказов = 0
    Иначе
    КОлЗаказов = КОлЗаказов;
    КонецЕсли 
    
    
    
  18. TopicStarter Overlay
    KirillSemenov
    Offline

    KirillSemenov

    Регистрация:
    2 дек 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Вон оно чо!)))) Спасибо!
  19. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    обычно используется функция ЕСТЬNULL() в запросе
  20. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Вопрос стоял так:
    Не по пойму к чему твоё замечание. Вопрос не про запрос, вопрос про табличный документ.

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