Корректировка вывода данных в печатной форме

1. Stanislav1993 22.02.19 14:42 Сейчас в теме
Здравствуйте, коллеги.
Столкнулся с одной загвоздкой.
В системе имеется документ "Реализация продукции".
В ТЧ документа есть колонки : валюта(два значения) и колонка сумма.
Заказчик хочет, чтобы при печати были две колонки суммы.
Если товар продан в валюте $ - сумма заполнялась в колонку СуммаДляДоллара, если не доллар, то в другую колонку.
Если в ТЧ только одна валюта, то вывод печати нормальный, но когда обе валюты, то у меня при печати, получается каша какая-то.

Процедура Печать(ТабДок, Ссылка) Экспорт
	//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
	Макет = Документы.РеализацияПродукции.ПолучитьМакет("Макет");
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	РеализацияПродукции.Дата КАК Дата,
	|	РеализацияПродукции.Клиент КАК Клиент,
	|	РеализацияПродукции.МестоРеализации КАК МестоРеализации,
	|	РеализацияПродукции.Номер КАК Номер,
	|	РеализацияПродукции.Ответственный КАК Ответственный,
	|	РеализацияПродукции.ПрайсЛист.(
	|		НомерСтроки КАК НомерСтроки,
	|		Продукция КАК Продукция,
	|		ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	|		Количество КАК Количество,
	|		Цена КАК Цена,
	|		Сумма КАК Сумма,
	|		Фирма КАК Фирма,
	|		Валюта КАК Валюта
	|	) КАК ПрайсЛист
	|ИЗ
	|	Документ.РеализацияПродукции КАК РеализацияПродукции
	|ГДЕ
	|	РеализацияПродукции.Ссылка В(&Ссылка)";
	
	Запрос.Параметры.Вставить("Ссылка", Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	
	//ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	Шапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьПрайсЛистШапка = Макет.ПолучитьОбласть("Строка");
	ОбластьПрайсЛист = Макет.ПолучитьОбласть("СтрокаДанных");
	Подвал = Макет.ПолучитьОбласть("Подвал");
	
	ТабДок.Очистить();
	
	ВставлятьРазделительСтраниц = Ложь;
	Пока Выборка.Следующий() Цикл
		Если ВставлятьРазделительСтраниц Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		//ТабДок.Вывести(ОбластьЗаголовок);
		
		Шапка.Параметры.Заполнить(Выборка);
		ТабДок.Вывести(Шапка, Выборка.Уровень());
		
		ТабДок.Вывести(ОбластьПрайсЛистШапка);
		ВыборкаПрайсЛист = Выборка.ПрайсЛист.Выбрать();
		ИтогСуммаСум = 0;
		ИтогСуммаДоллар = 0;
		ИтогКол = 0;
		
		Пока ВыборкаПрайсЛист.Следующий() Цикл
			Если ВыборкаПрайсЛист.Валюта = ОбщегоНазначения.ПолучитьВалюту(1)Тогда
				ИтогСуммаДоллар = ИтогСуммаДоллар + ВыборкаПрайсЛист.Сумма;
				ОбластьПрайсЛист.Параметры.СуммаДол = ВыборкаПрайсЛист.Сумма;
			КонецЕсли;
			Если ВыборкаПрайсЛист.Валюта = ОбщегоНазначения.ПолучитьВалюту(2)Тогда
				ИтогСуммаСум = ИтогСуммаСум + ВыборкаПрайсЛист.Сумма;
				ОбластьПрайсЛист.Параметры.СуммаСум = ВыборкаПрайсЛист.Сумма;	
			КонецЕсли;
			ИтогКол = ИтогКол + ВыборкаПрайсЛист.Количество;
			ОбластьПрайсЛист.Параметры.Заполнить(ВыборкаПрайсЛист);
			ТабДок.Вывести(ОбластьПрайсЛист, ВыборкаПрайсЛист.Уровень());
		КонецЦикла;
		
		//Подвал.Параметры.Заполнить(Выборка);
		Подвал.Параметры.ИтогДоллар = ИтогСуммаДоллар;
		Подвал.Параметры.ИтогСум = ИтогСуммаСум;
		Подвал.Параметры.ИтогКол = ИтогКол;

		Подвал.Параметры.Заполнить(Выборка);
		ТабДок.Вывести(Подвал);
		
		ВставлятьРазделительСтраниц = Истина;
	КонецЦикла;
	//}}
КонецПроцедуры

Показать
Прикрепленные файлы:
Таблица.xls
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Release 22.02.19 15:01 Сейчас в теме
(1) Эту строку
ОбластьПрайсЛист.Параметры.Заполнить(ВыборкаПрайсЛист);
поставить после
Пока ВыборкаПрайсЛист.Следующий() Цикл
+
4. Release 22.02.19 15:10 Сейчас в теме
Можно еще этот блок переписать:
            Если ВыборкаПрайсЛист.Валюта = ОбщегоНазначения.ПолучитьВалюту(1)Тогда
                ИтогСуммаДоллар = ИтогСуммаДоллар + ВыборкаПрайсЛист.Сумма;
                ОбластьПрайсЛист.Параметры.СуммаДол = ВыборкаПрайсЛист.Сумма;
            КонецЕсли;
            Если ВыборкаПрайсЛист.Валюта = ОбщегоНазначения.ПолучитьВалюту(2)Тогда
                ИтогСуммаСум = ИтогСуммаСум + ВыборкаПрайсЛист.Сумма;
                ОбластьПрайсЛист.Параметры.СуммаСум = ВыборкаПрайсЛист.Сумма;    
            КонецЕсли;
на
            Если ВыборкаПрайсЛист.Валюта = ОбщегоНазначения.ПолучитьВалюту(1)Тогда
                ИтогСуммаДоллар = ИтогСуммаДоллар + ВыборкаПрайсЛист.Сумма;
                ОбластьПрайсЛист.Параметры.СуммаДол = ВыборкаПрайсЛист.Сумма;
                ОбластьПрайсЛист.Параметры.СуммаСум = 0;    
            Иначе
                ИтогСуммаСум = ИтогСуммаСум + ВыборкаПрайсЛист.Сумма;
                ОбластьПрайсЛист.Параметры.СуммаДол = 0;
                ОбластьПрайсЛист.Параметры.СуммаСум = ВыборкаПрайсЛист.Сумма;    
            КонецЕсли;
Показать

Незачем делать вторую проверку, если валюты всего две. И не забывайте очищать параметры для следующей строки.
Stanislav1993; +1
7. Stanislav1993 22.02.19 15:26 Сейчас в теме
(4)Спасибо, но уже исправил)) Вместо нуля просто поставил пробел)
Всем спасибо за варианты)
+
2. YuriIn 22.02.19 14:56 Сейчас в теме
Первое что можно сделать, это выгруить колонку валюты, и сгруппировать её, если количество строк больше 2, тогда есть несколько разных валют.

ТЗ = ТЗосновная.Скопировать("Валюта");
ТЗ.Свернуть("Валюта");

Если ТЗ.Количество > 0 Тогда
//Есть две валты в документе
КонецЕсли;
+
5. AndKovalchuk 192 22.02.19 15:22 Сейчас в теме
Я бы еще и на макет ваш посмотрел. Возможно там неприятности.
Stanislav1993; +1
6. Release 22.02.19 15:24 Сейчас в теме
(5) Неприятности я указал в конце (4)
+
8. Stanislav1993 22.02.19 15:26 Сейчас в теме
(5)=) все хорошо там
+
Внимание! Тема сдана в архив

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