-
Кто решил?
-
Стремная задача
-
Вот решение.
Добавлено (25.11.2010, 15:20)
---------------------------------------------
Может будут баги, особо не тестировал, но концепция должна подойти.
В РН УчетОбучения можно удалить измерение "день" и использовать стандартный "период", так будет оптимальней.
Вложения:
1_40.dt
-
trantor,
Особо-то прицепиться не к чему
Из выявленного:
1) Измерение "День" не нужно, вполне подойдет стандартное поле "Период"
2) В документе "Расписание" запросы дважды обращаются к ТЧ документа, нужно использовать Менеджер временных таблиц
3) В документе "Заявка" не установлены параметры виртуальной таблицы по "Курсу" - на экзамене к этому точно придерутся, еще хорошо бы добавить условие отбора по "Периоду" все в тех-же параметрах
4) В целом много упущений по оптимальности, в том же регистре накопления ни одно поле не индексируется... Идея сама по себе хороша, но надо учиться писать короче и оптимальнее, для сравнения:
Плохо -
Quote
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.УчетОбучения.Добавить();
Движение.Период = Выборка.Дата;
Движение.День = Выборка.Дата;
Движение.Класс = Выборка.Класс;
Движение.Курс = Выборка.Курс;
Движение.План = Выборка.Класс.Вместимость;
КонецЦикла;
Хорошо -
Quote
Движения.УчетОбучения.Загрузить(Запрос.Выполнить().Выгрузить());
Только предварительно нужно задать правильные псевдонимы в запросе.
-
1C_CoderVamp,
Согласен,
по п.2 просто сначало написал без использования графика работы, не было запроса, но когда понял что в отчете он понадобится дописал новый запрос
по п.3 тоже согласен, уже под конец увидел, не стал дописывать... по п.4 насколько принципиальна индексация в регистрах накопления и запросах?
Добавлено (25.11.2010, 17:11)
---------------------------------------------
Да кстати может если кому будет интересно в документе "Расписание" используется новая методика проведения, она так как раз подходит.
-
Quote (trantor)
по п.4 насколько принципиальна индексация в регистрах накопления и запросах?
да, принципиальна, если я не ошибаюсь, это даже есть в общих требованиях (соответственно, балл снижается). Суть в том, что при наложении отбора или применении сортировки по неиндексируемым полям, запрос исполняется на порядок дольше.
-
Мое решение
Вложения:
1Cv8.dt
-
У задачи есть подводные камни .. Видимо начало и конец курсов лучше делать отдельными датами, а то проверка пересечения курсов затрудняется. Отчет достаточно сложный, неявный .. Структуру регистров хотелось обсудить с коллегами, кто решал задачу!
Вложения:
DoctorRoza_1_40.dt
-
Привет! Посмотрите!
Вложения:
1-40.dt
-
Quote (Алекксандра)
Привет! Посмотрите!
Не знаю что имели ввиду составители задачи, но:
1. решение д.б в режиме управляемого приложения.
2. Документ Заявка, должен содержать в себе Слушателя, курс и срок, например 5 дней (ну 5 дней он хочет походить к нам на курсы)
3. Движения.УчетРасписания.Очистить();
Движения.УчетРасписания.Записать();
Это уж точно лишнее, достаточно последней строки, записать пустой набор движений.
Перепроверьте все еще раз
а вообще задачка интересная, разминает мозг)))
-
Спасибо за ответ! буду исправлять.
Добавлено (21.09.2011, 16:40)
---------------------------------------------
ще раз здравствуйте! Хотела спроситть, как поняла: т.е. в заявке надо слушателя(ФИО). Если так, то для кокой цели?
Или можно количество слушателей проставить (числом как есть)?
-
Честно говоря, как уже писалось выше, мутное задание. Решил и вроде бы все условия соблюдены, но с точки зрения разумности того что происходит вышел полные кавардак.
1. У меня расписание - РС с измерением класс и ресурсом курс(вытекает из условия), для каждого дня в периоде делаю запись. Типа есть запись в периоде класс занят.
2. Заполнение в РН делаю так же(запись по каждому дню, складываю еденички).
Но к примеру, не поясняется как контролировать рамки курса(т.е по принципу вместимости человек может попасть со 2-го дня в одном классе на 1-ый день в другом ).
Так же ничего не сказано про то как должен подбираться курс(в документ).
В общем решил и забыл.
-
Клевая задача, хитрая и в тоже время вроде бы простая. Решил, выкладываю на критику.
РС: Расписание
РН: ЗанятостьКлассов. (оборотный)
Все условия соблюдены + проверки на занятость класса, выходных дней, на существование вообще расписания на день заявки по указанному курсу. Единственное, возможно с отчетом намудрил, хотя правильно работает.
Вложения:
Para_1987_1.40.dt
-
При чтении задачи сложилась впечатление что не хватает показателей для полного учета.
Я думаю что в учете должна участвовать информация о конкретной группе
Например
Класс №1 Групп№1 01.10.11 по 12.10.11 по Бухгалтерскому учету
Класс №1 Групп№2 15.10.11 по 25.10.11 по Бухгалтерскому учету
Группы - нужно назначать программно(группы создаются в пределах месяца (Расписания)) и заполняемость классов отслеживать по группам
-
Такой вариант решения
Вложения:
kow1976_1.40.dt
-
мой вариант
Вложения:
KTT_1_40.dt
-
Еще одна задача у к\й нельзя создать 100% правильное решение.
вопрос:
в том случае если слушатель выбрал даты курса в к\е нет по расписанию этих курсов, или курсы есть но нет мест, запрещать ли проведение такого документа?
я решил действовать по мягкому пути:
слушатель записывается в те даты в к\х есть указанный слушателем курс, и есть место в классе, т.е. слушатель может выбрать один курс или множество на весь месяц, и может быть записан только на один день для слушания.
в том случае если слушатель не записан ни на один из курсов ни на одну из дат, документ не проводится.
для удобства создал регистр ИндивидуальныеРасписания, к\й можно сформировать из Заявки, открывается отчет уже сформированный с отбором по слушателю и по месяцу из заявки.
слушатель указывает курсы и даты в таб.части Заявки, причем Заявку на месяц можно подать только одну, как и Расписание
Не люблю я такие задачи в к\х нет явного правильного решения, на экзамене придется выбирать м\у законченностью решения и дефицитом времени
Вложения:
1.40.dt
-
Задачка мутноватая, с подводным камнем, в виде коллизии в последнем условии к отчету: ведь в условии четко сказано - слушатель ходит на выбранный им курс в пределах выбранного им же периода и если нет места в одном классе - учится в другом(классные курсы :), но таково условие..),а в последнем условии к отчету появляются новые условия - оказывается слушатель должен привязывается к курсу-классу иначе приведенная формула расчета становится абсурдной (если предположить, что в определенный момент число слушателей, записавшихся на курс превышает число мест в рассматриваемом классе (например на один из курсов записалось не 15 а 25 человек - по условию занятия по данному курсу могут идти в 2-х классах) и если тупо вставить в отчет данную формулу, то может вылезти, что "% по посещению" в рассматриваемом классе превышает 100%)) Поэтому формула должна быть либо с ограничением по вместимости либо -
Кол-воФактическиОтучившихсяВДанномКлассеСлушателейВПериодДействияРасписания / (Кол-воМестВКлассе * Кол-воДнейКогдаКлассЗанятВПериодДействияРасписания, а в остальном задачка не очень сложная - все условия легко воплотимы..
Вложения:
axlch_1_40.dt
-
axlch вас чего заявке от балды любой может курсы посещать? где же поле слушатель?
здолбала капчаДобавлено (12.02.2014, 15:25)
---------------------------------------------
метод Движения.Заполнение.Записывать() не нужен! это принудительная запись в регистр . без него документ и сам запишет данные ,
очистить() в вместо Записывать()
Добавлено (12.02.2014, 15:52)
---------------------------------------------
метод Записать()
-
Не знаю что "мутного" в условии увидели коллеги, ихмо все прозрачно. Вторая формула для отчета сокращается до очевидного 100*X/Y
где X - общее кол-во слушателей, записавшихся в Класс (проведенным доком Заявка) за искомый период,
Y = V*K, V - Вместимость данного Класса из Справочника, K - кол-во дней в искомом периоде. То есть Y это сколько суммарно позволяет вмещать класс за период отчета, если бы был заполенен полностью во все рабочие дни запрашиваемого периода =) Ну а первая формула - проста как дверь =)
Прошу посмотреть Решение.
На Хранилище и Справочник Задачи - не обращать внимание - это для самоорганизации при подготовке к экзамену =)
В процедуре Обр-ка проведения, почему-то не работает типовой код для регистра:
Код
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ЗанятостьКлассов.Прочитать();
Движения.ЗанятостьКлассов.Очистить();
Движения.Записать();
А этот код работает:
Код
// Очистить записи документа, если он был ранее проведен
Если Проведен Тогда
Рег = РегистрыНакопления.ЗанятостьКлассов;
Набор = Рег.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Ссылка);
Набор.Прочитать();
Набор.Очистить();
Набор.Записать();
КонецЕсли;
Объясните почему?
Основной Режим запуска - УП, Режим упр-я блокировкой - Управляемый
Вложения:
1Cv8_1_40Maikl.dt
-
Цитата umbus (
)
Объясните почему?
Ты не установил флаг записи. Добавь строкуКод
Движения.ЗанятостьКлассов.Записывать = Истина;
или замени последнюю строку на:
Код
Движения.ЗанятостьКлассов.Записать();
Хотя за давностью думаю ты уже и сам разобрался, но вдруг кому понадобится.
-
Мое:)))
Вложения:
140.dt
-
Мое
-
Прощу оценить.
-
Мое
Красиво сделал. С Графиком РАботы. Как у настоящий пацанов!
-
Прощу оценить.
В обработке проведения Расписание - не лучше было использовать БлокироватьДляИзменения?
-
Просьба критиковать.
Отличие - контроль периодов заявки (на превышение курса), отчет сделал альтернативным методом.
-
Задача необычная для понимания, но в целом не сложная для реализации
Мой вариант: РС График работы организации (сделал на основе уже имеющегося); РС Расписание (Изм. Дата Класс; Ресурс Курс) - для контроля не более одного курса в дату в классе - заполняется документом "Расписание"; РН оборотный Заявки (Изм. Класс, Курс; Ресурсы План заявок (заполняется док. "Расписание") , Факт Заявок (заполняется документом "Заявка")
В документах Расписание и Заявка указывается Дата начала и Длительность в днях. Контроль, который требуется в задаче реализован. Не реализован контроль планирования курса на выходной день
Отчет строится не сложно
-
мое решение
-
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
-
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
Подкорректировал
-
Я решил на одном регистре накопления с видом Остатки(Измерения: Дата, Класс, Курс, ресурс Количество). Т.е., грубо говоря, задача рассматривается как складская, документ Расписание делает приход (количество человек в классе), документ Заявка делает расход 1 штука (Справочник Слушатели не использую).
Дата сделана измерением, т.к. нужно в разрезе ее смотреть, сколько осталось слушателей. Отчет по этому регистру также достаточно нетрудно сделать.
Однако, для экзамена эта задача слишком трудна - часа 2 уйдет точно.
Сделал чисто ради интереса на 1-м регистре, но это некорректно с точки зрения экзамена,т.к. регистр никогда не выведется в 0 (классы обычно не заполнены полностью).
Думаю, правильно делать 1 регистр сведений для расписания, 1 оборотный регистр для заявок.
-
Сделал также на двух регистрах сведений.
Регистр Расписание (периодический, измерение класс, ресурс курс), Регистр Заявки (периодический, измерения курс, класс, заявка, ресурсов нет). Но все равно меньше 2-х часов никак не выходит, много писать + отладка.
Вместо РС Заявки можно было бы использовать подобный РН с видом Обороты (Измерения Курс, Класс, Ресурс Количество - всегда 1). Пожалуй, это самый оптимальный вариант с ТЗ производительности. Во всяком, случае, я лучше не нашел.
-
Один из самых дурацких отчетов