Материалы курса «Подготовка к Аттестации по Платформе 8.2» – Раздел 1, задача 1.40

Еще одна задача раздела “Оперативный учет” – задача 1.40

Комментарий от Павла:
Не стану скрывать, я решал ее 3 раза перед записью видео. Использовал регистр накопления без измерения “Дата”, не использовал регистр сведений “Производственный календарь”. Решения были громоздкими. Тот результат, что в видео, мне кажется оптимальным.

  • Изучите материалы задачи.
  • Вопросы, возникшие в ходе изучения этих материалов, задавайте в комментариях на текущей странице. Ответы преподавателя и комментарии других участников будут Вам доступны, только если Вы залогинены и у Вас есть доступ в Мастер-группу.
  • Общие вопросы по курсу (в т.ч. организационные) задавайте на стартовой странице.

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (67):

  1. GermanovVitaliy

    И все таки, каковы причины не использовать в оборотном регистре который подчинен регистратору поле период а не добавлять еще одно измерение дата. Вроде бы решение становится немного проще, и ограничение можно накладывать на таблицу оборотов. Мы ведь можем оборотный регистр считать по дням. Почему этот вариант был слит? Что в нем плохого? Из за чего идет усложнение задачи? Добавлю пример запроса
    ВЫБРАТЬ
    Расписание.Класс,
    Расписание.Дата,
    Расписание.Класс.Мест
    ПОМЕСТИТЬ Расписание
    ИЗ
    РегистрСведений.Расписание КАК Расписание
    ГДЕ
    Расписание.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И Расписание.Курс = &Курс
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Расписание.Класс,
    Расписание.Дата КАК Дата,
    Расписание.КлассМест – ЕСТЬNULL(ВместимостьОбороты.МестОборот, 0) КАК ОсталосьМест
    ИЗ
    Расписание КАК Расписание
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Вместимость.Обороты(
    &ДатаНачала,
    &ДатаОкончания,
    День,
    Класс В
    (ВЫБРАТЬ
    Расписание.Класс
    ИЗ
    Расписание КАК Расписание)) КАК ВместимостьОбороты
    ПО Расписание.Класс = ВместимостьОбороты.Класс
    И Расписание.Дата = ВместимостьОбороты.Период
    ГДЕ
    Расписание.КлассМест – ЕСТЬNULL(ВместимостьОбороты.МестОборот, 0) > 0

    УПОРЯДОЧИТЬ ПО
    Расписание.КлассМест УБЫВ
    ИТОГИ ПО
    Дата
    Так же не понимаю для чего Дата делается измерением в расписании. Можно сделать измерение Класс, и использовать период как день. У вас написано что вы пробовали так сделать(в пдф), но ушли от этого решения, почему?

    • GROOVY

      Так как это было несколько лет назад, я ответить на вопрос “почему был слит” уже не могу. Пришлите Ваше решение мне на почту, я в течении недели дам по нему резюме.

  2. rocknrollerman

    В этом решении не учитывается только одно – что курсы могут пересекаться по времени, и Заявка может занять конец одного потока и начало другого, что для ученика не очень хорошо. Конечно, такие задачи не встречаются на экзамене, ну а вдруг:)
    Хотя бы теоретически думаю, надо такое учитывать, или все же излишнее время потрачу на разбор?

    • GROOVY

      Время – важный критерий на экзамене. Не переусердствуйте, при усложнении задач.

  3. Denmv

    Добрый вечер! При разборе запроса, заметил момент: заполнение классов чередуется. Заполняется не тот, у которого вместимость самая большая, а тот у которого больше всего свободных мест.
    Не имелось ли ввиду в задаче, сначала заполнить именно класс максимальной вместимости, а потом переходить к следующему?

  4. vmalov

    Добрый день!
    Скажите, реально ли встречаются такие не стандартные задачи на экзамене? Тут пришлось голову поломать, а на экзамене на это времени не будет. Или это задача для разминки ума?
    Было бы ошибкой на экзамене, если решить эту задачу на регистре накопления Остатки (что интуитивно ближе) + в документе составления расписания (он ежемесячный) сносить все остатки в ноль с датой меньше текущей? Курс прошел, записаться на него уже никто не сможет – остатки можно удалить.

    • GROOVY

      На экзамене подобные задачи не встречаются. С регистром накопления остатков мне решение не нравится, тут нет показателя остатка.

  5. AlexGroovyGG

    Здравствуйте Павел! Скажите ,а почему вы не используйте стандартную обработку для заполнения графика ,которая прилагается к каркасной конфигурации?Можно её использовать на экзамене или в ней есть какой то подвох?

    • GROOVY

      Можете использовать. Мне привычнее писать свою, чем разбираться в чужом коде.

  6. mvvlad

    Добрый день, Павел. Почему Вы в регистре накопления используете отдельное измерение Дата а не пишите дату в Период?

    • GROOVY

      Приветствую. Потому что Дата это именно разрез регистра, а не реквизит регистрирующий дату изменения показателя.

      • mvvlad

        Здравствуйте,
        Похоже Краткость – Ваша сестра, Павел. Но, можно ли подробнее осветить разницу реализации этих двух вариантов?

        • GROOVY

          В Вашем варианте, регистр с классами в ноль не сводится.
          Мне не удалось смоделировать ситуацию, при которой в отчете отображались бы корректные цифры. Вроде загрузил класс на 75%, а мне пишет что места есть, и все, других показателей не отображает. https://goo.gl/a7D3mN

          • mvvlad

            Добрый день,
            Если делать регистр остаточным, то он и в Вашем случае не сводим в ноль. он в любом случае не сводим, т.к. классы не полностью заполняются. разница между Вашей реализацией и моей в том, что у Вас дата это измерение оборотного регистра, период это дата документа – регистратора, а у меня отдельного ресурса Дата нет, период – это день обучения, туда пишется то, что у Вас в отдельный ресурс Дата. Если я спроектировал регистр неправильно, то хотел бы понять почему.

            • GROOVY

              Так он именно по этому и не остаточный у меня.
              У Вас регистр в ноль не сводится, что еще объяснить? Это минус 3 балла на сертификации.
              Дата у меня – это разрез показателя, когда запись в регистр по значению разреза показателя 01.01.2015 была внесена, 20м числом января или 7 декабря (дата регистратора) мне не важно.

              С регистрами, со всеми, в целом логика такая: то что хранит регистр – это ресурс (ресурсы), то в разрезе чего мы храним показатели – это измерения. Все остальное лишь дополнительные комментарии к записям изменяющим значения показателя (реквизиты), в том числе и “Период”.

              • mvvlad

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

  7. zaharknyaz

    Здравствуйте, Павел.
    1.Решил задачу немного по другому без РС “Расписание”.Сделал всё на 1 РН “Занятость классов” с видом остатки.Документ “Расписание” делает приходные движения в регистр “Занятость классов”, документ “Заявка на обучение” – расходные, списывая по 1 занятому месту в 1 документе. Я думаю, такое решение не противоречит условиям задачи.Насчёт правильности отчёта не совсем уверен, сделал через 1 набор данных. Можете посмотреть решение?
    Ниже ссылка на .cf файл:

    https://drive.google.com/file/d/0B65VLY-LR8SvYkY2RDRGbF9EUFk/view?usp=sharing

    2.В решении в отчёте при связи 1 и 2 набора данных по условию “ИСТИНА” происходит синтаксическая ошибка при выполнении отчёта.

    • GROOVY

      Приветствую.
      1. Политика поддержки не предполагает проверку баз. Если есть конкретные вопросы, я отвечу, если будет необходимость для ответа посмотреть базу, я посмотрю.
      2. Странно, попробуйте платформу обновить.

      • zaharknyaz

        1.Хорошо. Тогда для чего так усложнена реализация задачи? В Вашем решении в обработке проведения документа “Заявка на обучение” построен такой запрос: сначала отбираются все классы из РС”Расписание” по выбранному слушателем курсу и за интервал дат обучения из документа, затем ко всему этому присоединяется виртуальная таблица “РегистрНакопления.ЗанятостьКлассов.Обороты” c отбором по классам(выбранным из РС расписание за интервал дат и по курсу) и отбором по интервалу дат обучения из документа.А затем уже вычисляется количество свободных мест “Расписание.МестВсего – ЕСТЬNULL(ЗанятостьКлассовОбороты.ЗанятоМестОборот, 0) КАК СвободноМест”.

        Не проще ли сделать РН «Занятость классов» с видом остатки(измерения: класс, дата, курс;ресурс: свободно мест).Делать приходные движения в этот регистр документом Расписание по ТЧ документа, в ресурс “Свободно мест” писать сразу же полное количество мест по классу. Документом “Заявка на обучение” делать расходные движения, т.е. сначала мы берём остатки по регистру «Занятость классов» с отбором по классу и за интервал дат обучения. В остатках уже будет ресурс “СвободноМестОстаток”.И далее если “СвободноМестОстаток” не равно нулю списываем по 1 месту каждым документом “Заявка на обучение”.

        • GROOVY

          А у нас класс может полностью не заполнится, как тогда регистр в ноль сведем?

  8. Алексей

    Добрый день!
    При проведении Заявки мы указываем к виртуальной таблице оборотов условие: Класс В (ВЫБРАТЬ РАЗЛИЧНЫЕ
    А.Класс ИЗ Расписание КАК А). РАЗЛИЧНЫЕ указываем для оптимизации или это как-то может повлиять на результат?

    • GROOVY

      Приветствую. По факту РАЗЛИЧНЫЕ никак не сказывается на производительности в этом примере, скорее даже негативно будет влиять, в случае если дублей нет.

  9. Виктор

    Здравствуйте, Павел! В каркасной конфигурации есть РС “ГрафикиРаботы” и обработка “ЗаполнениеГрафика”. Правильно ли я думаю, что для решения этой задачи можно использовать их, что бы не тратить время на экзамене?

    • GROOVY

      Вы можете использовать любой механизм, если это кажется Вам правильным.
      Я не приверженец использования каркасной конфигурации.

  10. Александр

    Допустимо ли в данной задаче использовать вместо регистра сведений оборотный регистр накопления для хранения информации о расписании курсов?

    Можно будет получать итоговые данные за какой-то период, например потенциальное кол-во мест в классах за данный период и т.д.

    Или же регистр сведений без вариантов?

    • GROOVY

      Приведите рабочий пример решения – обсудим.

      • Александр

        Я изначально сделал через 2 регистра оборотов. Решение работает.
        https://drive.google.com/file/d/0B3Q4-Lu05qM7a3NVNHItbGQ4NGM/view?usp=sharing

        Выгрузка проживает по ссылке. Можно еще оптимизировать запрос в отчете, но вопрос не про это.

        Для конкретно этой задачи решить можно и так и так. Не будет ли ошибкой решение через оборотный регистр?

        • GROOVY

          Не могу до понедельника посмотреть решение. Напомните, если не отвечу в понедельник.

  11. OlliVic

    Павел, добрый день!
    Вопрос уже поднимался несколько раз, но ответ я не нашла.
    Связь 1 и 2 набора по условию “истина” приводит к синтаксической ошибке в вычисляемых полях. Без этой связи отчет работает правильно. Насколько она необходима?

    • GROOVY

      Если честно, то я уже не помню про связь. Пришлите мне Ваш вариант решения, я посмотрю.

  12. Bandoleros

    Добрый день, Павел!

    Если в Отчете на закладке “Связи наборов данных” сделать как в видео, т.е.:

    Источник связи “НаборДанных1”
    Приемник связи “НаборДанных2”
    Условие связи “ИСТИНА”

    где

    Источник связи – это Справочник “Классы”, из кот. Вы выбрали поля “Классы.Ссылка” и “Классы.КоличествоМест” и на закладке “Объединения/Псевдонимы” переименовали поле “Классы.Ссылка” в “Класс”;

    Приемник связи – это Регистр сведений “Расписание”, из кот. Вы выбрали поле “ПроизводственныйКалендарь.Признак”, на закладке “Группировка” выбрали только Суммируемое поле “ПроизводственныйКалендарь.Признак” без группового поля, на закладке “Условия” – “ПроизводственныйКалендарь.Дата Между НачалоПериода и “КонецПериода” и на закладке “Объединения/Псевдонимы” переименовали “ПроизводственныйКалендарь.Признак” в “КоличествоРабочихДней”;

    то при формировании отчета получаем синтаксическую ошибку. Если убрать связь между “НаборДанных1” и “НаборДанных2”, ошибки нет. Как правильно?

    • GROOVY

      Мне кажется это ошибка в релизе платформы. В учебной базе все работает.

  13. CeHbKA

    Павел, обратил внимание, что в вашем решении некорректно работает перепроведение документа Заявка на обучение. Понимаю, что в задаче об этом ни слова, но всё равно как-то не по себе от такого явления)))

    В связи с этим в голову пришла такая мысль – сделать регистр накопления не Оборотным, а виде остатков.
    Т.е. при составлении расписания делается запись Приход на максимальную вместимость зала, а заявками делается запись расход.
    Алгоритм практически не изменится.

    Как вы думаете, будет ли считаться такое решение ошибкой на экзамене? Или, может быть, оно просто неверное?

    • GROOVY

      Будет ошибкой. “Регистр в ноль не сводится”.

      • CeHbKA

        Почему? Ведь структура регистра такая же
        Пример:
        Класс Дата Количество
        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?

        • GROOVY

          Может я что-то не понимаю – но похоже на костыль. Искусственно поддерживать регистр в актуальном состоянии…

          • CeHbKA

            Может я что-то не понимаю – но в каком месте тут костыль?

            • GROOVY

              Ну когда остаток будет равен нулю? Если класс не укомплектовали полностью?

  14. acpavel

    При проведении документа “Заявка на обучение” не обязательно же устанавливать блокировку на регистр сведений Расписание? На результат проведения это не повлияет.

  15. boobzx

    В уроке сказано на 26,45 минуте что придется сделать блокировку на весь РН.ЗанятостьКлассов, а если я разобью запрос на две части, в первой части получится ВТ, сделаю Запрос.МенеджерВременныхТаблиц, то получается что я вторую часть запроса смогу заблокировать не все, а только по классу и дате. это будет правильно?

    • GROOVY

      Сформулируйте вопрос, я, к сожалению, не имею возможности пересматривать видео.

      • boobzx

        На видео мы соединили два запроса, по Регистрам сведениям и регистрам накоплений, не помню в чем там суть уже, но Вы сказали, что мы не сможем наложить во втором запросе блокировку на регистр накоплений, и взяли данные из таб части документа, я сделал по другому.. я разбил запрос на 2 части.. первую часть вывел во временную таблицу, и на основании нее сделал блокировку второго регистра, и также составил вторую часть запроса. Это правильно считается?

  16. Андрей

    Почему то не получилось с наборами данных СКД, сделал в одном запросе, причем при расчете процента посещений нам нужно общее кол-во людей которые посетят курс (оборот по классу) разделить на Вместимость * Плановое значение посещаемости. Сделал одним запросом и вывел в отчет детальные записи. Если же отбирать обороты по датам и классам, то у нас получится размножение записей. Правильно ли такое решение?

    Запрос:

    ВЫБРАТЬ
    Классы.Ссылка КАК Класс,
    Классы.КоличествоМест КАК Вместимость
    ПОМЕСТИТЬ Классы
    ИЗ
    Справочник.Классы КАК Классы
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СУММА(ПроизводственныйКалендарь.Значение) КАК КоличествоРабочихДней
    ПОМЕСТИТЬ РабочиеДни
    ИЗ
    РегистрСведений.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь
    ГДЕ
    ПроизводственныйКалендарь.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЗаполненностьКлассовОбороты.Класс,
    ЗаполненностьКлассовОбороты.ЗанятостьКлассаОборот КАК Занято
    ПОМЕСТИТЬ ЗанятостьКлассов
    ИЗ
    РегистрНакопления.ЗаполненностьКлассов.Обороты КАК ЗаполненностьКлассовОбороты
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Расписание.Класс,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Расписание.Дата) КАК КоличествоЗапланировано
    ПОМЕСТИТЬ План
    ИЗ
    РегистрСведений.Расписание КАК Расписание
    ГДЕ
    Расписание.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

    СГРУППИРОВАТЬ ПО
    Расписание.Класс
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Классы.Класс,
    Классы.Вместимость,
    ВЫБОР
    КОГДА ЕСТЬNULL(РабочиеДни.КоличествоРабочихДней, 0) = 0
    ТОГДА 0
    ИНАЧЕ ЕСТЬNULL(План.КоличествоЗапланировано, 0) / РабочиеДни.КоличествоРабочихДней * 100
    КОНЕЦ КАК ПроцентПоПлану,
    ВЫБОР
    КОГДА ЕСТЬNULL(План.КоличествоЗапланировано, 0) = 0
    ТОГДА 0
    ИНАЧЕ ЕСТЬNULL(ЗанятостьКлассов.Занято, 0) / (Классы.Вместимость * План.КоличествоЗапланировано) * 100
    КОНЕЦ КАК ПроцентПоПосещению
    ИЗ
    Классы КАК Классы
    ЛЕВОЕ СОЕДИНЕНИЕ РабочиеДни КАК РабочиеДни
    ПО (ИСТИНА)
    ЛЕВОЕ СОЕДИНЕНИЕ ЗанятостьКлассов КАК ЗанятостьКлассов
    ПО Классы.Класс = ЗанятостьКлассов.Класс
    ЛЕВОЕ СОЕДИНЕНИЕ План КАК План
    ПО Классы.Класс = План.Класс

  17. Quasar

    Вообще не могу понять в чем дело. При описании вычисляемых полей Ругается на любое полене из первого набора данных. При исполнении отчета выдается:

    Ошибка исполнения отчета
    по причине:
    Ошибка в выражении
    по причине:
    Синтаксическая ошибка

    • GROOVY

      Судя по всему, в запросе синтаксическая ошибка.

  18. Androsov_R@Runa.ru

    Павел, у меня не получается доделать отчет, не могли бы вы все-таки решить его до конца? ) Хочется увидеть готовое решение отчета.

    • GROOVY

      Что конкретно не получается вывести в отчете?

      • Androsov_R@Runa.ru

        не пойму как вывести %по посещению

        • GROOVY

          % по посещению считается как отношение в процентах количества посещений на запланированные курсы, проводимые в этом классе в этот период к общему количеству
          посещений, которые должны были быть. Например, если вместимость класса 20 мест, в нем запланировано 2 курса на 3 и на 2 дня, на первый курс записались 15 человек, а на второй 10, то процент посещения класса составит (15*3+10*2) / (20*3+20*2) = 0.65 т.е. 65%

          Какие из исходных данных Вам не получить?

  19. bala35am

    Павел, добрый день.
    Зачем нужна блокировка на регистр сведений “Расписание” ?

    • GROOVY

      Дабы не забить классы сверх нормы при параллельном проведении двух документов.

  20. hame1e00n

    Павел, а можно ли вместо РС Расписание и РН с занятыми местами (только обороты) использовать один РН с видом остатки с ресурсом “Количество свободных мест”, в который писать при проведении расписания все данные по расписанию и количество свободных мест исходя из вместимости класса, а при проведении заявки подбирать нужный класс и количество мест уменьшать на одно? Или без разницы как считаете? Хотя тогда наверное может получиться, что регистр не всегда будет схлопываться, ведь в задаче сказано, что классы могут не полностью заполняться… наверное не очень хороший вариант…

    • GROOVY

      Отвечу так: 1 регистр = 1 показатель учета. Так что 1 регистр с остатками оно конечно понятно, а как узнать сколько всего мест? И как по нему планировать занятость… Не понятно.

      • hame1e00n

        “Как узнать сколько мест?” – это приход по регистру (приход делает док. Расписание, делает приход на количество вообще мест в классе)… но в общем понял, остатки по регистру же не будут схлопываться (раз тем более по условию классы обычно не полные), так что за это балы снимут, да и проще ваш вариант… :-)

  21. Elya

    Павел в Лекции вы упомянули, что при выводе сообщения о нехватке товара использовать Представление номенклатуры. Можно ли использовать просто ссылку?

    • GROOVY

      При выводе ссылочных полей пользователю система получает представление по ссылке, по сути строит запрос к БД. Зачем нам еще запросы, если мы уже и так получаем данные запросом. Лучше сразу получать представление и выводить его, а не ссылку.

  22. Elya

    Добрый день Павел, можно ли обойтись без агрегатов? будет ли это ошибкой на экзамене?

    • GROOVY

      Можно. В требованиях нет явного указания, что агрегаты необходимо создавать.

  23. facedancer

    Можно ли в документе «Расписание» не создавать табличной части и обработки проведения, а просто вывести движения на форму? Или обязательно нужно, чтобы документ проводился?

  24. Helena

    Вопрос снимается. Называется “внимательно читайте задание” :)

  25. Helena

    Я не поняла про продолжительность курса. Он длится несколько дней? Т.е. в заявке выбирается курс, который идет, скажем, с 3-го по 5-е?

    • GROOVY

      Понятия “начало курса” и “конец курса” в задаче отсутствует. То есть курс каждый день начинается и заканчивается. По заявке нужно найти все даты по интересующему курсу за указанный период и занять место в свободном классе.

Комментарии закрыты