Имя: Пароль:
1C
1С v8
Подскажите алгоритм
,
0 KENT2007
 
19.10.12
11:26
Нужно вывести группу затем номенклатуру, потом группу

Если ВыборкаСтрокТовары.Номенклатура.Родитель.Уровень() = 0 Тогда
                   ОбластьГруппы.Параметры.Заполнить(ПараметрыПозиции);
                   ТабДокумент.Вывести(ОбластьГруппы);    
       иначе        
               
       ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
       ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
       ОбластьМакета.Параметры.Номер             = Ном;

             КонецЕсли;
       ТабДокумент.Вывести(ОбластьМакета);
1 1Страх
 
19.10.12
11:28
сделай обход по иерархии и не мучай никого
2 KENT2007
 
19.10.12
11:32
та я уже всех замучал и себя в том числе
подскажи как
3 Godofsin
 
19.10.12
11:38
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ВыбратьИерархически (SelectHierarchically)
Синтаксис:

ВыбратьИерархически(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Параметры:

<Родитель> (необязательный)

Тип: СправочникСсылка.
Отбор по родителю. Имеет смысл только для многоуровневых справочников. Если параметр не задан, то отбор по родителю не производится.
<Владелец> (необязательный)

Тип: СправочникСсылка.
Отбор по владельцу. Имеет смысл только для подчиненных справочников. Если параметр не задан, то отбор по владельцу не производится.
<Отбор> (необязательный)

Тип: Структура.
Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю. Могут задаваться только "Код", "Наименование" и реквизиты справочника, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядоч.".
Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.
<Порядок> (необязательный)

Тип: Строка.
Строка с именем реквизита справочника, определяющая упорядочивание элементов в выборке. Может быть указано "Код", "Наименование" или имя одного из реквизитов примитивного типа (Число, Строка, Дата, Булево), для которого установлен признак "Индексирование" в значение "Индексировать" или "Индексировать с дополнительным упорядочиванием" в конфигураторе. После имени реквизита через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Если параметр не указан, то порядок определяется основным представлением справочника.
Значение по умолчанию: Пустая строка
Возвращаемое значение:

Тип: СправочникВыборка.

Описание:

Формирует иерархическую выборку элементов справочника по заданным условиям. При иерархической выборке для каждого элемента сначала выбираются элементы, для которых он является родителем, а затем уже выбираются элементы следующего уровня.

Доступность:

Сервер, толстый клиент, внешнее соединение.
4 КУНГ ФУ 1С
 
19.10.12
11:38
ВыборкаСтрокТовары = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

ИЛИ

Воспользуйся СКД и не парься ты с жтими макетами.
5 KENT2007
 
20.10.12
09:08
(4) сделал такЮ но что то не выходит
6 KENT2007
 
20.10.12
09:10
гляньте кому не трудно
http://zalil.ru/33871918
7 Wobland
 
20.10.12
09:11
(5) я уверен, где-то кроется ошибка
8 KENT2007
 
20.10.12
09:13
при такой выборке ВыборкаСтрокТовары = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

список будет с группировками?
9 Wobland
 
20.10.12
09:14
что такое обход с иерархией? на примере двух уровней
пока выборка.следующий()
 выборка2=выборка.выбрать()
 пока выборка2.следующий()
...
10 Wobland
 
20.10.12
09:15
а ещё у тебя итогов нету, ты пытаешься обойти плоскую таблицу
11 KENT2007
 
20.10.12
09:18
(10) в самом запросе?
12 Wobland
 
20.10.12
09:19
(11) да
что-то в духе
итоги по номенклатура иерархия
тогда дерево выйдет. если я вообще правильно твою хотелку понял
13 KENT2007
 
20.10.12
09:24
в запросе есть Номенклатура.НаименовнаиеПолное не дает группировать
14 Wobland
 
20.10.12
09:26
(13) я бы тоже отказался группировать по строке. тем более неограниченной длины
15 KENT2007
 
20.10.12
09:28
ну глянь плиз http://zalil.ru/33871918
16 KENT2007
 
20.10.12
10:27
ничего не выходит
17 KENT2007
 
20.10.12
10:33
у кого есть время, помогите плиз.
18 kotletka
 
20.10.12
10:34
степень вложенности групп?
19 KENT2007
 
20.10.12
10:37
3 ну хотябб 1 уровень
20 kotletka
 
20.10.12
10:40
если 1 уровень то запрос переделай в
"ВЫБРАТЬ
   |    ИнвентаризацияТоваровНаСкладеТовары.НомерСтроки КАК Номер,
   |    ИнвентаризацияТоваровНаСкладеТовары.Номенклатура,
   |    ИнвентаризацияТоваровНаСкладеТовары.Номенклатура.НаименованиеПолное КАК ТоварНаименование,
   |    ИнвентаризацияТоваровНаСкладеТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование,
   |    ИнвентаризацияТоваровНаСкладеТовары.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
   |    ИнвентаризацияТоваровНаСкладеТовары.Количество КАК ФактКоличество,
   |    ИнвентаризацияТоваровНаСкладеТовары.КоличествоУчет КАК БухКоличество,
   |    ИнвентаризацияТоваровНаСкладеТовары.ХарактеристикаНоменклатуры КАК Характеристика,
   |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
   |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ЕСТЬNULL(ИнвентаризацияТоваровНаСкладеТовары.Количество, 0) КАК ФактСумма,
   |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ЕСТЬNULL(ИнвентаризацияТоваровНаСкладеТовары.КоличествоУчет, 0) КАК БухСумма,
   |    ИнвентаризацияТоваровНаСкладеТовары.СерияНоменклатуры КАК Серия,
   |    ИнвентаризацияТоваровНаСкладеТовары.Номенклатура.Родитель КАК  родитель
   |ИЗ
   |    Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК ИнвентаризацияТоваровНаСкладеТовары
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
   |        ПО ИнвентаризацияТоваровНаСкладеТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
   |            И ИнвентаризацияТоваровНаСкладеТовары.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
   |ГДЕ
   |    ИнвентаризацияТоваровНаСкладеТовары.Ссылка = &ТекущийДокумент
   |ИТОГИ ПО
   |    Родитель";
21 kotletka
 
20.10.12
10:43
+ вывод результата по группировкам немного переделай
на 1 этапе выводишь родителя:
ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)
Пока ВыборкаСтрокТовары.Следующий() цикл
НоменклатураГруппа = ВыборкаСтрокТовары.Родитель; //На этом этапе получаешь группировку
ВыборкаПоВложеннойНоменклатуре = ВыборкаСтрокТовары.Выбрать();
Пока ВыборкаПоВложеннойНоменклатуре.Следующий() цикл
//Здесь получаешь всю номенклатуру входящую в группу, колво....
Номенклатура = ВыборкаПоВложеннойНоменклатуре.Номенклатура
КонецЦикла

КонецЦикла
22 kotletka
 
20.10.12
10:45
если уровень вложенности больше, то только рекурсией, ну или в выборке Родитель.Родитель и т.д. до Родитель.Родитель.Родитель.... ну и соответсвенно количество циклов в обходе результьтата увеличится
23 kotletka
 
20.10.12
10:55
кстати в запросе случайно удалил твое дополнение про код/артикул
24 KENT2007
 
20.10.12
10:56
все вроде как ясно, а по факту теперь выводит только группы
25 KENT2007
 
20.10.12
10:56
ИмяГруппа = "ОбластьГруппы";
ОбластьГруппы = Макет.ПолучитьОбласть(ИмяГруппа);

   
ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаСтрокТовары.Следующий() цикл
НоменклатураГруппа = ВыборкаСтрокТовары.Родитель; //На этом этапе получаешь группировку
       ПараметрыПозиции = Новый Структура;
           ПараметрыПозиции.Вставить("Группа", ВыборкаСтрокТовары.Родитель);
           ОбластьГруппы.Параметры.Заполнить(ПараметрыПозиции);
                   ТабДокумент.Вывести(ОбластьГруппы);    
                   
                   
                   
ВыборкаПоВложеннойНоменклатуре = ВыборкаСтрокТовары.Выбрать();
Пока ВыборкаПоВложеннойНоменклатуре.Следующий() цикл
//Здесь получаешь всю номенклатуру входящую в группу, колво....

Номенклатура = ВыборкаПоВложеннойНоменклатуре.Номенклатура;
   Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
           Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
           Продолжить;
       КонецЕсли;

       Ном = Ном + 1;
       //Начинаем новую страницу, если предыдущая строка была последней на странице
       //или пора переносить последнюю строку на последнюю страницу с подвалом.
       ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;

       Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
        или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда
..........
.......
26 kotletka
 
20.10.12
11:01
ты дурак? смотри вдумчиво (21) там две выборки, два цикла, причем вторая выборка идет из первой
27 KENT2007
 
20.10.12
11:07
(26) все группирует выводит, теперь что то на числа ругается
28 KENT2007
 
20.10.12
11:07
{ВнешняяОбработка.ПечатьИНВ3ВЦенахНоменклатуры.МодульОбъекта(208)}: Преобразование значения к типу Число не может быть выполнено
       ИтогФактКоличество = ИтогФактКоличество + ВыборкаСтрокТовары.ФактКоличество;
29 kotletka
 
20.10.12
11:10
все товары, количество и прочие реквизиты ты получаешь во втором цикле, на первом только группу, так что смотри код где-то напутал
30 kotletka
 
20.10.12
11:10
отладчик
31 KENT2007
 
20.10.12
11:12
огромное спасибо, все получилось