Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
1

Формирование отчета с отбором.

31.10.2017, 19:30. Просмотров 1172. Ответов 24

Добрый вечер!
Разрабатываю базу "Расписание занятий". Расписание группы на неделю формирую с помощью отчета.
Как сделать так, чтобы студент выбирал факультет, группу и на основании этих данных формировался отчет?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2017, 19:30
Ответы с готовыми решениями:

Формирование отчета
Есть номенклатура: -Склад -Продукты -Мясо -свинина -говядина -Хлеб ...

Формирование отчета в СКД
Добрый день. При создании отчета на СКД появились две проблемы. 1) Нужно, чтобы одна из колонок...

Не убирается табличка формирование отчета
Добрый день, вот такая проблема, отчет сформировался, но показывается, как-будто он формируется,...

Формирование документа на основании отчета
Здраствуйте! Подскажите пожалуйста можно ли сформировать документ на основании отчета, и если да...

Формирование отчета из нескольких источников
Всем привет. Как через скд или другой вариант формирование отчета вывести в нем 2 таблицы друг под...

24
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 19:46 2
XXX15, опишите структуру вашей конфигурации или выложите её.
Если отчёт создан с использованием СКД, то сделайте там отбор.
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 19:52  [ТС] 3
GreenkA,
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
 
    РасписаниеГруппыНаНеделюИнициализация();
 
КонецПроцедуры
 
Процедура ПриЗакрытии()
 
    СохранитьЗначение("НастройкаОтчетыРасписаниеФакультетаРасписаниеГруппыНаНеделю_dc65416c-100f-4565-b3f9-5e5a403c429d", ПостроительОтчетаРасписаниеГруппыНаНеделю.ПолучитьНастройки());
 
КонецПроцедуры
 
Процедура ДействияФормыРасписаниеГруппыНаНеделюНастройка(Кнопка)
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_НАСТРОЙКА(РасписаниеГруппыНаНеделю)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    Форма = ОтчетОбъект.ПолучитьФорму("РасписаниеГруппыНаНеделюНастройка");
    Форма.ПостроительОтчета = ПостроительОтчетаРасписаниеГруппыНаНеделю;
    Настройка = ПостроительОтчетаРасписаниеГруппыНаНеделю.ПолучитьНастройки();
    Если Форма.ОткрытьМодально() = Истина Тогда
        РасписаниеГруппыНаНеделюВывести();
    Иначе
        ПостроительОтчетаРасписаниеГруппыНаНеделю.УстановитьНастройки(Настройка);
    КонецЕсли;
 
    //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_НАСТРОЙКА
КонецПроцедуры
 
Процедура ДействияФормыРасписаниеГруппыНаНеделюСформировать(Кнопка)
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА(РасписаниеГруппыНаНеделю)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    РасписаниеГруппыНаНеделюВывести();
 
    //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры
 
Процедура РасписаниеГруппыНаНеделюВывести()
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ(РасписаниеГруппыНаНеделю)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    ЭлементыФормы.ПолеТабличногоДокумента.Очистить();
 
    ПостроительОтчетаРасписаниеГруппыНаНеделю.Выполнить();
    ПостроительОтчетаРасписаниеГруппыНаНеделю.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе;
    ПостроительОтчетаРасписаниеГруппыНаНеделю.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями;
    ПостроительОтчетаРасписаниеГруппыНаНеделю.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями;
    ПостроительОтчетаРасписаниеГруппыНаНеделю.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика);
    ПостроительОтчетаРасписаниеГруппыНаНеделю.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);
 
    //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ВЫПОЛНИТЬ
КонецПроцедуры
 
Процедура РасписаниеГруппыНаНеделюИнициализация()
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ(РасписаниеГруппыНаНеделю)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    ПостроительОтчетаРасписаниеГруппыНаНеделю.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |   Расписание.Факультет.Наименование КАК Факультет,
    |   Расписание.Группа.Наименование КАК Группа,
    |   Расписание.Пара КАК Пара,
    |   Расписание.Предмет КАК Предмет,
    |   Расписание.Преподаватель КАК Преподаватель,
    |   Расписание.Аудитория КАК Аудитория,
    |   Расписание.День КАК День
    |ИЗ
    |   РегистрНакопления.Расписание КАК Расписание
    |
    |СГРУППИРОВАТЬ ПО
    |   Расписание.Пара,
    |   Расписание.Предмет,
    |   Расписание.Преподаватель,
    |   Расписание.Аудитория,
    |   Расписание.День,
    |   Расписание.Факультет.Наименование,
    |   Расписание.Группа.Наименование
    |
    |УПОРЯДОЧИТЬ ПО
    |   День,
    |   Пара
    |ИТОГИ ПО
    |   Факультет,
    |   Группа,
    |   День";
    ПостроительОтчетаРасписаниеГруппыНаНеделю.ЗаполнитьНастройки();
    ПостроительОтчетаРасписаниеГруппыНаНеделю.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
    ПостроительОтчетаРасписаниеГруппыНаНеделю.ТекстЗаголовка = "Расписание группы на неделю";
    Настройка = ВосстановитьЗначение("НастройкаОтчетыРасписаниеФакультетаРасписаниеГруппыНаНеделю_dc65416c-100f-4565-b3f9-5e5a403c429d");
    Если Настройка <> Неопределено Тогда
        ПостроительОтчетаРасписаниеГруппыНаНеделю.УстановитьНастройки(Настройка);
    КонецЕсли;
 
    //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ
КонецПроцедуры
 
Процедура ОтборИмяПриИзменении(Элемент)
    // Вставить содержимое обработчика.
КонецПроцедуры
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 19:54 4
XXX15, а почему у вас Расписание в виде регистра накопления? И какого он вида? Обороты?
0
31.10.2017, 19:54
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 19:59  [ТС] 5
GreenkA,
это моя первая работа в 1с.

У меня созданы справочники: преподаватели, предметы, пары(расписание звонков), аудитории, факультеты, группы.
Дальше я создал документ "Расписание группы на день". Данные из документов вносятся в регистр накоплений. А дальше я строю отчет.
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 20:13 6
XXX15, после УстановитьНастройки(...) при инициализации пропишите добавление нужных полей отбора:
1C
1
2
ПостроительОтчетаРасписаниеГруппыНаНеделю.Отбор.Добавить("Факультет");
ПостроительОтчетаРасписаниеГруппыНаНеделю.Отбор.Добавить("Группа");
И в настройках выходных форм включите отображение Отбора в настройках отчета(см. скрин).
0
Миниатюры
Формирование отчета с отбором.  
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 20:29  [ТС] 7
GreenkA,
А как сделать чтобы значения выбирались из справочника?
0
Миниатюры
Формирование отчета с отбором.  
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 21:32 8
XXX15, а сейчас не выбираются?
Выложите вашу конфигурацию. В конфигураторе в меню Конфигурация - Сохранить конфигурацию в файл, полученный *.cf файл архивируете и во вложениях выкладываете.
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 21:43  [ТС] 9
GreenkA,
я нашел свой косяк. Спасибо.

У меня еще есть вопросы: как сделать, чтобы не выводилось, то что я выделил в красный прямоугольник?
И как мне написать проверку при добавлении нового документа, что допустим введенная пользователем аудитория не занята уже?
0
Миниатюры
Формирование отчета с отбором.  
Вложения
Тип файла: rar Расписание занятий.rar (63.6 Кб, 1 просмотров)
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 22:48 10
XXX15, какая у вас платформа? Ощущение, что 8.1... Если да, то не посмотрю я ни конфигурацию вашу, ни базу)
По отчету: уберите в конструкторе выходных форм группировки по факультету и группе, если у вас будут эти поля в отборе, то в самом отчете - они ни к чему.
По занятости аудиторий: у вас же есть регистр накопления Расписание занятий. Предположу вид - Остатки(?). Вот и делайте записи документом вида Расход и Приход, хотя ... какой ресурс у регистра?) я даже предположить не могу.
По хорошему я бы сделала иначе: не регистр накопления, а периодический регистр сведений (подчиненный регистратору - вашему документу), период - секунда. В документе ввела бы данные кроме дня - по часам занятости аудитории. И делала бы документом две записи в регистр сведений: на начало пары статус аудитории "Занята", на конец пары - статус аудитории "Свободна". При проведении документа проверяла бы через метод ПолучитьПоследнее() статус текущей аудитории на момент начала занятий.
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 22:51  [ТС] 11
GreenkA, 1С:Предприятие 8.0, учебная версия (8.0.16.2)
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 22:55 12
Лучший ответ Сообщение было отмечено XXX15 как решение

Решение

А, у вас же есть "пара"(это справочник или что это?)
Вот пусть будет периодический регистр сведений, период - секунда, подчиненный регистратору - документу Расписания. Измерения - Аудитория, Пара, Ресурс - Статус(введите новое перечисление со значениями Свободна/Занята).
При проведении документа будете проверять статус:
1C
1
2
3
4
5
СтатусАудитории = РегистрыСведений[ИмяВашегоРегистра].ПолучитьПоследнее(Дата, Новый Структура("Аудитория, Пара", Аудитория, Пара)).Статус;
Если СтатусАудитории = Перечисления[ИмяВашегоПеречисления].Занята Тогда
 Отказ = Истина;
 Сообщить("Аудитория занята");
КонецЕсли;
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 22:56  [ТС] 13
GreenkA, Если я уберу группировку, то будет вот так (см. рис).
Можно ли записать группу и факультет в шапку?
0
Миниатюры
Формирование отчета с отбором.  
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 22:57 14
При этом, если полностью решите отказаться от регистра накопления, и будете делать движения только по регистру сведений, то при формировании отчета "Расписание занятий" будете запросом отбирать данные по аудиториям со статусом "Занята". Ну и хорошо бы в отчете сделать отбор по периоду. Вам же не надо расписание за 5 лет?)
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 23:04  [ТС] 15
GreenkA, а этот код куда вставить?
1C
1
2
3
4
5
СтатусАудитории = РегистрыСведений[ИмяВашегоРегистра].ПолучитьПоследнее(Дата, Новый Структура("Аудитория, Пара", Аудитория, Пара)).Статус;
Если СтатусАудитории = Перечисления[ИмяВашегоПеречисления].Занята Тогда
 Отказ = Истина;
 Сообщить("Аудитория занята");
КонецЕсли;
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
31.10.2017, 23:06 16
XXX15, уберите вообще эти поля из отчета.
Заголовок отчета меняется так: в процедуре вывода отчета в конце добавьте:
1C
1
    ПостроительОтчетаРасписаниеГруппыНаНеделю.ТекстЗаголовка = "Расписание занятий на неделю группы " + ПостроительОтчетаОтчет.Отбор["Группа"].Значение;
по аналогии допишите для факультета текст.

Добавлено через 50 секунд
Цитата Сообщение от XXX15 Посмотреть сообщение
GreenkA, а этот код куда вставить?
в модуль объекта документа в процедуру ОбработкаПроведения(), у вас же движения там формируются? В регистр...
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
31.10.2017, 23:24  [ТС] 17
GreenkA,
Что-то я запутался(
а Вы можете по ТимВиверу посмотреть?
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
01.11.2017, 01:03 18
XXX15, нет. Правила форума п.4.6.:
Обсуждение вопросов - только в теме на форуме. Приглашения к обсуждению еще где-либо (в том числе и с помощью системы личных сообщений) запрещены, за исключением коммерческих разделов.
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 34
01.11.2017, 01:09  [ТС] 19
GreenkA, посмотрите, пожалуйста, как правильно написать, чтобы ошибку выдавал.
и вопрос: Как регистр сведений записывает что аудитория занята?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого ТекСтрокаРасписание Из Расписание Цикл
        // регистр Расписание 
        Движение = Движения.Расписание.Добавить();
        Движение.Период = Дата;
        Движение.День = ДеньНедели;
        Движение.Пара = ТекСтрокаРасписание.Время;
        Движение.Предмет = ТекСтрокаРасписание.Предмет;
        Движение.Преподаватель = ТекСтрокаРасписание.Преподаватель;
        Движение.Аудитория = ТекСтрокаРасписание.Аудитория;
        Движение.Факультет = Факультет;
        Движение.Группа = Группа;
    КонецЦикла;
    Для Каждого ТекСтрокаРасписание Из Расписание Цикл
        // регистр СтатусАудитории 
        Движение = Движения.СтатусАудитории.Добавить();
        Движение.Период = Дата;
        Движение.Аудитория = ТекСтрокаРасписание.Аудитория;
        Движение.Пара = ТекСтрокаРасписание.Время;
        Движение.ДеньНедели = ДеньНедели;
        Движение.Статус = ТекСтрокаРасписание.СтатусАудитории;
    КонецЦикла;
    // записываем движения регистров
    Движения.Расписание.Записать();
    Движения.СтатусАудитории.Записать();
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    
    СтатусАудитории = РегистрыСведений[СтатусАудитории].ПолучитьПоследнее(Дата, Новый Структура("Аудитория, Время", Аудитория, Время)).Статус;
    Если СтатусАудитории = Перечисления[Статус].Занята Тогда
        Отказ = Истина;
        Сообщить("Аудитория занята");
    КонецЕсли;
КонецПроцедуры
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
01.11.2017, 01:23 20
XXX15, ну так вы бы описали структуру документа, что есть табличная часть и Аудитория - реквизит табличной части, а Группа - реквизит шапки документа...
0
01.11.2017, 01:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2017, 01:23

Формирование отчета 1с 8.3. Отключение отбора по Читателю.
Значит создал отчет, с параметром читатель (ФИО) который берется из справочника. В пользовательских...

Формирование отчета на скд остатки материалов в организации на складе 1с 8.3
Помогите, пожалуйста разобраться с запросом. В 1с новичок. Нужно сформировать отчет остатки...

Формирование отчета
Подскажите, как сделать формирование отчета, если он выполнен без использования схемы компоновки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru