Сложить строки на печатной форме

1. CD_SVEN 05.06.20 14:57 Сейчас в теме
Добрый день. подскажите пожалуйста, есть печатная форма которая собирает табличные части из нескольких документ и выводит на печать "АКТ Списания", подскажите как вывести на печатную форму эти строки с условием, если номенклатура одинаковая то складывать ее в одну строку.
	ДвиженияДокументов = РезультатЗапроса[1].Выгрузить();
	ВыборкаДокументы = РезультатЗапроса[2].Выбрать();
	ВыборкаМатериалы = РезультатЗапроса[3].выбрать();
	
	ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	ТабДокумент.Автомасштаб = Истина;
	ТабДокумент.ПолеСлева  = 5;
	ТабДокумент.ПолеСправа = 0;
	ТабДокумент.ИмяПараметровПечати = "ПараметрыПечати_АктСписанияМЗ_0504230";
	
	Макет = ПолучитьМакет("ПФ_MXL_АктСписанияМЗ0504230_52н");;
	
	ОбластьМакетаЗаголовок  = Макет.ПолучитьОбласть("Заголовок");
	ОбластьМакетаШапка      = Макет.ПолучитьОбласть("Шапка");
	ОбластьМакетаСтрока     = Макет.ПолучитьОбласть("Строка");
	ОбластьМакетаИтого      = Макет.ПолучитьОбласть("Итого");
	ОбластьМакетаПодвал     = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакетаКомиссия   = Макет.ПолучитьОбласть("Комиссия");
	ОбластьМакетаДата       = Макет.ПолучитьОбласть("Дата");
	
	ОбластьМакетаЗаключение1 = Макет.ПолучитьОбласть("Заключение1");
	ОбластьМакетаЗаключение2 = Макет.ПолучитьОбласть("Заключение2");
	
	ЕстьДопОбластиКомиссия = Макет.Области.Найти("Комиссия1") <> Неопределено;
	МассивДопОбластейКомиссия = Новый Массив;
	Если ЕстьДопОбластиКомиссия Тогда
		МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия1"));
		МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия2"));
		МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия3"));
		МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия4"));
		МассивДопОбластейКомиссия.Добавить(ОбластьМакетаКомиссия);
	Иначе
		МассивДопОбластейКомиссия.Добавить(ОбластьМакетаКомиссия);
	КонецЕсли;
	
	ПервыйДокумент = Истина;
	 СтруктураОтбора = Новый Структура("Номенклатура, СчетКт, КПСКт, Количество");

	 ВыборкаДокументы.Следующий();
		Если Не ПервыйДокумент Тогда
			ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
		
		ОбластьМакетаЗаголовок.Параметры.Заполнить(ВыборкаДокументы);
		
		ДанныеДиректора = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
		ВыборкаДокументы.ДиректорСсылка, ВыборкаДокументы.ТекстДата);
		Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ДанныеДиректора, Истина);
		ДанныеЦМО = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
		ВыборкаДокументы.ЦМО, ВыборкаДокументы.ТекстДата);
		Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ДанныеЦМО, Истина);
		
		ГлавныйБухгалтер = ОрганизационнаяСтруктураКлиентСервер.ОтветственноеЛицоОрганизации(
		Перечисления.ОтветственныеЛицаОрганизаций.ГлавныйБухгалтер, ВыборкаДокументы.Организация,
		ВыборкаДокументы.ТекстДата, ВыборкаДокументы.ПодразделениеОтправитель);
		ДанныеГлБухгалтера = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
		ГлавныйБухгалтер.ОтветственноеЛицоСсылка, ВыборкаДокументы.ТекстДата);
		Справочники.Сотрудники.ПолучитьДанныеСотрудника(ДанныеГлБухгалтера, Истина);
		ПараметрыОтметкиБухгалтерии = Новый Структура;
		ПараметрыОтметкиБухгалтерии.Вставить("Дата", Формат(ВыборкаДокументы.ТекстДата,"ДФ='MMMM yyyy'"));
		ПараметрыОтметкиБухгалтерии.Вставить("ФИОГлавныйБухгалтер",
		КорреспондентыКлиентСервер.ФИО(ДанныеГлБухгалтера));
		Для каждого ТекОбластьКомиссия Из МассивДопОбластейКомиссия Цикл
			
			ТекОбластьКомиссия.Параметры.Заполнить(ПараметрыОтметкиБухгалтерии);
			
		КонецЦикла;
		
		СтрокаКомиссия = "";
		ВыборкаКомиссия = ВыборкаДокументы.СоставКомиссии.Выбрать();
		ОбластьКомиссия = СформироватьОбластьКомиссия(
		ВыборкаДокументы, ВыборкаКомиссия, МассивДопОбластейКомиссия, 3, СтрокаКомиссия, Истина);
		
		СтруктураПараметров = Новый Структура;
		СтруктураПараметров.Вставить("Директор", 		КорреспондентыКлиентСервер.ФИО(ДанныеДиректора, Истина));
		СтруктураПараметров.Вставить("МОЛ", 			"" + ДанныеЦМО.Фамилия + " " + ДанныеЦМО.Имя + " "
		+ ДанныеЦМО.Отчество);
		СтруктураПараметров.Вставить("ДатаПриказа", 	?(ЗначениеЗаполнено(ВыборкаДокументы.ТекстДатаПриказа),
		Формат(ВыборкаДокументы.ТекстДатаПриказа, "ДЛФ=DD"),
		"_______________"));
		СтруктураПараметров.Вставить("НомерПриказа", 	?(ЗначениеЗаполнено(ВыборкаДокументы.ТекстНомерПриказа),
		СокрЛП(ВыборкаДокументы.ТекстНомерПриказа),
		"_______________"));
		СтруктураПараметров.Вставить("Номер", 			РегистрыСведений.НастройкиПечатиПрефиксаНомера
		.ПолучитьНомерДляПечатиПоСсылкеИдентификаторуДокумента(
		"АктСписанияМЗ", ВыборкаДокументы.ТекстНомер));
		СтруктураПараметров.Вставить("Дата", 			Формат(ВыборкаДокументы.ТекстДата, "ДЛФ=D"));
		СтруктураПараметров.Вставить("пДатаЗаголовка1",	Формат(ЭтотОбъект.ДатаНачало, "ДЛФ=DD"));
		СтруктураПараметров.Вставить("пДатаЗаголовка2",	Формат(ЭтотОбъект.ДатаКонец, "ДЛФ=DD"));
		//СтруктураПараметров.Вставить("ДатаЗаголовка",	Формат(ВыборкаДокументы.ТекстДата, "ДЛФ=DD"));
		СтруктураПараметров.Вставить("ЧленыКомиссии",	СтрокаКомиссия);
		
		ОбластьМакетаЗаголовок.Параметры.Заполнить(СтруктураПараметров);
		ТабДокумент.Вывести(ОбластьМакетаЗаголовок);
		ТабДокумент.Вывести(ОбластьМакетаШапка);
		
		ОбластьЗаключение = Новый ТабличныйДокумент;
		ВыведеноСтрокЗаключения = ВывестиДлиннуюСтроку(ВыборкаДокументы.ЗаключениеКомиссии,
		ОбластьЗаключение, 
		ОбластьМакетаЗаключение1,
		ОбластьМакетаЗаключение2,
		"ЗаключениеЯчейка1",
		"ЗаключениеЯчейка2");
		Для Счетчик = ВыведеноСтрокЗаключения + 1 По 3 Цикл
			
			ПустаяОбластьМакетаЗаключение2 = Макет.ПолучитьОбласть("Заключение2");
			ОбластьЗаключение.Вывести(ПустаяОбластьМакетаЗаключение2);
			
		КонецЦикла;
		
		
		//Ошибка начинается отсюдаа
		
		//СтрокиДвижений = ДвиженияДокументов.НайтиСтроки(Новый Структура("Регистратор", ВыборкаДокументы.Ссылка));
		ТаблицаДвижений = ДвиженияДокументов.Скопировать();
		
		//ВыборкаМатериалы = ВыборкаДокументы.Материалы.Выбрать();
		СуммаИтого 		= 0;
		КоличествоИтого	= 0;
		КоличествоСтрок = ВыборкаМатериалы.Количество();
		Пока ВыборкаМатериалы.Следующий() Цикл
			
			ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаМатериалы);
			
			СтруктураПараметров = Новый Структура("Цена, Сумма, СчетДебета, СчетКредита");
			Цена = 0;
			Сумма = 0;
			
			
			
			
			СтруктураОтбора.Номенклатура = ВыборкаМатериалы.НоменклатураСсылка;
			СтруктураОтбора.СчетКт = ВыборкаМатериалы.СчетУчета;
			СтруктураОтбора.КПСКт = ВыборкаМатериалы.КПС;
			СтруктураОтбора.Количество = ВыборкаМатериалы.Количество;
			

			//ЗаполнитьЗначенияСвойств(СтруктураОтбора, ВыборкаМатериалы);
			//Ошибка начинается отсюдаа-----------------------------------------------------------------------------------------------
						
			//ТекущиеДвижения = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДвижений);
			
			ТекущиеДвижения = ТаблицаДвижений.НайтиСтроки(СтруктураОтбора);//////////не работает отбор!!!!!!!!!!!!!!!
 			Если ТекущиеДвижения.Количество() > 0 Тогда
				ТекущееДвижение = ТекущиеДвижения[0];
				
				Если ТекущееДвижение.Количество <> 0 Тогда
					Цена = Окр(ТекущееДвижение.Сумма / ТекущееДвижение.Количество, 2);
				Иначе
					Цена = 0;
				КонецЕсли;
				Если ВыборкаМатериалы.Количество = ТекущееДвижение.Количество Тогда
					Сумма = ТекущееДвижение.Сумма;
				ИначеЕсли ВыборкаМатериалы.Количество < ТекущееДвижение.Количество Тогда
					Сумма = ВыборкаМатериалы.Количество * Цена;
				Иначе
					Сумма = 0;
				КонецЕсли;
				
				УчтенноеКоличество = Мин(ТекущееДвижение.Количество, ВыборкаМатериалы.Количество);
				ТекущееДвижение.Количество = ТекущееДвижение.Количество - УчтенноеКоличество;
				ТекущееДвижение.Сумма = ТекущееДвижение.Сумма - Сумма;
				
				Если ЗначениеЗаполнено(ТекущееДвижение.СчетДт) Тогда
					СтруктураПараметров.СчетДебета = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
					ТекущееДвижение.КПСДт, ТекущееДвижение.КФО, ТекущееДвижение.СчетДт, ТекущееДвижение.КЭКДт,,)
				КонецЕсли;
				СтруктураПараметров.СчетКредита = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
				ТекущееДвижение.КПСКт, ТекущееДвижение.КФО, ТекущееДвижение.СчетКт, ТекущееДвижение.КЭККт,,);
			КонецЕсли;
			
			СтруктураПараметров.Цена	= Формат(Цена, "ЧДЦ=2");
			СтруктураПараметров.Сумма	= Формат(Сумма, "ЧДЦ=2");
			ОбластьМакетаСтрока.Параметры.Заполнить(СтруктураПараметров);
			
			Если ВыборкаМатериалы.НомерСтроки <> КоличествоСтрок Тогда
				Если Не ТабДокумент.ПроверитьВывод(ОбластьМакетаСтрока) Тогда
					ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
					ТабДокумент.Вывести(ОбластьМакетаШапка);
				КонецЕсли;
			Иначе
				Области = Новый Массив;
				Области.Добавить(ОбластьМакетаСтрока);
				Области.Добавить(ОбластьМакетаИтого);
				Области.Добавить(ОбластьМакетаПодвал);
				Области.Добавить(ОбластьЗаключение);
				Области.Добавить(ОбластьКомиссия);
				Области.Добавить(ОбластьМакетаДата);
				Если Не ТабДокумент.ПроверитьВывод(ОбластьМакетаСтрока) Тогда
					ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
					ТабДокумент.Вывести(ОбластьМакетаШапка);
				КонецЕсли;
			КонецЕсли;
			
			СуммаИтого 		= СуммаИтого		+ Сумма;
			КоличествоИтого	= КоличествоИтого	+ ВыборкаМатериалы.Количество;
			
			ТабДокумент.Вывести(ОбластьМакетаСтрока);
			
		КонецЦикла;
		
		СтруктураПараметров = Новый Структура;
		СтруктураПараметров.Вставить("КоличествоИтого", КоличествоИтого);
		СтруктураПараметров.Вставить("СуммаИтого", Формат(СуммаИтого, "ЧДЦ=2"));
		СтруктураПараметров.Вставить("СуммаИтогоПрописью",
		ОбщегоНазначенияБГУ.СформироватьСуммуПрописью(СуммаИтого, Неопределено));
		ОбластьМакетаИтого.Параметры.Заполнить(СтруктураПараметров);
		ТабДокумент.Вывести(ОбластьМакетаИтого);
		ОбластьМакетаПодвал.Параметры.Заполнить(СтруктураПараметров);
		ТабДокумент.Вывести(ОбластьМакетаПодвал);
		ТабДокумент.Вывести(ОбластьЗаключение);
		МассивОбластейПроверки = Новый Массив;
		МассивОбластейПроверки.Добавить(ОбластьКомиссия);
		МассивОбластейПроверки.Добавить(ОбластьМакетаДата);
		Если Не ТабДокумент.ПроверитьВывод(МассивОбластейПроверки) Тогда
			ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		ТабДокумент.Вывести(ОбластьКомиссия);
		ТабДокумент.Вывести(ОбластьМакетаДата);
		
		// В табличном документе зададим имя области, в которую был 
		// выведен объект. Нужно для возможности печати покомплектно.
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
		НомерСтрокиНачало, ОбъектыПечати, ВыборкаДокументы.Ссылка);
		
		//Для каждого ТекДвижение Из ТаблицаДвижений Цикл
		//	
		//	ДвиженияДокументов.Удалить(ТекДвижение);
		//	
		//КонецЦикла; 
		
	
	
	Возврат ТабДокумент;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. QuickMix 05.06.20 15:08 Сейчас в теме
Если запросом данные получаются, то можно в запросе и сгруппировать. Если как-то по другому, то метод ТаблицаЗначений.Свернуть();
Простыню из красно-синего текста не читал.
3. Adrenal1n 4 05.06.20 15:45 Сейчас в теме
(2)
Если запросом данные получаются, то можно в запросе и сгруппировать

А как предлагаете сгруппировать номенклатуру с конкатенацией строк мне интересно? Это же не СКД.
4. QuickMix 05.06.20 15:51 Сейчас в теме
(3)
если номенклатура одинаковая то складывать ее в одну строку

Причем тут конкатенация?
5. QuickMix 05.06.20 15:53 Сейчас в теме
(4)
Товар1 2 шт.
Товар2 3 шт.
Товар1 5 шт.

должно в печатной форме превратиться в:

Товар1 7 шт.
Товар2 3 шт.

Или речь о чем-то другом?
7. CD_SVEN 05.06.20 17:37 Сейчас в теме
(5)да все правильно именно так и должно складываться
8. CD_SVEN 05.06.20 17:39 Сейчас в теме
(5) все данные запросом получаются
9. user856012 13 05.06.20 18:01 Сейчас в теме
(8)
все данные запросом получаются
Ну, а выгрузить результаты запроса в таблицу значений, свернуть ее и напечатать - не?
10. CD_SVEN 05.06.20 18:34 Сейчас в теме
(9)подскажите как пожалуйста
11. CD_SVEN 08.06.20 08:10 Сейчас в теме
(4) группирую в запросе, на выходе все равно получается несколько строк
6. platonov.e 159 05.06.20 16:38 Сейчас в теме
(3) Ну типа у вас в ячейке тип строка? Обойдите циклом и сложите строку если строка и числа если число
13. CD_SVEN 08.06.20 12:10 Сейчас в теме
(3) это запрос, на выходе если выгрузить таблицу то получается допустим 8 строк, я делаю группировку в запросе и все равно выходит 8 строк
12. CD_SVEN 08.06.20 09:34 Сейчас в теме
может кто по коду посмотреть и подсказать, как реализовать данное сложение
14. Adrenal1n 4 08.06.20 13:35 Сейчас в теме
сложно что-то смотреть по коду без конкретных данных и без отладки.

Если речь про вот это
            СтруктураОтбора.Номенклатура = ВыборкаМатериалы.НоменклатураСсылка;
            СтруктураОтбора.СчетКт = ВыборкаМатериалы.СчетУчета;
            СтруктураОтбора.КПСКт = ВыборкаМатериалы.КПС;
            СтруктураОтбора.Количество = ВыборкаМатериалы.Количество;
            

            //ЗаполнитьЗначенияСвойств(СтруктураОтбора, ВыборкаМатериалы);
            //Ошибка начинается отсюдаа-----------------------------------------------------------------------------------------------
                        
            //ТекущиеДвижения = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДвижений);
            
            ТекущиеДвижения = ТаблицаДвижений.НайтиСтроки(СтруктураОтбора);//////////не работает отбор!!!!!!!!!!!!!!!
             Если ТекущиеДвижения.Количество() > 0 Тогда
                ТекущееДвижение = ТекущиеДвижения[0];
                
                Если ТекущееДвижение.Количество <> 0 Тогда
                    Цена = Окр(ТекущееДвижение.Сумма / ТекущееДвижение.Количество, 2);
                Иначе
                    Цена = 0;
                КонецЕсли;
                Если ВыборкаМатериалы.Количество = ТекущееДвижение.Количество Тогда
                    Сумма = ТекущееДвижение.Сумма;
                ИначеЕсли ВыборкаМатериалы.Количество < ТекущееДвижение.Количество Тогда
                    Сумма = ВыборкаМатериалы.Количество * Цена;
                Иначе
                    Сумма = 0;
                КонецЕсли;
                
                УчтенноеКоличество = Мин(ТекущееДвижение.Количество, ВыборкаМатериалы.Количество);
                ТекущееДвижение.Количество = ТекущееДвижение.Количество - УчтенноеКоличество;
                ТекущееДвижение.Сумма = ТекущееДвижение.Сумма - Сумма;
                
                Если ЗначениеЗаполнено(ТекущееДвижение.СчетДт) Тогда
                    СтруктураПараметров.СчетДебета = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
                    ТекущееДвижение.КПСДт, ТекущееДвижение.КФО, ТекущееДвижение.СчетДт, ТекущееДвижение.КЭКДт,,)
                КонецЕсли;
                СтруктураПараметров.СчетКредита = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
                ТекущееДвижение.КПСКт, ТекущееДвижение.КФО, ТекущееДвижение.СчетКт, ТекущееДвижение.КЭККт,,);
            КонецЕсли;
Показать

если тут, то тут вообще что-то странное написано. Даже если отбор сработал, мы получили строку какой-то ТЗ, которая потом не используется нигде, поправили эту строку, и продолжили выполнять код, как ни в чем не бывало нигде больше не используя эти данные, которые мы правили. Это достаточно бесполезно. Ну а если действительно не работает поиск то возможно потому, что по другому называются столбцы в таблице или там действительно нет таких строк. Тоже без реальных структур и ТЗ не разберешь. Если нужно просто сгруппировать строки, то действительно воспользуйтесь не выборкой, а таблицей значений, и функцией ТаблицаЗначений.Свернуть(), а потом обход делайте не по выборке, а по этой ТЗ.
Оставьте свое сообщение

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