Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > Форум Форум программистов > Форум 1С > Форум 1С: Собственные программы
Восстановить пароль Регистрация

Ответ Создать новую тему
 
19.03.2014, 08:06   #1
Анна Брянцква
Новичок
Регистрация: 29.03.2013
Сообщений: 43
Репутация: 0 (0)
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.Количество;
ТабДок.Вывести(ОбластьНомер);
КонецЦикла;
КонецЦикла;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.Автомасштаб = Истина;
ТабДок.Показать();
Получаю макет:


А хочу под каждым номером видеть соответствующие операции документу, если пытаюсь добавить третий уровень группировки в обходе, то количество не правильно выводится, как быть? Подскажите.
Миниатюры
Обход по группировкам  
19.03.2014, 08:06
AdAgent
Объявления
19.03.2014, 09:23   #2
duk337
Модератор
Регистрация: 03.11.2011
Сообщений: 6,858
Репутация: 2721 (1534)
Лучшие ответы: 58
1C 8.x Обход по группировкам

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"ВЫБРАТЬ
|   ЗаданиеОперации.Ссылка.Номер КАК Номер,
|   ЗаданиеОперации.Ссылка.Номенклатура КАК Номенклатура,
|   ЗаданиеОперации.Ссылка.Количество КАК Количество
|   ЗаданиеОперации.Операция КАК Операция
|ИЗ
|   Документ.Задание.Операции КАК ЗаданиеОперации
|ИТОГИ
|   СУММА(Количество)
|ПО
|   Общие,
|   Ссылка,
|   Номенклатура,
|   Операция";
И четыре выборки соответственно

Код 1C
1
2
3
4
ОбластьОбщие = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьНомер = Макет.ПолучитьОбласть("Номер");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ОбластьОперация = Макет.ПолучитьОбласть("Операция");
Другие темы раздела
1С Неправильно построенный запрос
Было вот так Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗначенияСвойствОбъектов.Объект КАК ОС, | ЗначенияСвойствОбъектов.Свойство.Код КАК КодСвойства, | ЗначенияСвойствОбъектов.Значение |ПОМЕСТИТЬ ЗначенияДопПараметров |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК...
1С Как из выбранной строки документа создать документ на основании с залоненными полями?
Подскажи пожалуйста как из выбранной строки документа создать документ на основании с заполненными полями?
20.03.2014, 10:32  [ТС]   #3
Анна Брянцква
Новичок
Регистрация: 29.03.2013
Сообщений: 43
Репутация: 0 (0)
1C 8.x Обход по группировкам

Так не совсем верно, у меня количество в реквизитах в документе, я группирую по номенклатуре, а выводить нужно просто операции по конкретному заданию, я сделала так
Код 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);
                                                       КонецЦикла;
                                                          
 
                                      КонецЦикла;
                                  КонецЦикла;
                                  
                                    ТабДок.ЗакончитьАвтогруппировкуСтрок();
 
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.Автомасштаб = Истина;
    ТабДок.Показать();

я сделала в два запроса, и получаю отчет - там все правильно, можно ли как то эти запросы в одном сделать?
20.03.2014, 10:36  [ТС]   #4
Анна Брянцква
Новичок
Регистрация: 29.03.2013
Сообщений: 43
Репутация: 0 (0)
1C 8.x Обход по группировкам

вот форма
Миниатюры
Обход по группировкам  
20.03.2014, 11:28   #5
duk337
Модератор
Регистрация: 03.11.2011
Сообщений: 6,858
Репутация: 2721 (1534)
Лучшие ответы: 58
1C 8.x Обход по группировкам / 1С: Собственные программы

странно. Я вроде ответил.
Группироовки дают плоскую таблицу. Итоги - дерево, которое обходится как раз выборками ПоГруппировкам. Вас, наверное, это смутило?
Цитата Сообщение от Анна Брянцква Посмотреть сообщение
я группирую по номенклатуре, а выводить нужно просто операции
на скрине и "просто номенклатура", я вижу, выводится.

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

Похожие темы
Тема Раздел Автор Дата
Pascal ABC кто поможет переделать 5 процедуру обход графа в глубину на обход графа в ширину
program kurs_work; uses crt,GraphABC; const n = 6; max = 1000; max_n = 36; var i, j, b : integer; Graf : array of integer;
Pascal ABC Vlaur 16.12.2013 17:43
PHP БД Обход
Возможно ли обойти mysql_real_escape_string(),если да,то как
PHP и базы данных kostik48lip 27.08.2013 13:52
1С Сумма в таблице по разным группировкам
Добрый день. В чем суть задачи: Есть таблица Период Субконто1 Субконто2 Сумма1 Январь x y 100 Январь x z 200 нужно сделать так чтобы в колонке Сумма2...
oakley 20.09.2012 20:18
Pascal ABC Обход деревьев
В общем дано дерево в виде матрицы смежности. Нужно написать обходы ЛПВ, ЛВП, и ВПЛ где Л - лево, П - право, В - вершина Покажите какой-нибудь, а то даже не знаю как подступиться
Pascal ABC Mikhail57 09.05.2012 22:46
C++ обход
Король шахматной доски решил выяснить боеспособность своей армии. Посыльный объехал все клетки поля и сделал записи обо всех войсках, имеющихся в государстве. Вам поручено упорядочить полученные данные для предъявления королю. Посыльный обозначал войска большими латинскими буквами P, K, S, L, F....
С++ для начинающих Shato 16.04.2011 00:35
Опции темы


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