Практика без регистрации
Три учебные задачи, похожие на рабочие
В каждой задаче есть ситуация, исходный код и проверочные примеры. Найдите проблему, внесите изменения в отдельной учебной базе и проверьте результат по списку.
Старт · 45–70 минут
Форма расчёта учебного заказа
Доработайте небольшую форму так, чтобы она считала сумму и спокойно обрабатывала неверный ввод.Ситуация
С чего начать
В учебной обработке оператор указывает количество и цену. Сейчас форма сразу умножает значения и показывает результат — даже если одно из них не заполнено или меньше нуля.
Если пока нет формы, соберите её по инструкции создания внешней обработки со скриншотами. Сначала получите «Привет», затем вернитесь к расчёту ниже.
Команду здесь назовите «Рассчитать». Где назначается её процедура, видно на снимках свойства «Действие». Вместо Команда1 выберите Рассчитать, чтобы кнопка вызывала именно обработчик из этого задания.
С чего начать: добавьте команду на форму
Это мой снимок создания внешней обработки. Перенесите команду на командную панель и назначьте обработчик в свойстве «Действие». В примере на снимке она называется Команда1, а для этой задачи назовите её Рассчитать. Поля количества и цены добавьте по условию: на этом шаге их ещё нет.
Открыть крупнее ⤢Код для разбора
Исходный фрагмент — в нём специально не хватает проверок
&НаКлиенте
Процедура Рассчитать(Команда)
Итог = Количество * Цена;
Сообщить("К оплате: " + Итог);
КонецПроцедурыЧто нужно сделать
- Создать внешнюю обработку или отдельную учебную форму без рабочих данных.
- Добавить числовые поля «Количество», «Цена» и недоступное для ручного изменения поле «К оплате».
- Перед расчётом проверить, что количество и цена заполнены и больше нуля.
- При ошибке убрать прежний итог и объяснить, какое поле нужно исправить. При корректных данных показать новую сумму в форме.
Типичные ошибки
- Проверяется только одно поле, а второе по-прежнему принимает неверное значение.
- После ошибки на форме остаётся старый итог, который выглядит актуальным.
- Сообщение говорит «Ошибка», но не подсказывает, что исправить.
Проверка результата
Примеры, которые решение должно пройти
Если застряли
Открывайте подсказки по одной и возвращайтесь к своему решению.
1. Свяжите поля с данными формы
Создайте числовые реквизиты формы «Количество» и «Цена» и выведите их на экран. Для результата нужен отдельный реквизит формы с полем только для просмотра. В исходном коде Итог — локальная переменная: Сообщить выводит сообщение, но само по себе не заполняет поле результата.
Различие значения и элемента на экране показано в разборе реквизитов формы и пути к данным.
2. Разделите проверку и расчёт
Сначала проверьте оба поля. Если хотя бы одно не подходит, не переходите к умножению. Сообщение должно назвать поле, а не просто сказать «Ошибка».
3. Проверьте повторное нажатие
Получите сумму 3 000, затем очистите количество и снова нажмите кнопку. Старый итог не должен выглядеть как результат нового расчёта.
База · 70–100 минут
Проведение учебной выдачи
Найдите проблемы в обработке проведения и сделайте движения предсказуемыми при повторном проведении.Ситуация
С чего начать
Документ «Учебная выдача» списывает материалы по строкам табличной части. Фрагмент ниже работает на одном примере, но записывает набор движений прямо внутри цикла.
Почему нельзя оставлять проверку только на форме, объясняю в разборе серверных проверок. Здесь проверяем строки документа при проведении, а не только после нажатия кнопки.
Код для разбора
Фрагмент для разбора — переписывать его вслепую не нужно
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Для Каждого СтрокаМатериала Из Материалы Цикл
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Материал = СтрокаМатериала.Материал;
Движение.Количество = СтрокаМатериала.Количество;
Движения.ОстаткиМатериалов.Записать();
КонецЦикла;
КонецПроцедурыЧто нужно сделать
- Объяснить, почему запись набора движений внутри цикла делает обработку лишней и хрупкой.
- Проверить пустой материал, нулевое и отрицательное количество до формирования движения.
- Сформировать весь набор движений, а записывать его один раз штатным способом.
- Проверить проведение, отмену проведения и повторное проведение одного документа.
Типичные ошибки
- Исправлена только строка с `Записать()`, но не проверяются данные табличной части.
- Часть движений успевает записаться до обнаружения неверной строки.
- Результат проверяется только сразу после первого проведения.
Проверка результата
Примеры, которые решение должно пройти
Если застряли
Открывайте подсказки по одной и возвращайтесь к своему решению.
1. Начните с неправильной строки
Возьмите две строки: первую корректную, вторую с нулевым количеством. Убедитесь, что документ не проводится частично. Проверка одной удачной строки этого не покажет.
2. Проследите жизнь одного документа
Проведите документ, измените количество, проведите повторно и отмените проведение. После каждого действия сравните движения с тем результатом, который ожидаете именно сейчас.
Практика · 80–120 минут
Отчёт без запроса в цикле
Переделайте получение итогов так, чтобы количество запросов не зависело от количества менеджеров.Ситуация
С чего начать
Учебный отчёт обходит всех менеджеров и для каждого отдельно читает обороты продаж. На десяти строках задержка почти незаметна, а на большой базе подход становится дорогим.
Если пока трудно увидеть проблему в числе обращений, разберите пример запроса внутри цикла. Там получаем цены товаров, здесь — продажи менеджеров. Переносим способ рассуждения, а не готовый запрос с другими таблицами.
Как выглядит консоль кода 1С
На снимке — интерфейс BSL Console с другим запросом. Для задания используйте исходный код и таблицу продаж ниже. Устанавливать эту консоль необязательно.
Открыть крупнее ⤢Исходные данные
| Менеджер | Сумма |
|---|---|
| Анна | 15 000 |
| Борис | 9 000 |
| Анна | 6 000 |
Ожидаемый итог
| Менеджер | Сумма |
|---|---|
| Анна | 21 000 |
| Борис | 9 000 |
Код для разбора
Исходный фрагмент с намеренной проблемой производительности
ВыборкаМенеджеров = Справочники.УчебныеМенеджеры.Выбрать();
Пока ВыборкаМенеджеров.Следующий() Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(Продажи.СуммаОборот) КАК Сумма
|ИЗ
| РегистрНакопления.УчебныеПродажи.Обороты(
| &Начало, &Конец, , Менеджер = &Менеджер
| ) КАК Продажи";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Запрос.УстановитьПараметр("Менеджер", ВыборкаМенеджеров.Ссылка);
Результат = Запрос.Выполнить().Выбрать();
КонецЦикла;Что нужно сделать
- Сформулировать, сколько запросов выполнит исходный вариант для 1, 10 и 1 000 менеджеров.
- Получить итоги одним запросом с группировкой по менеджеру.
- Сохранить отбор по периоду и решить, нужно ли показывать менеджеров без продаж.
- Сравнить результат с контрольными строками и замерить число обращений к данным.
Типичные ошибки
- Цикл перенесён, но запрос по-прежнему выполняется отдельно для каждого менеджера.
- В запрос подставляется текстовое представление вместо параметра.
- Оптимизация считается готовой без проверки пустого периода и контрольных сумм.
Проверка результата
Примеры, которые решение должно пройти
Если застряли
Открывайте подсказки по одной и возвращайтесь к своему решению.
1. Посчитайте обращения, а не строки кода
Отметьте место выполнения запроса и посмотрите, сколько раз до него дойдёт программа. Перенос создания объекта за цикл не поможет, если выполнение остаётся внутри.
2. Сначала проверьте маленькую таблицу
У Анны две строки: 15 000 и 6 000. У Бориса одна — 9 000. Сверьте группировку на этих данных, затем отдельно проверьте период без продаж.
После выполнения
Объясните решение своими словами
Покажите, где хранятся данные, какое событие запускает код, что происходит при ошибке и как вы проверили результат. Если объяснение распадается на заученные фразы, вернитесь к задаче и разберите непонятное место ещё раз.
Посмотреть пример разбора кода →Продолжить в платформе
От прочитанного примера — к своему решению
В «1С код» — 153 бесплатные задачи по языку, коллекциям и запросам. Формат похож на LeetCode: небольшое условие, ваше решение и результат проверки. Начните с простой задачи и попробуйте объяснить свой код.
Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.
Попробовать «1С код» бесплатно →Вопросы о заданиях
Здесь есть готовые решения?
Нет. Сначала выполните задачу самостоятельно. Условия, ошибки и список самопроверки помогают проверить ход работы, не подменяя решение готовым кодом.
Можно выполнять задания в рабочей базе?
Нет. Используйте отдельную учебную базу без персональных, коммерческих и рабочих данных.
Нужно ли выполнить все три задачи за один раз?
Нет. Переходите к следующей, когда текущая работает в основном и ошибочном сценариях, а устройство решения получается объяснить своими словами.