Материалы курса «Подготовка к Аттестации по Платформе 8.2» – Раздел 1, задача 1.40
Еще одна задача раздела “Оперативный учет” – задача 1.40
Комментарий от Павла:
Не стану скрывать, я решал ее 3 раза перед записью видео. Использовал регистр накопления без измерения “Дата”, не использовал регистр сведений “Производственный календарь”. Решения были громоздкими. Тот результат, что в видео, мне кажется оптимальным.
- Изучите материалы задачи.
- Вопросы, возникшие в ходе изучения этих материалов, задавайте в комментариях на текущей странице. Ответы преподавателя и комментарии других участников будут Вам доступны, только если Вы залогинены и у Вас есть доступ в Мастер-группу.
- Общие вопросы по курсу (в т.ч. организационные) задавайте на стартовой странице.
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (67):
Комментарии закрыты
И все таки, каковы причины не использовать в оборотном регистре который подчинен регистратору поле период а не добавлять еще одно измерение дата. Вроде бы решение становится немного проще, и ограничение можно накладывать на таблицу оборотов. Мы ведь можем оборотный регистр считать по дням. Почему этот вариант был слит? Что в нем плохого? Из за чего идет усложнение задачи? Добавлю пример запроса
ВЫБРАТЬ
Расписание.Класс,
Расписание.Дата,
Расписание.Класс.Мест
ПОМЕСТИТЬ Расписание
ИЗ
РегистрСведений.Расписание КАК Расписание
ГДЕ
Расписание.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И Расписание.Курс = &Курс
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расписание.Класс,
Расписание.Дата КАК Дата,
Расписание.КлассМест – ЕСТЬNULL(ВместимостьОбороты.МестОборот, 0) КАК ОсталосьМест
ИЗ
Расписание КАК Расписание
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Вместимость.Обороты(
&ДатаНачала,
&ДатаОкончания,
День,
Класс В
(ВЫБРАТЬ
Расписание.Класс
ИЗ
Расписание КАК Расписание)) КАК ВместимостьОбороты
ПО Расписание.Класс = ВместимостьОбороты.Класс
И Расписание.Дата = ВместимостьОбороты.Период
ГДЕ
Расписание.КлассМест – ЕСТЬNULL(ВместимостьОбороты.МестОборот, 0) > 0
УПОРЯДОЧИТЬ ПО
Расписание.КлассМест УБЫВ
ИТОГИ ПО
Дата
Так же не понимаю для чего Дата делается измерением в расписании. Можно сделать измерение Класс, и использовать период как день. У вас написано что вы пробовали так сделать(в пдф), но ушли от этого решения, почему?
Так как это было несколько лет назад, я ответить на вопрос “почему был слит” уже не могу. Пришлите Ваше решение мне на почту, я в течении недели дам по нему резюме.
В этом решении не учитывается только одно – что курсы могут пересекаться по времени, и Заявка может занять конец одного потока и начало другого, что для ученика не очень хорошо. Конечно, такие задачи не встречаются на экзамене, ну а вдруг:)
Хотя бы теоретически думаю, надо такое учитывать, или все же излишнее время потрачу на разбор?
Время – важный критерий на экзамене. Не переусердствуйте, при усложнении задач.
Добрый вечер! При разборе запроса, заметил момент: заполнение классов чередуется. Заполняется не тот, у которого вместимость самая большая, а тот у которого больше всего свободных мест.
Не имелось ли ввиду в задаче, сначала заполнить именно класс максимальной вместимости, а потом переходить к следующему?
Прошу прощения. Вопрос снят.
Добрый день!
Скажите, реально ли встречаются такие не стандартные задачи на экзамене? Тут пришлось голову поломать, а на экзамене на это времени не будет. Или это задача для разминки ума?
Было бы ошибкой на экзамене, если решить эту задачу на регистре накопления Остатки (что интуитивно ближе) + в документе составления расписания (он ежемесячный) сносить все остатки в ноль с датой меньше текущей? Курс прошел, записаться на него уже никто не сможет – остатки можно удалить.
На экзамене подобные задачи не встречаются. С регистром накопления остатков мне решение не нравится, тут нет показателя остатка.
Понятно, спасибо.
Здравствуйте Павел! Скажите ,а почему вы не используйте стандартную обработку для заполнения графика ,которая прилагается к каркасной конфигурации?Можно её использовать на экзамене или в ней есть какой то подвох?
Можете использовать. Мне привычнее писать свою, чем разбираться в чужом коде.
Добрый день, Павел. Почему Вы в регистре накопления используете отдельное измерение Дата а не пишите дату в Период?
Приветствую. Потому что Дата это именно разрез регистра, а не реквизит регистрирующий дату изменения показателя.
Здравствуйте,
Похоже Краткость – Ваша сестра, Павел. Но, можно ли подробнее осветить разницу реализации этих двух вариантов?
В Вашем варианте, регистр с классами в ноль не сводится.
Мне не удалось смоделировать ситуацию, при которой в отчете отображались бы корректные цифры. Вроде загрузил класс на 75%, а мне пишет что места есть, и все, других показателей не отображает. https://goo.gl/a7D3mN
Добрый день,
Если делать регистр остаточным, то он и в Вашем случае не сводим в ноль. он в любом случае не сводим, т.к. классы не полностью заполняются. разница между Вашей реализацией и моей в том, что у Вас дата это измерение оборотного регистра, период это дата документа – регистратора, а у меня отдельного ресурса Дата нет, период – это день обучения, туда пишется то, что у Вас в отдельный ресурс Дата. Если я спроектировал регистр неправильно, то хотел бы понять почему.
Так он именно по этому и не остаточный у меня.
У Вас регистр в ноль не сводится, что еще объяснить? Это минус 3 балла на сертификации.
Дата у меня – это разрез показателя, когда запись в регистр по значению разреза показателя 01.01.2015 была внесена, 20м числом января или 7 декабря (дата регистратора) мне не важно.
С регистрами, со всеми, в целом логика такая: то что хранит регистр – это ресурс (ресурсы), то в разрезе чего мы храним показатели – это измерения. Все остальное лишь дополнительные комментарии к записям изменяющим значения показателя (реквизиты), в том числе и “Период”.
Регистр у меня оборотный, дату писал в период, у каждого документа в движениях строки с разными периодами. в итоге у меня проще сделаны запросы, виртуальную таблицу я могу ограничить диапазоном отчета, т.е. базу напрягаю меньше.
В общем, понял Вашу мысль по теме, спасибо за консультацию.
Здравствуйте, Павел.
1.Решил задачу немного по другому без РС “Расписание”.Сделал всё на 1 РН “Занятость классов” с видом остатки.Документ “Расписание” делает приходные движения в регистр “Занятость классов”, документ “Заявка на обучение” – расходные, списывая по 1 занятому месту в 1 документе. Я думаю, такое решение не противоречит условиям задачи.Насчёт правильности отчёта не совсем уверен, сделал через 1 набор данных. Можете посмотреть решение?
Ниже ссылка на .cf файл:
https://drive.google.com/file/d/0B65VLY-LR8SvYkY2RDRGbF9EUFk/view?usp=sharing
2.В решении в отчёте при связи 1 и 2 набора данных по условию “ИСТИНА” происходит синтаксическая ошибка при выполнении отчёта.
Приветствую.
1. Политика поддержки не предполагает проверку баз. Если есть конкретные вопросы, я отвечу, если будет необходимость для ответа посмотреть базу, я посмотрю.
2. Странно, попробуйте платформу обновить.
1.Хорошо. Тогда для чего так усложнена реализация задачи? В Вашем решении в обработке проведения документа “Заявка на обучение” построен такой запрос: сначала отбираются все классы из РС”Расписание” по выбранному слушателем курсу и за интервал дат обучения из документа, затем ко всему этому присоединяется виртуальная таблица “РегистрНакопления.ЗанятостьКлассов.Обороты” c отбором по классам(выбранным из РС расписание за интервал дат и по курсу) и отбором по интервалу дат обучения из документа.А затем уже вычисляется количество свободных мест “Расписание.МестВсего – ЕСТЬNULL(ЗанятостьКлассовОбороты.ЗанятоМестОборот, 0) КАК СвободноМест”.
Не проще ли сделать РН «Занятость классов» с видом остатки(измерения: класс, дата, курс;ресурс: свободно мест).Делать приходные движения в этот регистр документом Расписание по ТЧ документа, в ресурс “Свободно мест” писать сразу же полное количество мест по классу. Документом “Заявка на обучение” делать расходные движения, т.е. сначала мы берём остатки по регистру «Занятость классов» с отбором по классу и за интервал дат обучения. В остатках уже будет ресурс “СвободноМестОстаток”.И далее если “СвободноМестОстаток” не равно нулю списываем по 1 месту каждым документом “Заявка на обучение”.
А у нас класс может полностью не заполнится, как тогда регистр в ноль сведем?
Добрый день!
При проведении Заявки мы указываем к виртуальной таблице оборотов условие: Класс В (ВЫБРАТЬ РАЗЛИЧНЫЕ
А.Класс ИЗ Расписание КАК А). РАЗЛИЧНЫЕ указываем для оптимизации или это как-то может повлиять на результат?
Приветствую. По факту РАЗЛИЧНЫЕ никак не сказывается на производительности в этом примере, скорее даже негативно будет влиять, в случае если дублей нет.
Здравствуйте, Павел! В каркасной конфигурации есть РС “ГрафикиРаботы” и обработка “ЗаполнениеГрафика”. Правильно ли я думаю, что для решения этой задачи можно использовать их, что бы не тратить время на экзамене?
Вы можете использовать любой механизм, если это кажется Вам правильным.
Я не приверженец использования каркасной конфигурации.
Допустимо ли в данной задаче использовать вместо регистра сведений оборотный регистр накопления для хранения информации о расписании курсов?
Можно будет получать итоговые данные за какой-то период, например потенциальное кол-во мест в классах за данный период и т.д.
Или же регистр сведений без вариантов?
Приведите рабочий пример решения – обсудим.
Я изначально сделал через 2 регистра оборотов. Решение работает.
https://drive.google.com/file/d/0B3Q4-Lu05qM7a3NVNHItbGQ4NGM/view?usp=sharing
Выгрузка проживает по ссылке. Можно еще оптимизировать запрос в отчете, но вопрос не про это.
Для конкретно этой задачи решить можно и так и так. Не будет ли ошибкой решение через оборотный регистр?
Не могу до понедельника посмотреть решение. Напомните, если не отвечу в понедельник.
Павел, добрый день!
Вопрос уже поднимался несколько раз, но ответ я не нашла.
Связь 1 и 2 набора по условию “истина” приводит к синтаксической ошибке в вычисляемых полях. Без этой связи отчет работает правильно. Насколько она необходима?
Если честно, то я уже не помню про связь. Пришлите мне Ваш вариант решения, я посмотрю.
Добрый день, Павел!
Если в Отчете на закладке “Связи наборов данных” сделать как в видео, т.е.:
Источник связи “НаборДанных1”
Приемник связи “НаборДанных2”
Условие связи “ИСТИНА”
где
Источник связи – это Справочник “Классы”, из кот. Вы выбрали поля “Классы.Ссылка” и “Классы.КоличествоМест” и на закладке “Объединения/Псевдонимы” переименовали поле “Классы.Ссылка” в “Класс”;
Приемник связи – это Регистр сведений “Расписание”, из кот. Вы выбрали поле “ПроизводственныйКалендарь.Признак”, на закладке “Группировка” выбрали только Суммируемое поле “ПроизводственныйКалендарь.Признак” без группового поля, на закладке “Условия” – “ПроизводственныйКалендарь.Дата Между НачалоПериода и “КонецПериода” и на закладке “Объединения/Псевдонимы” переименовали “ПроизводственныйКалендарь.Признак” в “КоличествоРабочихДней”;
то при формировании отчета получаем синтаксическую ошибку. Если убрать связь между “НаборДанных1” и “НаборДанных2”, ошибки нет. Как правильно?
Мне кажется это ошибка в релизе платформы. В учебной базе все работает.
Павел, обратил внимание, что в вашем решении некорректно работает перепроведение документа Заявка на обучение. Понимаю, что в задаче об этом ни слова, но всё равно как-то не по себе от такого явления)))
В связи с этим в голову пришла такая мысль – сделать регистр накопления не Оборотным, а виде остатков.
Т.е. при составлении расписания делается запись Приход на максимальную вместимость зала, а заявками делается запись расход.
Алгоритм практически не изменится.
Как вы думаете, будет ли считаться такое решение ошибкой на экзамене? Или, может быть, оно просто неверное?
Будет ошибкой. “Регистр в ноль не сводится”.
Почему? Ведь структура регистра такая же
Пример:
Класс Дата Количество
01 02.01.2014 +9 – при составлении расписания
01 02.01.2014 -1 – при заявке
01 02.01.2014 -1
01 02.01.2014 7 – остаток (итоги)
02 02.01.2014 +10 – при составлении расписания
02 02.01.2014 -1 – при заявке
02 02.01.2014 9 – остаток (итоги)
В каком случае этот регистр не сводится в 0?
Может я что-то не понимаю – но похоже на костыль. Искусственно поддерживать регистр в актуальном состоянии…
Может я что-то не понимаю – но в каком месте тут костыль?
Ну когда остаток будет равен нулю? Если класс не укомплектовали полностью?
При проведении документа “Заявка на обучение” не обязательно же устанавливать блокировку на регистр сведений Расписание? На результат проведения это не повлияет.
не обязательно.
В уроке сказано на 26,45 минуте что придется сделать блокировку на весь РН.ЗанятостьКлассов, а если я разобью запрос на две части, в первой части получится ВТ, сделаю Запрос.МенеджерВременныхТаблиц, то получается что я вторую часть запроса смогу заблокировать не все, а только по классу и дате. это будет правильно?
Сформулируйте вопрос, я, к сожалению, не имею возможности пересматривать видео.
На видео мы соединили два запроса, по Регистрам сведениям и регистрам накоплений, не помню в чем там суть уже, но Вы сказали, что мы не сможем наложить во втором запросе блокировку на регистр накоплений, и взяли данные из таб части документа, я сделал по другому.. я разбил запрос на 2 части.. первую часть вывел во временную таблицу, и на основании нее сделал блокировку второго регистра, и также составил вторую часть запроса. Это правильно считается?
Да, вполне.
Почему то не получилось с наборами данных СКД, сделал в одном запросе, причем при расчете процента посещений нам нужно общее кол-во людей которые посетят курс (оборот по классу) разделить на Вместимость * Плановое значение посещаемости. Сделал одним запросом и вывел в отчет детальные записи. Если же отбирать обороты по датам и классам, то у нас получится размножение записей. Правильно ли такое решение?
Запрос:
ВЫБРАТЬ
Классы.Ссылка КАК Класс,
Классы.КоличествоМест КАК Вместимость
ПОМЕСТИТЬ Классы
ИЗ
Справочник.Классы КАК Классы
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СУММА(ПроизводственныйКалендарь.Значение) КАК КоличествоРабочихДней
ПОМЕСТИТЬ РабочиеДни
ИЗ
РегистрСведений.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь
ГДЕ
ПроизводственныйКалендарь.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗаполненностьКлассовОбороты.Класс,
ЗаполненностьКлассовОбороты.ЗанятостьКлассаОборот КАК Занято
ПОМЕСТИТЬ ЗанятостьКлассов
ИЗ
РегистрНакопления.ЗаполненностьКлассов.Обороты КАК ЗаполненностьКлассовОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расписание.Класс,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Расписание.Дата) КАК КоличествоЗапланировано
ПОМЕСТИТЬ План
ИЗ
РегистрСведений.Расписание КАК Расписание
ГДЕ
Расписание.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
СГРУППИРОВАТЬ ПО
Расписание.Класс
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Классы.Класс,
Классы.Вместимость,
ВЫБОР
КОГДА ЕСТЬNULL(РабочиеДни.КоличествоРабочихДней, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(План.КоличествоЗапланировано, 0) / РабочиеДни.КоличествоРабочихДней * 100
КОНЕЦ КАК ПроцентПоПлану,
ВЫБОР
КОГДА ЕСТЬNULL(План.КоличествоЗапланировано, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ЗанятостьКлассов.Занято, 0) / (Классы.Вместимость * План.КоличествоЗапланировано) * 100
КОНЕЦ КАК ПроцентПоПосещению
ИЗ
Классы КАК Классы
ЛЕВОЕ СОЕДИНЕНИЕ РабочиеДни КАК РабочиеДни
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ ЗанятостьКлассов КАК ЗанятостьКлассов
ПО Классы.Класс = ЗанятостьКлассов.Класс
ЛЕВОЕ СОЕДИНЕНИЕ План КАК План
ПО Классы.Класс = План.Класс
Вообще не могу понять в чем дело. При описании вычисляемых полей Ругается на любое полене из первого набора данных. При исполнении отчета выдается:
Ошибка исполнения отчета
по причине:
Ошибка в выражении
по причине:
Синтаксическая ошибка
Судя по всему, в запросе синтаксическая ошибка.
Павел, у меня не получается доделать отчет, не могли бы вы все-таки решить его до конца? ) Хочется увидеть готовое решение отчета.
Что конкретно не получается вывести в отчете?
не пойму как вывести %по посещению
% по посещению считается как отношение в процентах количества посещений на запланированные курсы, проводимые в этом классе в этот период к общему количеству
посещений, которые должны были быть. Например, если вместимость класса 20 мест, в нем запланировано 2 курса на 3 и на 2 дня, на первый курс записались 15 человек, а на второй 10, то процент посещения класса составит (15*3+10*2) / (20*3+20*2) = 0.65 т.е. 65%
Какие из исходных данных Вам не получить?
Павел, добрый день.
Зачем нужна блокировка на регистр сведений “Расписание” ?
Дабы не забить классы сверх нормы при параллельном проведении двух документов.
Павел, а можно ли вместо РС Расписание и РН с занятыми местами (только обороты) использовать один РН с видом остатки с ресурсом “Количество свободных мест”, в который писать при проведении расписания все данные по расписанию и количество свободных мест исходя из вместимости класса, а при проведении заявки подбирать нужный класс и количество мест уменьшать на одно? Или без разницы как считаете? Хотя тогда наверное может получиться, что регистр не всегда будет схлопываться, ведь в задаче сказано, что классы могут не полностью заполняться… наверное не очень хороший вариант…
Отвечу так: 1 регистр = 1 показатель учета. Так что 1 регистр с остатками оно конечно понятно, а как узнать сколько всего мест? И как по нему планировать занятость… Не понятно.
“Как узнать сколько мест?” – это приход по регистру (приход делает док. Расписание, делает приход на количество вообще мест в классе)… но в общем понял, остатки по регистру же не будут схлопываться (раз тем более по условию классы обычно не полные), так что за это балы снимут, да и проще ваш вариант… :-)
Павел в Лекции вы упомянули, что при выводе сообщения о нехватке товара использовать Представление номенклатуры. Можно ли использовать просто ссылку?
При выводе ссылочных полей пользователю система получает представление по ссылке, по сути строит запрос к БД. Зачем нам еще запросы, если мы уже и так получаем данные запросом. Лучше сразу получать представление и выводить его, а не ссылку.
Добрый день Павел, можно ли обойтись без агрегатов? будет ли это ошибкой на экзамене?
Можно. В требованиях нет явного указания, что агрегаты необходимо создавать.
Можно ли в документе «Расписание» не создавать табличной части и обработки проведения, а просто вывести движения на форму? Или обязательно нужно, чтобы документ проводился?
Не принципиально
Вопрос снимается. Называется “внимательно читайте задание” :)
Я не поняла про продолжительность курса. Он длится несколько дней? Т.е. в заявке выбирается курс, который идет, скажем, с 3-го по 5-е?
Понятия “начало курса” и “конец курса” в задаче отсутствует. То есть курс каждый день начинается и заканчивается. По заявке нужно найти все даты по интересующему курсу за указанный период и занять место в свободном классе.