Имя: Пароль:
1C
1C 7.7
v7: Сконвертировать запрос
,
0 teploset
 
01.03.21
16:23
Помогите, пожалуйста, перевести запрос с человеческого на 1эсовский 7.7. Этот рабочий на тестовой MySQL БД:

SELECT РУ.Док, РУ.РУСумма, SUM(ИК.ИККол * ИК.ИКЦена) ИКСумма
FROM РУ
LEFT JOIN ИК ON ДокРУЗакНар = ДокИКЗакНар
GROUP BY РУ.Док


Есть два документа: РеализацияУслуг (РУ) и ИнвентаризационнаяКарточка (ИК), у которых есть реквизит ЗаказНаряд. У РУ - шапки, у ИК - табличной части (может повторяться несколько раз в одном доке).
Задача: выбрать док-ты РУ за заданный период, из них выбрать Сумму (реквизит шапки), а также посчитать ИКСумма = Сумма(ИККол*ИКЦена) (реквизиты табличной части) из док-в ИК у которых одинаковый реквизит ЗаказНаряд.

Написал через конструктор запросов так, но видимо где-то (где?!) ошибся, выдает пустой результат:

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ЗапросПрибыль1)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ДокРУ = Документ.РеализацияУслуг.ТекущийДокумент;
    |ДокРУЗакНар = Документ.РеализацияУслуг.ЗаказНаряд;
    |ДокИКЗакНар = Документ.ИнвентаризационнаяКарточка.ЗакНаряд;
    |ИККол = Документ.ИнвентаризационнаяКарточка.Количество;
    |ИКЦена = Документ.ИнвентаризационнаяКарточка.ФактЦенаЗаЕд;
    |РУСумма = Документ.РеализацияУслуг.Сумма;
    |Функция ИКСумма = Сумма(ИККол*ИКЦена);
    |Группировка ДокРУ;
    |Условие(ДокРУЗакНар = ДокИКЗакНар);
    |"//}}ЗАПРОС
    ;
1 Андрей_Андреич
 
naïve
01.03.21
16:34
Группировка документ
2 Андрей_Андреич
 
naïve
01.03.21
16:35
поспешил извиняюсь
3 Djelf
 
01.03.21
16:39
Чавось ^^
Ты написал: запрос на "MySQL БД:".
1С 7.7 умеет работать с MySQL, но не умеет делать чёрные запросы к MySQL.
А если это MsSql, то "FROM РУ" это не обращение к таблице 1С, а обращение к вьюшке РУ, а там может быть наворочено все что угодно.
4 teploset
 
01.03.21
16:41
(3) Да нет, в MySQL просто создал две таблички ИК и РУ для тестов запроса на истинном языке SQL :)
5 teploset
 
01.03.21
16:44
Если убрать
    //|Условие(ДокРУЗакНар = ДокИКЗакНар);
то выводит 2 имеющихся РУ с их суммой, но в столбце ИКСумма пусто... где-то тут собака зарылась
6 Андрей_Андреич
 
naïve
01.03.21
16:48
|РеализацияУслуг = Документ.РеализацияУслуг.ТекущийДокумент;
|ЗаказНаряд = Документ.РеализацияУслуг.ЗаказНаряд, Документ.ИнвентаризационнаяКарточка.ЗакНаряд;
|СуммаРУ = Документ.РеализацияУслуг.Сумма;
|ИККол = Документ.ИнвентаризационнаяКарточка.Количество;
|ИКЦена = Документ.ИнвентаризационнаяКарточка.ФактЦенаЗаЕд;
|Функция ИКСумма = Сумма(ИККол*ИКЦена);  
|Функция РУСумма = Сумма(СуммаРУ);  
|Группировка РеализацияУслуг;
|Группировка ЗаказНаряд;

где-то так
7 teploset
 
01.03.21
16:58
(6) Уже лучше, но почему-то все развернуто получилось (хз как тут вставить таблицу):
ДокРУ    ЗаказНаряд    ИКСумма    РУСуммаСум
        21880.20    
    Заказ-наряд 007/03    10733.35    
    Заказ-наряд 013/01    1980.00    
    Заказ-наряд 105/01    9166.85    
Реализация услуг 00000001             77000.00
Реализация услуг 00000001    Заказ-наряд 007/03         77000.00
Реализация услуг 00000002             3885.00
Реализация услуг 00000002    Заказ-наряд 105/01         3885.00
Итого        21880.20    80885.00
8 teploset
 
01.03.21
17:00
Ой, работа кончилась, завтра продолжим)
9 Ёпрст
 
01.03.21
17:07
(6) радуга же будет
10 Ёпрст
 
01.03.21
17:10
(0) что мешает переписать запрос с селектом на синтаксис с реальными табличками ?
Используя или odbc для sql или oledb/sqllite для дбф ?
11 Ёпрст
 
01.03.21
17:11
Это в разы проще, чем иметь это в чорном запросе. Ибо объяснять как будет посчитанна функция сумма по реквизиту шапки, когда есть обращение к тч документа...тоскливо
12 teploset
 
01.03.21
19:38
(10) Отсутствие такого опыта. От эски отошел уже давно, а тут добрые люди откопали старый самописный конфиг и попросили чуть-чуть добавок - вот и завис, т.к. все позабыл уже напрочь...
13 teploset
 
01.03.21
19:39
(11) Что, такой сложный запрос получится? Или вообще нереально это сделать запросом? А если через перебор док-в? Можно будет?
14 Ёпрст
 
01.03.21
22:56
(10) дык в (0) почти готовый запрос, поправить только синтаксис и всё.
(13) да нет, всё можно
15 teploset
 
02.03.21
08:46
(14) Спрошашиваю у профи - (11) "черный запрос" нельзя написать по моему ТЗ? Я к тому, чтоб не париться с ним, теряя время, а перепишу на  перебор доков тогда. А если можно - то помоги, плиз...
16 Ёпрст
 
02.03.21
11:17
(15) забей на чорный, пиши прямой запрос ..там всё понятно что откуда и зачем.
17 Ёпрст
 
02.03.21
11:17
что непонятно, спрашивай.
18 teploset
 
02.03.21
11:24
(17) все непонятно) Даже не знаю с чего начать... нужны какие-то примочки доставлять к движку эски? Иначе, как прямой запрос к дбф-ам?
19 teploset
 
02.03.21
11:24
А пока через перебор доков сделал. Работает)
20 Ёпрст
 
02.03.21
11:32
(18) либо 1cpp.dll + vfpoledb, либо запрос на 1sqlite.dll
21 teploset
 
02.03.21
11:34
(20) ок, спасибо, погуглю на эту тему на досуге
22 Ёпрст
 
02.03.21
11:38
(21) на вот, пример , есть и то и то в одной поделке
https://cloud.mail.ru/public/AeJK/71o1vuzd1
23 teploset
 
02.03.21
11:42
(22) о, спасибо!
24 Ёпрст
 
02.03.21
11:44
Ну и..ознакомиться с этим:
http://www.script-coding.com/v77tables.html
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн