|
Вложенный запрос | ☑ | ||
---|---|---|---|---|
0
AnisaL
20.09.13
✎
12:39
|
Добрый день!
Помогите разобраться где ошибка во вложенном запросе, точнее я не очень понимаю как правильно его написать. Вот кусок запроса, и он выдает ошибку "Синтаксическая ошибка "ВЫБРАТЬ" // Цена ВЫБОР КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена Тогда ВЫБОР КОГДА ТЧ.ЦенаВнутренная = 1 ТОГДА (ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Стоимость1часа ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних ГДЕ РаботникиОрганизацийСрезПоследних.Организация = &Организация АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций ИНАЧЕ ТЧ.ЦенаВнутренная КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК ЦенаРабочаяСмена, |
|||
1
ДенисЧ
20.09.13
✎
12:40
|
Не прокатит так.
|
|||
2
AnisaL
20.09.13
✎
12:41
|
+(0) ошибку выдает на 6 строку (как здесь)
|
|||
3
AnisaL
20.09.13
✎
12:43
|
(1) ага, не прокатывает, наверно нужно чтобы было предложение с "ИЗ"
|
|||
4
ДенисЧ
20.09.13
✎
12:45
|
(3) Нужно для начала читать документацию. И осознавать, что запросы 1с - это не запросы SQL
|
|||
5
kanalex
20.09.13
✎
12:46
|
(0)
а скобку закрыть не пробовали? |
|||
6
Ёпрст
20.09.13
✎
12:47
|
(0) в снеговике это не реализовано.. пока
|
|||
7
kanalex
20.09.13
✎
12:47
|
(4) хотя, конечно, в выражении ВЫБОР так нельзя, видимо
|
|||
8
AnisaL
20.09.13
✎
12:47
|
(3) смысл этого выбора в том заключается, что сначала идет условие на то что является ли эта номенклатура "Рабочей сменой", если да то опять условие: если Цена(стоимость 1 часа) этой рабочей смены = 1 (такое у нас бывает на внутренние работы), то нужно эту стоимость брать из вложенного подзапроса из период. РС РаботникиОрганизаций, иначе если не равно 1, то из ТЧ - табличной части документа
|
|||
9
Ёпрст
20.09.13
✎
12:48
|
нет там реализации подзапроса в кейсе
|
|||
10
AnisaL
20.09.13
✎
12:49
|
(5) в какой строке?
|
|||
11
George Wheels
20.09.13
✎
12:52
|
В качестве цены у тебя получается результат запроса.
Выбери ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа |
|||
12
AnisaL
20.09.13
✎
12:52
|
(4) а какую документацию почитать?
|
|||
13
AnisaL
20.09.13
✎
12:52
|
(11) да
|
|||
14
AnisaL
20.09.13
✎
12:55
|
(11) а как это написать ?
|
|||
15
AnisaL
20.09.13
✎
13:00
|
Написала так:
// Цена ВЫБОР КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена Тогда ВЫБОР КОГДА ТЧ.ЦенаВнутренная = 1 ТОГДА ВЫБРАТЬ ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа ИЗ (ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Стоимость1часа ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних ГДЕ РаботникиОрганизацийСрезПоследних.Организация = &Организация АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций ИНАЧЕ ТЧ.ЦенаВнутренная КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК ЦенаРабочаяСмена, |
|||
16
AnisaL
20.09.13
✎
13:01
|
(15) + но все равно ошибка
|
|||
17
catena
20.09.13
✎
13:04
|
(15)Было же сказано, что не работает так. Можно соединить.
|
|||
18
AnisaL
20.09.13
✎
13:06
|
(17) а как тогда сделать по-другому?
|
|||
19
manti
20.09.13
✎
13:07
|
(15) приведи полный текст запроса
|
|||
20
AnisaL
20.09.13
✎
13:08
|
(19)
ВЫБРАТЬ ДатаСоздания, Клиент, Сумма(СуммаРабочаяСмена) КАК СуммаРабСмена, Сумма(КоличествоРабочаяСмена) КАК КоличествоРабочаяСмена, Сумма(ЦенаРабочаяСмена) КАК ЦенаРабочаяСмена, Сумма(СуммаДопРаботы) КАК СуммаДопРаботы, Сумма(СуммаПитание) КАК СуммаПитание, Сумма(СуммаТранспорт) КАК СуммаТранспорт ИЗ (ВЫБРАТЬ Ссылка.ДатаСоздания, Ссылка.Клиент, // Количество ВЫБОР КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена Тогда ТЧ.Количество ИНАЧЕ 0 КОНЕЦ КАК КоличествоРабочаяСмена, ВЫБОР КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена Тогда ТЧ.Количество ИНАЧЕ 0 Конец КАК КоличествоДопРаботы, 0 КАК КоличествоПитание, 0 КАК КоличествоТранспорт, // Цена ВЫБОР КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена Тогда ВЫБОР КОГДА ТЧ.ЦенаВнутренная = 1 ТОГДА ВЫБРАТЬ ВложенныйЗапросРаботникиОрганизаций.Стоимость1часа ИЗ (ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Стоимость1часа ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец, ФизЛицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних ГДЕ РаботникиОрганизацийСрезПоследних.Организация = &Организация АВТОУПОРЯДОЧИВАНИЕ) КАК ВложенныйЗапросРаботникиОрганизаций ИНАЧЕ ТЧ.ЦенаВнутренная КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК ЦенаРабочаяСмена, ВЫБОР КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена Тогда ТЧ.ЦенаВнутренная ИНАЧЕ 0 Конец КАК ЦенаДопРаботы, 0 КАК ЦенаПитание, 0 КАК ЦенаТранспорт, // Сумма ВЫБОР КОГДА ТЧ.Работы.Наименование ПОДОБНО &РабСмена Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная ИНАЧЕ 0 КОНЕЦ КАК СуммаРабочаяСмена, ВЫБОР КОГДА ТЧ.Работы.Наименование НЕ ПОДОБНО &РабСмена Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная ИНАЧЕ 0 Конец КАК СуммаДопРаботы, 0 КАК СуммаПитание, 0 КАК СуммаТранспорт ИЗ Документ.ЗаявкаНаряд.Работы КАК ТЧ ГДЕ Ссылка.Работы.Исполнитель = &Исполнитель И Ссылка.ДатаСоздания Между &Начало и &Конец ОБЪЕДИНИТЬ ВЫБРАТЬ Ссылка.ДатаСоздания, Ссылка.Клиент, // Количество 0 КАК КоличествоРабочаяСмена, 0 КАК КоличествоДопРаботы, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Питание Тогда ТЧ.Количество КОНЕЦ) КАК КоличествоПитание, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт Тогда ТЧ.Количество Конец) КАК КоличествоТранспорт, // Цена 0 КАК ЦенаРабочаяСмена, 0 КАК ЦенаДопРаботы, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Питание Тогда ТЧ.ЦенаВнутренная КОНЕЦ) КАК ЦенаПитание, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт Тогда ТЧ.ЦенаВнутренная Конец) КАК ЦенаТранспорт, // Сумма 0 КАК СуммаРабочаяСмена, 0 КАК СуммаДопРаботы, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Питание Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная КОНЕЦ) КАК СуммаПитание, (ВЫБОР Когда ТЧ.Работы.Наименование ПОДОБНО &Транспорт Тогда ТЧ.Количество*ТЧ.ЦенаВнутренная Конец) КАК СуммаТранспорт ИЗ Документ.ЗаявкаНаряд.НакладныеРасходы КАК ТЧ ГДЕ Ссылка.Работы.Исполнитель = &Исполнитель И Ссылка.ДатаСоздания Между &Начало и &Конец ) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ДатаСоздания, Клиент УПОРЯДОЧИТЬ ПО ДатаСоздания, Клиент ИТОГИ ПО ОБЩИЕ |
|||
21
Ёпрст
20.09.13
✎
13:08
|
(18) см. (9).
|
|||
22
AnisaL
20.09.13
✎
13:10
|
(21) уже посмотрела, тогда как иначе сделать?
|
|||
23
George Wheels
20.09.13
✎
13:14
|
Всё-таки лучше через соединение.
|
|||
24
AnisaL
20.09.13
✎
13:15
|
(22) + понятно что цену можно оставить такой какая есть и уже потом ее вытащить, после выполнения запроса, но хочется чтоб в запросе все считалось
|
|||
25
AnisaL
20.09.13
✎
13:15
|
(23) а что с чем соединять?
|
|||
26
George Wheels
20.09.13
✎
13:17
|
ФизЛицо, которое во вложенном запросе есть в документе?
|
|||
27
AnisaL
20.09.13
✎
13:19
|
(26) оно есть в табличной части, из которой берутся цифры
|
|||
28
Dmitry1c
20.09.13
✎
13:20
|
Брутально
|
|||
29
George Wheels
20.09.13
✎
13:21
|
Или соединить документ с регистром по реквизиту Организация (думаю в документе он должен быть). И оставить то же условие по ФизЛицу.
|
|||
30
AnisaL
20.09.13
✎
13:21
|
(26) в документе есть реквизит "Исполнитель", но бывают случаи когда в ТЧ помимо исполнителя еще другой сотрудник выбран, поэтому физлицо берется из ТЧ документа
|
|||
31
AnisaL
20.09.13
✎
13:22
|
(29) проблема в том что в документе нету реквизита Организация(
|
|||
32
George Wheels
20.09.13
✎
13:25
|
(30) Ну так соединяй по ФизЛицу из ТЧ.
|
|||
33
AnisaL
20.09.13
✎
13:26
|
(31) у нас несколько организаций, но только в одной возможны такие случаи когда стоимость 1 часа = 1, и именно по ней идет отбор в подзапросе
|
|||
34
George Wheels
20.09.13
✎
13:32
|
Всё, что в ВЫБОР оставляешь.
Вложенный запрос убираешь. Вместо него - РаботникиОрганизацийСрезПоследних.Стоимость1часа ну и в конце ИЗ Документ.ЗаявкаНаряд.Работы КАК ТЧ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних ПО ТЧ.Сотрудник = РаботникиОрганизацийСрезПоследних.ФизЛицо ГДЕ ... |
|||
35
AnisaL
20.09.13
✎
13:52
|
(34) спасибо большое! единственное что получилось так, что когда в регистре РаботникиОрганизаций 1 запись по сотруднику, то запрос правильно выдает, а когда записей в регистре несколько по этому сотрдунику но от разных дат, то Цена 1 часа суммируется
|
|||
36
AnisaL
20.09.13
✎
13:54
|
(35) + как сделать чтобы выбиралась только последняя запись?
|
|||
37
George Wheels
20.09.13
✎
14:00
|
(35) СрезПоследних выдаёт несколько записей? Тогда смотри какие ещё измерения у регистра.
|
|||
38
AnisaL
20.09.13
✎
14:02
|
(37) у регистра 3 измерения: ФизЛицо, Организация, Подразделение
|
|||
39
catena
20.09.13
✎
14:10
|
(38)Это клево. Какой смысл?
Тогда так Выбрать РабОрг.Стоимость1часа из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация) как ВложеныйЗапрос Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо и РабОрг.Период = ВложеныйЗапрос.Период |
|||
40
AnisaL
20.09.13
✎
14:18
|
(39) этот запрос написать вместо этого ?
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) КАК РаботникиОрганизацийСрезПоследних ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо |
|||
41
catena
20.09.13
✎
14:23
|
(40)Вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец)
|
|||
42
AnisaL
20.09.13
✎
14:26
|
(41) ошибку выдает:
Поле не входит в группу "Физлицо" Выбрать Физлицо |
|||
43
catena
20.09.13
✎
14:26
|
Вот так вернее для ваших целей.
Выбрать РабОрг.Стоимость1часа, РабОрг.Физлицо из (Выбрать физлицо, максимум(период) как Период из РегистрСведений.РаботникиОрганизаций как РаботникиОрганизаций где Организация=&Организация и Период <=&Конец Сгруппировать по физлицо ) как ВложеныйЗапрос Левое соединение РегистрСведений.РаботникиОрганизаций как РабОрг по РабОрг.Физлицо = ВложеныйЗапрос.Физлицо и РабОрг.Период = ВложеныйЗапрос.Период |
|||
44
catena
20.09.13
✎
14:27
|
(42)Да, группировку забыла, смотри (43)
|
|||
45
AnisaL
20.09.13
✎
14:40
|
(44) спасибо) только запрос выдает стоимости1часа без отбора по организации
|
|||
46
AnisaL
20.09.13
✎
14:50
|
(45) разобралась, в конце надо было еще одну строчку добавить
где РабОрг.организация = &Организация (43) чтоб отбор был по организации у второй таблицы |
|||
47
AnisaL
20.09.13
✎
14:54
|
(44) запрос вставила вместо РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Конец) выдает ошибку:
Ожидается имя таблицы <<?>>Выбрать РабОрг.физлицо |
|||
48
catena
20.09.13
✎
15:02
|
(47)А скобочки есть?
ЛЕВОЕ СОЕДИНЕНИЕ (ТУТ_ТЕКСТ_ЗАПРОСА) КАК РаботникиОрганизацийСрезПоследних ПО ТЧ.Исполнитель = РаботникиОрганизацийСрезПоследних.ФизЛицо |
|||
49
AnisaL
23.09.13
✎
07:42
|
(48) ага спасибо )
|
|||
50
AnisaL
23.09.13
✎
09:58
|
У меня не считает итог по строке - такое возможно осуществить в запросе?
"ВЫБРАТЬ | ДатаСоздания, | Клиент, | Проведен, | Сумма(СуммаРабочаяСмена) КАК СуммаРабочаяСмена, | Сумма(КоличествоРабочаяСмена) КАК КоличествоРабочаяСмена, | Сумма(ЦенаРабочаяСмена) КАК ЦенаРабочаяСмена, | Сумма(СуммаДопРаботы) КАК СуммаДопРаботы, | Сумма(СуммаПитание) КАК СуммаПитание, | Сумма(СуммаТранспорт) КАК СуммаТранспорт, | Сумма(СуммаРабочаяСмена+СуммаДопРаботы+СуммаПитание+СуммаТранспорт) КАК СуммаИтог |
|||
51
AnisaL
23.09.13
✎
10:00
|
(50) + т.е. в последней строчке почему-то считает "Суммаитог" как СуммаРабочаяСмена а остальные суммы не прибавляет
|
|||
52
AnisaL
23.09.13
✎
10:35
|
(51) а если в ИТогах написать, то получится?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |