Группировка табличной части документа
Здравствуйте! Прошу помощи у форумчан. УТП 8.3
У меня есть табличная часть документа, в которую выгружаются задачи. У каждой задачи есть значение ID, а у подзадачи есть и ID Родителя, которое равно значению ID родительской задачи. Я бы хотел узнать, как сгруппировать подзадачи к их задачам?(Чтобы подзадачи немного сдвигались и было отличимы от задач)
Табличную часть я заполняю таким образом:
У меня есть табличная часть документа, в которую выгружаются задачи. У каждой задачи есть значение ID, а у подзадачи есть и ID Родителя, которое равно значению ID родительской задачи. Я бы хотел узнать, как сгруппировать подзадачи к их задачам?(Чтобы подзадачи немного сдвигались и было отличимы от задач)
Табличную часть я заполняю таким образом:
Для ЭлементРезультата = 0 По Результат.result.tasks.Количество()-1 Цикл
Если Результат.result.tasks[ЭлементРезультата].groupId = Контрагент.IDКлиентаВБитрикс Тогда
НоваяСтрока = Расшифровка.Добавить();
НоваяСтрока.Задание = Результат.result.tasks[ЭлементРезультата].title;
НоваяСтрока.ID = Результат.result.tasks[ЭлементРезультата].ID;
НоваяСтрока.IDРодителя = Результат.result.tasks[ЭлементРезультата].parentId;
НоваяСтрока.Исполнитель = Результат.result.tasks[ЭлементРезультата].responsible.name;
НоваяСтрока.КоличествоЧасов = Результат.result.tasks[ЭлементРезультата].timeSpentInLogs;
НоваяСтрока.КоличествоЧасов = НоваяСтрока.КоличествоЧасов / 3600;
НоваяСтрока.Цена = НоваяСтрока.КоличествоЧасов * ЦенаПолучить;
КонецЕсли;
КонецЦикла;
ПоказатьПо теме из базы знаний
Найденные решения
(22) В табЧасти никак не сделаете, потому что там нельзя просто деревозначений сделать. По поводу дублей тут странно так как реквизит формы не должен влиять на печать никак...
По поводу группировки, да тут видать все таки сортировка не совсем так отрабатывает, лучше все таки через двойной перебор сделать, он подстроки не создал здесь;
Соответствие тут нужно для быстрого поиска родителей...
По поводу группировки, да тут видать все таки сортировка не совсем так отрабатывает, лучше все таки через двойной перебор сделать, он подстроки не создал здесь;
ТЧРасшифровка = ЭтотОбъект.Расшифровка.Выгрузить();
Соответствие = Новый Соответствие;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
НоваяСтрока = РасшифровкаДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Соответствие.Вставить(СтрокаРасшифровки.ID,НоваяСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
Если НЕ Соответствие.Получить(СтрокаРасшифровки.IDРодителя) = Неопределено ТОгда
НоваяСтрока = Соответствие.Получить(СтрокаРасшифровки.IDРодителя).Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Иначе
НоваяСтрока = РасшифровкаДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьСоответствие тут нужно для быстрого поиска родителей...
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) ;
Ну так как у вас тут нет иерархии то придется два раза переборку делать, что бы сначала вывести строки родителей а уже потом в данные строки добавлять детей
ну как то так
ТаблицаФормы должна быть с типом ДеревоЗначений
Если Результат.result.tasks[ЭлементРезультата].groupId = Контрагент.IDКлиентаВБитрикс Тогда
НоваяСтрока = Расшифровка.Добавить();
НоваяСтрока.Задание = Результат.result.tasks[ЭлементРезультата].title;
НоваяСтрока.ID = Результат.result.tasks[ЭлементРезультата].ID;
НоваяСтрока.IDРодителя = Результат.result.tasks[ЭлементРезультата].parentId;
НоваяСтрока.Исполнитель = Результат.result.tasks[ЭлементРезультата].responsible.name;
НоваяСтрока.КоличествоЧасов = Результат.result.tasks[ЭлементРезультата].timeSpentInLogs;
НоваяСтрока.КоличествоЧасов = НоваяСтрока.КоличествоЧасов / 3600;
НоваяСтрока.Цена = НоваяСтрока.КоличествоЧасов * ЦенаПолучить;
КонецЕсли
ПоказатьНу так как у вас тут нет иерархии то придется два раза переборку делать, что бы сначала вывести строки родителей а уже потом в данные строки добавлять детей
ну как то так
СоответствиеРодителей = Новый Соответствие;
Индекс = 0;
Для ЭлементРезультата = 0 По Результат.result.tasks.Количество()-1 Цикл
Если Результат.result.tasks[ЭлементРезультата].groupId = Контрагент.IDКлиентаВБитрикс Тогда
Если НЕ ЗначениеЗаполнено(Результат.result.tasks[ЭлементРезультата].parentId) Тогда
НоваяСтрока = Расшифровка.ПолучитьЭлементы().Добавить();
НоваяСтрока.Задание = Результат.result.tasks[ЭлементРезультата].title;
НоваяСтрока.ID = Результат.result.tasks[ЭлементРезультата].ID;
//НоваяСтрока.IDРодителя = Результат.result.tasks[ЭлементРезультата].parentId;
НоваяСтрока.Исполнитель = Результат.result.tasks[ЭлементРезультата].responsible.name;
НоваяСтрока.КоличествоЧасов = Результат.result.tasks[ЭлементРезультата].timeSpentInLogs;
НоваяСтрока.КоличествоЧасов = НоваяСтрока.КоличествоЧасов / 3600;
НоваяСтрока.Цена = НоваяСтрока.КоличествоЧасов * ЦенаПолучить;
СоответствиеРодителей.Вставить(НоваяСтрока.ID,Индекс);
Индекс = Индекс + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для ЭлементРезультата = 0 По Результат.result.tasks.Количество()-1 Цикл
Если Результат.result.tasks[ЭлементРезультата].groupId = Контрагент.IDКлиентаВБитрикс Тогда
Если ЗначениеЗаполнено(Результат.result.tasks[ЭлементРезультата].parentId) Тогда
ИндексСтроки = СоответствиеРодителей.Получить(Результат.result.tasks[ЭлементРезультата].parentId);
Если НЕ ИндексСтроки = Неопределено Тогда
НоваяСтрока = Расшифровка.ПолучитьЭлементы().Получить(ИндексСтроки).ПолучитьЭлементы().Добавить();
Иначе
НоваяСтрока = Расшифровка.ПолучитьЭлементы().Добавить();
КонецЕсли;
НоваяСтрока.Задание = Результат.result.tasks[ЭлементРезультата].title;
НоваяСтрока.ID = Результат.result.tasks[ЭлементРезультата].ID;
НоваяСтрока.IDРодителя = Результат.result.tasks[ЭлементРезультата].parentId;
НоваяСтрока.Исполнитель = Результат.result.tasks[ЭлементРезультата].responsible.name;
НоваяСтрока.КоличествоЧасов = Результат.result.tasks[ЭлементРезультата].timeSpentInLogs;
НоваяСтрока.КоличествоЧасов = НоваяСтрока.КоличествоЧасов / 3600;
НоваяСтрока.Цена = НоваяСтрока.КоличествоЧасов * ЦенаПолучить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьТаблицаФормы должна быть с типом ДеревоЗначений
(7)
Если в модуле объекта, тогда у вас там ДеревоЗначений будет уже, и работать надо с деревом значений
Все примерно также, только вместо будет
т.е. ;
а если эта процедура у меня находится в
Если в модуле объекта, тогда у вас там ДеревоЗначений будет уже, и работать надо с деревом значений
Все примерно также, только вместо
ПолучитьЭлементы()
Строки
т.е.
НоваяСтрока = Расшифровка.Строки.Добавить()
НоваяСтрока = Расшифровка.Строки.Получить(ИндексСтроки).Строки.Добавить();
(8)
простите, я слишком глуп чтобы сразу всё понять...
На данный момент я заполнял Табличное поле "Расшифровка", которое берет данные с Табличной части "Расшифровка". Заполняется при нажатии на кнопку и вызывает процедуру с модуля объекта
Чтобы сделать так, как вы сказали, то мне надо удалить эту табличную часть "Расшифровка" и вместо неё на форму добавить ДеревоЗначений?
Я пробовал вместо табличного поля создать дерево значений РасшифровкаДерево, но когда к нему пытаюсь обратиться с модуля объекта, то пишет, что Переменная не определена
Простите за глупые вопросы, просто хочу понять как это правильно делается
простите, я слишком глуп чтобы сразу всё понять...
На данный момент я заполнял Табличное поле "Расшифровка", которое берет данные с Табличной части "Расшифровка". Заполняется при нажатии на кнопку и вызывает процедуру с модуля объекта
Чтобы сделать так, как вы сказали, то мне надо удалить эту табличную часть "Расшифровка" и вместо неё на форму добавить ДеревоЗначений?
Я пробовал вместо табличного поля создать дерево значений РасшифровкаДерево, но когда к нему пытаюсь обратиться с модуля объекта, то пишет, что Переменная не определена
Простите за глупые вопросы, просто хочу понять как это правильно делается
Прикрепленные файлы:
самое простое добавляй в для подзадачи в поле таблицы "задание" впереди пробелы, получится типа такое
Группа заданий 1
__Задание1
__ Задание2
Группа заданий 2
__Задание3
__Задание4
Добавил вместо пробелов подчеркивание. а то месседж съедает пробелы
Группа заданий 1
__Задание1
__ Задание2
Группа заданий 2
__Задание3
__Задание4
Добавил вместо пробелов подчеркивание. а то месседж съедает пробелы
Доброе утро. Я бы реализовал так. Обработку табличной части, я бы оставил как есть, не важно в модуле объекта или в модуле формы. Далее в самой форме добавил реквизит формы, например "РасшифровкаДерево" (тип ДеревоЗначений), вывел бы его в Элементы, затем бы делал формирование дерева по ТЧ "Расшифровка".
(11) Доброе утро. И я бы не хотел удалять табличную часть и менять её на дерево значений, ибо потом с этого и печать придется переделывать и много чего слетит.(так как вы и написали)
Реквизит "РасшифровкаДерево" я добавил в реквизиты формы, дальнейшие действия не очень понял)
прошу пожалуйста чуточку объяснить, очень бы хотел чтобы вышло сделать. Это обычные формы
Реквизит "РасшифровкаДерево" я добавил в реквизиты формы, дальнейшие действия не очень понял)
прошу пожалуйста чуточку объяснить, очень бы хотел чтобы вышло сделать. Это обычные формы
(12)
ПриСозданииНаСервере, заполняйте этот реквизит из вашей табличнойЧасти, по первому методу
Типа такого
Тут попытка все в один цикл запихать, по идее должно сработать так как у нас отсортировано все как надо
, дальнейшие действия не очень понял
ПриСозданииНаСервере, заполняйте этот реквизит из вашей табличнойЧасти, по первому методу
Типа такого
ТЧРасшифровка = Объект.Расшифровка.Выгрузить();
ТЧРасшифровка.Сортировать("IDРодителя,ID");
Родитель = Неопределено;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) ИЛИ Родитель <> СтрокаРасшифровки.IDРодителя Тогда
НоваяСтрока = РасшифровкаДерево.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
Родитель = СтрокаРасшифровки.ID
Иначе
Родитель = СтрокаРасшифровки.IDРодителя;
КонецЕсли;
Иначе
НовПодстрока = НоваяСтрока.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(НовПодстрока ,СтрокаРасшифровки);
КонецЕсли;
КонецЦикла;
ПоказатьТут попытка все в один цикл запихать, по идее должно сработать так как у нас отсортировано все как надо
(17)
Я не уверен, что подойдет ПриОткрытии. Ибо по умолчанию этот табличная часть у документов не заполнена, она заполняется при нажатии на кнопку "Заполнить ТЧ" и собственно выгружает эти задачи. Я сделал, кажется, так как вы сказали. В Процедуру ПриОкрытии вставил этот фрагмент кода, но ничего не происходит:
Я не уверен, что подойдет ПриОткрытии. Ибо по умолчанию этот табличная часть у документов не заполнена, она заполняется при нажатии на кнопку "Заполнить ТЧ" и собственно выгружает эти задачи. Я сделал, кажется, так как вы сказали. В Процедуру ПриОкрытии вставил этот фрагмент кода, но ничего не происходит:
ТЧРасшифровка = ЭтотОбъект.Расшифровка.Выгрузить();
ТЧРасшифровка.Сортировать("IDРодителя,ID");
Родитель = Неопределено;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) ИЛИ Родитель <> СтрокаРасшифровки.IDРодителя Тогда
НоваяСтрока = РасшифровкаДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
Родитель = СтрокаРасшифровки.ID
Иначе
Родитель = СтрокаРасшифровки.IDРодителя;
КонецЕсли;
Иначе
НовПодстрока = НоваяСтрока.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НовПодстрока ,СтрокаРасшифровки);
КонецЕсли;
КонецЦикла;
ПоказатьПрикрепленные файлы:
(18)"
И не покажет у вас Элемент связан с таб частью заказа клиента,а не с реквизитом формы "РасшифровкаДерево".
Вам бы немного мат часть подтянуть ..просто этак я долго объяснять буду, я в принципе почему сказал что приоткрытии это делать, по умолчанию при записи документа у вас должна сохраниться эта табличная часть "Расшифровка", и что бы при открытии в следующий раз документа заполнять реквизит формы, который не сохраняется в отличие от табличной части документа..., в вашем случае при нажатии на кнопку заполнить расшифровку, после того как заполните табличную часть "Расшифровка", надо еще заполнить "РасшифровкаДерево", и элемент связать с этим реквизитом...
И не покажет у вас Элемент связан с таб частью заказа клиента,а не с реквизитом формы "РасшифровкаДерево".
Вам бы немного мат часть подтянуть ..просто этак я долго объяснять буду, я в принципе почему сказал что приоткрытии это делать, по умолчанию при записи документа у вас должна сохраниться эта табличная часть "Расшифровка", и что бы при открытии в следующий раз документа заполнять реквизит формы, который не сохраняется в отличие от табличной части документа..., в вашем случае при нажатии на кнопку заполнить расшифровку, после того как заполните табличную часть "Расшифровка", надо еще заполнить "РасшифровкаДерево", и элемент связать с этим реквизитом...
(22) В табЧасти никак не сделаете, потому что там нельзя просто деревозначений сделать. По поводу дублей тут странно так как реквизит формы не должен влиять на печать никак...
По поводу группировки, да тут видать все таки сортировка не совсем так отрабатывает, лучше все таки через двойной перебор сделать, он подстроки не создал здесь;
Соответствие тут нужно для быстрого поиска родителей...
По поводу группировки, да тут видать все таки сортировка не совсем так отрабатывает, лучше все таки через двойной перебор сделать, он подстроки не создал здесь;
ТЧРасшифровка = ЭтотОбъект.Расшифровка.Выгрузить();
Соответствие = Новый Соответствие;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если НЕ ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
НоваяСтрока = РасшифровкаДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Соответствие.Вставить(СтрокаРасшифровки.ID,НоваяСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаРасшифровки Из ТЧРасшифровка Цикл
Если ЗНачениеЗаполнено(СтрокаРасшифровки.IDРодителя) Тогда
Если НЕ Соответствие.Получить(СтрокаРасшифровки.IDРодителя) = Неопределено ТОгда
НоваяСтрока = Соответствие.Получить(СтрокаРасшифровки.IDРодителя).Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
Иначе
НоваяСтрока = РасшифровкаДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаРасшифровки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьСоответствие тут нужно для быстрого поиска родителей...
(26)вроде свернуло группировку. А как делается это "разворачивание"? Или есть вариант как-то это со смещением сделать, для визуального вида просто?
Я поражаюсь как вы всё это в голове держите, я уже кучу страниц форума перерыл и не мог понять как это сделать, а вы слёту сообразили)
Я поражаюсь как вы всё это в голове держите, я уже кучу страниц форума перерыл и не мог понять как это сделать, а вы слёту сообразили)
Прикрепленные файлы:
(27) Там в свойствах элемента формы должно быть что то типа этого "Начальное Отображение Дерева" Надо поставить расрывать и где то на обычных формах указывается на какой колонке должны быть полюсики для раскрытия..дааавно с ними не работал..
, так же у элемента есть метод развернуть(), можно и программно это сделать..
, так же у элемента есть метод развернуть(), можно и программно это сделать..
(19)просто ПриОткрытии это немного странно работает. У меня из-за этого дерева и печать дублировать начала, но не суть
А есть какой-то может вариант эту визуальную группировку в табличной части сделать? Может вы знаете варианты, а то я не до конца понимаю как это можно сделать
А есть какой-то может вариант эту визуальную группировку в табличной части сделать? Может вы знаете варианты, а то я не до конца понимаю как это можно сделать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)