Всем привет! Есть форма списка документа с произвольным запросом который выводит данные в динамический список, подскажите пожалуйста как можно вывести табличную часть документа в форму списка в виде дерева значений, чтобы была возможно раскрывать ветку только у тех документов у которых количество элементов в таб часте больше 1
(1) imbaZeratul, Понравился мне вопрос. Очень.
А вот ответы:
1) Это будет не динамический список а ДеревоЗначений
на скриншоте приведен образец конфигурации и форма обработки
2) А вот и текст модуля формы :
&НаСервере
Процедура ОбновитьДеревоДокументов()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПроизвестиЗатратуПроизведенныеЗатраты.Ссылка.Дата КАК ДатаДокумента,
| ПроизвестиЗатратуПроизведенныеЗатраты.Ссылка КАК Документ,
| ПроизвестиЗатратуПроизведенныеЗатраты.Затрата КАК Затрата,
| ПроизвестиЗатратуПроизведенныеЗатраты.Сумма КАК Сумма
|ИЗ
| Документ.ПроизвестиЗатрату.ПроизведенныеЗатраты КАК ПроизвестиЗатратуПроизведенныеЗатраты
|
|СГРУППИРОВАТЬ ПО
| ПроизвестиЗатратуПроизведенныеЗатраты.Ссылка,
| ПроизвестиЗатратуПроизведенныеЗатраты.Ссылка.Дата,
| ПроизвестиЗатратуПроизведенныеЗатраты.Затрата,
| ПроизвестиЗатратуПроизведенныеЗатраты.Сумма
|ИТОГИ
| СУММА(Сумма)
|ПО
| Документ";
РезультатЗапроса = Запрос.Выполнить();
Рез = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЗначениеВРеквизитФормы(Рез, "СписокДокументов");
КонецПроцедуры // ОбновитьДеревоДокументов()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбновитьДеревоДокументов();
КонецПроцедуры
Показать
3) так как список не динамический, то крайне желательно вставить какие-то отборы в форму и соответственно менять и/или параметризовать запрос. Я бы это точно сделал по датам!
(9) Подскажите, пожалуйста, почему отладчику может не нравиться реквизит формы?
{ВнешняяОбработка.АдресноеХранение.Форма.Форма.Форма(80)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(Рез, "Деревце");
по причине:
Недопустимое значение параметра (параметр номер '2')
Запрос.Текст =
"ВЫБРАТЬ
| ГСК_АдресноеХранение.Номенклатура КАК Номенклатура,
| ГСК_АдресноеХранение.Характеристика КАК Характеристика,
| ГСК_АдресноеХранение.Серия КАК Серия,
| ГСК_АдресноеХранение.Склад КАК Склад,
| ГСК_АдресноеХранение.Ячейка КАК Ячейка,
| СУММА(ГСК_АдресноеХранение.Количество) КАК Количество
|ИЗ
| РегистрСведений.ГСК_АдресноеХранение КАК ГСК_АдресноеХранение
|
|СГРУППИРОВАТЬ ПО
| ГСК_АдресноеХранение.Ячейка,
| ГСК_АдресноеХранение.Серия,
| ГСК_АдресноеХранение.Характеристика,
| ГСК_АдресноеХранение.Номенклатура,
| ГСК_АдресноеХранение.Склад
|ИТОГИ
| СУММА(Количество)
|ПО
| Номенклатура,
| Характеристика,
| Серия,
| Склад";
РезультатЗапроса = Запрос.Выполнить();
Рез = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЗначениеВРеквизитФормы(Рез, "Деревце");
вот допустим есть типовой документ "реализация товаров и услуг", мне нужно чтобы его таб.часть товары выводилась с форме списка документов в виде дерева
(2) imbaZeratul, список и дерево, немного разные вещи.
Поэтому так вот, просто, динамически не получится.
В списке, можно заюзать группы, и перегруппировать по всякому разному, потестить можно через "все действия" "изменить форму".
Можно сделать, что докуммент, как бы группировать будет номенклатуру. Вот то, и можно сделать программно.
Но в чистом виде дерево вы не получите.
По крайней мере, я такого способа не знаю.
Изменить текст запроса: собственно делать выборку из таблицы табличных частей документов а не из таблицы документов, и добавить группировку по ссылке... не?
Создай в форме списка документов реквизит "Дерево" с Типом значения "ДеревоЗначений"...Затем в свойствах табличного поля формы списка поменяй "Данные" на свой созданный реквизит с типом ДеревоЗначений.. В него выводи программно, что тебе нужно..
в ДеревоЗначений.
Документ (итоговое поле) - насколько я понял.
если нужно (но, чтото сдаётся мне, что и без этого - всё норм будет), то и отфильтровать с количеством строк >1