Имя: Пароль:
1C
1С v8
Ошибка в тексте запроса...
,
0 warkan
 
13.08.14
16:03
Люди добрыя!
Поди уж стопиццот раз это было, но всё же...

Слепил тут запрос - нать объединить выборки данных по двум регистрам расчета. Есть у них общие поля и есть различные. Количество не совпадает. (стандартный ЗУП). Вроде бы "на глаз" (анек про это, Волка и Зайца знаю...) всё правильно, а конструктор запроса выдает ошибку :(((
И не первый раз такая беда у меня получается, а вот сейчас не придумаю, как обойти. Подскажите, в чём проблема?


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    
    
    //* группа 1 - Тариф
    Тариф = Новый Массив;
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00003"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00033"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00031"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00002"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00008"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00001"));
    Тариф.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00004"));
    Запрос.УстановитьПараметр("спТариф", Тариф);
    
    //* группа  2 - Сдельно
    Сдельно = Новый Массив;
    Сдельно.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00005"));
    Сдельно.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00006"));
    Сдельно.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00007"));
    Сдельно.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00155"));
    Запрос.УстановитьПараметр("спСдельно", Сдельно);
    
    //* группа  3 - Доплаты
    Доплаты = Новый Массив;
    //Доплаты.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00001"));
    Доплаты.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00035"));
    Запрос.УстановитьПараметр("спДоплаты", Доплаты);
    
    //* группа  4 - Ночные
    Ночные = Новый Массив;
    Ночные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00014"));
    Ночные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00015"));
    Ночные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00039"));
    Запрос.УстановитьПараметр("спНочные", Ночные);
    
    //* группа  5 - Больничные
    Больничные = Новый Массив;
    Больничные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00021"));
    Больничные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00025"));
    Больничные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00026"));
    Больничные.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00048"));
    Запрос.УстановитьПараметр("спБольничные", Больничные);
    
    //* группа  6 - Отпуск
    Отпуск = Новый Массив;
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00023"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00037"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00041"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00042"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00052"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00053"));
    Отпуск.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00054"));
    Запрос.УстановитьПараметр("спОтпуск", Отпуск);
    
    //* группа  7 - МатПомощь
    МатПомощь = Новый Массив;
    МатПомощь.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00071"));
    Запрос.УстановитьПараметр("спМатПомощь", МатПомощь);
    
    //* группа  8 - ПремияМес
    ПремияМес = Новый Массив;
    ПремияМес.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00100"));
    ПремияМес.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00101"));
    ПремияМес.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00102"));
    Запрос.УстановитьПараметр("спПремияМес", ПремияМес);
    
    //* группа  9 - ПремияГод
    ПремияГод = Новый Массив;
    ПремияГод.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00044"));
    Запрос.УстановитьПараметр("спПремияГод", ПремияГод);
    
    //* группа 10 - Праздник
    Праздник = Новый Массив;
    Праздник.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00011"));
    Праздник.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00012"));
    Праздник.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00013"));
    Праздник.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00034"));
    Запрос.УстановитьПараметр("спПраздник", Праздник);
    
    //* группа 11 - Вредность
    Вредность = Новый Массив;
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00038"));
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00103"));
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00104"));
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00105"));
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00107"));
    Вредность.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00110"));
    Запрос.УстановитьПараметр("спВредность", Вредность);
    
    //* группа 12 - Прочее
    Прочее = Новый Массив;
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00090"));
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00091"));
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00106"));
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00108"));    
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00200"));
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00201"));
    Прочее.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00016"));
    Запрос.УстановитьПараметр("спПрочее", Прочее);
    
    НачалоПериода = ТекущаяДата();
    КонецПериода  = ТекущаяДата();
    
    Запрос.УстановитьПараметр("ДатаНач", НачалоМесяца(НачалоПериода));
    Запрос.УстановитьПараметр("ДатаКон", КонецМесяца(КонецПериода));
    Запрос.УстановитьПараметр("выбОрг",  Организация);
    
    Запрос.УстановитьПараметр("Банк",  Перечисления.СпособыПеречисленийПоИсполнительномуЛисту.ЧерезКассуПлатежнымПоручением);
    Запрос.УстановитьПараметр("Почта", Перечисления.СпособыПеречисленийПоИсполнительномуЛисту.ПочтовыйПеревод);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ОснНачРабОрг.ПериодРегистрации КАК ПериодРегистрации,
    |    ОснНачРабОрг.Организация КАК Организация,
    |    ОснНачРабОрг.ПодразделениеОрганизации КАК Подразделение,
    |    ОснНачРабОрг.Сотрудник КАК Сотрудник,
    |    ОснНачРабОрг.ВидРасчета КАК ВидРасчета,
    |    СУММА(ОснНачРабОрг.ОтработаноДней) КАК Дней,
    |    СУММА(ОснНачРабОрг.ОтработаноЧасов) КАК Часов,
    |    СУММА(ОснНачРабОрг.Результат) КАК сумИтого,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спТариф)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумТариф,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спСдельно)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумСдельно,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спДоплаты)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумДоплаты,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спНочные)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумНочные,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спБольничные)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумБольничные,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спОтпуск)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумОтпуск,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спМатПомощь)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумМатПомощь,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спПремияМес)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумПремияМес,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спПремияГод)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумПремияГод,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спПраздник)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумПраздник,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спВредность)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумВредность,
    |    СУММА(ВЫБОР
    |            КОГДА ОснНачРабОрг.ВидРасчета В (&спПрочее)
    |                ТОГДА ОснНачРабОрг.Результат
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумПрочее,
    |    0 КАК сумДопНач
    |
    |ИЗ
    |    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОснНачРабОрг
    |ГДЕ
    |    ОснНачРабОрг.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
    |
    |СГРУППИРОВАТЬ ПО
    |    ОснНачРабОрг.ПериодРегистрации,
    |    ОснНачРабОрг.Организация,
    |    ОснНачРабОрг.ПодразделениеОрганизации,
    |    ОснНачРабОрг.Сотрудник,
    |    ОснНачРабОрг.ВидРасчета
    //|    ПериодРегистрации,
    //|    Организация,
    //|    ПодразделениеОрганизации,
    //|    Сотрудник,
    //|    ВидРасчета
    
    
    |ОБЪЕДИНИТЬ
//    |ОБЪЕДИНИТЬ ВСЕ
    
    
    |ВЫБРАТЬ
    |    ДопНачРабОрг.ПериодРегистрации,
    |    ДопНачРабОрг.Организация,
    |    ДопНачРабОрг.ПодразделениеОрганизации,
    |    ДопНачРабОрг.Сотрудник,
    |    ДопНачРабОрг.ВидРасчета,
    |    0,
    |    0,
    
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,
    |    0,    
    |    СУММА(ДопНачРабОрг.Результат)
    
    |ИЗ
    |    РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДопНачРабОрг
    |ГДЕ
    |    ДопНачРабОрг.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
    |
    //|СГРУППИРОВАТЬ ПО
    //|    ПериодРегистрации,
    //|    Организация,
    //|    ПодразделениеОрганизации,
    //|    Сотрудник,
    //|    ВидРасчета
    |
    
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПериодРегистрации,
    |    Организация,
    |    Подразделение,
    |    Сотрудник,
    |    ВидРасчета
    |
    |ИТОГИ
    |    СУММА(сумТариф),
    |    СУММА(сумСдельно),
    |    СУММА(сумДоплаты),
    |    СУММА(сумНочные),
    |    СУММА(сумБольничные),
    |    СУММА(сумОтпуск),
    |    СУММА(сумМатПомощь),
    |    СУММА(сумПремияМес),
    |    СУММА(сумПремияГод),
    |    СУММА(сумПраздник),
    |    СУММА(сумВредность),
    |    СУММА(сумПрочее),
    |    СУММА(сумДопНач)
    |ПО
    |    ОБЩИЕ";
    
    Результат = Запрос.Выполнить();    
    
    ТабРез = Результат.Выгрузить();  
    //Адрес = ТабРез.ВыбратьСтроку("Контроль");
    //Возврат;
    
    
    //* свернуть
    ТабРез.Свернуть("ПериодРегистрации,Организация,Подразделение,Сотрудник", "Дней,Часов,сумТариф,сумИтого,сумСдельно,сумДоплаты,сумНочные,сумБольничные,сумОтпуск,сумМатПомощь,сумПремияМес,сумПремияГод,сумПраздник,сумВредность,сумПрочее");
    ТабРез.Сортировать("ПериодРегистрации Возр,Организация Возр,Подразделение Возр,Сотрудник Возр");
    
    Адрес = ТабРез.ВыбратьСтроку("Контроль");
    
    
КонецПроцедуры

Спасибо!
1 Wobland
 
13.08.14
16:04
рассказывай анекдот, а то некоторые не в курсе
2 Maxus43
 
13.08.14
16:04
дак в конструкторе закладка Объеденения/псевдонимы только у особо одарённых работает? там и надо было изначально, а не руками запросы склеивать...
3 Wobland
 
13.08.14
16:05
а сколько было попыток посчитать поля?
4 Господин ПЖ
 
13.08.14
16:05
(2) можно и руками... тут вопрос куда они пришиты
5 Maxus43
 
13.08.14
16:06
копируешь текст запроса 2.
заходишь конструктором в запрос 1.
Добавляешь там запрос, копируешь туда запрос 2.
На закладке объединения/псевдонимы - будет видно как сопоставил и каких не хватает, а так он сам null воткнёт недостающие
6 warkan
 
13.08.14
16:06
(4) знаний маловато :(
(2) делал-то не в конструкторе. Взял пример текста и мануала и подогнал (ка мне кажется) под свою задачу.
А вот не работает...
7 salvator
 
13.08.14
16:07
(0) Ну так сделай, чтобы количество полей в запросах было одинаковым. В чем проблема?
8 Maxus43
 
13.08.14
16:08
(6) я и намекаю - делай в конструкторе. Не вручную, а копированием
12 Шапокляк
 
13.08.14
16:15
Две попытки посчитать поля привели вот к чему: в 1 запросе 21 поле, а во 2 -м 20. Вы тоже к волку в лабаз за солью ходили?
13 warkan
 
13.08.14
16:20
(12) может. :)

Такой вариант (ошибка та же "Поле не входит в группу "ДопНачРабОрг.ПериодРегистрации"" и в том же месте):

Запрос.Текст =
    "ВЫБРАТЬ
    |    ОснНачРабОрг.ПериодРегистрации КАК ПериодРегистрации,
    |    ОснНачРабОрг.Организация КАК Организация,
    |    ОснНачРабОрг.ПодразделениеОрганизации КАК Подразделение,
    |    ОснНачРабОрг.Сотрудник КАК Сотрудник,
    |    ОснНачРабОрг.ВидРасчета КАК ВидРасчета,
    
    |    СУММА(ОснНачРабОрг.Результат) КАК сумИтого,
    |    0 КАК сумДопНач
    |
    |ИЗ
    |    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОснНачРабОрг
    |ГДЕ
    |    ОснНачРабОрг.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
    |
    |СГРУППИРОВАТЬ ПО
    |    ПериодРегистрации,
    |    Организация,
    |    ПодразделениеОрганизации,
    |    Сотрудник,
    |    ВидРасчета
    
    |ОБЪЕДИНИТЬ
    
    |ВЫБРАТЬ
    |    ДопНачРабОрг.ПериодРегистрации,
    |    ДопНачРабОрг.Организация,
    |    ДопНачРабОрг.ПодразделениеОрганизации,
    |    ДопНачРабОрг.Сотрудник,
    |    ДопНачРабОрг.ВидРасчета,
    |    0,    
    |    СУММА(ДопНачРабОрг.Результат)
    
    |ИЗ
    |    РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДопНачРабОрг
    |ГДЕ
    |    ДопНачРабОрг.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
    |
    
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПериодРегистрации,
    |    Организация,
    |    Подразделение,
    |    Сотрудник,
    |    ВидРасчета
    |
    |ИТОГИ
    |    СУММА(сумИтого),
    |    СУММА(сумДопНач)
    |ПО
    |    ОБЩИЕ";
14 warkan
 
13.08.14
16:20
Ошибка указывает на первое поле второго запроса.
15 hhhh
 
13.08.14
16:23
(14) вместо

   |    СУММА(ДопНачРабОрг.Результат)

пишите

   |    ДопНачРабОрг.Результат
16 Ёпрст
 
13.08.14
16:25
и упорядочивание выкиньте..оно там не используется.. вообще
17 warkan
 
13.08.14
16:27
(14) !!!!!! Спасибо за науку.
А не затруднит ли Вас объяснить, почему так?
Почему в первом запросе конструкция "СУММА(ОснНачРабОрг.Результат) КАК сумИтого," допустима,
а во втором использовать "Сумма" нельзя.
В данном конкретном случае для меся это, конечно же, не принципиально. Однако хотелось бы понять механизм - с целью повышения грамотности.
18 hhhh
 
13.08.14
16:30
(17) ну в первом запросе есть у вас СГРУППИРОВАТЬ ПО  . Разве не заметили? Вот к нему и относится волшебное слово СУММА.
19 warkan
 
13.08.14
16:32
(18) спасибо. Ещё почитаю.