Объединение полей при печати

1. Tailor_Made 10.10.19 07:44 Сейчас в теме
Здравствуйте!
Столкнулся с проблемой и не знаю как решить. У меня есть процедура выгрузки задач с Битрикс в ТЧ документа:

	Для  ЭлементРезультата = 0 По Результат.result.tasks.Количество()-1 Цикл
		Если  Результат.result.tasks[ЭлементРезультата].groupId = Контрагент.IDКлиентаВБитрикс Тогда 
			НоваяСтрока = Расшифровка.Добавить();
			НоваяСтрока.Задание = Результат.result.tasks[ЭлементРезультата].title;
			НоваяСтрока.Исполнитель = Результат.result.tasks[ЭлементРезультата].responsible.name;
			НоваяСтрока.КоличествоЧасов = Результат.result.tasks[ЭлементРезультата].timeSpentInLogs;
			НоваяСтрока.КоличествоЧасов = НоваяСтрока.КоличествоЧасов / 3600;
			НоваяСтрока.Цена = НоваяСтрока.КоличествоЧасов * ЦенаПолучить;
		КонецЕсли;
	КонецЦикла;
Показать


После этого функцией делаю печать:

Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
	Запрос.Текст ="ВЫБРАТЬ
	              |	ЗаказПокупателя.Дата,
	              |	ЗаказПокупателя.Контрагент КАК Клиент,
	              |	ЗаказПокупателя.Организация КАК Исполнитель
	              |ИЗ
	              |	Документ.ЗаказПокупателя КАК ЗаказПокупателя
	              |ГДЕ
	              |	ЗаказПокупателя.Ссылка = &ТекущийДокумент";

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

	ЗапросРасшифровка = Запрос.Выполнить().Выгрузить();
	
	ТабДокумент = Новый ТабличныйДокумент;
	ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_РасшифровкаЗаказа";
	
	Макет = ПолучитьМакет("РасшифровкаЗаказ");
	
	// печать производится на языке, указанном в настройках пользователя
	КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
	Макет.КодЯзыкаМакета = КодЯзыкаПечать;

	// Выводим шапку накладной++
	СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Исполнитель, Шапка.Дата,,,КодЯзыкаПечать);
	СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Клиент, Шапка.Дата,,,КодЯзыкаПечать);
		
	ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
	ОбластьМакета.Параметры.Заполнить(Шапка);
	ОбластьМакета.Параметры.Дата = Формат(Шапка.Дата, "ДЛФ=Д");
		
	ТабДокумент.Вывести(ОбластьМакета);
	
	// Вывести табличную часть (Расшифровка)
	Для каждого Строка из Расшифровка Цикл 
		ОбластьМакета = Макет.ПолучитьОбласть("Строка");
		ОбластьМакета.Параметры.Заполнить(Строка);
		ОбластьМакета.Параметры.КоличествоЧасов = Формат(Строка.КоличествоЧасов, "ЧДЦ=2");
		ОбластьМакета.Параметры.Цена 			= Формат(Строка.Цена, "ЧДЦ=2");
		ТабДокумент.Вывести(ОбластьМакета);
	КонецЦикла;

	ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакета.Параметры.ИтогЧасов = Расшифровка.Итог("КоличествоЧасов");
	ОбластьМакета.Параметры.ИтогСумма = Расшифровка.Итог("Цена");
	ОбластьМакета.Параметры.ИтогЧасов = Формат(Расшифровка.Итог("КоличествоЧасов"), "ЧДЦ=2");
	ОбластьМакета.Параметры.ИтогСумма = Формат(Расшифровка.Итог("Цена"), "ЧДЦ=2");
	ТабДокумент.Вывести(ОбластьМакета);
			
	ОбластьМакета.Параметры.Заполнить(Шапка);

	Возврат ТабДокумент;
Показать


В выгрузку попадают и задачи, и их подзадачи. Но отображаются они одинаково. Как сделать, чтобы при печати задача объеденялась со своими подзадачами? То есть, чтобы количество часов и цена просто прибавлялось к основной задаче? Не понимаю как это реализовать, буду очень благодарен
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. razars 14 10.10.19 09:08 Сейчас в теме +0.74 $m
Если "Задание" и "Исполнитель" во втором запросе тебе не нужны. Тогда так например (возможны ошибки в запросе - проверь):

ВЫБРАТЬ
ЗаказПокупателяРасшифровка.Задание,
ЗаказПокупателяРасшифровка.Исполнитель,
СУММА(ЗаказПокупателяРасшифровка.Цена+isnull(ЗаказПокупателяРасшифровка1.Цена,0)) КАК Цена,
СУММА(ЗаказПокупателяРасшифровка.КоличествоЧасов+isnull(ЗаказПокупателяРасшифровка1.КоличествоЧасов,0)) КАК КоличествоЧасов
ИЗ
Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка1
ПО ЗаказПокупателяРасшифровка.ID = ЗаказПокупателяРасшифровка1.IDРодителя
ГДЕ
ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент и ЗаказПокупателяРасшифровка.IDРодителя is null

СГРУППИРОВАТЬ ПО
ЗаказПокупателяРасшифровка.Исполнитель,
ЗаказПокупателяРасшифровка.Задание


ps А вообще еще лучше подготовить вложенным запросом ЗаказПокупателяРасшифровка с условием "ГДЕ ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент" и уже таблицу из этого вложенного запроса соединять саму с собой.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Tailor_Made 10.10.19 07:56 Сейчас в теме
По сути задание сводится к тому, что надо в этом запросе объеденить поля, у которых есть IDРодителя и равно ID другого задания.
ВЫБРАТЬ
	МИНИМУМ(ЗаказПокупателяРасшифровка.НомерСтроки) КАК НомерСтрокиТЧ,
	ЗаказПокупателяРасшифровка.Задание,
	СУММА(ЗаказПокупателяРасшифровка.ID) КАК ID,
	СУММА(ЗаказПокупателяРасшифровка.IDРодителя) КАК IDРодителя,
	СУММА(ЗаказПокупателяРасшифровка.Цена) КАК Цена,
	ЗаказПокупателяРасшифровка.Исполнитель,
	СУММА(ЗаказПокупателяРасшифровка.КоличествоЧасов) КАК КоличествоЧасов
ИЗ
	Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ГДЕ
	ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент

СГРУППИРОВАТЬ ПО
	ЗаказПокупателяРасшифровка.Исполнитель,
	ЗаказПокупателяРасшифровка.Задание

УПОРЯДОЧИТЬ ПО
	НомерСтрокиТЧ
Показать
3. razars 14 10.10.19 08:54 Сейчас в теме
А у основных задач IDРодителя чему равен? Null?
4. Tailor_Made 10.10.19 08:56 Сейчас в теме
5. razars 14 10.10.19 09:08 Сейчас в теме +0.74 $m
Если "Задание" и "Исполнитель" во втором запросе тебе не нужны. Тогда так например (возможны ошибки в запросе - проверь):

ВЫБРАТЬ
ЗаказПокупателяРасшифровка.Задание,
ЗаказПокупателяРасшифровка.Исполнитель,
СУММА(ЗаказПокупателяРасшифровка.Цена+isnull(ЗаказПокупателяРасшифровка1.Цена,0)) КАК Цена,
СУММА(ЗаказПокупателяРасшифровка.КоличествоЧасов+isnull(ЗаказПокупателяРасшифровка1.КоличествоЧасов,0)) КАК КоличествоЧасов
ИЗ
Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка1
ПО ЗаказПокупателяРасшифровка.ID = ЗаказПокупателяРасшифровка1.IDРодителя
ГДЕ
ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент и ЗаказПокупателяРасшифровка.IDРодителя is null

СГРУППИРОВАТЬ ПО
ЗаказПокупателяРасшифровка.Исполнитель,
ЗаказПокупателяРасшифровка.Задание


ps А вообще еще лучше подготовить вложенным запросом ЗаказПокупателяРасшифровка с условием "ГДЕ ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент" и уже таблицу из этого вложенного запроса соединять саму с собой.
6. Tailor_Made 10.10.19 09:12 Сейчас в теме
(5)
попытался выполнить этот запрос через Запосник. Ошибки не было, но ничего не вывело
7. Tailor_Made 10.10.19 09:14 Сейчас в теме
(5)ЗаказПокупателяРасшифровка.IDРодителя = 0
А если написать так, то вывело, но не сгрупировало, а только основное задание вернуло
8. razars 14 10.10.19 09:15 Сейчас в теме
(7)
Пардон, сейчас поправлю в сообщении 5
10. Tailor_Made 16.10.19 18:10 Сейчас в теме
(8)прошу вас помочь, я сам не понимаю в чем тут ошибка. Только теперь заметил, что если подзадач больше чем 1, то считает не правильно. Почему-то не 6, а 8 отображает.
Прикрепленные файлы:
11. razars 14 17.10.19 18:10 Сейчас в теме
(10)Так как строил этот запрос в уме, допустил ошибку. Вот здесь ошибка: CODE]ЗаказПокупателяРасшифровка.Цена+isnull(ЗаказПокупателяРасшифровка1.Цена,0)[[/1C-CODE] сумма основной задачи складывается с каждой подзадачей, т.е. если 2 подзадачи, то сумма основной задачи складывается с каждой: (1400+700) + (1400+2100). Аналогично и с количеством. Надеюсь понятно объяснил. Вот как правильно:
ВЫБРАТЬ
ЗаказПокупателяРасшифровка.Задание,
ЗаказПокупателяРасшифровка.Исполнитель,
ЗаказПокупателяРасшифровка.Цена,
ЗаказПокупателяРасшифровка.КоличествоЧасов,
СУММА(isnull(ЗаказПокупателяРасшифровка1.Цена,0)) КАК ЦенаПодзаданий,
СУММА(isnull(ЗаказПокупателяРасшифровка1.КоличествоЧасов,0)) КАК КоличествоЧасовПодзаданий
ПОМЕСТИТЬ ВТ
ИЗ
Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка1
ПО ЗаказПокупателяРасшифровка.ID = ЗаказПокупателяРасшифровка1.IDРодителя
ГДЕ
ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент и ЗаказПокупателяРасшифровка.IDРодителя is null

СГРУППИРОВАТЬ ПО
ЗаказПокупателяРасшифровка.Исполнитель,
ЗаказПокупателяРасшифровка.Задание,
ЗаказПокупателяРасшифровка.Цена,
ЗаказПокупателяРасшифровка.КоличествоЧасов;
	
	////////////////////////////////////////////////////////////­////////////////////
	ВЫБРАТЬ 
ВТ.Задание,
ВТ.Исполнитель,
ВТ.Цена+ВТ.ЦенаПодзаданий,
ВТ.КоличествоЧасов+ВТ.КоличествоЧасовПодзаданий

из ВТ как ВТ
Показать



Пишу опять на коленке, так что проверьте на всякий случай.
Tailor_Made; +1 Ответить
12. Tailor_Made 17.10.19 18:19 Сейчас в теме
(11)я проверил, но ничего не вывело вообще
спасибо вам всё равно!
9. Tailor_Made 10.10.19 09:32 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот