Автор Тема: Задача 1.40  (Прочитано 13401 раз)

0 Пользователей и 1 Гость просматривают эту тему.

provincial_1с

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Сергей
Задача 1.40
« : Октябрь 11, 2010, 10:02:55 am »
Кто решил?

RAINman

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: Павлов Вадим Александрович
Задача 1.40
« Ответ #1 : Ноябрь 24, 2010, 10:11:55 am »
Стремная задача


trantor

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Trantor
Задача 1.40
« Ответ #2 : Ноябрь 25, 2010, 03:20:45 pm »
Вот решение.

Добавлено (25.11.2010, 15:20)
---------------------------------------------
Может будут баги, особо не тестировал, но концепция должна подойти.

В РН УчетОбучения можно удалить измерение "день" и использовать стандартный "период", так будет оптимальней.


Вложения:
1_40.dt

1C_CoderVamp

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Василий
Задача 1.40
« Ответ #3 : Ноябрь 25, 2010, 04:55:24 pm »
trantor,
 Особо-то прицепиться не к чему smile
 Из выявленного:
 1) Измерение "День" не нужно, вполне подойдет стандартное поле "Период"
 2) В документе "Расписание" запросы дважды обращаются к ТЧ документа, нужно использовать Менеджер временных таблиц
 3) В документе "Заявка" не установлены параметры виртуальной таблицы по "Курсу" - на экзамене к этому точно придерутся, еще хорошо бы добавить условие отбора по "Периоду" все в тех-же параметрах
 4) В целом много упущений по оптимальности, в том же регистре накопления ни одно поле не индексируется...

Идея сама по себе хороша, но надо учиться писать короче и оптимальнее, для сравнения:
 Плохо -
 

Quote
    Выборка = Запрос.Выполнить().Выбрать();
     Пока Выборка.Следующий() Цикл
        
        Движение = Движения.УчетОбучения.Добавить();
       Движение.Период = Выборка.Дата;
       Движение.День    = Выборка.Дата;
       Движение.Класс    = Выборка.Класс;
       Движение.Курс    = Выборка.Курс;
       Движение.План    = Выборка.Класс.Вместимость;
    
     КонецЦикла;

 Хорошо -
 
Quote
Движения.УчетОбучения.Загрузить(Запрос.Выполнить().Выгрузить());

 Только предварительно нужно задать правильные псевдонимы в запросе.

trantor

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Trantor
Задача 1.40
« Ответ #4 : Ноябрь 25, 2010, 05:11:54 pm »
1C_CoderVamp,
 Согласен,
 по п.2 просто сначало написал без использования графика работы, не было запроса, но когда понял что в отчете он понадобится дописал новый запрос
 по п.3 тоже согласен, уже под конец увидел, не стал дописывать...

по п.4 насколько принципиальна индексация в регистрах накопления и запросах?

Добавлено (25.11.2010, 17:11)
---------------------------------------------
Да кстати может если кому будет интересно в документе "Расписание" используется новая методика проведения, она так как раз подходит.


1C_CoderVamp

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Василий
Задача 1.40
« Ответ #5 : Ноябрь 25, 2010, 05:22:06 pm »
Quote (trantor)
по п.4 насколько принципиальна индексация в регистрах накопления и запросах?

 да, принципиальна, если я не ошибаюсь, это даже есть в общих требованиях (соответственно, балл снижается). Суть в том, что при наложении отбора или применении сортировки по неиндексируемым полям, запрос исполняется на порядок дольше.

rus

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.40
« Ответ #6 : Январь 21, 2011, 07:25:20 am »
Мое решение
Вложения:
1Cv8.dt

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.40
« Ответ #7 : Август 24, 2011, 11:24:34 pm »
У задачи есть подводные камни .. Видимо начало и конец курсов лучше делать отдельными датами, а то проверка пересечения курсов затрудняется. Отчет достаточно сложный, неявный .. Структуру регистров хотелось обсудить с коллегами, кто решал задачу!
Вложения:
DoctorRoza_1_40.dt

Алекксандра

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Eska
Задача 1.40
« Ответ #8 : Сентябрь 18, 2011, 02:56:38 pm »
Привет! Посмотрите!
Вложения:
1-40.dt

Para_1987

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Вячеслав
Задача 1.40
« Ответ #9 : Сентябрь 19, 2011, 02:06:20 pm »
Quote (Алекксандра)
Привет! Посмотрите!


 Не знаю что имели ввиду составители задачи, но:
 1. решение д.б в режиме управляемого приложения.
 2. Документ Заявка, должен содержать в себе Слушателя, курс и срок, например 5 дней (ну 5 дней он хочет походить к нам на курсы)
 3. Движения.УчетРасписания.Очистить();
 Движения.УчетРасписания.Записать();

 Это уж точно лишнее, достаточно последней строки, записать пустой набор движений.

 Перепроверьте все еще раз smile

 а вообще задачка интересная, разминает мозг)))
« Последнее редактирование: Сентябрь 19, 2011, 03:15:33 pm от Вячеслав »

Алекксандра

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Eska
Задача 1.40
« Ответ #10 : Сентябрь 21, 2011, 04:40:50 pm »
Спасибо за ответ! буду исправлять.

Добавлено (21.09.2011, 16:40)
---------------------------------------------
ще раз здравствуйте! Хотела спроситть, как поняла: т.е. в заявке надо слушателя(ФИО). Если так, то для кокой цели?
 Или можно количество слушателей проставить (числом как есть)?


LEOON

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Верютин Сергей
Задача 1.40
« Ответ #11 : Октябрь 06, 2011, 01:58:25 am »
Честно говоря, как уже писалось выше, мутное задание. Решил и вроде бы все условия соблюдены, но с точки зрения разумности того что происходит вышел полные кавардак.
 1. У меня расписание - РС с измерением класс и ресурсом курс(вытекает из условия), для каждого дня в периоде делаю запись. Типа есть запись в периоде класс занят.
 2. Заполнение в РН делаю так же(запись по каждому дню, складываю еденички).
 Но к примеру, не поясняется как контролировать рамки курса(т.е по принципу вместимости человек может попасть со 2-го дня в одном классе на 1-ый день в другом ).
 Так же ничего не сказано про то как должен подбираться курс(в документ).
 В общем решил и забыл.

Para_1987

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Вячеслав
Задача 1.40
« Ответ #12 : Ноябрь 21, 2011, 02:37:30 pm »
Клевая задача, хитрая и в тоже время вроде бы простая. Решил, выкладываю на критику.
 РС: Расписание
 РН: ЗанятостьКлассов. (оборотный)

 Все условия соблюдены + проверки на занятость класса, выходных дней, на существование вообще расписания на день заявки по указанному курсу. Единственное, возможно с отчетом намудрил, хотя правильно работает.
Вложения:
Para_1987_1.40.dt

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.40
« Ответ #13 : Декабрь 14, 2011, 08:58:24 am »
При чтении задачи сложилась впечатление что не хватает показателей для полного учета.
 Я думаю что в учете должна участвовать информация о конкретной группе
 Например
 Класс №1 Групп№1 01.10.11 по 12.10.11 по Бухгалтерскому учету
 Класс №1 Групп№2 15.10.11 по 25.10.11 по Бухгалтерскому учету

 Группы - нужно назначать программно(группы создаются в пределах месяца (Расписания)) и заполняемость классов отслеживать по группам

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.40
« Ответ #14 : Декабрь 16, 2011, 07:35:51 am »
Такой вариант решения
Вложения:
kow1976_1.40.dt

TuMyP1985

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Тимур
Задача 1.40
« Ответ #15 : Июль 07, 2013, 05:21:11 pm »
мой вариант
Вложения:
KTT_1_40.dt

artfa

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Артур
Задача 1.40
« Ответ #16 : Июль 17, 2013, 03:45:16 pm »
Еще одна задача у к\й нельзя создать 100% правильное решение.

 вопрос:
 в том случае если слушатель выбрал даты курса в к\е нет по расписанию этих курсов, или курсы есть но нет мест, запрещать ли проведение такого документа?

 я решил действовать по мягкому пути:
 слушатель записывается в те даты в к\х есть указанный слушателем курс, и есть место в классе, т.е. слушатель может выбрать один курс или множество на весь месяц, и может быть записан только на один день для слушания.
 в том случае если слушатель не записан ни на один из курсов ни на одну из дат, документ не проводится.
 для удобства создал регистр ИндивидуальныеРасписания, к\й можно сформировать из Заявки, открывается отчет уже сформированный с отбором по слушателю и по месяцу из заявки.
 слушатель указывает курсы и даты в таб.части Заявки, причем Заявку на месяц можно подать только одну, как и Расписание

 Не люблю я такие задачи в к\х нет явного правильного решения, на экзамене придется выбирать м\у законченностью решения и дефицитом времени
Вложения:
1.40.dt

axlch

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 1.40
« Ответ #17 : Август 09, 2013, 10:42:35 pm »
Задачка мутноватая, с подводным камнем, в виде коллизии в последнем условии к отчету: ведь в условии четко сказано - слушатель ходит на выбранный им курс в пределах выбранного им же периода и если нет места в одном классе - учится в другом(классные курсы :), но таково условие..),а в последнем условии к отчету появляются новые условия - оказывается слушатель должен привязывается к курсу-классу иначе приведенная формула расчета становится абсурдной (если предположить, что в определенный момент число слушателей, записавшихся на курс превышает число мест в рассматриваемом классе (например на один из курсов записалось не 15 а 25 человек - по условию занятия по данному курсу могут идти в 2-х классах) и если тупо вставить в отчет данную формулу, то может вылезти, что "% по посещению" в рассматриваемом классе превышает 100%)) Поэтому формула должна быть либо с ограничением по вместимости либо -
 Кол-воФактическиОтучившихсяВДанномКлассеСлушателейВПериодДействияРасписания / (Кол-воМестВКлассе * Кол-воДнейКогдаКлассЗанятВПериодДействияРасписания, а в остальном задачка не очень сложная - все условия легко воплотимы..
Вложения:
axlch_1_40.dt

oracle77

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Вася
Задача 1.40
« Ответ #18 : Февраль 12, 2014, 03:52:08 pm »
axlch вас чего заявке от балды любой может курсы посещать? где же поле слушатель?

 здолбала капча

Добавлено (12.02.2014, 15:25)
---------------------------------------------
метод Движения.Заполнение.Записывать() не нужен! это принудительная запись в регистр . без него документ и сам запишет данные ,

 очистить() в вместо Записывать()

Добавлено (12.02.2014, 15:52)
---------------------------------------------
метод Записать()


umbus

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Maikl
Задача 1.40
« Ответ #19 : Февраль 18, 2014, 10:07:22 pm »
Не знаю что "мутного" в условии увидели коллеги, ихмо все прозрачно. Вторая формула для отчета сокращается до очевидного 100*X/Y
 где X - общее кол-во слушателей, записавшихся в Класс (проведенным доком Заявка) за искомый период,
 Y = V*K, V - Вместимость данного Класса из Справочника, K - кол-во дней в искомом периоде. То есть Y это сколько суммарно позволяет вмещать класс за период отчета, если бы был заполенен полностью во все рабочие дни запрашиваемого периода =) Ну а первая формула - проста как дверь =)

  
 Прошу посмотреть Решение.

  
 На Хранилище и Справочник Задачи - не обращать внимание - это для самоорганизации при подготовке к экзамену =)

 В процедуре Обр-ка проведения, почему-то не работает типовой код для регистра:

 
Код
Процедура ОбработкаПроведения(Отказ, РежимПроведения)      

    Движения.ЗанятостьКлассов.Прочитать();      

    Движения.ЗанятостьКлассов.Очистить();      

    Движения.Записать();


 А этот код работает:

 
Код
// Очистить записи документа, если он был ранее проведен      

 Если Проведен Тогда      

    Рег = РегистрыНакопления.ЗанятостьКлассов;      

    Набор = Рег.СоздатьНаборЗаписей();      

    Набор.Отбор.Регистратор.Установить(Ссылка);      

    Набор.Прочитать();      

    Набор.Очистить();      

    Набор.Записать();      

 КонецЕсли;


 Объясните почему?
 Основной Режим запуска - УП, Режим упр-я блокировкой - Управляемый surprised
Вложения:
1Cv8_1_40Maikl.dt
« Последнее редактирование: Февраль 18, 2014, 10:09:19 pm от Maikl »

Demy

  • Пользователь
  • **
  • Сообщений: 21
  • ФИО: Demy
Задача 1.40
« Ответ #20 : Июнь 19, 2014, 02:38:45 pm »
Цитата umbus ()
Объясните почему?
Ты не установил флаг записи. Добавь строку
Код
Движения.ЗанятостьКлассов.Записывать = Истина;
или замени последнюю строку на:
 
Код
Движения.ЗанятостьКлассов.Записать();
Хотя за давностью думаю ты уже и сам разобрался, но вдруг кому понадобится. smile

bsbo

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Борис
Задача 1.40
« Ответ #21 : Июнь 19, 2014, 03:19:49 pm »
Мое:)))
Вложения:
140.dt

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 1.40
« Ответ #22 : Март 25, 2015, 09:36:27 pm »
Мое

rusmosav

  • Проверенный
  • ***
  • Сообщений: 137
Re: Задача 1.40
« Ответ #23 : Май 06, 2015, 12:35:28 pm »
Прощу оценить.
« Последнее редактирование: Май 06, 2015, 04:28:24 pm от rusmosav »

Шахназар

  • Пользователь
  • **
  • Сообщений: 27
Re: Задача 1.40
« Ответ #24 : Май 08, 2015, 02:35:31 pm »
Мое
Красиво сделал. С Графиком РАботы. Как у настоящий пацанов!

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: Задача 1.40
« Ответ #25 : Февраль 19, 2016, 11:28:27 am »
Прощу оценить.

В обработке проведения Расписание - не лучше было использовать БлокироватьДляИзменения?


axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: Задача 1.40
« Ответ #26 : Февраль 19, 2016, 11:32:36 am »
Просьба критиковать.

Отличие - контроль периодов заявки (на превышение курса), отчет сделал альтернативным методом.



alex_1980

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Алексей
Re: Задача 1.40
« Ответ #27 : Июнь 17, 2016, 10:09:00 am »
Задача необычная для понимания, но в целом не сложная для реализации

Мой вариант: РС График работы организации (сделал на основе уже имеющегося); РС Расписание (Изм. Дата Класс; Ресурс Курс) - для контроля не более одного курса в дату в классе - заполняется документом "Расписание"; РН оборотный Заявки (Изм. Класс, Курс; Ресурсы План заявок (заполняется док. "Расписание") , Факт Заявок (заполняется документом "Заявка")

В документах Расписание и Заявка указывается Дата начала и Длительность в днях. Контроль, который требуется в задаче реализован. Не реализован контроль планирования курса на выходной день

Отчет строится не сложно

alfalume

  • Проверенный
  • ***
  • Сообщений: 103
Re: Задача 1.40
« Ответ #28 : Сентябрь 07, 2016, 08:20:37 am »
мое решение

jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.40
« Ответ #29 : Сентябрь 27, 2017, 12:26:49 pm »
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника  - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
« Последнее редактирование: Сентябрь 29, 2017, 04:14:52 pm от jonik »

jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.40
« Ответ #30 : Март 26, 2018, 02:08:50 pm »
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника  - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
Подкорректировал
« Последнее редактирование: Март 27, 2018, 02:51:39 pm от jonik »

grigoriy-1c

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.40
« Ответ #31 : Ноябрь 24, 2019, 11:27:08 pm »
Я решил на одном регистре накопления с видом Остатки(Измерения: Дата, Класс, Курс, ресурс Количество). Т.е., грубо говоря, задача рассматривается как складская, документ Расписание делает приход (количество человек в классе), документ Заявка делает расход 1 штука (Справочник Слушатели не использую).
Дата сделана измерением, т.к. нужно в разрезе ее смотреть, сколько осталось слушателей. Отчет по этому регистру также достаточно нетрудно сделать.
Однако, для экзамена эта задача слишком трудна - часа 2 уйдет точно.
Сделал чисто ради интереса на 1-м регистре, но это некорректно с точки зрения экзамена,т.к. регистр никогда не выведется в 0 (классы обычно не заполнены полностью).
Думаю, правильно делать 1 регистр сведений для расписания, 1 оборотный регистр для заявок.
« Последнее редактирование: Ноябрь 24, 2019, 11:44:16 pm от grigoriy-1c »

grigoriy-1c

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.40
« Ответ #32 : Ноябрь 25, 2019, 02:20:28 am »
Сделал также на двух регистрах сведений.
Регистр Расписание (периодический, измерение класс, ресурс курс), Регистр Заявки (периодический, измерения курс, класс, заявка, ресурсов нет). Но все равно меньше 2-х часов никак не выходит, много писать + отладка.

Вместо РС Заявки можно было бы использовать подобный РН с видом Обороты (Измерения Курс, Класс, Ресурс Количество - всегда 1). Пожалуй, это самый оптимальный вариант с ТЗ производительности. Во всяком, случае, я лучше не нашел.
« Последнее редактирование: Ноябрь 25, 2019, 02:34:39 am от grigoriy-1c »

Антон Петров

  • Новичок
  • *
  • Сообщений: 1
Re: Задача 1.40
« Ответ #33 : Февраль 18, 2020, 03:33:11 pm »
Один из самых дурацких отчетов