Добрый день. Подскажите, люди добрые, где ошибка?
Делаю отчет, создала запрос. В консоли запросов он срабатывает и выводит все данные. А в СКД и в Консоли отчетов - не выводит ту часть, которая соедина по Левому соединению. Причем Левых соединений 2. Не выводит второе.
Код:
ВЫБРАТЬ
НачислениеПоБольничномуЛисту.Физлицо КАК ФИО,
НачислениеПоБольничномуЛисту.ДатаНачалаСобытия,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации КАК МесяцНачисления,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента КАК СерияЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента КАК NЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности КАК ПричинаНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты,
СУММА(Начисления2.ОплаченоДнейЧасов) КАК ДниЗаСчетФСС,
СУММА(Начисления1.ОплаченоДнейЧасов) КАК ДниЗаСчетРаботодателя,
СУММА(Начисления2.Результат) КАК ПособиеЗаСчетФСС,
СУММА(Начисления1.Результат) КАК ПособиеЗаСчетРаботодателя,
Начисления1.ВидРасчета КАК ВидРасчета,
Начисления1.Сторно КАК Сторно
{ВЫБРАТЬ ФИО, ДатаНачалаСобытия, ДатаОкончания, МесяцНачисления, СерияЛисткаНетрудоспособности, NЛисткаНетрудоспособности, ПричинаНетрудоспособности, ПроцентОплаты, ДниЗаСчетФСС, ДниЗаСчетРаботодателя, ПособиеЗаСчетФСС, ПособиеЗаСчетРаботодателя, ВидРасчета, Сторно}
ИЗ
Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеПоБольничномуЛисту.Начисления КАК Начисления1
ПО НачислениеПоБольничномуЛисту.Ссылка = Начисления1.Ссылка
И (Начисления1.Сторно = ЛОЖЬ)
И (Начисления1.ВидРасчета.Код = "00025")
ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеПоБольничномуЛисту.Начисления КАК Начисления2
ПО НачислениеПоБольничномуЛисту.Ссылка = Начисления2.Ссылка
И (Начисления2.Сторно = ЛОЖЬ)
И (Начисления2.ВидРасчета.Код В ("00021", "00022"))
ГДЕ
НачислениеПоБольничномуЛисту.ПометкаУдаления = ЛОЖЬ
И НачислениеПоБольничномуЛисту.Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
НачислениеПоБольничномуЛисту.Физлицо,
НачислениеПоБольничномуЛисту.ДатаНачалаСобытия,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты,
Начисления1.ВидРасчета,
Начисления1.Сторноф
УПОРЯДОЧИТЬ ПО
МесяцНачисления,
ФИО
Перепробовала многие варианты, но остановилась на своем, просьба прокомментировать на оптимизированность и загрузку на сервер.
(23)ТС просто хочет видеть кому, когда и сколько начисляли больничных. А в данном контексте пустые данные нафиг не нужны.
Пустые хотелось бы тоже выводить, ибо надо приучать пользователей к порядку.
Решение:
ВЫБРАТЬ
НачислениеПоБольничномуЛисту.Физлицо КАК ФИО,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации КАК МесяцНачисления,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента КАК СерияЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента КАК NЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности КАК ПричинаНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетРаботодателя) КАК ДниЗаСчетРаботодателя,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетФСС) КАК ДниЗаСчетФСС,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетРаботодателя)+СУММА(НачисленияБольничныхОбщее.ДниЗаСчетФСС) КАК ИтогоДней,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетРаботодателя) КАК ПособиеЗаСчетРаботодателя,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетФСС) КАК ПособиеЗаСчетФСС,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетРаботодателя)+СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетФСС) КАК ИтогоПособие
ИЗ
Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
ЛЕВОЕ СОЕДИНЕНИЕ
(
ВЫБРАТЬ
НачислениеПоБЛЗаСчРаботодателя.Ссылка КАК Ссылка,
СУММА(ЕСТЬNULL(НачислениеПоБЛЗаСчРаботодателя.ОплаченоДнейЧасов, 0)) КАК ДниЗаСчетРаботодателя,
0 КАК ДниЗаСчетФСС,
СУММА(ЕСТЬNULL(НачислениеПоБЛЗаСчРаботодателя.Результат, 0)) КАК ПособиеЗаСчетРаботодателя,
0 КАК ПособиеЗаСчетФСС
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеПоБЛЗаСчРаботодателя
ГДЕ
НачислениеПоБЛЗаСчРаботодателя.Сторно = ЛОЖЬ
И НачислениеПоБЛЗаСчРаботодателя.ВидРасчета.Код В ("00025")
СГРУППИРОВАТЬ ПО
НачислениеПоБЛЗаСчРаботодателя.Ссылка
ОБЪЕДИНИТЬ
ВЫБРАТЬ
НачислениеЗаСчетФСС.Ссылка,
0,
СУММА(ЕСТЬNULL(НачислениеЗаСчетФСС.ОплаченоДнейЧасов, 0)),
0,
СУММА(ЕСТЬNULL(НачислениеЗаСчетФСС.Результат, 0))
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеЗаСчетФСС
ГДЕ
НачислениеЗаСчетФСС.Сторно = ЛОЖЬ
И НачислениеЗаСчетФСС.ВидРасчета.Код В ("00021", "00022", "00023")
СГРУППИРОВАТЬ ПО
НачислениеЗаСчетФСС.Ссылка
) КАК НачисленияБольничныхОбщее
ПО НачислениеПоБольничномуЛисту.Ссылка = НачисленияБольничныхОбщее.Ссылка
ГДЕ
НачислениеПоБольничномуЛисту.Организация В(&Организация)
И НачислениеПоБольничномуЛисту.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2
И НачислениеПоБольничномуЛисту.ПометкаУдаления = ЛОЖЬ
И НачислениеПоБольничномуЛисту.Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
НачислениеПоБольничномуЛисту.Физлицо,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты
УПОРЯДОЧИТЬ ПО МесяцНачисления, ФИО
(3) Николай, Стенд не открывается. Я правильно понимаю, его надо запускать в режиме Предприятие? При открытии спрашивает разрешение на открытие и ничего не происходит. Так же с Консолью СКД 1-Совской.
Версия программы у меня 8.3, но базы от 8.2, если это имеет значение.
И вообще,я только начинаю с 1С, раньше я занималась Epicor iScala. И для меня этот переход очень болезнен. Может подскажите, с чего начать, что почитать, какими инструментами лучше пользоваться? Меня в первую очередь очень напрягает неполноценный скриптовый редактор, я пользуюсь Консолью запросов. Может есть что-нибудь альтернативное, более похожее на SQL Server Management Studio?
(17) Олеся, Вы, наверное, работаете в обычном режиме. Я написал в личку, что надо сделать.
Переход у всех бывает болезненный, 1С - уже огромный агрегат, который трудно воспринимается сразу. Начните с самостоятельного изучения, хотя бы с книги Радченко. Если не получится, тогда курсы помогут.
http://v8.1c.ru/metod/
Там на закладке "Макет СКД" нажмите "Обновить" - обработка покажет запрос, который СКД выполняет. Там же можно выполнить этот запрос и посмотреть результат.
Предположительно: в секции СГРУППИРОВАТЬ не участвуют поля из второй таблицы (Начисления2) - СКД поэтому может убрать эту таблицу из запроса. Но не настаиваю, что в этом причина.
Я бы не стал искать, почему СКД что-то видит, а что-то не видит. Я бы оставил одно левое соединение:
ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеПоБольничномуЛисту.Начисления КАК Начисления
ПО НачислениеПоБольничномуЛисту.Ссылка = Начисления.Ссылка
И (Начисления.Сторно = ЛОЖЬ)
И (Начисления.ВидРасчета.Код В ("00021", "00022", "00025"))
А цифры считал бы так:
ЕстьNULL(СУММА(ВЫБОР КОГДА Начисления.КодРасчета<>"00025" ТОГДА Начисления.ОплаченоДнейЧасов ИНАЧЕ 0 КОНЕЦ), 0) КАК ДниЗаСчетФСС,
ЕстьNULL(СУММА(ВЫБОР КОГДА Начисления.КодРасчета="00025" ТОГДА Начисления.ОплаченоДнейЧасов ИНАЧЕ 0 КОНЕЦ), 0) КАК ДниЗаСчетРаботодателя,
И если бы это решило проблему, то плюнул бы: "СКД что-то в себе оптимизировало-оптимизировало, да не выоптимизировало".
(13) Так вопрос не в той части кода, которую я привёл. А в той части кода, который вы не переделали. Чтоб совсем снять с себя ответственность, поменяйте синоним таблицы для левого соединения.
(16) Павел, спасибо, я поняла свою ошибку по группировке, исправила ее. И все равно, в запросе - все красиво, а в таблицу отчета эти цифры не выводятся:(
В приложении - скрины выполнения запроса и отчета.
ВЫБРАТЬ
НачислениеПоБольничномуЛистуНачисления.Ссылка,
СУММА(НачислениеПоБольничномуЛистуНачисления.Результат) КАК Результат,
СУММА(ВЫБОР
КОГДА НачислениеПоБольничномуЛистуНачисления.ОплаченоДнейЧасов < 0
И НачислениеПоБольничномуЛистуНачисления.Ссылка.ПерерассчитываемыйДокумент = ЗНАЧЕНИЕ(Документ.НачислениеПоБольничномуЛисту.ПустаяСсылка)
ТОГДА 0
ИНАЧЕ НачислениеПоБольничномуЛистуНачисления.ОплаченоДнейЧасов
КОНЕЦ) КАК ОплаченоДнейЧасов,
НачислениеПоБольничномуЛистуНачисления.ВидРасчета
ПОМЕСТИТЬ ВТНачисление
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеПоБольничномуЛистуНачисления
ГДЕ
НачислениеПоБольничномуЛистуНачисления.ВидРасчета В(&СписокВидовРасчетов)
СГРУППИРОВАТЬ ПО
НачислениеПоБольничномуЛистуНачисления.ВидРасчета,
НачислениеПоБольничномуЛистуНачисления.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТНачисление.Ссылка,
СУММА(ВТНачисление.ОплаченоДнейЧасов) КАК ВсегоДней,
СУММА(ВЫБОР
КОГДА ВТНачисление.ВидРасчета.Наименование = "Оплата больничных листов за счет работодателя"
ТОГДА ВТНачисление.ОплаченоДнейЧасов
КОНЕЦ) КАК ДнейЗаСчетРаботодателя,
СУММА(ВЫБОР
КОГДА ВТНачисление.ВидРасчета.Наименование <> "Оплата больничных листов за счет работодателя"
ТОГДА ВТНачисление.ОплаченоДнейЧасов
КОНЕЦ) КАК ДнейЗаСчетФСС,
СУММА(ВЫБОР
КОГДА ВТНачисление.ВидРасчета.Наименование = "Оплата больничных листов за счет работодателя"
ТОГДА ЕСТЬNULL(ВТНачисление.Результат, 0)
КОНЕЦ) КАК ОплатаЗаСчетРаботодателя,
СУММА(ВЫБОР
КОГДА ВТНачисление.ВидРасчета.Наименование <> "Оплата больничных листов за счет работодателя"
ТОГДА ЕСТЬNULL(ВТНачисление.Результат, 0)
КОНЕЦ) КАК ОплатаЗаСчетФсс
ПОМЕСТИТЬ ВТРезультат
ИЗ
ВТНачисление КАК ВТНачисление
СГРУППИРОВАТЬ ПО
ВТНачисление.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НачислениеПоБольничномуЛисту.Сотрудник,
НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ОбщееЗаболевание)
ТОГДА ЕСТЬNULL(ВТРезультат.ДнейЗаСчетРаботодателя, 0)
КОНЕЦ КАК ДнейЗаСчетРаботадателя,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ОбщееЗаболевание)
ТОГДА ЕСТЬNULL(ВТРезультат.ДнейЗаСчетФСС, 0)
КОНЕЦ КАК ДнейЗаСчетФСС,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ОбщееЗаболевание)
ТОГДА ЕСТЬNULL(ВТРезультат.ОплатаЗаСчетРаботодателя, 0)
КОНЕЦ КАК ОплатаЗаСчетРаботадателя,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ОбщееЗаболевание)
ТОГДА ЕСТЬNULL(ВТРезультат.ОплатаЗаСчетФсс, 0)
КОНЕЦ КАК ОплатаЗаСчетФСС,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоБеременностиИРодам)
ТОГДА ЕСТЬNULL(ВТРезультат.ДнейЗаСчетФСС, 0)
КОНЕЦ КАК ДнейПоБеремености,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоБеременностиИРодам)
ТОГДА ЕСТЬNULL(ВТРезультат.ОплатаЗаСчетФсс, 0)
КОНЕЦ КАК ОплатаПоБеремености,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоУходуЗаРебенком)
ТОГДА ЕСТЬNULL(ВТРезультат.ДнейЗаСчетФСС, 0)
КОНЕЦ КАК ДнейПоУходуЗаРебонком,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоУходуЗаРебенком)
ТОГДА ЕСТЬNULL(ВТРезультат.ОплатаЗаСчетФсс, 0)
КОНЕЦ КАК ОплатаПоУходуЗаРебенком,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ТравмаНаПроизводстве)
ТОГДА ЕСТЬNULL(ВТРезультат.ДнейЗаСчетФСС, 0)
КОНЕЦ КАК ДнейПоТрамвеНаПроизводстве,
ВЫБОР
КОГДА НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ТравмаНаПроизводстве)
ТОГДА ЕСТЬNULL(ВТРезультат.ОплатаЗаСчетФсс, 0)
КОНЕЦ КАК ОплатаПоТрамвеНаПроизводстве,
НачислениеПоБольничномуЛисту.ПервичныйБольничныйЛист,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента,
НачислениеПоБольничномуЛисту.ПроцентОплаты
ИЗ
Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
ЛЕВОЕ СОЕДИНЕНИЕ ВТРезультат КАК ВТРезультат
ПО НачислениеПоБольничномуЛисту.Ссылка = ВТРезультат.Ссылка
ГДЕ
НачислениеПоБольничномуЛисту.Проведен = ИСТИНА
И НачислениеПоБольничномуЛисту.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
СписокРасчетов= Новый СписокЗначений;
СписокРасчетов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оплата больничных листов за счет работодателя"));
СписокРасчетов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаБЛПоТравмеНаПроизводстве);
СписокРасчетов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОтсутствиеПоБолезниПоБеременности);
СписокРасчетов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуБЛ);
СписокРасчетов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОтпускПоБеременностиИРодам);
ИМХО, вообще соединения не нужны. Выбирать сам документ и крепить к нему таб. часть смысла нет. Можно сразу выбирать табличную часть, а все нужные реквизиты через ссылку вытащить. А данные по разным видам начислений делать как:
Выбор
Когда Начисления.ВидРасчета.Код В ("00021", "00022") Тогда Начисления.ОплаченоДнейЧасов
Иначе
0
Конец КАК ДниЗаСчетФСС,
Выбор
Когда Начисления.ВидРасчета.Код В ("00025") Тогда Начисления.ОплаченоДнейЧасов
Иначе
0
Конец КАК ДниЗаСчетРаботодателя
Показать
Потом при группировке сложится как надо
"Сторно", которое всегда ЛОЖЬ вообще выбирать не надо. А "ВидРасчета" если уж в детализации идет, тогда нет смысла "Начисления.ОплаченоДнейЧасов" делить на "ДниЗаСчетФСС" и "ДниЗаСчетРаботодателя". Они все равно в разных строках будут и не сложатся по кодам "00021", "00022"
То же самое касается
СУММА(Начисления2.Результат) КАК ПособиеЗаСчетФСС,
СУММА(Начисления1.Результат) КАК ПособиеЗаСчетРаботодателя,
(23) Ну, только если ТС обязательно хочет видеть документы с пустыми данными, по мне, так исходя из
УПОРЯДОЧИТЬ ПО
МесяцНачисления,
ФИО
ТС просто хочет видеть кому, когда и сколько начисляли больничных. А в данном контексте пустые данные нафиг не нужны. Да и деление "ЗаСчетФСС" и "ЗаСчетРаботодателя" вроде третьего варианта не подразумевает, т.е. любой вид начисления куда-то должен отнестись и в левом соединении смысла нет
Перепробовала многие варианты, но остановилась на своем, просьба прокомментировать на оптимизированность и загрузку на сервер.
(23)ТС просто хочет видеть кому, когда и сколько начисляли больничных. А в данном контексте пустые данные нафиг не нужны.
Пустые хотелось бы тоже выводить, ибо надо приучать пользователей к порядку.
Решение:
ВЫБРАТЬ
НачислениеПоБольничномуЛисту.Физлицо КАК ФИО,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации КАК МесяцНачисления,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента КАК СерияЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента КАК NЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности КАК ПричинаНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетРаботодателя) КАК ДниЗаСчетРаботодателя,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетФСС) КАК ДниЗаСчетФСС,
СУММА(НачисленияБольничныхОбщее.ДниЗаСчетРаботодателя)+СУММА(НачисленияБольничныхОбщее.ДниЗаСчетФСС) КАК ИтогоДней,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетРаботодателя) КАК ПособиеЗаСчетРаботодателя,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетФСС) КАК ПособиеЗаСчетФСС,
СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетРаботодателя)+СУММА(НачисленияБольничныхОбщее.ПособиеЗаСчетФСС) КАК ИтогоПособие
ИЗ
Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
ЛЕВОЕ СОЕДИНЕНИЕ
(
ВЫБРАТЬ
НачислениеПоБЛЗаСчРаботодателя.Ссылка КАК Ссылка,
СУММА(ЕСТЬNULL(НачислениеПоБЛЗаСчРаботодателя.ОплаченоДнейЧасов, 0)) КАК ДниЗаСчетРаботодателя,
0 КАК ДниЗаСчетФСС,
СУММА(ЕСТЬNULL(НачислениеПоБЛЗаСчРаботодателя.Результат, 0)) КАК ПособиеЗаСчетРаботодателя,
0 КАК ПособиеЗаСчетФСС
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеПоБЛЗаСчРаботодателя
ГДЕ
НачислениеПоБЛЗаСчРаботодателя.Сторно = ЛОЖЬ
И НачислениеПоБЛЗаСчРаботодателя.ВидРасчета.Код В ("00025")
СГРУППИРОВАТЬ ПО
НачислениеПоБЛЗаСчРаботодателя.Ссылка
ОБЪЕДИНИТЬ
ВЫБРАТЬ
НачислениеЗаСчетФСС.Ссылка,
0,
СУММА(ЕСТЬNULL(НачислениеЗаСчетФСС.ОплаченоДнейЧасов, 0)),
0,
СУММА(ЕСТЬNULL(НачислениеЗаСчетФСС.Результат, 0))
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеЗаСчетФСС
ГДЕ
НачислениеЗаСчетФСС.Сторно = ЛОЖЬ
И НачислениеЗаСчетФСС.ВидРасчета.Код В ("00021", "00022", "00023")
СГРУППИРОВАТЬ ПО
НачислениеЗаСчетФСС.Ссылка
) КАК НачисленияБольничныхОбщее
ПО НачислениеПоБольничномуЛисту.Ссылка = НачисленияБольничныхОбщее.Ссылка
ГДЕ
НачислениеПоБольничномуЛисту.Организация В(&Организация)
И НачислениеПоБольничномуЛисту.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2
И НачислениеПоБольничномуЛисту.ПометкаУдаления = ЛОЖЬ
И НачислениеПоБольничномуЛисту.Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
НачислениеПоБольничномуЛисту.Физлицо,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты
УПОРЯДОЧИТЬ ПО МесяцНачисления, ФИО
просьба прокомментировать на оптимизированность и загрузку на сервер
Вообще отвратительно.
1)Сначала во внутренний запрос выбираются строки табличных частей без отбора по периоду, организации и пр. А потом уже соединяется с отобранным массивом документов.
2)Внутренний запрос прекрасно без объединения, одним запросом выбирается
Я бы так выбирал:
ВЫБРАТЬ
НачислениеПоБольничномуЛистуНачисления.Ссылка,
СУММА(ВЫБОР
КОГДА НачислениеПоБольничномуЛистуНачисления.ВидРасчета.Код = ""00025""
ТОГДА НачислениеПоБольничномуЛистуНачисления.ОплаченоДнейЧасов
ИНАЧЕ 0
КОНЕЦ) КАК ДниЗаСчетРаботодателя,
СУММА(ВЫБОР
КОГДА НачислениеПоБольничномуЛистуНачисления.ВидРасчета.Код = ""00025""
ТОГДА НачислениеПоБольничномуЛистуНачисления.Результат
ИНАЧЕ 0
КОНЕЦ) КАК ПособиеЗаСчетРаботодателя,
СУММА(ВЫБОР
КОГДА НачислениеПоБольничномуЛистуНачисления.ВидРасчета.Код = ""00025""
ТОГДА 0
ИНАЧЕ НачислениеПоБольничномуЛистуНачисления.ОплаченоДнейЧасов
КОНЕЦ) КАК ДниЗаСчетФСС,
СУММА(ВЫБОР
КОГДА НачислениеПоБольничномуЛистуНачисления.ВидРасчета.Код = ""00025""
ТОГДА 0
ИНАЧЕ НачислениеПоБольничномуЛистуНачисления.Результат
КОНЕЦ) КАК ПособиеЗаСчетФСС
ИЗ
Документ.НачислениеПоБольничномуЛисту.Начисления КАК НачислениеПоБольничномуЛистуНачисления
ГДЕ
НачислениеПоБольничномуЛистуНачисления.Ссылка.Проведен
И НЕ НачислениеПоБольничномуЛистуНачисления.Ссылка.ПометкаУдаления
И НачислениеПоБольничномуЛистуНачисления.Ссылка.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2
И НачислениеПоБольничномуЛистуНачисления.Ссылка.Организация В(&Организации)
И НачислениеПоБольничномуЛистуНачисления.ВидРасчета.Код В (""00021"", ""00022"", ""00023"", ""00025"")
И НЕ НачислениеПоБольничномуЛистуНачисления.Сторно
СГРУППИРОВАТЬ ПО
НачислениеПоБольничномуЛистуНачисления.Ссылка
Показать
Все остальные поля из ссылки вытаскиваются
P/S/ А вообще, отбор по кодам не айс. Да и данные, наверняка, из регистра можно выбирать, а не из документа
НачислениеПоБольничномуЛисту.Физлицо КАК ФИО,
НачислениеПоБольничномуЛисту.ДатаНачала,
НачислениеПоБольничномуЛисту.ДатаОкончания,
НачислениеПоБольничномуЛисту.ПериодРегистрации КАК МесяцНачисления,
НачислениеПоБольничномуЛисту.СерияВходящегоДокумента КАК СерияЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.НомерВходящегоДокумента КАК NЛисткаНетрудоспособности,
НачислениеПоБольничномуЛисту.КодПричиныНетрудоспособности КАК ПричинаНетрудоспособности,
НачислениеПоБольничномуЛисту.ПроцентОплаты
Показать
Все они вытаскиваются из ссылки через точку, при этом сама ссылка не нужна(как я её в запросе вытаскиваю). Поэтому в СКД, в выбираемых полях, надо вытаскивать не поле "Ссылка", а поля
они там через плюсик от ссылки доступны. Ну, либо результат этого запроса запихнуть во временную таблицу(ВТ1, например), а уже в следующей таблице вытянуть нужные поля:
ВЫБРАТЬ
ВТ1.Ссылка.Физлицо КАК ФИО,
ВТ1.Ссылка.ДатаНачала,
ВТ1.Ссылка.ДатаОкончания,
ВТ1.Ссылка.ПериодРегистрации КАК МесяцНачисления,
..
ВТ1.ДниЗаСчетРаботодателя,
ВТ1.ПособиеЗаСчетРаботодателя,
ВТ1.ДниЗаСчетФСС,
ВТ1.ПособиеЗаСчетФСС
...
Показать
Если не нравится что столько через точку вытягивается, то можно соединить по имеющейся ссылке с самим документом и вытащить реквизиты оттуда. Но, ИМХО, получится примерно то же самое и менее читаемое
Какая альтернатива отбора по кодам? Можно коды еще вынести в параметр
Можно в параметр. А если это предопределенный элемент справочника/планов видов характеристик, или перечисление, то можно сразу в запросе установить нужное значение. В любом случае будет намного шустрее