Список работ

1С:Предприятие 8. Кафедра

Курсовой проект по дисциплине Основы программирования

Баскаков Д. М., ПТ-5-69

Содержание

Постановка задачи

Создается 1С-приложение, позволяющее учитывать оценки студентов по НИР, на зачетах и экзаменах.
Программа реализуется как обычное приложение.
Студенческие оценки и распределение студентов по НИР отображаются в отчетах

Объекты конфигурации

Конфигурация содержит следующие объекты.

Объекты конфигурации показаны на рис. 1.

Конфигурация Кафедра

Рис. 1. Объекты конфигурации Кафедра

Справочники

Форма элемента справочника Группы показана на рис. 2.

Форма элемента

Рис. 2. Форма элемента справочника Группы

Табличная часть справочника имеет имя Студенты и реквизит с именем Студент типа СправочникСсылка.ФизЛица.
Название группы хранит реквизит Наименование.
Формы элемента справочника Темы НИР показана на рис. 3.

Форма элемента

Рис. 3. Форма элемента справочника Темы НИР

Справочник Темы НИР подчинен справочнику Направления НИР. Формы списка обоих справочников показаны на рис. 4.

Формы списков

Рис. 4. Элементу Мультимедиа подчинены три записи справочника Темы НИР

Реквизит Наименование используется в соответствующих справочниках для фиксации Направления НИР и Темы НИР. Длина реквизита равна 70.
Формы списков справочников Направления НИР и Темы НИР используются и как формы выбора.
Форма элемента справочника НИР показана на рис. 5.

Форма элемента

Рис. 5. Форма элемента справочника НИР

В справочнике нет реквизита Наименование (указана нулевая длина). При этом в свойствах справочника для свойства Ввод по строке указан Код (рис. 6).

Свойства НИР

Рис. 6. Справочник НИР: изменены свойства Основное представление и Ввод по строке

Реквизит Преподаватель имеет тип СправочникСсылка.ФизЛица.
Реквизит Направление НИР - СправочникСсылка.НаправленияНИР.
Табличная часть имеет имя Студенты.
Тип реквизита Студент - СправочникСсылка.ФизЛица.
Тип реквизита ТемаНИР - СправочникСсылка.ТемыНИР.
В форме элемента для поля ввода Тема НИР задано свойство Связь по владельцу (рис. 7) со значением НаправлениеНИР (реквизит рассматриваемого справочника).

Тема НИР

Рис. 7. Форма элемента справочника НИР: задано свойство Связь по владельцу

Выбор темы НИР не может быть выполнен, если не заполнено значение реквизита НаправлениеНИР. Это обеспечивает обработчик события Начало выбора поля ввода ТемаНИР:

Процедура СтудентыТемаНИРНачалоВыбора(Элемент, СтандартнаяОбработка)
    Если направлениеНИР.Пустая() тогда
        предупреждение("Нужно указать направление НИР");
        // Не будет открыта форма выбора справочника ТемыНИР
        СтандартнаяОбработка = ложь;
        возврат;
    конецЕсли;
КонецПроцедуры

Регистр сведений Оценки

В регистре Оценки фиксируются зачетные, экзаменационные и НИР-оценки студентов.
Измерения регистра:

Регистр имеет ресурс Оценка типа ПеречислениеСсылка.Оценки. Регистраторами являются документы:

Документы

В конфигурации два документа: Ведомость (зачетная, экзаменационная) и Ведомость НИР.
Они отличаются тем, что в табличной части документа Ведомость НИР, помимо студента, указывается преподаватель и тема НИР.
В документе: Ведомость дисциплина, указывается в шапке документа. Кроме того, там же нужно выбрать вид ведомости (Зачет или Экзамен).
В обоих документах в реквизит Дата заносится значение даты ведомости. Реквизит Номер назначается приложением автоматически и не меняется при формировании документов.

Документ Ведомость

Документ Ведомость имеет следующие реквизиты:

В табличной части документа Оценки два реквизита:

Форма документа Ведомость показана на рис. 8.

Форма документа

Рис. 8. Форма документа Ведомость

Таблицы документа заполняется при смене группы и после нажатия на кнопку Заполнить. Это обеспечивает следующий код:

Процедура заполнитьСтудентовВОценки()
    если группа.Пустая() тогда
        предупреждение("Нужно выбрать группу");
        возврат;
    конецЕсли;
    если оценки.Количество() > 0 тогда
        ответ = вопрос("Таблица будет очищена. Продолжить?", режимДиалогаВопрос.ДаНет);
        если ответ = КодВозвратаДиалога.Нет тогда
            возврат;
        конецЕсли;
        оценки.Очистить();
    конецЕсли;
    // Заполним табличную часть Оценки по списку студентов группы
    для каждого стрГруппаСтудент из группа.Студенты цикл
        стрОценкаСтудент = оценки.Добавить();
        стрОценкаСтудент.Студент = стрГруппаСтудент.Студент;
    конецЦикла;
КонецПроцедуры

Процедура КоманднаяПанель1Заполнить(Кнопка)
    заполнитьСтудентовВОценки();
КонецПроцедуры

Процедура ГруппаПриИзменении(Элемент)
    заполнитьСтудентовВОценки();
КонецПроцедуры

Документ Ведомость при проведении пополняет регистр сведений Оценки. Это оформляется на вкладке Движения формы редактирования Документа. Там же запрещается и оперативное проведение документа.
Обработка проведения документа генерируется автоматически:
форма редактирования документа - вкладка Движения - кнопка Конструктор движений - выбрать табличную часть Оценки - кнопка Заполнить выражения - ОК.
После добавления проверок получаем:

Процедура ОбработкаПроведения(Отказ, Режим)
    если видСессии.Пустая() тогда
        предупреждение("Задайте вид сессии");
        отказ = истина;
    конецЕсли;
    если видВедомости.Пустая() тогда
        предупреждение("Задайте вид ведомости");
        отказ = истина;
    конецЕсли;
    если группа.Пустая() тогда
        предупреждение("Нужно выбрать группу");
        отказ = истина;
    конецЕсли;    если дисциплина.Пустая() тогда
        предупреждение("Не выбрана дисциплина");
        отказ = истина;
    конецЕсли;
    если Преподаватель.Пустая() тогда
        предупреждение("Не указан преподаватель");
        отказ = истина;
    конецЕсли;
    если отказ тогда возврат конецЕсли;
    // Регистр Оценки
    Движения.Оценки.Записывать = Истина;
    Движения.Оценки.Очистить();
    Для Каждого ТекСтрокаОценки Из Оценки Цикл
        студент = ТекСтрокаОценки.Студент;
        оценка = ТекСтрокаОценки.Оценка;
        номерСтроки = ТекСтрокаОценки.НомерСтроки;
        если студент.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " не выбран студент");
            отказ = истина;
            возврат;
        конецЕсли;
        если оценка.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " нет оценки");
            отказ = истина;
            возврат;
        конецЕсли;
        Движение = Движения.Оценки.Добавить();
        Движение.ВидСессии = ВидСессии;
        Движение.ВидВедомости = ВидВедомости;
        Движение.Дисциплина = Дисциплина;
        Движение.Преподаватель = Преподаватель;
        Движение.Группа = Группа;
        Движение.Студент = студент;
        Движение.Оценка = оценка;
    КонецЦикла;
КонецПроцедуры

Часть добавленных в регистр сведений Оценки записей (в результате проведения документа Ведомость) показана на рис. 9.

Регистр сведений Оценки

Рис. 9. Документ Ведомость пополнил регистр сведений Оценки

Документ Ведомость НИР

Документ Ведомость имеет следующие реквизиты:

В табличной части документа Оценки три реквизита:

Форма документа Ведомость НИР показана на рис. 10.

Форма документа

Рис. 10. Форма документа Ведомость НИР

Таблицы документа заполняется при смене группы и после нажатия на кнопку Заполнить. Это обеспечивает следующий код:

Процедура заполнитьСтудентовТемыНИРВОценки()
    если группа.Пустая() тогда
        предупреждение("Нужно выбрать группу");
        возврат;
    конецЕсли;
    если оценки.Количество() > 0 тогда
        ответ = вопрос("Таблица будет очищена. Продолжить?", режимДиалогаВопрос.ДаНет);
        если ответ = КодВозвратаДиалога.Нет тогда
            возврат;
        конецЕсли;
        оценки.Очистить();
    конецЕсли;
    // Заполним в табличную часть Оценки по спискам студентов группы и студентов НИР
    запрос = новый запрос;
    запрос.текст = "выбрать ссылка, темаНИР
    | из справочник.НИР.Студенты где студент = &студент";
    для каждого стрГруппаСтудент из группа.Студенты цикл
        студент = стрГруппаСтудент.Студент;
        стрОценкаСтудент = оценки.Добавить();
        стрОценкаСтудент.Студент = студент;
        запрос.УстановитьПараметр("студент", студент);
        результат = запрос.Выполнить();
        если результат.Пустой() тогда продолжить конецЕсли;
        выборка = результат.Выбрать();
        выборка.Следующий();
        стрОценкаСтудент.Преподаватель = выборка.ссылка.преподаватель;
        стрОценкаСтудент.ТемаНИР = выборка.темаНИР;
    конецЦикла;
КонецПроцедуры

Процедура КоманднаяПанель1Заполнить(Кнопка)
    заполнитьСтудентовТемыНИРВОценки ();
КонецПроцедуры

Процедура ГруппаПриИзменении(Элемент)
    заполнитьСтудентовТемыНИРВОценки ();
КонецПроцедуры
Документ Ведомость НИР при проведении пополняет регистр сведений Оценки:
Процедура ОбработкаПроведения(Отказ, Режим)
    если видСессии.Пустая() тогда
        предупреждение("Задайте вид сессии");
        отказ = истина;
    конецЕсли;
    если группа.Пустая() тогда
        предупреждение("Нужно выбрать группу");
        отказ = истина;
    конецЕсли;    Движения.Оценки.Записывать = Истина;
    Движения.Оценки.Очистить();
    Для Каждого ТекСтрокаОценки Из Оценки Цикл
        студент = ТекСтрокаОценки.Студент;
        оценка = ТекСтрокаОценки.Оценка;
        номерСтроки = ТекСтрокаОценки.НомерСтроки;
        темаНИР = ТекСтрокаОценки.ТемаНИР;
        преподаватель = ТекСтрокаОценки.Преподаватель;
        если студент.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " не выбран студент");
            отказ = истина;
            возврат;
        конецЕсли;
        если оценка.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " нет оценки");
            отказ = истина;
            возврат;
        конецЕсли;
        если темаНИР.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " нет темы НИР");
            отказ = истина;
            возврат;
        конецЕсли;
        если преподаватель.Пустая() тогда
            предупреждение("В строке " + номерСтроки + " нет преподавателя");
            отказ = истина;
        конецЕсли;
        Движение = Движения.Оценки.Добавить();
        Движение.ВидСессии = ВидСессии;
        Движение.ВидВедомости = перечисления.ВидыВедомостей.НИР;
        Движение.Дисциплина = темаНИР;
        Движение.Преподаватель = преподаватель;
        Движение.Группа = Группа;
        Движение.Студент = ТекСтрокаОценки.Студент;
        Движение.Оценка = ТекСтрокаОценки.Оценка;
    КонецЦикла;
КонецПроцедуры

Часть добавленных в регистр сведений Оценки записей (в результате проведения документа Ведомость НИР) показана на рис. 11.

Регистр сведений Оценки

Рис. 11. Документ Ведомость НИР пополнил регистр сведений Оценки

Отчеты

Можно сформировать следующие отчеты:

Первые два отчета формируются по регистру сведений Оценки. Последний по справочнику НИР.

Отчет Ведомость

Отчет позволяет формировать экзаменационные и зачетные ведомости.
Отчет имеет следующие реквизиты:

Реквизиты (кроме ГодВедомости) используются в качестве данных для одноименных элементов формы отчета.
В свойствах формы указано, что значения реквизитов (кроме ГодВедомости) сохраняются при закрытии формы.
Форма отчета показана на рис 12.

Отчет Ведомость

Рис. 12. Форма отчета Ведомость

Элемент формы Учебный год имеет два обработчика: выборГодаОбработкаВыбора и выборГодаОчистка (см. код ниже).
Необходимо, задав учебный год, вид сессии, вид ведомости, группу и дисциплину, сформировать приведенную на рис. 13 ведомость.

Экзаменационная ведомость

Рис. 13. Часть экзаменационной ведомости

Год ведомости (экзамена или зачета) выбирается из списка значений, который формируется при открытии отчета.
Представление года ведомости - это учебный год. Так, год 2016 имеет представление 2015-2016.
Для приведенного примера:

Макет отчета показан на рис. 14.

Макет отчета Ведомость

Рис. 14. Макет отчета Ведомость

В заголовке присутствуют шаблоны, а строке стр - параметры.
Вывод отчета обеспечивает следующий код:

Процедура КнопкаСформироватьНажатие(Кнопка)
    если видСессии.Пустая() тогда
        предупреждение("Задайте вид сессии");
        возврат;
    конецЕсли;
    если видВедомости.Пустая() тогда
        предупреждение("Укажите вид ведомости");
        возврат;
    конецЕсли;
    если группа.Пустая() тогда
        предупреждение("Не задана группа");
        возврат;
    конецЕсли;
    если дисциплина.Пустая() тогда
        предупреждение("Веберите дисциплину");
        возврат;
    конецЕсли;
    годВедомостиВЗапросе = ?(видВедомости = перечисления.ВидыВедомостей.Экзамен, годВедомости, годВедомости - 1);
    запрос = новый запрос;
    запрос.текст = "выбрать выразить(регистратор.дата как дата) как дата, преподаватель, студент, оценка
    | из регистрСведений.Оценки
    | где видСессии = &видСессии
    | и выразить(год(регистратор.дата) как число(4)) = &годВедомостиВЗапросе
    | и видВедомости = &видВедомости
    | и группа = &группа
    | и дисциплина = &дисциплина
    | упорядочить по студент.наименование";
    запрос.УстановитьПараметр("годВедомостиВЗапросе", годВедомостиВЗапросе);
    запрос.УстановитьПараметр("видСессии", видСессии);
    запрос.УстановитьПараметр("видВедомости", видВедомости);
    запрос.УстановитьПараметр("группа", группа);
    запрос.УстановитьПараметр("дисциплина", дисциплина);
    результат = запрос.Выполнить();
    если результат.Пустой() тогда
        предупреждение("Пусто");
        возврат;
    конецЕсли;
    выборка = результат.Выбрать();
    // Получаем первую запись выборки
    выборка.Следующий();
    тД = новый табличныйДокумент;
    макет = получитьМакет("Макет");
    бл = макет.ПолучитьОбласть("зг");
    прм = бл.параметры;
    вдТип = ?(видВедомости = перечисления.ВидыВедомостей.Зачет, "Зачетная", "Экзаменационная");
    прм.вдТип = вдТип;
    прм.дсц = дисциплина;
    прм.дт = формат(выборка.дата, "ДЛФ = Д");
    прм.преп = выборка.преподаватель;
    прм.грп = группа;
    тД.Вывести(бл);
    бл = макет.ПолучитьОбласть("стр");
    прм = бл.параметры;
    н = 0;
    // Возвращаемся в начало выборки
    выборка.Сбросить();
    пока выборка.Следующий() цикл
        н = н + 1;
        прм.н = н;
        прм.студ = выборка.студент;
        прм.цнк = выборка.оценка;
        тД.Вывести(бл);
    конецЦикла;
    тД.толькоПросмотр = истина;
    тД.Показать(вдТип + " ведомость");
КонецПроцедуры

Процедура выборГодаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    годВедомости = ВыбранноеЗначение;
КонецПроцедуры

Процедура выборГодаОчистка(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    предупреждение("Поле нельзя очистить");
КонецПроцедуры

Процедура ПриОткрытии()
    // Формируем список учебных годов
    // Пример представления списка
    // "2015-2016" со значением 2016
    // "2014-2015" со значением 2015
    // и так далее
    гд = год(текущаяДата());
    годВедомости = гд;
    диапазонЛет = 9;
    списокУчебныхГодов = новый списокЗначений;
    для к = 1 по диапазонЛет цикл
        списокУчебныхГодов.Добавить(гд, "" + (гд - 1) + "-" + гд);
        гд = гд - 1;
    конецЦикла;
    ЭлементыФормы.выборГода.СписокВыбора = списокУчебныхГодов;
    ЭлементыФормы.выборГода.Значение = списокУчебныхГодов[0].Значение;
КонецПроцедуры

Заметим, что

упорядочить по студент

в запросе не работает, поэтому там указано

упорядочить по студент.наименование

В то же время, если выгрузить результат запроса в таблицу значений ТЗ, то

ТЗ.сортировать("студент");

даст желаемый результат.

Отчет Ведомость НИР

Отчет формирует ведомость НИР и имеет следующие реквизиты:

Форма отчета показана на рис 15.

Отчет Ведомость НИР

Рис. 15. Форма отчета Ведомость НИР

Элемент формы Учебный год имеет два обработчика: выборГодаОбработкаВыбора и выборГодаОчистка (см. код ниже).
Необходимо, задав учебный год, вид сессии, сформировать приведенную на рис. 16 ведомость.

Ведомость НИР

Рис. 16. Часть ведомости НИР

Год ведомости, так же как и в отчете Ведомость, выбирается из списка значений, который формируется при открытии отчета.
Для НИР ведомости год ведомости в запросе в случае зимней сессии - это нижняя граница учебного года, а в случае летней - верхняя.

Макет отчета показан на рис. 17.

Макет отчета Ведомость НИР

Рис. 17. Макет отчета Ведомость НИР

В заголовке присутствуют шаблоны, а строке стр - параметры.
Для ячейки с параметром Тема указан с тем же именем и параметр расшифровки. Это позволяет в выведенном отчете переходить в справочник ТемыНИР, дважды ударив мышью по ячейке с темой НИР.
Вывод отчета обеспечивает следующий код:

// Возвращает фамилию И. О.
функция фио(фиоПолностью)
    фиоПолн = сокрЛП(фиоПолностью);
    // Если имеем сокращенный вариант ФИО
    если найти(фиоПолн, ".") > 0 тогда возврат фиоПолн конецЕсли;
    п = найти(фиоПолн, " ");
    если п = 0 тогда возврат фиоПолн конецЕсли;
    фиоРез = лев(фиоПолн, п - 1);
    фиоПолн = сокрЛ(сред(фиоПолн, п + 1));
    фиоРез = фиоРез + " " + вРег(лев(фиоПолн, 1)) + ".";
    п = найти(фиоПолн, " ");
    если п = 0 тогда возврат фиоРез конецЕсли;
    фиоПолн = сокрЛ(сред(фиоПолн, п + 1));
    фиоРез = фиоРез + " " + вРег(лев(фиоПолн, 1)) + ".";
    возврат фиоРез;
конецФункции

Процедура КнопкаСформироватьНажатие(Кнопка)
    если видСессии.Пустая() тогда
        предупреждение("Задайте вид сессии");
        возврат;
    конецЕсли;
    если группа.Пустая() тогда
        предупреждение("Не задана группа");
        возврат;
    конецЕсли;
    годВедомостиВЗапросе = годВедомости - ?(видСессии = перечисления.ВидыСессий.Зима, 1, 0);
    запрос = новый запрос;
    запрос.текст = "выбрать выразить(регистратор.дата как дата) как дата,
    | студент, преподаватель, дисциплина как темаНИР, оценка
    | из регистрСведений.Оценки
    | где видСессии = &видСессии
    | и выразить(год(регистратор.дата) как число(4)) = &годВедомостиВЗапросе
    | и видВедомости = &видВедомости
    | и группа = &группа
    | упорядочить по студент.наименование";
    запрос.УстановитьПараметр("годВедомостиВЗапросе", годВедомостиВЗапросе);
    запрос.УстановитьПараметр("видСессии", видСессии);
    запрос.УстановитьПараметр("видВедомости", перечисления.ВидыВедомостей.НИР);
    запрос.УстановитьПараметр("группа", группа);
    результат = запрос.Выполнить();
    если результат.Пустой() тогда
        предупреждение("Пусто");
        возврат;
    конецЕсли;
    выборка = результат.Выбрать();
    // Получаем первую запись выборки
    выборка.Следующий();
    тД = новый табличныйДокумент;
    макет = получитьМакет("Макет");
    бл = макет.ПолучитьОбласть("зг");
    прм = бл.параметры;
    прм.дт = формат(выборка.дата, "ДЛФ = Д");
    прм.грп = группа;
    тД.Вывести(бл);
    бл = макет.ПолучитьОбласть("стр");
    прм = бл.параметры;
    н = 0;
    // Возвращаемся в начало выборки
    выборка.Сбросить();
    пока выборка.Следующий() цикл
        н = н + 1;
        прм.н = н;
        // Вместо, например, Коробов Михаил Семенович пишем Коробов М. С.
        прм.студ = фио(выборка.студент);
        прм.преп = фио(выборка.преподаватель);
        прм.тема = выборка.темаНИР;
        прм.цнк = выборка.оценка;
        тД.Вывести(бл);
    конецЦикла;
    тД.толькоПросмотр = истина;
    тД.Показать("Ведомость НИР");
КонецПроцедуры

Процедура выборГодаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    годВедомости = ВыбранноеЗначение;
КонецПроцедуры

Процедура выборГодаОчистка(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    предупреждение("Поле нельзя очистить");
КонецПроцедуры

Процедура ПриОткрытии()
    // Формируем список учебных годов
    // Пример представления списка
    // "2015-2016" со значением 2016
    // "2014-2015" со значением 2015
    // и так далее
    гд = год(текущаяДата());
    годВедомости = гд;
    диапазонЛет = 9;
    списокУчебныхГодов = новый списокЗначений;
    для к = 1 по диапазонЛет цикл
        списокУчебныхГодов.Добавить(гд, "" + (гд - 1) + "-" + гд);
        гд = гд - 1;
    конецЦикла;
    ЭлементыФормы.выборГода.СписокВыбора = списокУчебныхГодов;
    ЭлементыФормы.выборГода.Значение = списокУчебныхГодов[0].Значение;
КонецПроцедуры

Распределение студентов по НИР

Результат отчета показан на рис. 18

Распределение по НИР

Рис. 18. Распределение студентов по НИР

В запросе данные группируются по полям запроса; итоги оформляются по реквизиту Преподаватель справочника НИР.
Группа извлекается из справочника Группы, прочие значения - из справочника НИР.
При этом запрос выполняется к табличным частям названных справочников. Реквизиты справочников доступны посредством поля Ссылка, имеющегося в табличных частях справочников и адресующих элемент соответствующего справочника.
Макет отчета показан на рис. 19.

Макет отчета

Рис. 19. Макет Распределение студентов по НИР

Вывод отчета обеспечивает следующий код:

Процедура КнопкаСформироватьНажатие(Кнопка)
    запрос = новый запрос;
    // Запрос к табличным частям справочников НИР и Группы
    запрос.Текст = "выбрать НИР.ссылка.преподаватель,
    |     НИР.студент, НИР.темаНИР, группы.ссылка как группа,
    |     количество(НИР.студент) как количество
    | из справочник.НИР.Студенты как НИР
    | левое соединение справочник.группы.студенты как группы
    |     по НИР.студент = группы.студент
    | сгруппировать по НИР.ссылка.преподаватель,
    |     НИР.студент, НИР.темаНИР, группы.ссылка
    | упорядочить по НИР.ссылка.преподаватель.наименование, НИР.студент.наименование
    | итоги по НИР.ссылка.преподаватель";
    результат = запрос.Выполнить();
    тД = новый табличныйДокумент;
    м = получитьМакет("Макет");
    бл = м.получитьОбласть("зг");
    тД.вывести(бл);
    блПреп = м.получитьОбласть("преп");
    блСтуд = м.получитьОбласть("студ");
    // Отчет с группировкой по полю Преподаватель
    тД.НачатьАвтогруппировкуСтрок();
    выборкаПоПреп = результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    пока выборкаПоПреп.Следующий() Цикл
        блПреп.Параметры.преподаватель = выборкаПоПреп.преподаватель;
        блПреп.Параметры.количество = выборкаПоПреп.количество;
        // или
        // блПреп.Параметры.Заполнить(выборкаПоПреп);
        тД.Вывести(блПреп, выборкаПоПреп.Уровень());
        выборкаПоСтуд = выборкаПоПреп.Выбрать(ОбходРезультатаЗапроса.Прямой);
        пока выборкаПоСтуд.Следующий() Цикл
             // Заполнение параметров (имена в выборке и в макете совпадают)
            блСтуд.Параметры.Заполнить(выборкаПоСтуд);
            тД.Вывести(блСтуд, выборкаПоСтуд.Уровень());
        конецЦикла;
    конецЦикла;
    тД.ЗакончитьАвтогруппировкуСтрок();
    тД.толькоПросмотр = истина;
    тД.Показать("НИР");
КонецПроцедуры

Заключение

Приложение несложно расширить для фиксации оценок, получаемых студентами за контрольные (самостоятельные) работы, рефераты, практику и иные виды учебной деятельности.
Кроме того, следует устранить и неточности в модели данных. Так, справочник НИР следует заменить на документ Распределение по НИР, поскольку, во-первых, эта задача решается ежегодно, а во-вторых, студент может менять тему НИР по мере продвижения учебного процесса.
Так же нужно учесть, что студенты могут покидать учебную группу (в случае отчисления) или переходить из одной группы в другую.
Скачать архив информационной базы

Литература

  1. Синтаксис-помощник 1С:Предприятие.

Список работ

Рейтинг@Mail.ru