Группа: Пользователи
Сообщений: 40
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый День! Третий день бьюсь с запросом,нужно сделать отчет "Начисления По подразделениям"
по типу "Подразделение" Оклад Отпускные Компенсация Ндфл --------- --------- --------- -------- -------
Делаю через Макет, т.к через Конструктор получаются лишние поля в таблицах, а отчет необходимо потом выгрузить,вообщем суть не в этом , в модуле форму пишу запрос, вроде ошибок нет , но и результата тоже нет,в чем причина, подскажите пожалуйста...
Процедура КнопкаСформироватьНажатие(Кнопка)
Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Подразделения.Ссылка КАК Подразделение, | Отпуск.ПериодРегистрации, | Отпуск.ВидРасчета.Наименование, | Отпуск.ПодразделениеОрганизации, | СУММА(Отпуск.Результат) КАК Отпуск, | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации1, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование КАК ВидРасчетаНаименование1, | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК РезультатОк, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации1, | НДФЛРасчетыСБюджетом.Период, | СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Налог, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации КАК ПодразделениеОрганизации2, | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации2, | ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование КАК ВидРасчетаНаименование2, | СУММА(ДополнительныеНачисленияРаботниковОрганизаций.Результат) КАК Компенсация, | ДополнительныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации3 |ИЗ | Справочник.Подразделения КАК Подразделения | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций | ПО ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации = Подразделения.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Отпуск | ПО Отпуск.ПодразделениеОрганизации = Подразделения.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций | ПО ДополнительныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации = Подразделения.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом | ПО НДФЛРасчетыСБюджетом.ПодразделениеОрганизации = Подразделения.Ссылка |ГДЕ | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И НДФЛРасчетыСБюджетом.Период МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И Отпуск.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКален дарныеДни) | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням) | И Отпуск.ВидРасчета.Наименование = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарны еДни) | |СГРУППИРОВАТЬ ПО | Подразделения.Ссылка, | Отпуск.ПериодРегистрации, | Отпуск.ВидРасчета.Наименование, | Отпуск.ПодразделениеОрганизации, | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации, | НДФЛРасчетыСБюджетом.Период, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации, | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.Наименование, | ДополнительныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации"; Запрос.УстановитьПараметр("НачПериода",НачПериода); Запрос.УстановитьПараметр("КонПериода",КонПериода);
Результат = Запрос.Выполнить().Выбрать(); Макет = Отчеты.Отчет1.ПолучитьМакет("Макет"); ТабДок = Новый ТабличныйДокумент; Область = Макет.ПолучитьОбласть("Заголовок"); ТабДок.Вывести(Область); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(ОбластьШапка); // Область=Макет.ПолучитьОбласть("Под");
Пока Результат.Следующий()=1 Цикл ОбластьД=Макет.ПолучитьОбласть("Детали");
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Не мешало бы указать конфигурацию. На первый взгляд - куча одинаковых группировок - используйте вложенные запросы ну и соответственно условия накладывайте во вложенном запросе. А так не запрос - а месиво букв.
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 0 раз
Рейтинг: 0
Зарплата и Управление Персоналом, редакция 2.5 (2.5.50.1) (http://v8.1c.ru/hrm/) Copyright (С) ООО "1C", 2007-2011. Все права защищены (http://www.1c.ru)
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 0 раз
Рейтинг: 0
попробую ..
Не работает, пустые поля...
При замене текста запроса на
"ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение, | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций |ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням) | |СГРУППИРОВАТЬ ПО | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации"
Результат по Окладу выводиться, а при составлении запроса по нескольким регистрам нет, дело наверно в обьединении ... не могу понять..
В запросе используются ЛЕВЫЕ СОЕДИНЕНИЯ с регистрами расчета, а потом накладывается условие ГДЕ которое отсечет результат, если хотябы в одином из используемых регистров расчета нет записи за период отчета. Что вобщем-то вы и наблюдаете.
Попробуйте использовать в условии функцию ЕСТЬNULL
|И ЕСТЬNULL(ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета, ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКален дарныеДни))= ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКален дарныеДни) | И ЕСТЬNULL(ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням)) = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням) | И ЕСТЬNULL(Отпуск.ВидРасчета, ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарны еДни))= ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарны еДни)
и
| ЕСТЬNULL(ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, &НачПериода) МЕЖДУ &НачПериода И &КонПериода | И ЕСТЬNULL(НДФЛРасчетыСБюджетом.Период, &НачПериода) МЕЖДУ &НачПериода И &КонПериода | И ЕСТЬNULL(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, &НачПериода) МЕЖДУ &НачПериода И &КонПериода | И ЕСТЬNULL(Отпуск.ПериодРегистрации, &НачПериода) МЕЖДУ &НачПериода И &КонПериода
лучше все-таки использовать параметр. Так запрос получается намного читабельней.
В целом согласен с LOGIST - ошибочная схема построения запроса, отсюда и ошибки. Я бы вместо ЛЕВОГО СОЕДИНЕНИЯ делал 5 вложенных подзапросов через ОБЪЕДИНИТЬ.
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 0 раз
Рейтинг: 0
Работает вот так. но пока по ндфл нет данных
"ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВложенныйЗапрос.Подразделение, | СУММА(ВложенныйЗапрос.Результат) КАК Результат, | СУММА(ВложенныйЗапрос1.Результат) КАК Результат1, | ВложенныйЗапрос1.Подразделение КАК Подразделение1, | СУММА(ВложенныйЗапрос2.Результат) КАК Результат2, | ВложенныйЗапрос2.Подразделение КАК Подразделение2, | ВложенныйЗапрос3.Подразделение КАК Подразделение3, | СУММА(ВложенныйЗапрос3.Налог) КАК Налог |ИЗ | (ВЫБРАТЬ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета, | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций | ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням) | | СГРУППИРОВАТЬ ПО | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации, | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации) КАК ВложенныйЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета, | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций | ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарны еДни) | | СГРУППИРОВАТЬ ПО | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации) КАК ВложенныйЗапрос1 | ПО ВложенныйЗапрос1.Подразделение = ВложенныйЗапрос.Подразделение | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации, | ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета, | СУММА(ДополнительныеНачисленияРаботниковОрганизаций.Результат) КАК Результат, | ДополнительныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций | ГДЕ | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКален дарныеДни) | | СГРУППИРОВАТЬ ПО | ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета, | ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ДополнительныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации) КАК ВложенныйЗапрос2 | ПО ВложенныйЗапрос2.Подразделение = ВложенныйЗапрос.Подразделение | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | НДФЛРасчетыСБюджетом.Период КАК Период, | СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Налог, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом | ГДЕ | НДФЛРасчетыСБюджетом.Период МЕЖДУ &НачПериода И &КонПериода | | СГРУППИРОВАТЬ ПО | НДФЛРасчетыСБюджетом.Период, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации) КАК ВложенныйЗапрос3 | ПО ВложенныйЗапрос3.Подразделение = ВложенныйЗапрос.Подразделение | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Подразделение, | ВложенныйЗапрос1.Подразделение, | ВложенныйЗапрос2.Подразделение, | ВложенныйЗапрос3.Подразделение";
|СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Подразделение, | ВложенныйЗапрос1.Подразделение, | ВложенныйЗапрос2.Подразделение, | ВложенныйЗапрос3.Подразделение";
А теперь предсавте, что вот вы сейчас сдали этот отчет, он работает, все замечательно. А через пару месяцев вас попросят модифицировать этот отчет, и модификация затронет запрос. Сколько времени вы портратите разбираясь в собственном произведении? Может быть имеет смысл сразу писать "по человечески"?
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 0 раз
Рейтинг: 0
пытаюсь написать запрос .. Выбрать из справочника подразделения и сопоставить им данные из регистра расчета по окладу и ндфл . В макет выводиться только подразделения, а данных нет , проанализируйте пожалуйста запрос...
"ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВложенныйЗапрос.Подразделение КАК Подразделение, | СУММА(Ндфл.Налог) КАК Налог, | Ндфл.Подразделение КАК Подразделение1, | СУММА(ОкладПоДням.Результат) КАК Результат, | ОкладПоДням.Подразделение КАК Подразделение2 |ИЗ | (ВЫБРАТЬ | ПодразделенияОрганизаций.Наименование КАК Подразделение | ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций) КАК ВложенныйЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | НДФЛРасчетыСБюджетом.Период КАК Период, | СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Налог, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом | ГДЕ | НДФЛРасчетыСБюджетом.Период МЕЖДУ &НачПериода И &КонПериода | | СГРУППИРОВАТЬ ПО | НДФЛРасчетыСБюджетом.Период, | НДФЛРасчетыСБюджетом.ПодразделениеОрганизации) КАК Ндфл | ПО Ндфл.Подразделение = ВложенныйЗапрос.Подразделение | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета, | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение | ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций | ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням) | | СГРУППИРОВАТЬ ПО | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации) КАК ОкладПоДням | ПО ОкладПоДням.Подразделение = ВложенныйЗапрос.Подразделение | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Подразделение, | Ндфл.Подразделение, | ОкладПоДням.Подразделение";
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(sergeytor @ 14.06.12, 14:09)
проанализируйте пожалуйста запрос...
Очередной мрак.
У меня нет вашей конфы, но запрос должен выглядеть где-то как-то так:
"ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВложенныйЗапрос.Подразделение КАК Подразделение, | СУММА(Ндфл.Налог) КАК Налог, | СУММА(ОкладПоДням.Результат) КАК Результат |ИЗ | (ВЫБРАТЬ | ПодразделенияОрганизаций.Наименование КАК Подразделение | ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций) КАК ВложенныйЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Налог | ИЗ | РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом | ГДЕ | НДФЛРасчетыСБюджетом.Период МЕЖДУ &НачПериода И &КонПериода) КАК Ндфл | ПО Ндфл.Подразделение = ВложенныйЗапрос.Подразделение | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат | ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций | ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода | И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням)) КАК ОкладПоДням | ПО ОкладПоДням.Подразделение = ВложенныйЗапрос.Подразделение | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Подразделение";
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Ну наверное не надо тупо копировать то что я написал - я же специально выделил жирным "как-то так", это некий пример как должно быть - по факту дорисуйте сами.
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!