|
Конфигурирование кода печатной формы вывода на печать с группировкой. | ☑ | ||
---|---|---|---|---|
0
amvandre
09.04.15
✎
10:21
|
Обращаюсь к профессионлам. Сам в 1С недавно. Просьба помочь с кодом печатной формы.Необходимо вывести на печать Оборот диплома 2013, чтоб было примерно так: Сначала блок Профессиональные модули (Базовые дисциплины и т.д.) затем все дисциплины которые включены в этот блок по студенту, напротив базовых дисцплин сумма часов по этим предметам. В общем в таком виде. Код могу выложить. Кто может помочь буду благодарен.
|
|||
1
Wobland
09.04.15
✎
10:24
|
этоги в запросе
|
|||
2
amvandre
09.04.15
✎
10:41
|
вот код:
ИначеЕсли ИмяМакета = "ОборотКПриложению2013" Тогда ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Диплом_Оборот2013"; Макет = УправлениеПечатью.ПолучитьМакет("Документ.Диплом.ПФ_MXL_Оборот2013"); ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт; ОбластьМакета = Макет.ПолучитьОбласть("ОбластьПечати"); ТаблицаСтрок=Новый ТаблицаЗначений(); КолонкиДерева=ТаблицаСтрок.Колонки; КолонкиДерева.Добавить("НомерСтроки",,,); КолонкиДерева.Добавить("Дисциплина",,,); КолонкиДерева.Добавить("РазложенныеСтроки",,,); КолонкиДерева.Добавить("ОбщееКоличествоЧасов",,,); КолонкиДерева.Добавить("АкадемическоеКоличествоЧасов",,,); КолонкиДерева.Добавить("Оценка",,,); Индекс=1; //Итоговые результаты //НоваяСтрока=ТаблицаСтрок.Добавить(); //НоваяСтрока.НомерСтроки=Индекс; //НоваяСтрока.Дисциплина=Стр.Дисциплина.ПолноеНаименование; //ОбщееЧислоНедель=ТекущийДокумент.ПроизводственныеПрактики.Итог("КоличествоНедель"); //НоваяСтрока.АкадемическоеКоличествоЧасов=""+ОбщееЧислоНедель+ПадежНедель(ОбщееЧислоНедель); //НоваяСтрока.Оценка="х"; // //ТабличныйДокумент.НачатьАвтоГруппировкуСтрок(); //НоваяСтрока=ТаблицаСтрок.Добавить(); //НоваяСтрока.НомерСтроки=Индекс; //НоваяСтрока.АкадемическоеКоличествоЧасов=""; //НоваяСтрока.Оценка=""; //ТаблицаСтрок.Свернуть("Дисциплина"); Для каждого Стр Из ТекущийДокумент.ИтоговыеРезультаты Цикл НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.Дисциплина=Стр.СтрокаРУП.Родитель.Наименование; ОбщееКоличествоЧасов=ТаблицаСтрок.Итог("АкадемическоеКоличествоЧасов"); //АкадемическоеКоличествоЧасов=ТаблицаСтрок.Итог("ОбщееКоличествоЧасов"); НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.АкадемическоеКоличествоЧасов=ОбщееКоличествоЧасов; НоваяСтрока.Дисциплина="в том числе:"; Для каждого Стр Из ТекущийДокумент.ИтоговыеРезультаты Цикл Нужна2Строка=Ложь; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; Если Стр.Оценка=0 И Стр.Зачет Тогда НоваяСтрока.Оценка="зачтено"; ИначеЕсли Стр.Оценка=5 Тогда НоваяСтрока.Оценка="отлично"; ИначеЕсли Стр.Оценка=4 Тогда НоваяСтрока.Оценка="хорошо"; ИначеЕсли Стр.Оценка=3 Тогда Если ТекущийДокумент.ПереноситьУдовлетворительно Тогда НоваяСтрока.Оценка="удовлетво-"; Нужна2Строка=Истина; Иначе НоваяСтрока.Оценка="удовлетворительно"; КонецЕсли; Иначе НоваяСтрока.Оценка="???????"; КонецЕсли; НоваяСтрока.АкадемическоеКоличествоЧасов=Стр.КоличествоЧасов; НоваяСтрока.общееКоличествоЧасов=Стр.АудиторныхЧасов; МассивСтрок=РазделитьСтрокиПоРазмеру(Стр.Дисциплина.ПолноеНаименование,68,10,); ПервыйВход=Истина; ВторойВход=Ложь; Для каждого Стр2 Из МассивСтрок Цикл Если СокрЛП(Стр2)="" Тогда Если ПервыйВход Тогда ПервыйВход=Ложь; Сообщение=Новый СообщениеПользователю(); Сообщение.Текст="В документе "+ТекущийДокумент+" в строке "+Стр.НомерСтроки+" закладки <Итоговые результаты> не указана дисциплина или у дисциплины не заполнено полное наименование!"; //Сообщение.ПутьКДанным="Элементы."+Стр.Дисциплина; Сообщение.УстановитьДанные(ТекущийДокумент); Сообщение.Сообщить(); КонецЕсли; Продолжить; Иначе Если ПервыйВход Тогда ВторойВход=Истина; НоваяСтрока.Дисциплина=Стр2; ПервыйВход=Ложь; Иначе НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; Если ВторойВход И Нужна2СТрока Тогда НоваяСтрока.Оценка="рительно"; ВторойВход=Ложь; Нужна2СТрока=Ложь; КонецЕсли; КонецЕсли; Индекс=Индекс+1; КонецЕсли; КонецЦикла; КонецЦикла; Если Нужна2СТрока Тогда НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; НоваяСтрока.Оценка="рительно"; Индекс=Индекс+1; КонецЕсли; //Теперь выведем МДК Отбор=Новый Структура; Отбор.Вставить("ПрофМодуль",Стр.Дисциплина); НайденныеСтроки=ТекущийДокумент.МДК.НайтиСтроки(Отбор); Для Индекс2=0 По НайденныеСтроки.Вграница() ЦИкл Если Индекс2=0 И ТекущийДокумент.ВыводВтчПрофМодуля Тогда НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина="в том числе:"; Индекс=Индекс+1; КонецЕсли; ТекСтр=НайденныеСтроки[Индекс2]; Нужна2Строка=Ложь; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; Если ТекСтр.Оценка=0 И ТекСтр.Зачет Тогда НоваяСтрока.Оценка="зачтено"; ИначеЕсли ТекСтр.Оценка=5 Тогда НоваяСтрока.Оценка="отлично"; ИначеЕсли ТекСтр.Оценка=4 Тогда НоваяСтрока.Оценка="хорошо"; ИначеЕсли ТекСтр.Оценка=3 Тогда Если ТекущийДокумент.ПереноситьУдовлетворительно Тогда НоваяСтрока.Оценка="удовлетво-"; Нужна2Строка=Истина; Иначе НоваяСтрока.Оценка="удовлетворительно"; КонецЕсли; Иначе НоваяСтрока.Оценка="???????"; КонецЕсли; // НоваяСтрока.АкадемическоеКоличествоЧасов=ТекСтр.КоличествоЧасов; НоваяСтрока.общееКоличествоЧасов=ТекСтр.АудиторныхЧасов; МассивСтрок=РазделитьСтрокиПоРазмеру(ТекСтр.Дисциплина.ПолноеНаименование,68,10,); ПервыйВход=Истина; ВторойВход=Ложь; Для каждого Стр3 Из МассивСтрок Цикл Если СокрЛП(Стр3)="" Тогда Если ПервыйВход Тогда ПервыйВход=Ложь; Сообщение=Новый СообщениеПользователю(); Сообщение.Текст="В документе "+ТекущийДокумент+" в строке "+ТекСтр.НомерСтроки+" закладки <Итоговые результаты> в таблице <МДК> не указана дисциплина или у дисциплины не заполнено полное наименование!"; //Сообщение.ПутьКДанным="Элементы."+Стр.Дисциплина; Сообщение.УстановитьДанные(ТекущийДокумент); Сообщение.Сообщить(); КонецЕсли; Продолжить; Иначе Если ПервыйВход Тогда ВторойВход=Истина; НоваяСтрока.Дисциплина=Стр3; ПервыйВход=Ложь; Иначе НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр3; Если ВторойВход И Нужна2СТрока Тогда НоваяСтрока.Оценка="рительно"; ВторойВход=Ложь; Нужна2СТрока=Ложь; КонецЕсли; КонецЕсли; Индекс=Индекс+1; КонецЕсли; КонецЦикла; Если Нужна2СТрока Тогда НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр3; НоваяСтрока.Оценка="рительно"; Индекс=Индекс+1; КонецЕсли; КонецЦикла; КонецЦикла; //ОбщееКоличествоЧасов=ТаблицаСтрок.Итог("АкадемическоеКоличествоЧасов"); //АкадемическоеКоличествоЧасов=ТаблицаСтрок.Итог("ОбщееКоличествоЧасов"); //НоваяСтрока=ТаблицаСтрок.Добавить(); //НоваяСтрока.НомерСтроки=Индекс; //НоваяСтрока.Дисциплина="ВСЕГО часов теоретического обучения:"; //НоваяСтрока.АкадемическоеКоличествоЧасов=ОбщееКоличествоЧасов; //НоваяСтрока.Оценка="х"; //Индекс=Индекс+1; //НоваяСтрока=ТаблицаСтрок.Добавить(); //НоваяСтрока.НомерСтроки=Индекс; //НоваяСтрока.Дисциплина="в том числе аудиторных часов:"; //НоваяСтрока.АкадемическоеКоличествоЧасов=АкадемическоеКоличествоЧасов; //НоваяСтрока.Оценка="х"; //Индекс=Индекс+1; //Выводим практики НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина="Практика"; ОбщееЧислоНедель=ТекущийДокумент.ПроизводственныеПрактики.Итог("КоличествоНедель"); НоваяСтрока.АкадемическоеКоличествоЧасов=""+ОбщееЧислоНедель+ПадежНедель(ОбщееЧислоНедель); НоваяСтрока.Оценка="х"; Индекс=Индекс+1; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.АкадемическоеКоличествоЧасов=""; НоваяСтрока.Дисциплина="в том числе:"; НоваяСтрока.Оценка=""; Для каждого Стр Из ТекущийДокумент.ПроизводственныеПрактики Цикл Нужна2Строка=Ложь; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.АкадемическоеКоличествоЧасов=""+Стр.КоличествоНедель+ПадежНедель(Стр.КоличествоНедель); Если Стр.Оценка=0 И Стр.Зачет Тогда НоваяСтрока.Оценка="зачтено"; ИначеЕсли Стр.Оценка=5 Тогда НоваяСтрока.Оценка="отлично"; ИначеЕсли Стр.Оценка=4 Тогда НоваяСтрока.Оценка="хорошо"; ИначеЕсли Стр.Оценка=3 Тогда Если ТекущийДокумент.ПереноситьУдовлетворительно Тогда НоваяСтрока.Оценка="удовлетво-"; Нужна2Строка=Истина; Иначе НоваяСтрока.Оценка="удовлетворительно"; КонецЕсли; Иначе НоваяСтрока.Оценка="???????"; КонецЕсли; МассивСтрок=РазделитьСтрокиПоРазмеру(Стр.Дисциплина.ПолноеНаименование,68,10,); ПервыйВход=Истина; ВторойВход=Ложь; Для каждого Стр2 Из МассивСтрок Цикл Если СокрЛП(Стр2)="" Тогда Если ПервыйВход Тогда ПервыйВход=Ложь; Сообщение=Новый СообщениеПользователю(); Сообщение.Текст="В документе "+ТекущийДокумент+" в строке "+Стр.НомерСтроки+" закладки <Производственная практика> не указан вид практики или у вида практики не заполнено полное наименование!"; //Сообщение.ПутьКДанным="Элементы."+Стр.Дисциплина; Сообщение.УстановитьДанные(ТекущийДокумент); Сообщение.Сообщить(); КонецЕсли; Продолжить; Иначе Если ПервыйВход Тогда ВторойВход=Истина; НоваяСтрока.Дисциплина=Стр2; ПервыйВход=Ложь; Иначе НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; Если ВторойВход И Нужна2СТрока Тогда НоваяСтрока.Оценка="рительно"; ВторойВход=Ложь; Нужна2СТрока=Ложь; КонецЕсли; КонецЕсли; Индекс=Индекс+1; КонецЕсли; КонецЦикла; Если Нужна2СТрока Тогда НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; НоваяСтрока.Оценка="рительно"; Индекс=Индекс+1; КонецЕсли; КонецЦикла; //Государственная аттестация НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина="Государственная итоговая аттестация"; ВсегоНедельИГА=ТекущийДокумент.ИГА.Итог("КоличествоНедель"); НоваяСтрока.АкадемическоеКоличествоЧасов=""+ВсегоНедельИГА+ПадежНедель(ВсегоНедельИГА); НоваяСтрока.Оценка="х"; Индекс=Индекс+1; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.АкадемическоеКоличествоЧасов=""; НоваяСтрока.Дисциплина="в том числе:"; НоваяСтрока.Оценка=""; Для каждого Стр Из ТекущийДокумент.ИГА Цикл Нужна2Строка=Ложь; НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.АкадемическоеКоличествоЧасов="х"; Если Стр.Оценка=0 И Стр.Зачет Тогда НоваяСтрока.Оценка="зачтено"; ИначеЕсли Стр.Оценка=5 Тогда НоваяСтрока.Оценка="отлично"; ИначеЕсли Стр.Оценка=4 Тогда НоваяСтрока.Оценка="хорошо"; ИначеЕсли Стр.Оценка=3 Тогда Если ТекущийДокумент.ПереноситьУдовлетворительно Тогда НоваяСтрока.Оценка="удовлетво-"; Нужна2Строка=Истина; Иначе НоваяСтрока.Оценка="удовлетворительно"; КонецЕсли; Иначе НоваяСтрока.Оценка="???????"; КонецЕсли; Если Стр.ВидКонтроля=Справочники.ВидыКонтроля.ЗащитаВКР Тогда МассивСтрок=РазделитьСтрокиПоРазмеру(Стр.Дисциплина.ПолноеНаименование+ " на тему """+ТекущийДокумент.ТемаВКР+"""",70,10,); Иначе МассивСтрок=РазделитьСтрокиПоРазмеру(Стр.Дисциплина.ПолноеНаименование,68,10,); КонецЕсли; ПервыйВход=Истина; ВторойВход=Ложь; Для каждого Стр2 Из МассивСтрок Цикл Если СокрЛП(Стр2)="" Тогда Если ПервыйВход Тогда ПервыйВход=Ложь; Сообщение=Новый СообщениеПользователю(); Сообщение.Текст="В документе "+ТекущийДокумент+" в строке "+Стр.НомерСтроки+" закладки <Итоговая государственная аттестация> не указана дисциплина или у дисциплины не заполнено полное наименование!"; //Сообщение.ПутьКДанным="Элементы."+Стр.Дисциплина; Сообщение.УстановитьДанные(ТекущийДокумент); Сообщение.Сообщить(); КонецЕсли; Продолжить; Иначе Если ПервыйВход Тогда ВторойВход=Истина; НоваяСтрока.Дисциплина=Стр2; ПервыйВход=Ложь; Иначе НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; Если ВторойВход И Нужна2СТрока Тогда НоваяСтрока.Оценка="рительно"; ВторойВход=Ложь; Нужна2СТрока=Ложь; КонецЕсли; КонецЕсли; Индекс=Индекс+1; КонецЕсли; КонецЦикла; Если Нужна2СТрока Тогда НоваяСтрока=ТаблицаСтрок.Добавить(); НоваяСтрока.НомерСтроки=Индекс; НоваяСтрока.Дисциплина=Стр2; НоваяСтрока.Оценка="рительно"; Индекс=Индекс+1; КонецЕсли; КонецЦикла; Индекс=1; Для каждого Стр Из ТаблицаСтрок Цикл //ТекШрифт=ОбластьМакета.ТекущаяОбласть.Шрифт; //НШрифт=Новый Шрифт(ТекШрифт,,10); //ОбластьМакета.ТекущаяОбласть.Шрифт=НШрифт; ОбластьМакета.Параметры["СтрокаНаименование"+Индекс]=Стр.Дисциплина; ОбластьМакета.Параметры["СтрокаОценки"+Индекс]=Стр.Оценка; ОбластьМакета.Параметры["СтрокаЧасов"+Индекс]=Стр.АкадемическоеКоличествоЧасов; Ес |
|||
3
amvandre
09.04.15
✎
10:43
|
тут я дописал цикл свой все выводит, только не могу сделать группировку и сделать сумму часов по блоку
|
|||
4
Wobland
09.04.15
✎
11:06
|
ёмаё...
ВыборкаПоСкладам=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоСкладам.Следующий() Цикл Выборка=ВыборкаПоСкладам.Выбрать(); Пока Выборка.Следующий() Цикл КонецЦикла; КонецЦикла; |
|||
5
amvandre
09.04.15
✎
11:10
|
ща попробую. спасибо.
|
|||
6
amvandre
09.04.15
✎
14:59
|
не получается, у меня итоги не в запросе
|
|||
7
amvandre
09.04.15
✎
15:02
|
т.е через цикл выводится 1 уровень, потом 2 уровень, а вот как сгруппировать 1 уровень? к примеру: вот как сейчас
Базовые дисциплины в том числе: русский Базовые дисциплины в том числе: биология Надо чтоб было в печатной форме: Базовые дисциплины в том числе русский биология |
|||
8
amvandre
13.04.15
✎
10:06
|
Спасибо Все сделал!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |