Форум Чистова. Подготовка к экзаменам 1С

Аттестация "1С:Специалист" => Аттестация "1С:Специалист по платформе 1С:Предприятие 8.3 и 8.2" => Тема начата: provincial_1с от Октябрь 11, 2010, 10:02:55 am

Название: Задача 1.40
Отправлено: provincial_1с от Октябрь 11, 2010, 10:02:55 am
Кто решил?
Название: Задача 1.40
Отправлено: RAINman от Ноябрь 24, 2010, 10:11:55 am
Стремная задача
Название: Задача 1.40
Отправлено: trantor от Ноябрь 25, 2010, 03:20:45 pm
Вот решение.

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

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


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

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

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

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

 Только предварительно нужно задать правильные псевдонимы в запросе.
Название: Задача 1.40
Отправлено: trantor от Ноябрь 25, 2010, 05:11:54 pm
1C_CoderVamp,
 Согласен,
 по п.2 просто сначало написал без использования графика работы, не было запроса, но когда понял что в отчете он понадобится дописал новый запрос
 по п.3 тоже согласен, уже под конец увидел, не стал дописывать...

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

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

Название: Задача 1.40
Отправлено: 1C_CoderVamp от Ноябрь 25, 2010, 05:22:06 pm
Quote (trantor)
по п.4 насколько принципиальна индексация в регистрах накопления и запросах?

 да, принципиальна, если я не ошибаюсь, это даже есть в общих требованиях (соответственно, балл снижается). Суть в том, что при наложении отбора или применении сортировки по неиндексируемым полям, запрос исполняется на порядок дольше.
Название: Задача 1.40
Отправлено: rus от Январь 21, 2011, 07:25:20 am
Мое решение
Вложения:
1Cv8.dt
Название: Задача 1.40
Отправлено: DoctorRoza от Август 24, 2011, 11:24:34 pm
У задачи есть подводные камни .. Видимо начало и конец курсов лучше делать отдельными датами, а то проверка пересечения курсов затрудняется. Отчет достаточно сложный, неявный .. Структуру регистров хотелось обсудить с коллегами, кто решал задачу!
Вложения:
DoctorRoza_1_40.dt
Название: Задача 1.40
Отправлено: Алекксандра от Сентябрь 18, 2011, 02:56:38 pm
Привет! Посмотрите!
Вложения:
1-40.dt
Название: Задача 1.40
Отправлено: Para_1987 от Сентябрь 19, 2011, 02:06:20 pm
Quote (Алекксандра)
Привет! Посмотрите!


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

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

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

 а вообще задачка интересная, разминает мозг)))
Название: Задача 1.40
Отправлено: Алекксандра от Сентябрь 21, 2011, 04:40:50 pm
Спасибо за ответ! буду исправлять.

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

Название: Задача 1.40
Отправлено: LEOON от Октябрь 06, 2011, 01:58:25 am
Честно говоря, как уже писалось выше, мутное задание. Решил и вроде бы все условия соблюдены, но с точки зрения разумности того что происходит вышел полные кавардак.
 1. У меня расписание - РС с измерением класс и ресурсом курс(вытекает из условия), для каждого дня в периоде делаю запись. Типа есть запись в периоде класс занят.
 2. Заполнение в РН делаю так же(запись по каждому дню, складываю еденички).
 Но к примеру, не поясняется как контролировать рамки курса(т.е по принципу вместимости человек может попасть со 2-го дня в одном классе на 1-ый день в другом ).
 Так же ничего не сказано про то как должен подбираться курс(в документ).
 В общем решил и забыл.
Название: Задача 1.40
Отправлено: Para_1987 от Ноябрь 21, 2011, 02:37:30 pm
Клевая задача, хитрая и в тоже время вроде бы простая. Решил, выкладываю на критику.
 РС: Расписание
 РН: ЗанятостьКлассов. (оборотный)

 Все условия соблюдены + проверки на занятость класса, выходных дней, на существование вообще расписания на день заявки по указанному курсу. Единственное, возможно с отчетом намудрил, хотя правильно работает.
Вложения:
Para_1987_1.40.dt
Название: Задача 1.40
Отправлено: kow1976 от Декабрь 14, 2011, 08:58:24 am
При чтении задачи сложилась впечатление что не хватает показателей для полного учета.
 Я думаю что в учете должна участвовать информация о конкретной группе
 Например
 Класс №1 Групп№1 01.10.11 по 12.10.11 по Бухгалтерскому учету
 Класс №1 Групп№2 15.10.11 по 25.10.11 по Бухгалтерскому учету

 Группы - нужно назначать программно(группы создаются в пределах месяца (Расписания)) и заполняемость классов отслеживать по группам
Название: Задача 1.40
Отправлено: kow1976 от Декабрь 16, 2011, 07:35:51 am
Такой вариант решения
Вложения:
kow1976_1.40.dt
Название: Задача 1.40
Отправлено: TuMyP1985 от Июль 07, 2013, 05:21:11 pm
мой вариант
Вложения:
KTT_1_40.dt
Название: Задача 1.40
Отправлено: artfa от Июль 17, 2013, 03:45:16 pm
Еще одна задача у к\й нельзя создать 100% правильное решение.

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

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

 Не люблю я такие задачи в к\х нет явного правильного решения, на экзамене придется выбирать м\у законченностью решения и дефицитом времени
Вложения:
1.40.dt
Название: Задача 1.40
Отправлено: axlch от Август 09, 2013, 10:42:35 pm
Задачка мутноватая, с подводным камнем, в виде коллизии в последнем условии к отчету: ведь в условии четко сказано - слушатель ходит на выбранный им курс в пределах выбранного им же периода и если нет места в одном классе - учится в другом(классные курсы :), но таково условие..),а в последнем условии к отчету появляются новые условия - оказывается слушатель должен привязывается к курсу-классу иначе приведенная формула расчета становится абсурдной (если предположить, что в определенный момент число слушателей, записавшихся на курс превышает число мест в рассматриваемом классе (например на один из курсов записалось не 15 а 25 человек - по условию занятия по данному курсу могут идти в 2-х классах) и если тупо вставить в отчет данную формулу, то может вылезти, что "% по посещению" в рассматриваемом классе превышает 100%)) Поэтому формула должна быть либо с ограничением по вместимости либо -
 Кол-воФактическиОтучившихсяВДанномКлассеСлушателейВПериодДействияРасписания / (Кол-воМестВКлассе * Кол-воДнейКогдаКлассЗанятВПериодДействияРасписания, а в остальном задачка не очень сложная - все условия легко воплотимы..
Вложения:
axlch_1_40.dt
Название: Задача 1.40
Отправлено: oracle77 от Февраль 12, 2014, 03:52:08 pm
axlch вас чего заявке от балды любой может курсы посещать? где же поле слушатель?

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

 КонецЕсли;


 Объясните почему?
 Основной Режим запуска - УП, Режим упр-я блокировкой - Управляемый surprised
Вложения:
1Cv8_1_40Maikl.dt
Название: Задача 1.40
Отправлено: Demy от Июнь 19, 2014, 02:38:45 pm
Цитата umbus ()
Объясните почему?
Ты не установил флаг записи. Добавь строку
Код
Движения.ЗанятостьКлассов.Записывать = Истина;
или замени последнюю строку на:
 
Код
Движения.ЗанятостьКлассов.Записать();
Хотя за давностью думаю ты уже и сам разобрался, но вдруг кому понадобится. smile
Название: Задача 1.40
Отправлено: bsbo от Июнь 19, 2014, 03:19:49 pm
Мое:)))
Вложения:
140.dt
Название: Re: Задача 1.40
Отправлено: Odines от Март 25, 2015, 09:36:27 pm
Мое
Название: Re: Задача 1.40
Отправлено: rusmosav от Май 06, 2015, 12:35:28 pm
Прощу оценить.
Название: Re: Задача 1.40
Отправлено: Шахназар от Май 08, 2015, 02:35:31 pm
Мое
Красиво сделал. С Графиком РАботы. Как у настоящий пацанов!
Название: Re: Задача 1.40
Отправлено: axel_work от Февраль 19, 2016, 11:28:27 am
Прощу оценить.

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

Название: Re: Задача 1.40
Отправлено: axel_work от Февраль 19, 2016, 11:32:36 am
Просьба критиковать.

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


Название: Re: Задача 1.40
Отправлено: alex_1980 от Июнь 17, 2016, 10:09:00 am
Задача необычная для понимания, но в целом не сложная для реализации

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

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

Отчет строится не сложно
Название: Re: Задача 1.40
Отправлено: alfalume от Сентябрь 07, 2016, 08:20:37 am
мое решение
Название: Re: Задача 1.40
Отправлено: jonik от Сентябрь 27, 2017, 12:26:49 pm
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника  - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
Название: Re: Задача 1.40
Отправлено: jonik от Март 26, 2018, 02:08:50 pm
Всем привет. Задача зубодробительная это точно :o. Достаточно большой полет для фантазии (в плане реализации). Для решения принял несколько условий:
1) Курс не прерывается в рабочие дни
2) Начало и конец курса (в документе Расписание) устанавливается пользователем и строго по графику: пользователь сам считает количество рабочих дней.
Регистр ГрафикРаботы заполняется обработкой (переделал форму и код для упрощения). 2 справочника  - Курсы(реквизит Длительность) и Классы(реквизит Вместимость), 2 документа, 1 оборотный регистр. Проверку на пересечение в расписании делаю в процедуре ПриЗаписи. Отчет не совсем идентичен книжному, но только в таком виде можно правильно вычислить ПроцентПоПосещению - делаю это в СКД ч\з ВычислитьВыражениеСГруппировкойМассив().
Подкорректировал
Название: Re: Задача 1.40
Отправлено: grigoriy-1c от Ноябрь 24, 2019, 11:27:08 pm
Я решил на одном регистре накопления с видом Остатки(Измерения: Дата, Класс, Курс, ресурс Количество). Т.е., грубо говоря, задача рассматривается как складская, документ Расписание делает приход (количество человек в классе), документ Заявка делает расход 1 штука (Справочник Слушатели не использую).
Дата сделана измерением, т.к. нужно в разрезе ее смотреть, сколько осталось слушателей. Отчет по этому регистру также достаточно нетрудно сделать.
Однако, для экзамена эта задача слишком трудна - часа 2 уйдет точно.
Сделал чисто ради интереса на 1-м регистре, но это некорректно с точки зрения экзамена,т.к. регистр никогда не выведется в 0 (классы обычно не заполнены полностью).
Думаю, правильно делать 1 регистр сведений для расписания, 1 оборотный регистр для заявок.
Название: Re: Задача 1.40
Отправлено: grigoriy-1c от Ноябрь 25, 2019, 02:20:28 am
Сделал также на двух регистрах сведений.
Регистр Расписание (периодический, измерение класс, ресурс курс), Регистр Заявки (периодический, измерения курс, класс, заявка, ресурсов нет). Но все равно меньше 2-х часов никак не выходит, много писать + отладка.

Вместо РС Заявки можно было бы использовать подобный РН с видом Обороты (Измерения Курс, Класс, Ресурс Количество - всегда 1). Пожалуй, это самый оптимальный вариант с ТЗ производительности. Во всяком, случае, я лучше не нашел.
Название: Re: Задача 1.40
Отправлено: Антон Петров от Февраль 18, 2020, 03:33:11 pm
Один из самых дурацких отчетов