Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 14:47
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Вывод иерархии справочника Номенклатура с помощью запроса  (Прочитано 36353 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fokas

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Программист 8.1
Помогите с выводом. Дрыгаюсь уже не один час. Пробовал и сам и искал решения. Всё равно не получается :(

	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВозвратОтПокупателяТЧ_Номенклатура.Номенклатура КАК Номенклатура,
| ВозвратОтПокупателяТЧ_Номенклатура.Количество,
| ВозвратОтПокупателяТЧ_Номенклатура.СуммаСНДС КАК Сумма
|ИЗ
| Документ.ВозвратОтПокупателя.ТЧ_Номенклатура КАК ВозвратОтПокупателяТЧ_Номенклатура
|ИТОГИ ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ";

Результат = Запрос.Выполнить();

ОбходВыборки(Результат);
Процедура ОбходВыборки(ВыборкаРодитель)
Перем Выборка;
Выборка = ВыборкаРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
ОбходВыборки(Выборка);
Область = Макет.ПолучитьОбласть("Итоги");
Область.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Область);
ИначеЕсли Выборка.Номенклатура.ЭтоГруппа Тогда
Область = Макет.ПолучитьОбласть("Группа");
Область.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Область);
ОбходВыборки(Выборка);
Иначе
Область = Макет.ПолучитьОбласть("Номенклатура");
Область.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Область);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Смотрел через конструктор запросов. Всё нормально, иерархия есть. Выводит же только верхний уровень и общие итоги
Находил в интернете и полную красоту:
Запрос.Текст = "ВЫБРАТЬ Наименование 
|ИЗ Справочник.Номенклатура Автоупорядочивание";
РезультатЗапроса = Запрос.Выполнить();
Но на этом всё заканчивается. Здесь какие либо итоги ломают иерархию


Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Если хочешь чтобы и элементы обходились, то попробуй так
Выборка = ВыборкаРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Оффлайн fokas

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Программист 8.1
Пробовал и это. И не только это. И запрос составлял по разному. Просидел честно и долго. Обычно всё сводилось к тому, что выводило верхний уровень, либо только элементы. В этом случае так же отображаются только элементы

Оффлайн fokas

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Программист 8.1
На всякий случай версия 8.2.13.219, конфигурация самописная

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Попробуй написать процедуру без рекурсии, глядишь поймешь

Оффлайн fokas

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Программист 8.1
Изначально рекурсию я не использовал. Начальство очень уж не любит лишние процедуры.
Чтобы убедиться, что и где в каком количестве выбирается, я использовал отладчик. Что "ПоГруппировкам", что "ПоГруппировкамВИерархии" отбирались только верхние элементы. И даже если перебирать в них через "Выбрать()", количество равно 0

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Попробуйте отладчиком остановиться на строке
Результат = Запрос.Выполнить()
и посмотреть таблицу
Запрос.Выполнить().Выгрузить()

Если там действительно есть иерархические данные, то на каждый уровень иерархии будет еще одна дополнительная строка. Вполне возможно, что у Вас не получается иерархии еще на этапе получения данных.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн fokas

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Программист 8.1
Не, не могу сделать. Глупость какая-то...
Через консоль, запрос нормально выводит всю иерархию. Я перепроверил через отладчик, как советовала Klyacksa. Всё на месте. Решил пройтись ручками, как говорит has. Экспериментировал, да надоело! В конце концов просто сделал перебор всевозможных вариантов. Добраться до нижних элементов с соблюдением последовательности родителей так и не получилось :xfbnsdfb: Фантастика!
Придётся восстанавливать дерево самостоятельно

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Не получиться у тебя обойти выборку по группировкам с иерархией...
Вот так сделай проверки - получишь тоже самое что и в запросе (вот весь текст) надеюсь я тебе помог))))
	Запрос = Новый Запрос("ВЫБРАТЬ
                      | ВозвратОтПокупателяТЧ_Номенклатура.Номенклатура КАК Номенклатура,
                      | ВозвратОтПокупателяТЧ_Номенклатура.Количество КАК Количество,
                      | ВозвратОтПокупателяТЧ_Номенклатура.СуммаНДС КАК Сумма
                      |ИЗ
                      | Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратОтПокупателяТЧ_Номенклатура
                      |ИТОГИ
                      | СУММА(Количество),
                      | СУММА(Сумма)
                      |ПО
                      | ОБЩИЕ,
                      | Номенклатура ИЕРАРХИЯ");
 
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Номенклатура);
ВыборкаГруп2 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаГруп2.Следующий() Цикл
Сообщить(ВыборкаГруп2.Номенклатура);
ВыборкаГруп3 = ВыборкаГруп2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаГруп3.Следующий() Цикл
Сообщить(ВыборкаГруп3.Номенклатура.Наименование+" Кол = "+ВыборкаГруп3.Количество+" Сум = "+ВыборкаГруп3.Сумма);
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Через обход поГруппировкамСИерахией ты только получишь Общий Итог и самые верхние группы номенклатуры
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!


Теги:
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6504
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4209
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 642
Последний ответ 10 Май 2017, 20:44
от ilnur75
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2049
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 275
Последний ответ 12 Окт 2017, 14:02
от wise

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
58 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 256
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal