8.х Запрос выполняется не корректно. Помогите разобраться.

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

  1. TopicStarter Overlay
    nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Приветствую.

    Дано: платформа 8.1 (build 8.1.11.67)
    Конфигурация УПП 1.2 (build 1.2.17.3)
    Отчет "СводНачисленнойЗарплатыОрганизаций","ОсновнаяСхемаКомпоновкиДанных", запрос "ОсновныеНачисления"

    Необходимо сделать разбиение "Оплата больничных листов" на "Оплата больничных листов за счет работодателя" и "Оплата больничных листов за счет ФСС".

    Все вроде бы просто, однако.....

    Получился вот такой текст запроса:

    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    ВЫБОР
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме
    ТОГДА "2. Доходы в натуральной форме"
    ИНАЧЕ "1. Начислено"
    КОНЕЦ КАК ВидДвижения,
    ОсновныеНачисленияРаботниковОрганизации.ФизЛицо КАК ФизЛицо,
    ОсновныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение КАК Организация,
    ОсновныеНачисленияРаботниковОрганизации.Организация КАК ГоловнаяОрганизация,
    ОсновныеНачисленияРаботниковОрганизации.ПериодРегистрации КАК ПериодРегистрации,
    ВЫБОР
    КОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.НеоблагаетсяЦеликом)
    ТОГДА ВЫРАЗИТЬ(ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + " за счет работодателя" КАК СТРОКА(50))
    КОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ПособияЗаСчетФСС)
    ТОГДА ВЫРАЗИТЬ(ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + " за счет ФСС" КАК СТРОКА(50))
    ИНАЧЕ ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование
    КОНЕЦ КАК ВидРасчета,
    СУММА(ОсновныеНачисленияРаботниковОрганизации.ОтработаноДней) КАК ОтработаноДней,
    СУММА(ОсновныеНачисленияРаботниковОрганизации.ОтработаноЧасов) КАК ОтработаноЧасов,
    СУММА(ВЫБОР
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
    И (НЕ НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН ЕСТЬ NULL )
    ТОГДА РАЗНОСТЬДАТ(НачислениеПоБольничномуЛистуОтражениеВУчете.ПериодДействияНачало, НачислениеПоБольничномуЛистуОтражениеВУчете.ПериодДействияКонец, ДЕНЬ) + 1
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
    ТОГДА ОсновныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
    ИНАЧЕ 0
    КОНЕЦ) КАК ОплаченоДней,
    СУММА(ВЫБОР
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени <> ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
    И (НЕ НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН ЕСТЬ NULL )
    ТОГДА РАЗНОСТЬДАТ(НачислениеПоБольничномуЛистуОтражениеВУчете.ПериодДействияНачало, НачислениеПоБольничномуЛистуОтражениеВУчете.ПериодДействияКонец, ЧАС) + 1
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени <> ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
    ТОГДА ОсновныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
    ИНАЧЕ 0
    КОНЕЦ) КАК ОплаченоЧасов,
    СУММА(ВЫБОР
    КОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.НеоблагаетсяЦеликом)
    ИЛИ НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ПособияЗаСчетФСС)
    ТОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.Результат
    ИНАЧЕ ОсновныеНачисленияРаботниковОрганизации.Результат
    КОНЕЦ) КАК Результат,
    ОсновныеНачисленияРаботниковОрганизации.ПериодДействия КАК ПериодДействия,
    "А" + ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Код КАК Порядок,
    ОсновныеНачисленияРаботниковОрганизации.Регистратор КАК Регистратор
    {ВЫБРАТЬ
    ВидДвижения,
    ФизЛицо.*,
    Организация.*,
    ГоловнаяОрганизация.*,
    ПериодРегистрации,
    ВидРасчета,
    ОтработаноДней,
    ОтработаноЧасов,
    ОплаченоДней,
    ОплаченоЧасов,
    Результат,
    ПериодДействия,
    Порядок,
    Регистратор.*}
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизации
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеПоБольничномуЛисту.ОтражениеВУчете КАК НачислениеПоБольничномуЛистуОтражениеВУчете
    ПО ОсновныеНачисленияРаботниковОрганизации.Регистратор = НачислениеПоБольничномуЛистуОтражениеВУчете.Ссылка
    И ((НЕ НачислениеПоБольничномуЛистуОтражениеВУчете.Сторно))
    И (ОсновныеНачисленияРаботниковОрганизации.ПериодДействия = НАЧАЛОПЕРИОДА(НачислениеПоБольничномуЛистуОтражениеВУчете.ПериодДействияНачало, МЕСЯЦ))
    И (НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.НеоблагаетсяЦеликом)
    ИЛИ НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ПособияЗаСчетФСС))
    ГДЕ
    (ОсновныеНачисленияРаботниковОрганизации.Результат <> 0
    ИЛИ ОсновныеНачисленияРаботниковОрганизации.ОтработаноДней <> 0
    ИЛИ ОсновныеНачисленияРаботниковОрганизации.ОтработаноЧасов <> 0
    ИЛИ ОсновныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов <> 0)
    И (НЕ ОсновныеНачисленияРаботниковОрганизации.Сторно)
    И ОсновныеНачисленияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
    {ГДЕ
    ОсновныеНачисленияРаботниковОрганизации.ФизЛицо.*,
    ОсновныеНачисленияРаботниковОрганизации.Организация.* КАК ГоловнаяОрганизация}
    
    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение,
    ОсновныеНачисленияРаботниковОрганизации.Организация,
    ОсновныеНачисленияРаботниковОрганизации.Регистратор,
    ОсновныеНачисленияРаботниковОрганизации.ПериодРегистрации,
    ОсновныеНачисленияРаботниковОрганизации.ПериодДействия,
    ВЫБОР
    КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме
    ТОГДА "2. Доходы в натуральной форме"
    ИНАЧЕ "1. Начислено"
    КОНЕЦ,
    ОсновныеНачисленияРаботниковОрганизации.ФизЛицо,
    "А" + ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Код,
    ВЫБОР
    КОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.НеоблагаетсяЦеликом)
    ТОГДА ВЫРАЗИТЬ(ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + " за счет работодателя" КАК СТРОКА(50))
    КОГДА НачислениеПоБольничномуЛистуОтражениеВУчете.КодДоходаЕСН = ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ПособияЗаСчетФСС)
    ТОГДА ВЫРАЗИТЬ(ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + " за счет ФСС" КАК СТРОКА(50))
    ИНАЧЕ ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование
    КОНЕЦ,
    НачислениеПоБольничномуЛистуОтражениеВУчете.НомерСтроки,
    НачислениеПоБольничномуЛистуОтражениеВУчете.Ссылка
    
    Результат выполненения запроса с условиями А:
    Посмотреть вложение 1253

    Результат выполненения запроса с условиями В:
    Посмотреть вложение 1254

    Сам отчет формируется так же с группировкой и агрегатирующей функцией "СУММА". В итоге получается удвоение результатов при выполнении запроса с условиями В.

    Если в запросе убрать группировку вообще(а по другому вроде как и нельзя), то результат выполнения запроса с условиями А:
    Посмотреть вложение 1255

    и результат выполнения запроса с условиями В:
    Посмотреть вложение 1256

    В таком случае,при условиях А, в своде не учитывается одно из начислений за счет работодателя, где сумма 178,06р. - там регистраторы разные. Почему конечная группировка не учитывает регистратора - понять не могу, хотя если расшифровывать отчет до регистратора, то показывается два регистратора и сумма удваивается.(если не понятно, то могу сделать скриншот).

    Так же не понятен принцип группировки результата запроса при условиях В: без группировки - все отлично, при группировке - задвоение результатов.

    Помогите разобраться, уже весь мозг сломал. :unsure:

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