Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Анна Брянцква
Новичок
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 43
19.03.2014, 08:06     1C 8.x Обход по группировкам
  #1
у меня такая головная боль, помогите! Есть некий документ, в реквизитах номенклатура и количество! В табл части - техоперации обработки данной номенклатуры. Нужно вывести последовательно - номенклатуру, все документы, кот. относятся к ней с количеством по документу, и соответственно на каждый документ - операции.
Я делаю так:
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Макет = ПолучитьМакет("Макет");
 
// очищаем табличный документ
ТабДок= Новый ТабличныйДокумент;
ТабДок.Очистить();  
Запрос = Новый Запрос;
Запрос.Текст =
 
"ВЫБРАТЬ
|   ЗаданиеОперации.Ссылка.Номер КАК Номер,
|   ЗаданиеОперации.Ссылка.Номенклатура КАК Номенклатура,
|   ЗаданиеОперации.Ссылка.Количество КАК Количество
|ИЗ
|   Документ.Задание.Операции КАК ЗаданиеОперации
|
|СГРУППИРОВАТЬ ПО
|   ЗаданиеОперации.Ссылка.Номенклатура,
|   ЗаданиеОперации.Ссылка.Номер,
|   ЗаданиеОперации.Ссылка.Количество
|ИТОГИ
|   СУММА(Количество)
|ПО
|   Номенклатура";  
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ОбластьНомер = Макет.ПолучитьОбласть("Номер");
ОбластьОперация = Макет.ПолучитьОбласть("Операция"); 
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
ОбластьНоменклатура.Параметры.Номенклатура=Выборка.Номенклатура;
ТабДок.Вывести(ОбластьНоменклатура);
Выборка2=Выборка.Выбрать(); 
Пока Выборка2.Следующий() Цикл
ОбластьНомер.Параметры.Номер=Выборка2.Номер;
ОбластьНомер.Параметры.Количество=Выборка2.Количество;
ТабДок.Вывести(ОбластьНомер);
КонецЦикла;
КонецЦикла;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.Автомасштаб = Истина;
ТабДок.Показать();
Получаю макет:


А хочу под каждым номером видеть соответствующие операции документу, если пытаюсь добавить третий уровень группировки в обходе, то количество не правильно выводится, как быть? Подскажите.
Миниатюры
Обход по группировкам  
AdAgent
Объявления
19.03.2014, 08:06
duk337
Модератор
2792 / 1605 / 65
Регистрация: 03.11.2011
Сообщений: 7,223
19.03.2014, 09:23
  #2
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"ВЫБРАТЬ
|   ЗаданиеОперации.Ссылка.Номер КАК Номер,
|   ЗаданиеОперации.Ссылка.Номенклатура КАК Номенклатура,
|   ЗаданиеОперации.Ссылка.Количество КАК Количество
|   ЗаданиеОперации.Операция КАК Операция
|ИЗ
|   Документ.Задание.Операции КАК ЗаданиеОперации
|ИТОГИ
|   СУММА(Количество)
|ПО
|   Общие,
|   Ссылка,
|   Номенклатура,
|   Операция";
И четыре выборки соответственно

Код 1C
1
2
3
4
ОбластьОбщие = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьНомер = Макет.ПолучитьОбласть("Номер");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ОбластьОперация = Макет.ПолучитьОбласть("Операция");
Анна Брянцква
Новичок
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 43
20.03.2014, 10:32  [ТС]
  #3
Так не совсем верно, у меня количество в реквизитах в документе, я группирую по номенклатуре, а выводить нужно просто операции по конкретному заданию, я сделала так
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ЗаданиеОперации.Ссылка.Номенклатура КАК Номенклатура,
    |   ЗаданиеОперации.Ссылка КАК Ссылка,
    |   ЗаданиеОперации.Ссылка.КолВыданных КАК КолВыданных,
    |   ЗаданиеОперации.Ссылка.рТехпотери КАК рТехпотери
    |ИЗ
    |   Документ.Задание.Операции КАК ЗаданиеОперации
    |
    |СГРУППИРОВАТЬ ПО
    |   ЗаданиеОперации.Ссылка.Номенклатура,
    |   ЗаданиеОперации.Ссылка,
    |   ЗаданиеОперации.Ссылка.КолВыданных,
    |   ЗаданиеОперации.Ссылка.рТехпотери
    |ИТОГИ
    |   СУММА(КолВыданных),
    |   СУММА(рТехпотери)
    |ПО
    |   Номенклатура"    ;
        
      Запрос.УстановитьПараметр("Подразделение", Подразделение);
      
    ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
    ОбластьНомер = Макет.ПолучитьОбласть("Номер");
    ОбластьОперация = Макет.ПолучитьОбласть("Операция"); 
     ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); 
        ТабДок.Вывести(ОбластьШапка);
         ТабДок.НачатьАвтогруппировкуСтрок();
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока Выборка.Следующий() Цикл
                 ОбластьНоменклатура.Параметры.Номенклатура=Выборка.Номенклатура;
                   ОбластьНоменклатура.Параметры.Кол=Выборка.КолВыданных;
                   ОбластьНоменклатура.Параметры.КолФакт=Выборка.рТехпотери;
                   ОбластьНоменклатура.Параметры.КолПлан= ОбластьНоменклатура.Параметры.Кол-Окр(Выборка.КолВыданных*Процент/100); 
                 ТабДок.Вывести(ОбластьНоменклатура,Выборка.Уровень()+1);
                                 Выборка2=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                 
                 Пока Выборка2.Следующий() Цикл
                     Задание = Выборка2.Ссылка;
                                            ОбластьНомер.Параметры.Номер=Выборка2.Ссылка.Номер;
                                            ОбластьНомер.Параметры.Количество=Выборка2.КолВыданных;
                                            ОбластьНомер.Параметры.КолФактЗ=Выборка2.рТехпотери;
                                            ТабДок.Вывести(ОбластьНомер,Выборка2.Уровень()+1);
                                            
                                            
                                                         Запрос2 = Новый Запрос;
                                                         Запрос2.Текст =
    "ВЫБРАТЬ
    |   ЗаданиеОперации.ТехОперация
    |ИЗ
    |   Документ.Задание.Операции КАК ЗаданиеОперации
    |ГДЕ
    |   ЗаданиеОперации.Ссылка = &Задание"    ;
        
      Запрос2.УстановитьПараметр("Задание", Задание);
     
 
     Рез2 = Запрос2.Выполнить().Выбрать();
        Пока Рез2.Следующий() Цикл
                 ОбластьОперация.Параметры.Операция=Рез2.ТехОперация;
                  ТабДок.Вывести(ОбластьОперация,3);
                                                       КонецЦикла;
                                                          
 
                                      КонецЦикла;
                                  КонецЦикла;
                                  
                                    ТабДок.ЗакончитьАвтогруппировкуСтрок();
 
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.Автомасштаб = Истина;
    ТабДок.Показать();

я сделала в два запроса, и получаю отчет - там все правильно, можно ли как то эти запросы в одном сделать?
Анна Брянцква
Новичок
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 43
20.03.2014, 10:36  [ТС]
  #4
вот форма
Миниатюры
Обход по группировкам  
duk337
Модератор
2792 / 1605 / 65
Регистрация: 03.11.2011
Сообщений: 7,223
20.03.2014, 11:28     1C 8.x Обход по группировкам
  #5
странно. Я вроде ответил.
Группироовки дают плоскую таблицу. Итоги - дерево, которое обходится как раз выборками ПоГруппировкам. Вас, наверное, это смутило?
Цитата Сообщение от Анна Брянцква Посмотреть сообщение
я группирую по номенклатуре, а выводить нужно просто операции
на скрине и "просто номенклатура", я вижу, выводится.

Добавлено через 5 минут
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
|ИТОГИ
|   СУММА(Количество)
|ПО
|   Общие,
|   Номенклатура,
|   Операция";
...
ВыборкаОбщие = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщие.Следующий();
...
ВыборкаНом = ВыборкаОбщие.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНом .Следующий() Цикл
...
ВыборкаОперация = ВыборкаНом.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаОперация .Следующий() Цикл
как-то так...
Yandex
Объявления
20.03.2014, 11:28
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 23:51. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.