8.х Как сгруппировать поля с операцией В ИЕРАРХИИ

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Gulnaz, 27 апр 2011.

  1. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Здраствуйте! Я получаю отчет по дебиторской задолженности по определенным счетам, для отбора счетов использую операцию В ИЕРАРХИИ. Когда в запросе добавляю группировку по этим полям выдает ошибку(на рис.).


    Вот сам запрос пока без группировки по полям с иерархией:
    Код:
    ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Субконто3,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК Задолженность,
    ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиВал))
    ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт
    КОНЕЦ КАК ЗадолженностьПоПокупателям,
    ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ДолговыеЦенныеБумаги))
    ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт
    КОНЕЦ КАК ЗадолженностьПоВекселям,
    ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал))
    ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт
    КОНЕЦ КАК ЗадолженностьПоАвансамВыданным,
    ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоНалогам))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоСоциальномуСтрахованию))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами_))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоПрочимОперациям))
    ИЛИ ХозрасчетныйОстаткиИОбороты.Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДСпоАвансамИПредоплатам))
    ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт
    КОНЕЦ КАК ЗадолженностьПоПрочимДебиторам,
    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты).ИНН КАК ИНН
    {ВЫБРАТЬ
    Контрагент.*,
    Субконто2.*,
    Субконто3.*,
    Задолженность,
    Счет.*,
    ЗадолженностьПоПокупателям,
    ЗадолженностьПоВекселям,
    ЗадолженностьПоАвансамВыданным,
    ЗадолженностьПоПрочимДебиторам,
    ИНН}
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    ,
    &Период,
    ,
    ,
    Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиВал))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ДолговыеЦенныеБумаги))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоНалогам))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоСоциальномуСтрахованию))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами_))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоПрочимОперациям))
    ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДСпоАвансамИПредоплатам)),
    ,
    {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент}) КАК ХозрасчетныйОстаткиИОбороты
    ГДЕ
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт > 0
    {ГДЕ
    ХозрасчетныйОстаткиИОбороты.Счет,
    (ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2}
    
    СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты),
    ХозрасчетныйОстаткиИОбороты.Субконто2,
    ХозрасчетныйОстаткиИОбороты.Субконто3,
    ХозрасчетныйОстаткиИОбороты.Счет,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты).ИНН,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт
    
    

    Вложения:

  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    В конструкции вида ВЫБОР Когда ....Тогда......Иначе......Конец нельзя использовать сравнение вида 'В ИЕРАРХИИ', поэтому делайте "плоский" список иерархии и передавайте в виде параметра.

    Должно получится что-то вроде:

    Выбор Когда <Поле> В (&ПлоскийСписокИерархии)
    Тогда
    ............
    Иначе
    .........
    КОНЕЦ
  3. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    В этом же отчете есть еще одна проблема.
    Допустим была проводка:
    Дт 62.01 СубконтоДт1=Контрагент, СубконтоДт2=Договор1, СубконтоДт3=РеализацияТоваровИУслуг"001От01.01.2010
    Кт 90.01 СубконтоКт1="Услуги по обучению", СубконтоКт2=18%
    на сумму 10 000.
    На 31.12.2010 по счету 62.01 есть СуммаКонечныйОстаток=1000.

    Мне нужно получить дебитовый остаток по счету 62.01 на определенную дату с субконто СубконтоКт1.
    Для этого я использую 2 регистра бухгалтерии: Хозрасчетный.ХозрасчетныйОстаткиИОбороты и Хозрасчетный.ХозрасчетныйДвиженияССубконто. Данные выводятся, но выходит сумма не конечного остатка, а первоначальная сумма, которая была в в проводке Дт62.01 Кт90.01.

    Код:
    ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Субконто3,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК Задолженность,
    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты).ИНН КАК ИНН,
    ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
    ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК СубконтоКт1,
    ХозрасчетныйДвиженияССубконто.Регистратор
    {ВЫБРАТЬ
    Контрагент.*,
    Субконто2.*,
    Субконто3.*,
    Задолженность,
    Счет.*,
    ИНН,
    СчетКт.*,
    СубконтоКт1.*}
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    ,
    &Период,
    ,
    ,
    Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями)),
    ,
    {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент}) КАК ХозрасчетныйОстаткиИОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
    ПО ХозрасчетныйОстаткиИОбороты.Счет = ХозрасчетныйДвиженияССубконто.СчетДт
    И ХозрасчетныйОстаткиИОбороты.Субконто3 = ХозрасчетныйДвиженияССубконто.СубконтоДт3
    ГДЕ
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт > 0
    {ГДЕ
    ХозрасчетныйОстаткиИОбороты.Счет,
    (ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2}
    
    
    Как вывести СуммаКонечныйОстатокДт?
  4. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Никто не подскажет?
  5. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Да нет...у Вас выводится остаток. Просто он выводится не общий, а разрезе всей детализации. Я вот скопировал Ваш запрос в консоль. Он мне, правда, много всего выдал...Туда и ввод нач. остатков попадает и всё на свете....Но в принципе остатки показывает верные. Может, Вы видите только сумму проводки, потому что данные не отсортированы. Упорядочьте данные по контрагенту и всё увидите...

    Вот то, что выдал Ваш запрос:

    Посмотреть вложение 7141

    А вот то, что показывает оборотка:

    Посмотреть вложение 7142

    Сходится???
    Сходится!!!

    P.S. По правде сказать, я не совсем понял, что Вы пытаетесь сделать и какой остаток Вам нужен...
    Может, нужен просто остаток по счету? Или должна быть всё же какая-то связь с 90 счетом и номенклатурной группой???
    А что эта связь дает???

    Вложения:

  6. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Спасибо за ответ :angry:

    У вас в консоле данные тоже неправильно вышли. В вашем примере остаток равен обороту по дебиту.
    Бухгалтерию интерсует отчет по дебиторской задолженности по покупателям с расшифровкой "за что они нам должны денег", т.е. расшифровка по номенклатурной группе. Поэтому не могу воспользоваться только регистром Хозрасчетный.ОстаткиИОбороты, т.к. там нету информации по коррресподирующим счетам.

    Если в запросе брать только регистр Хозрасчетный.ОстаткиИОбороты, т.е. если запрос будет таким:
    Код:
    ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт) КАК Задолженность,
    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК ДокументЗадолженности,
    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты).ИНН КАК ИНН
    {ВЫБРАТЬ
    Контрагент.*,
    Задолженность,
    ДокументЗадолженности.*,
    Счет.*,
    ИНН}
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &Период, , , {(Счет) КАК Счет}, &ПорядокСубконто, {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент}) КАК ХозрасчетныйОстаткиИОбороты
    ГДЕ
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт > 0
    {ГДЕ
    ХозрасчетныйОстаткиИОбороты.Организация,
    ХозрасчетныйОстаткиИОбороты.Счет,
    (ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты)).* КАК Контрагент,
    (ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов)).* КАК Договор}
    
    СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты),
    ХозрасчетныйОстаткиИОбороты.Субконто3,
    ХозрасчетныйОстаткиИОбороты.Счет,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты).ИНН
    
    
    
    
    то получаем сумму такую как в обротно-сальдовой ведомости:

    Вложения:

  7. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Если же в запросе связать регистр Хозрасчетный.ОстаткиИОбороты и Хозрасчетный.ДвиженияССубконто, то получаем напонятный конечный остаток:

    Вложения:

  8. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    А учет в базе у Вас ведется по одной организации или по нескольким???
  9. TopicStarter Overlay
    Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    по одной

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