Ментор 1С

Практика без регистрации

Три учебные задачи, похожие на рабочие

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

01

Старт · 45–70 минут

Форма расчёта учебного заказа

Доработайте небольшую форму так, чтобы она считала сумму и спокойно обрабатывала неверный ввод.

Ситуация

С чего начать

В учебной обработке оператор указывает количество и цену. Сейчас форма сразу умножает значения и показывает результат — даже если одно из них не заполнено или меньше нуля.

С чего начать: добавьте команду на форму

Это мой снимок создания внешней обработки. Перенесите команду на командную панель и назначьте обработчик в свойстве «Действие». В примере на снимке она называется Команда1, а для этой задачи назовите её Рассчитать. Поля количества и цены добавьте по условию: на этом шаге их ещё нет.

Команда управляемой формы в конфигураторе 1С: перенос на командную панель и свойство «Действие».Открыть крупнее ⤢
Реальный конфигуратор 1С: команда формы до настройки обработчика. Полная последовательность — в статье о первой внешней обработке по ссылке выше.

Код для разбора

Исходный фрагмент — в нём специально не хватает проверок

&НаКлиенте
Процедура Рассчитать(Команда)
    Итог = Количество * Цена;
    Сообщить("К оплате: " + Итог);
КонецПроцедуры

Что нужно сделать

  1. Создать внешнюю обработку или отдельную учебную форму без рабочих данных.
  2. Добавить числовые поля «Количество», «Цена» и недоступное для ручного изменения поле «К оплате».
  3. Перед расчётом проверить, что количество и цена заполнены и больше нуля.
  4. При ошибке убрать прежний итог и объяснить, какое поле нужно исправить. При корректных данных показать новую сумму в форме.

Типичные ошибки

  • Проверяется только одно поле, а второе по-прежнему принимает неверное значение.
  • После ошибки на форме остаётся старый итог, который выглядит актуальным.
  • Сообщение говорит «Ошибка», но не подсказывает, что исправить.

Проверка результата

Примеры, которые решение должно пройти

Что проверитьОжидаемый результат
Количество 2, цена 1 500К оплате 3 000
После расчёта очистили количествоПонятное сообщение, прежний итог больше не показан
Цена −100Расчёт не выполняется

Если застряли

Открывайте подсказки по одной и возвращайтесь к своему решению.

1. Свяжите поля с данными формы

Создайте числовые реквизиты формы «Количество» и «Цена» и выведите их на экран. Для результата нужен отдельный реквизит формы с полем только для просмотра. В исходном коде Итог — локальная переменная: Сообщить выводит сообщение, но само по себе не заполняет поле результата.

2. Разделите проверку и расчёт

Сначала проверьте оба поля. Если хотя бы одно не подходит, не переходите к умножению. Сообщение должно назвать поле, а не просто сказать «Ошибка».

3. Проверьте повторное нажатие

Получите сумму 3 000, затем очистите количество и снова нажмите кнопку. Старый итог не должен выглядеть как результат нового расчёта.

Самопроверка

Отмечайте только то, что проверили в учебной базе. Код здесь не запускается и не оценивается автоматически.

0 из 4Осталось проверить: 4

Отметки не сохраняются после обновления или закрытия страницы.

02

База · 70–100 минут

Проведение учебной выдачи

Найдите проблемы в обработке проведения и сделайте движения предсказуемыми при повторном проведении.

Ситуация

С чего начать

Документ «Учебная выдача» списывает материалы по строкам табличной части. Фрагмент ниже работает на одном примере, но записывает набор движений прямо внутри цикла.

Код для разбора

Фрагмент для разбора — переписывать его вслепую не нужно

Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ОстаткиМатериалов.Записывать = Истина;

    Для Каждого СтрокаМатериала Из Материалы Цикл
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Материал = СтрокаМатериала.Материал;
        Движение.Количество = СтрокаМатериала.Количество;

        Движения.ОстаткиМатериалов.Записать();
    КонецЦикла;
КонецПроцедуры

Что нужно сделать

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

Типичные ошибки

  • Исправлена только строка с `Записать()`, но не проверяются данные табличной части.
  • Часть движений успевает записаться до обнаружения неверной строки.
  • Результат проверяется только сразу после первого проведения.

Проверка результата

Примеры, которые решение должно пройти

Что проверитьОжидаемый результат
Две корректные строкиДва расходных движения
Одна строка с количеством 0Проведение остановлено с понятной причиной
Повторное проведениеДвижения не задваиваются

Если застряли

Открывайте подсказки по одной и возвращайтесь к своему решению.

1. Начните с неправильной строки

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

2. Проследите жизнь одного документа

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

Самопроверка

Отмечайте только то, что проверили в учебной базе. Код здесь не запускается и не оценивается автоматически.

0 из 4Осталось проверить: 4

Отметки не сохраняются после обновления или закрытия страницы.

03

Практика · 80–120 минут

Отчёт без запроса в цикле

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

Ситуация

С чего начать

Учебный отчёт обходит всех менеджеров и для каждого отдельно читает обороты продаж. На десяти строках задержка почти незаметна, а на большой базе подход становится дорогим.

Как выглядит консоль кода 1С

На снимке — интерфейс BSL Console с другим запросом. Для задания используйте исходный код и таблицу продаж ниже. Устанавливать эту консоль необязательно.

Консоль кода 1С с текстом запроса и параметрами в реальном интерфейсе 1С:Предприятия.Открыть крупнее ⤢
Интерфейс BSL Console в 1С:Предприятии. Запрос на снимке не является решением задания. Источник: BSL Console · MIT

Исходные данные

МенеджерСумма
Анна15 000
Борис9 000
Анна6 000

Ожидаемый итог

МенеджерСумма
Анна21 000
Борис9 000

Код для разбора

Исходный фрагмент с намеренной проблемой производительности

ВыборкаМенеджеров = Справочники.УчебныеМенеджеры.Выбрать();

Пока ВыборкаМенеджеров.Следующий() Цикл
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   СУММА(Продажи.СуммаОборот) КАК Сумма
    |ИЗ
    |   РегистрНакопления.УчебныеПродажи.Обороты(
    |       &Начало, &Конец, , Менеджер = &Менеджер
    |   ) КАК Продажи";
    Запрос.УстановитьПараметр("Начало", НачалоПериода);
    Запрос.УстановитьПараметр("Конец", КонецПериода);
    Запрос.УстановитьПараметр("Менеджер", ВыборкаМенеджеров.Ссылка);
    Результат = Запрос.Выполнить().Выбрать();
КонецЦикла;

Что нужно сделать

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

Типичные ошибки

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

Проверка результата

Примеры, которые решение должно пройти

Что проверитьОжидаемый результат
Три исходные строки из таблицыАнна — 21 000, Борис — 9 000
Продаж за период нетПустой результат или нули — согласно принятому правилу
1 000 менеджеровКоличество запросов остаётся равным одному

Если застряли

Открывайте подсказки по одной и возвращайтесь к своему решению.

1. Посчитайте обращения, а не строки кода

Отметьте место выполнения запроса и посмотрите, сколько раз до него дойдёт программа. Перенос создания объекта за цикл не поможет, если выполнение остаётся внутри.

2. Сначала проверьте маленькую таблицу

У Анны две строки: 15 000 и 6 000. У Бориса одна — 9 000. Сверьте группировку на этих данных, затем отдельно проверьте период без продаж.

Самопроверка

Отмечайте только то, что проверили в учебной базе. Код здесь не запускается и не оценивается автоматически.

0 из 5Осталось проверить: 5

Отметки не сохраняются после обновления или закрытия страницы.

После выполнения

Объясните решение своими словами

Покажите, где хранятся данные, какое событие запускает код, что происходит при ошибке и как вы проверили результат. Если объяснение распадается на заученные фразы, вернитесь к задаче и разберите непонятное место ещё раз.

Посмотреть пример разбора кода →

Продолжить в платформе

От прочитанного примера — к своему решению

В «1С код» — 153 бесплатные задачи по языку, коллекциям и запросам. Формат похож на LeetCode: небольшое условие, ваше решение и результат проверки. Начните с простой задачи и попробуйте объяснить свой код.

Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.

Попробовать «1С код» бесплатно →

Вопросы о заданиях

Здесь есть готовые решения?

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

Можно выполнять задания в рабочей базе?

Нет. Используйте отдельную учебную базу без персональных, коммерческих и рабочих данных.

Нужно ли выполнить все три задачи за один раз?

Нет. Переходите к следующей, когда текущая работает в основном и ошибочном сценариях, а устройство решения получается объяснить своими словами.