Имя: Пароль:
1C
1С v8
Конфигурирование кода печатной формы вывода на печать с группировкой.
,
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
Спасибо Все сделал!