|
Подскажите алгоритм | ☑ | ||
---|---|---|---|---|
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
|
огромное спасибо, все получилось
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |