7.7 Интересное поведение запроса

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем warden, 18 ноя 2010.

  1. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Итак, имеем запрос
    Код:
    	|Период с ДатаН по ДатаК;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |Фирма = Регистр.Продажи.Фирма;
    |Родитель = Регистр.Продажи.Номенклатура.Родитель;
    |ПродСтоимость = Регистр.Продажи.ПродСтоимость;
    |Функция Сумма = Сумма(ПродСтоимость);
    |Группировка Родитель;
    |Группировка Месяц все;
    |Условие(Номенклатура в ВыбТовар);"
    
    Простеший запрос по продажам. Только группировка по родителю товара. И месяц в качестве второй группировки. Проблема - выводит цифры по месяцам только по подгруппам самого нижнего уровня. То есть по группе верхнего уровня (она же ВыбТовар) выводит итог только общий, а по месяцам даже в группировку не заходит, дальше так же по ее подгруппам, исключая самые нижние, вот там и общий итог, и детали по месяцам.
    Конфигурация - ТиС, чуть доработанная, но структуру регистров не трогали.
    Вопрос - почему нет итогов по месяцам по группам верхнего уровня?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    попробуйте все вошедшие в запрос
  3. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Первым делом...
    С тем же эффектом.
  4. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Насколько я помню, голым запросом Вы ничего не добьетесь, если структура "фиксированная", т.е. количество уровней у всей номенклатуры одинаковое, то надо в делать больше группировок, т.е. каждого родителя задавать отдельно, если разношерстная, то только выгрузка в ТЗ и колдование над ней...
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А если группировки поменять местами и выводить опять же все?
  6. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Если поменять, выводит все нужные данные. Но это поможет только в данном случае. Есть более серьезная обработка, которая базируется на данных этого запроса, и вот там получившаяся структура не подойдет. Т.е. перелопачивать придется все, чего хотелось бы избежать.
    Я, может, матчасть подзабыл, но все-таки почему не выводятся итоги месяцев по верхним группам?
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Насколько я понимаю, из-за того, что итоги по группам группировки не считаются отдельным элементом группировки, это как доп информация к существующей группировке. Т.е. запрос строится на выборку, потом определяются группировки, по ним строится структура для вывода и расчет значений, а потом рассчитываются дополнительные данные (суммы для иерархии группировок), а т.к. на этом уровне группировки нет данных о месяцах, по ним суммы и не рассчитываются.
  8. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Спасибо. А то я что-то тормознул. И в самом деле, для периодов итоги по группам не выводятся.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно извратиться через дополнительную переменную

    ТекМес=Регистр.Продажи.ТекущийДокумент.МойДок.ДатаДок;

    Единственный редостаток - нужно указывать все виды документов + функция которая получает месяц даты
  10. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Нетривиально. Интересный вариант. Единственное - здесь уже не будет понятия "все", как в группировке "Месяц".
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ничего подобного - МОЖНО.
    Решение-то на поверхности
  12. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Это же по большому счету реквизит документа, пусть даже и через функцию, а не список периодов. Или есть что-то, что я упустил?
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Реквизит конечно, но группировать то по нему можно)
  14. TopicStarter Overlay
    warden
    Offline

    warden

    Регистрация:
    9 мар 2010
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Группировать-то да, но без выражения "Все", так и так скальпелем не обойдешься, придется за топор браться.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот с этим как говорится целиком и полностью
  16. Black Cat
    Offline

    Black Cat Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Дабы не плодить тему, спрошу здесь. Есть вот такой запрос и кусок кода:
    Код:
        Запрос=СоздатьОбъект("Запрос");
    РегПродажи=СоздатьОбъект("Регистр.Продажи");
    ИтогМесяца=СоздатьОбъект("СписокЗначений");
    Итого=0;
    ТекстЗапроса="
    |Период с НачДата по КонДата;
    |РегНоменклатура=Регистр.Продажи.Номенклатура;
    |Покупатель    = Регистр.Продажи.Покупатель;
    |КонтПроект     = Регистр.Продажи.Покупатель.Проект;
    |РегФирма      = Регистр.Продажи.Фирма;
    |ПродСт        = Регистр.Продажи.ПродСтоимость;
    |ПродВ        = Регистр.Продажи.ПродСтоимостьВ;
    |Функция СуммаПродСт = Сумма(ПродСт);
    |Без Итогов;
    |Группировка КонтПроект; 
    |Группировка Покупатель Без Групп;";
    Если Фирма.Выбран()=1 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Фирма=РегФирма);";
    КонецЕсли;
    Если Контрагент.Выбран()=1 Тогда
    Если Контрагент.ЭтоГруппа()=1 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Покупатель.ПринадлежитГруппе(Контрагент)=1);";
    Иначе
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Контрагент=Покупатель);";
    КонецЕсли;
    КонецЕсли;
    Если Номенклатура.Выбран()=1 Тогда
    Если Номенклатура.ЭтоГруппа()=1 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (РегНоменклатура.ПринадлежитГруппе(Номенклатура)=1);";
    Иначе
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (РегНоменклатура=Номенклатура);";
    КонецЕсли;
    КонецЕсли;
    Если Проект.Выбран()=1 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (КонтПроект=Проект);";
    КонецЕсли;
    Запрос.Выполнить(ТекстЗапроса);
    
    ТЗапрос = СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТЗапрос,1,2);
    ТЗапрос.ВыбратьСтроку(Врем); 
    
    
    Таб.ВывестиСекцию("Шапка|Покупатель");
    НачДаты=НачДата;
    Пока 1=1 Цикл
    Таб.ПрисоединитьСекцию("Шапка|Месяц");
    НачДаты=ДобавитьМесяц(НачДаты,1);
    ИтогМесяца.ДобавитьЗначение(0);
    Если НачДаты>КонДата Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Таб.ПрисоединитьСекцию("Шапка|Всего");
    НомерПП=1;
    ИндексДан=0;
    ДанЗнач.УдалитьСтроки();
    Пока Запрос.Группировка("КонтПроект")=1 Цикл
    Таб.ВывестиСекцию("Проект");    
    Пока Запрос.Группировка("Покупатель")=1 Цикл
    ИтогКонтрагента=0;
    Таб.ВывестиСекцию("Строка|Покупатель");
    
    БЛАБЛАБЛА
    
    

    Цикл никак не хочет проходить по первой группировке "КонтПроект". Значение
    Код:
    Запрос.Группировка("КонтПроект")
    
    
    с первого прохода равно 0. Почему ? Хотя в таблицу все нормально выгружается первыми идут покупатели с пустым проектом, далее проекты - по алфавиту.
    Всю голову изломал уже.
  17. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Понимаю это для ТиС?
    Выложи обработку.

    [off]ЗЫ Не нужно бояться за количество тем. Есть правило: один вопрос - одна тема, а правила не просто так придумывают. Например, проще будет найти потом этот вопрос.[/off]
  18. Black Cat
    Offline

    Black Cat Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Да, для ТИС 9.2 933. Обработку скачал с инета, решил доделать под себя. Хочу чтоб выводила контрагентов попроектно.

    Вложения:

  19. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Нашел под рукой ТиС 9.2 7.70.944

    "Регистр.Продажи.Покупатель.Проект"
    Регистр Продажи - есть
    Покупатель - есть <<Справочник.Контрагент>>
    Проект - нет такого реквизита у справочника "Контрагент"
    У документов есть общий реквизит проект.... Видимо здесь беда.
    Или тогда выкладывай всю конфу (можно глянуть удаленно, тогда в личку)
  20. Black Cat
    Offline

    Black Cat Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Да забыл сказать. Конфа дописана. В ней я сделал реквизит "Проект" (к каждому контрагенту свой проект, типа торг. предст., закрепленный за клиентом). И самое интересное, что выходная таблица запроса заполняется нормально. Т.е. сначала идут контрагенты с пустым проектом, потом уже проекты по алфавиту

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