Имя: Пароль:
1C
1C 7.7
v7: Проблема с прямым запросом 7.7
0 Альбатрос
 
05.04.13
06:00
Мужики, не получается закончить запрос. Задача: выбрать реквизиты шапки и табчасть документов за период.

Накатал такой запрос:

   ТекстЗапроса =  "SELECT  
   |   Табчасть.SP70 [Товар $Справочник.Товары],
   |   SUM(Табчасть.SP73) as Количество,
   |   Табчасть.SP72 as Сумма,
   |    Журнал.DocNo as НомерДок,
   |   Журнал.IDDOC as Ссылочка,
   |   Журнал.DATE_TIME_IDDOC as ДатаДок,
   |    Журнал.SP1165 [Клиент $Справочник.Клиенты],
   |   $Док.Сумма as Сумма
   |
   |FROM
   |   $ДокументСтроки.РасходнаяНал as Табчасть
   |INNER JOIN
   |   $Документ.РасходнаяНал as Док
   |    ON Док.IDDoc = Табчасть.IDDoc
   |INNER JOIN
   |    _1SJourn as Журнал
   |    ON Журнал.IDDoc = Док.IDDoc
   |WHERE
   |    CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DATETIME) BETWEEN ? AND ?
   |GROUP BY
   |Табчасть.SP70,
   |Табчасть.SP72
   |Табчасть.SP73)
   |";      

Выдает ошибку и просит группировать поля. А как правильно сгруппировать?
1 Sserj
 
05.04.13
06:06
Дэк при группировке все поля в селекте должны быть из группа группбай или функциям, тобишь Журнал.DocNo, Журнал.IDDOC и т.д нужно либо в групп вложить, либо фунцию типа min(Журнал.DocNo) и т.д. сделать
2 AleksAnt
 
05.04.13
06:07
GROUP BY  
 Табчасть.SP70,
 Табчасть.SP72,
 Журнал.DocNo,
 Журнал.IDDOC,
 Журнал.DATE_TIME_IDDOC,
 Журнал.SP1165,
 $Док.Сумма
3 Андрей_Андреич
 
naïve
05.04.13
06:09
Почему Сумма дважды - из ТЧ и из шапки?
4 Альбатрос
 
05.04.13
06:10
(3) Ага, пропустил. Щас уберу
5 Альбатрос
 
05.04.13
06:20
(1) (2) Да, правильно, так работает. Спасибо
6 Альбатрос
 
05.04.13
06:23
еще один вопрос: Ведь существует возможность обхода группировок? Ну что-то вроде этого:

Пока Результат.ПолучитьСтроку() =1 Цикл
Ссылка = Результат.Ссылка;
Номер = Результат.НомерДок;
    Пока Результат.Группировка(1) цикл
         Товар = Результат.товар;
         Сумма = Результат.сумма;
КонецЦикла;
КонецЦикла;

Как организовать подобное?
7 chelentano
 
05.04.13
06:26
(6) выгрузи в ТЗ
8 Альбатрос
 
05.04.13
06:28
(7) А что это мне даст? Результат запроса вроде как тоже ТЗ
9 Wobland
 
05.04.13
06:30
(8) а ты ждёшь что-то типа дерева что-ли?
10 Sserj
 
05.04.13
06:30
(6) Либо изучить ИндексированнуюТаблицу либо по старинке

ЗначениеГруппировки1 = "";
ЗначениеГруппировки2 = "";

Пока Результат.ПолучитьСтроку() = 1 Цикл
 Если значениеГруппировки1 <> Резлутат.Группивка1 Тогда
 ЗначениеГруппировки1 = Результат.Группировка1;
 ...
 КонецЕсли;
 Если ЗначениеГруппировки2 <> Результат.Группировка2 Тогда
 ЗначениеГруппировки2 = Резульат.Группировка2;
 ...
 КонецЕсли;
 ...


КонецЦикла;
11 Альбатрос
 
05.04.13
06:30
(9) Да, такое возможно?
12 Wobland
 
05.04.13
06:31
доллар ещё не предлагали, кстати? Табчасть.SP73 --> $Табчасть.Количество
13 chelentano
 
05.04.13
06:31
(11) а, вон ты про что... тогда см. (10)
14 Wobland
 
05.04.13
06:31
(11) на грани уверенности: нет
15 Sserj
 
05.04.13
06:31
(11) Выгрузить в ИндексированнуюТаблицу и использовать Сгруппировать.
16 Sserj
 
05.04.13
06:32
+(15) А не там он просто Группировать называется
17 ADirks
 
05.04.13
06:34
18 Альбатрос
 
05.04.13
06:40
(15) Прикольно, читаю =)
19 Альбатрос
 
05.04.13
07:04
Тааак, попробовал вот так сделать:

   ИндТаб = СоздатьОбъект("ИндексированнаяТаблица");
   ИндТаб.Загрузить(Результат);
//    ИндТаб.ДобавитьИндекс("Ссылка","Ссылочка");
   ИндТаб.Группировать("Ссылка:Ссылочка","Сумма");
   ИндТаб.Показать();

В итоге метод показать() показывает мне одну строку. А должно же быть дерево. Где ошибся?
20 ADirks
 
05.04.13
07:08
(19) Возьми нормальный инструмент: http://infostart.ru/public/15487/
Подсунь свою ИТ в РедакторТЗ, сможешь пошариться по дереву.
21 Sserj
 
05.04.13
07:11
(19)
Ну в запросе у тебя вроде "ссылка" нету, попробой:
ИндТаб.Группировать("Ссылочка:Ссылочка","Сумма");
22 Альбатрос
 
05.04.13
07:17
(21) Нее, "ссылка" - имя создаваемого индекса, а вот "Ссылочка" - по какой колонке. Я вот думаю, может метод показать не работает правильно с ТЗ после группировать()
23 Альбатрос
 
05.04.13
07:20
(20) Чот там не написано, как эти разработки внедрить =(
24 Sserj
 
05.04.13
07:21
(22) Да просто в коде выше у тебя закоменчено добавление индекса, ну да ладно.
А ИндТаб.тзПотомки появилось и что в ней есть, хотя вроде по одной колонке не должно там быть ничего.
25 Альбатрос
 
05.04.13
07:22
(24) Нет ее...
26 Альбатрос
 
05.04.13
07:23
Закоменчено, потому что это одинаковые действия
27 Sserj
 
05.04.13
07:24
ИндТаб.Загрузить(Результат);
ИндТаб.Показать();

А так вообще что показывает?
28 Альбатрос
 
05.04.13
07:30
(27) До группировать:

http://savepic.org/3184576.jpg

После:

http://savepic.org/3166144.jpg
29 Sserj
 
05.04.13
07:32
(28) может и ошибаюсь, но у тебя там вроде "НомерДок" в обоих строках одинаковый, тобишь это один документ, ну по нему и свернулось в одну строку
30 ADirks
 
05.04.13
07:35
(23) хм... а я думал, и так понятно...

Все обработки положи в ExtForms;
в ГМ (ну или в свою обработку) перетащи НайтиФайлВнешнегоОтчета(), ОткрытьОбработку() и РедакторТЗ() - они лежат в ФункцииТЗ.txt.

А на картинке твоей потомков просто не видно, ибо они где-то там справа.
31 Альбатрос
 
05.04.13
07:36
(29) Ну да, так и есть. Так я не понял... одинаковые поля тоже надо в индексы добавить? на выходе я хочу получить строку с ссылкой на документ, а в тзПотомки - его тч
32 Альбатрос
 
05.04.13
07:36
(30) их там нет, потомков. я просмотрел полностью.
33 Sserj
 
05.04.13
07:40
(31) Ну тогда надо:
ИндТаб.Группировать("Ссылка:Ссылочка; Товар:Товар","Сумма");
И получишь

ИндТаб.ВыбратьСтроки();
Пока ИндТаб.ПолучитьСтроку() = 1 Цикл
 Док = ИндТаб.Ссылочка;
 тзТовары = ИндТаб.тзПотомки;
 тзТовары.ВыбратьСтроки();
 Пока тзТовары.получитьСтроку() = 1 Цикл
   Товар = тзТовары.Товар;
 конецЦикла;
КонецЦикла;
34 Альбатрос
 
05.04.13
07:44
(33) Супер! Идеально!!! Спасибо приогромное!!!!
35 Альбатрос
 
05.04.13
07:49
Иииии последний вопрос =) А получится ли мне передать эту ИТЗ в 8.2? распознается она там? =)
36 Wobland
 
05.04.13
08:04
(35) я у себя делал запрос к внешнему источнику, добывал ТЗ, потом запрашивал итоги у ТЗ...
37 ADirks
 
05.04.13
08:07
кстати, в (19) если бы ты написал
ИндТаб.Группировать("Ссылка:Ссылочка","Сумма", 1);
то получил бы нужный результат.



Синтаксис: Группировать(стрГруппировки, стрКолонкиСумм, [чРасшифровкаПоследнегоУровня = 0])

Параметры:
....
чРасшифровкаПоследнегоУровня - тип: Число. 1 - в каждой строке последнего уровня группировки будет таблица с расшифровкой, содержащая строки исходной таблицы в нетронутом виде. 0 - последний уровень будет свёрнут.
38 Альбатрос
 
05.04.13
08:29
(36) Ну тоже вариант, но я сначала попробую поиграться с этой ИТЗ =) Не получится, попробую ваш вариант.
39 Альбатрос
 
05.04.13
08:30
(37) Я как раз перед (33) хотел попробовать пихнуть туда 1 =)
40 Альбатрос
 
05.04.13
09:08
Мужики, а что происходит, когда я получаю в 8.2 СОМОбъект из 7.7? То есть я получаю полноценную копию и все операции с ней происходят на стороне 8.2 или я получаю ссылку на созданный объект в 7.7 и все операции проводятся там?
41 ДенисЧ
 
05.04.13
09:09
(40) ссылку.
42 Альбатрос
 
05.04.13
09:10
(41) Понятно, спасибо
43 Альбатрос
 
05.04.13
09:23
(36) Таки да, получается что подключиться к таблицам sql 7.7 и работать с ними намного лучше и удобнее, чем по ОЛЕ.
Ожидайте топиков "Как подключиться к SQL 8.2" и "Как построить запрос к таблицам SQL" =)))))
44 Wobland
 
05.04.13
09:28
(43) внешний источник - удобная штука
45 Альбатрос
 
05.04.13
09:29
(44) Примерчиком не кинете? =)
46 Wobland
 
05.04.13
09:31
47 Wobland
 
05.04.13
09:32
48 Альбатрос
 
05.04.13
09:43
(46) (47) Ойойой...
49 Wobland
 
05.04.13
10:08
(48) а это пример ;) сейчас-то всё работает-вертится, достаточно быстро, нигде не жмёт, юзеры довольны
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс